From 4791d00a435833132c86b41fb5b5537a9c233b56 Mon Sep 17 00:00:00 2001 From: Mai Gillmann Date: Tue, 17 Dec 2019 14:09:03 +0100 Subject: [PATCH] 17.12 --- venv/bin/activate | 76 + venv/bin/activate.csh | 37 + venv/bin/automat-visualize | 11 + venv/bin/django-admin | 11 + venv/bin/mailmail | 12 + venv/bin/pip | 12 + venv/bin/pip3.7 | 12 + venv/bin/trial | 12 + venv/bin/twist | 12 + venv/bin/wamp | 11 + .../Automat-0.8.0.dist-info/INSTALLER | 1 + .../Automat-0.8.0.dist-info/LICENSE | 21 + .../Automat-0.8.0.dist-info/METADATA | 486 + .../Automat-0.8.0.dist-info/entry_points.txt | 3 + .../Automat-0.8.0.dist-info/top_level.txt | 1 + .../Django-2.2.6.dist-info/LICENSE | 27 + .../Django-2.2.6.dist-info/RECORD | 4212 ++++++ .../Django-2.2.6.dist-info/entry_points.txt | 3 + .../site-packages/OpenSSL/__init__.py | 20 + .../python3.7/site-packages/OpenSSL/debug.py | 42 + .../site-packages/OpenSSL/version.py | 22 + .../DESCRIPTION.rst | 322 + .../PyHamcrest-1.9.0.dist-info/METADATA | 353 + .../PyHamcrest-1.9.0.dist-info/RECORD | 120 + .../PyHamcrest-1.9.0.dist-info/WHEEL | 6 + .../PyHamcrest-1.9.0.dist-info/metadata.json | 1 + .../PyJWT-1.7.1.dist-info/INSTALLER | 1 + .../PyJWT-1.7.1.dist-info/RECORD | 35 + .../site-packages/PyJWT-1.7.1.dist-info/WHEEL | 6 + .../Twisted-19.10.0-py3.7.egg-info/PKG-INFO | 135 + .../SOURCES.txt | 1479 +++ .../dependency_links.txt | 1 + .../not-zip-safe | 1 + .../top_level.txt | 1 + .../Werkzeug-0.16.0.dist-info/RECORD | 119 + .../Werkzeug-0.16.0.dist-info/WHEEL | 6 + .../asgiref-3.2.3.dist-info/LICENSE | 27 + .../asgiref-3.2.3.dist-info/METADATA | 225 + .../asgiref/current_thread_executor.py | 86 + .../python3.7/site-packages/asgiref/server.py | 154 + .../python3.7/site-packages/asgiref/sync.py | 304 + .../site-packages/asgiref/timeout.py | 128 + .../python3.7/site-packages/attr/__init__.pyi | 278 + .../python3.7/site-packages/attr/_compat.py | 230 + .../python3.7/site-packages/attr/_config.py | 23 + .../lib/python3.7/site-packages/attr/_make.py | 2168 +++ .../site-packages/attr/converters.py | 78 + .../site-packages/attr/converters.pyi | 12 + .../site-packages/attr/exceptions.pyi | 15 + .../python3.7/site-packages/attr/filters.py | 52 + .../attrs-19.3.0.dist-info/INSTALLER | 1 + .../attrs-19.3.0.dist-info/LICENSE | 21 + .../attrs-19.3.0.dist-info/METADATA | 229 + .../autobahn-19.11.1.dist-info/LICENSE | 21 + .../autobahn-19.11.1.dist-info/RECORD | 347 + .../site-packages/autobahn/_version.py | 27 + .../autobahn/asyncio/rawsocket.py | 505 + .../autobahn/asyncio/websocket.py | 396 + .../site-packages/autobahn/exception.py | 41 + .../autobahn/nvx/_utf8validator.c | 646 + .../autobahn/nvx/test/test_utf8validator.py | 357 + .../rawsocket/test/test_rawsocket_url.py | 126 + .../site-packages/autobahn/test/test_rng.py | 111 + .../site-packages/autobahn/test/test_util.py | 48 + .../autobahn/twisted/__init__.py | 89 + .../python3.7/site-packages/autobahn/util.py | 870 ++ .../site-packages/autobahn/wamp/__init__.py | 83 + .../site-packages/autobahn/wamp/exception.py | 314 + .../autobahn/wamp/gen/schema/session.bfbs | Bin 0 -> 15944 bytes .../autobahn/wamp/gen/wamp/Map.py | 38 + .../autobahn/wamp/gen/wamp/Void.py | 22 + .../wamp/gen/wamp/proto/AuthFactor.py | 11 + .../autobahn/wamp/gen/wamp/proto/AuthMode.py | 8 + .../gen/wamp/proto/AuthTicketChallenge.py | 22 + .../wamp/gen/wamp/proto/AuthTicketRequest.py | 22 + .../wamp/gen/wamp/proto/CalleeFeatures.py | 102 + .../wamp/gen/wamp/proto/CallerFeatures.py | 70 + .../wamp/gen/wamp/proto/CancelMode.py | 9 + .../autobahn/wamp/gen/wamp/proto/Challenge.py | 42 + .../wamp/gen/wamp/proto/ChannelBinding.py | 8 + .../wamp/gen/wamp/proto/DealerFeatures.py | 126 + .../autobahn/wamp/gen/wamp/proto/Error.py | 110 + .../autobahn/wamp/gen/wamp/proto/Event.py | 223 + .../wamp/gen/wamp/proto/EventReceived.py | 94 + .../autobahn/wamp/gen/wamp/proto/Hello.py | 118 + .../autobahn/wamp/gen/wamp/proto/Interrupt.py | 38 + .../autobahn/wamp/gen/wamp/proto/Kdf.py | 9 + .../autobahn/wamp/gen/wamp/proto/Match.py | 9 + .../wamp/gen/wamp/proto/PublisherFeatures.py | 70 + .../wamp/gen/wamp/proto/Serializer.py | 13 + .../autobahn/wamp/gen/wamp/proto/Yield.py | 94 + .../autobahn/wamp/gen/wamp/proto/__init__.py | 0 .../site-packages/autobahn/wamp/message.py | 5947 +++++++++ .../site-packages/autobahn/wamp/protocol.py | 1958 +++ .../autobahn/wamp/test/test_cryptobox.py | 39 + .../autobahn/wamp/test/test_cryptosign.py | 127 + .../autobahn/wamp/test/test_uri_pattern.py | 580 + .../site-packages/autobahn/wamp/types.py | 1371 ++ .../site-packages/autobahn/wamp/websocket.py | 296 + .../autobahn/websocket/compress_bzip2.py | 448 + .../autobahn/websocket/compress_snappy.py | 429 + .../site-packages/autobahn/xbr/_interfaces.py | 188 + .../site-packages/autobahn/xbr/_mnemonic.py | 162 + .../site-packages/autobahn/xbr/_util.py | 218 + .../autobahn/xbr/contracts/ERC20.json | 11052 ++++++++++++++++ .../autobahn/xbr/contracts/XBRMaintained.json | 2521 ++++ .../site-packages/automat/_test/__init__.py | 0 .../site-packages/automat/_test/test_core.py | 86 + .../automat/_test/test_discover.py | 609 + .../site-packages/automat/_test/test_trace.py | 98 + .../automat/_test/test_visualize.py | 430 + .../certifi-2019.11.28.dist-info/METADATA | 74 + .../metadata.json | 1 + .../site-packages/certifi/cacert.pem | 4602 +++++++ .../cffi-1.13.2.dist-info/METADATA | 36 + .../cffi-1.13.2.dist-info/RECORD | 44 + .../cffi-1.13.2.dist-info/top_level.txt | 2 + .../site-packages/cffi/_cffi_errors.h | 147 + .../site-packages/cffi/commontypes.py | 80 + .../python3.7/site-packages/cffi/cparser.py | 963 ++ .../lib/python3.7/site-packages/cffi/error.py | 31 + .../lib/python3.7/site-packages/cffi/model.py | 614 + .../site-packages/cffi/parse_c_type.h | 181 + .../python3.7/site-packages/cffi/pkgconfig.py | 121 + .../site-packages/cffi/vengine_cpy.py | 1015 ++ .../python3.7/site-packages/cffi/verifier.py | 306 + .../channels-2.3.1.dist-info/RECORD | 64 + .../python3.7/site-packages/channels/auth.py | 172 + .../site-packages/channels/consumer.py | 113 + .../python3.7/site-packages/channels/hacks.py | 12 + .../python3.7/site-packages/channels/http.py | 371 + .../site-packages/channels/middleware.py | 41 + .../site-packages/channels/sessions.py | 253 + .../site-packages/channels/testing/http.py | 56 + .../site-packages/channels/testing/live.py | 67 + .../channels/testing/websocket.py | 102 + .../site-packages/channels/worker.py | 44 + .../chardet-3.0.4.dist-info/INSTALLER | 1 + .../chardet-3.0.4.dist-info/entry_points.txt | 3 + .../chardet-3.0.4.dist-info/metadata.json | 1 + .../site-packages/chardet/big5freq.py | 386 + .../site-packages/chardet/cli/__init__.py | 1 + .../chardet/codingstatemachine.py | 88 + .../site-packages/chardet/escprober.py | 101 + .../python3.7/site-packages/chardet/escsm.py | 246 + .../site-packages/chardet/euckrfreq.py | 195 + .../site-packages/chardet/euctwprober.py | 46 + .../site-packages/chardet/jisfreq.py | 325 + .../python3.7/site-packages/chardet/jpcntx.py | 233 + .../constantly-15.1.0.dist-info/INSTALLER | 1 + .../constantly-15.1.0.dist-info/METADATA | 39 + .../constantly-15.1.0.dist-info/RECORD | 14 + .../site-packages/constantly/_version.py | 21 + .../cryptography-2.8.dist-info/AUTHORS.rst | 44 + .../cryptography-2.8.dist-info/INSTALLER | 1 + .../cryptography-2.8.dist-info/WHEEL | 5 + .../site-packages/cryptography/hazmat/_der.py | 156 + .../hazmat/backends/openssl/aead.py | 162 + .../hazmat/backends/openssl/decode_asn1.py | 900 ++ .../hazmat/backends/openssl/dsa.py | 268 + .../hazmat/backends/openssl/x25519.py | 149 + .../hazmat/bindings/_constant_time.abi3.so | Bin 0 -> 27036 bytes .../hazmat/bindings/openssl/binding.py | 197 + .../hazmat/primitives/__init__.py | 5 + .../hazmat/primitives/asymmetric/__init__.py | 40 + .../hazmat/primitives/asymmetric/dh.py | 212 + .../hazmat/primitives/asymmetric/ed448.py | 79 + .../hazmat/primitives/asymmetric/utils.py | 37 + .../hazmat/primitives/asymmetric/x25519.py | 73 + .../hazmat/primitives/ciphers/__init__.py | 21 + .../hazmat/primitives/kdf/hkdf.py | 110 + .../hazmat/primitives/kdf/scrypt.py | 63 + .../hazmat/primitives/kdf/x963kdf.py | 68 + .../primitives/serialization/__init__.py | 26 + .../hazmat/primitives/twofactor/totp.py | 40 + .../site-packages/cryptography/utils.py | 173 + .../cryptography/x509/__init__.py | 189 + .../cryptography/x509/extensions.py | 1609 +++ .../site-packages/cryptography/x509/oid.py | 232 + .../daphne-2.4.0.dist-info/LICENSE | 27 + .../daphne-2.4.0.dist-info/WHEEL | 6 + .../daphne-2.4.0.dist-info/entry_points.txt | 3 + .../daphne-2.4.0.dist-info/top_level.txt | 2 + .../python3.7/site-packages/daphne/utils.py | 84 + .../site-packages/django/__init__.py | 24 + .../site-packages/django/bin/django-admin.py | 5 + .../django/conf/app_template/apps.py-tpl | 5 + .../django/conf/global_settings.py | 636 + .../django/conf/locale/__init__.py | 575 + .../conf/locale/af/LC_MESSAGES/django.mo | Bin 0 -> 26389 bytes .../django/conf/locale/ar/formats.py | 21 + .../conf/locale/az/LC_MESSAGES/django.mo | Bin 0 -> 26630 bytes .../conf/locale/az/LC_MESSAGES/django.po | 1260 ++ .../django/conf/locale/az/formats.py | 32 + .../conf/locale/be/LC_MESSAGES/django.mo | Bin 0 -> 34765 bytes .../django/conf/locale/bg/__init__.py | 0 .../conf/locale/bn/LC_MESSAGES/django.po | 1191 ++ .../conf/locale/br/LC_MESSAGES/django.po | 1259 ++ .../conf/locale/bs/LC_MESSAGES/django.mo | Bin 0 -> 11073 bytes .../conf/locale/bs/LC_MESSAGES/django.po | 1211 ++ .../django/conf/locale/bs/formats.py | 21 + .../conf/locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 26667 bytes .../conf/locale/cy/LC_MESSAGES/django.mo | Bin 0 -> 22280 bytes .../conf/locale/da/LC_MESSAGES/django.mo | Bin 0 -> 26075 bytes .../django/conf/locale/da/__init__.py | 0 .../conf/locale/de/LC_MESSAGES/django.mo | Bin 0 -> 27406 bytes .../django/conf/locale/de/formats.py | 28 + .../django/conf/locale/de_CH/formats.py | 34 + .../conf/locale/en/LC_MESSAGES/django.mo | Bin 0 -> 356 bytes .../conf/locale/en/LC_MESSAGES/django.po | 1527 +++ .../django/conf/locale/en/__init__.py | 0 .../django/conf/locale/en/formats.py | 40 + .../django/conf/locale/en_AU/__init__.py | 0 .../django/conf/locale/en_AU/formats.py | 39 + .../django/conf/locale/es/__init__.py | 0 .../django/conf/locale/es/formats.py | 30 + .../django/conf/locale/es_AR/formats.py | 30 + .../conf/locale/es_CO/LC_MESSAGES/django.po | 1241 ++ .../django/conf/locale/es_CO/formats.py | 26 + .../django/conf/locale/es_MX/__init__.py | 0 .../django/conf/locale/es_NI/__init__.py | 0 .../django/conf/locale/es_PR/__init__.py | 0 .../conf/locale/et/LC_MESSAGES/django.po | 1264 ++ .../conf/locale/eu/LC_MESSAGES/django.mo | Bin 0 -> 26371 bytes .../conf/locale/eu/LC_MESSAGES/django.po | 1277 ++ .../conf/locale/fi/LC_MESSAGES/django.po | 1267 ++ .../django/conf/locale/fi/formats.py | 39 + .../django/conf/locale/fr/formats.py | 33 + .../django/conf/locale/fy/__init__.py | 0 .../django/conf/locale/gd/__init__.py | 0 .../django/conf/locale/he/__init__.py | 0 .../conf/locale/hi/LC_MESSAGES/django.po | 1193 ++ .../django/conf/locale/hi/formats.py | 21 + .../conf/locale/hr/LC_MESSAGES/django.po | 1277 ++ .../conf/locale/hsb/LC_MESSAGES/django.mo | Bin 0 -> 28550 bytes .../django/conf/locale/hu/__init__.py | 0 .../conf/locale/ia/LC_MESSAGES/django.po | 1245 ++ .../django/conf/locale/id/__init__.py | 0 .../django/conf/locale/id/formats.py | 49 + .../conf/locale/io/LC_MESSAGES/django.po | 1206 ++ .../conf/locale/is/LC_MESSAGES/django.mo | Bin 0 -> 24466 bytes .../conf/locale/is/LC_MESSAGES/django.po | 1266 ++ .../conf/locale/ja/LC_MESSAGES/django.mo | Bin 0 -> 29182 bytes .../conf/locale/ja/LC_MESSAGES/django.po | 1250 ++ .../django/conf/locale/ja/__init__.py | 0 .../conf/locale/ka/LC_MESSAGES/django.po | 1248 ++ .../conf/locale/kab/LC_MESSAGES/django.po | 1182 ++ .../conf/locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 13916 bytes .../conf/locale/kk/LC_MESSAGES/django.po | 1213 ++ .../conf/locale/kn/LC_MESSAGES/django.mo | Bin 0 -> 18634 bytes .../conf/locale/kn/LC_MESSAGES/django.po | 1224 ++ .../conf/locale/lt/LC_MESSAGES/django.po | 1324 ++ .../conf/locale/mk/LC_MESSAGES/django.mo | Bin 0 -> 29431 bytes .../django/conf/locale/mk/__init__.py | 0 .../conf/locale/mn/LC_MESSAGES/django.mo | Bin 0 -> 31170 bytes .../conf/locale/mn/LC_MESSAGES/django.po | 1274 ++ .../django/conf/locale/mn/__init__.py | 0 .../django/conf/locale/mn/formats.py | 21 + .../conf/locale/nb/LC_MESSAGES/django.po | 1271 ++ .../django/conf/locale/nb/__init__.py | 0 .../django/conf/locale/nb/formats.py | 39 + .../conf/locale/nn/LC_MESSAGES/django.mo | Bin 0 -> 14256 bytes .../conf/locale/os/LC_MESSAGES/django.po | 1210 ++ .../conf/locale/pl/LC_MESSAGES/django.mo | Bin 0 -> 28877 bytes .../conf/locale/pl/LC_MESSAGES/django.po | 1345 ++ .../django/conf/locale/pt/formats.py | 38 + .../conf/locale/pt_BR/LC_MESSAGES/django.po | 1295 ++ .../django/conf/locale/pt_BR/__init__.py | 0 .../conf/locale/ro/LC_MESSAGES/django.mo | Bin 0 -> 27531 bytes .../django/conf/locale/ro/__init__.py | 0 .../conf/locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 36963 bytes .../conf/locale/ru/LC_MESSAGES/django.po | 1349 ++ .../conf/locale/sk/LC_MESSAGES/django.mo | Bin 0 -> 27960 bytes .../conf/locale/sq/LC_MESSAGES/django.mo | Bin 0 -> 26966 bytes .../conf/locale/sq/LC_MESSAGES/django.po | 1278 ++ .../django/conf/locale/sq/formats.py | 21 + .../conf/locale/sr/LC_MESSAGES/django.po | 1290 ++ .../django/conf/locale/sr/__init__.py | 0 .../django/conf/locale/sv/formats.py | 38 + .../conf/locale/sw/LC_MESSAGES/django.po | 1194 ++ .../django/conf/locale/ta/__init__.py | 0 .../django/conf/locale/te/formats.py | 21 + .../django/conf/locale/th/__init__.py | 0 .../django/conf/locale/th/formats.py | 33 + .../django/conf/locale/tr/formats.py | 29 + .../conf/locale/tt/LC_MESSAGES/django.po | 1184 ++ .../conf/locale/udm/LC_MESSAGES/django.po | 1171 ++ .../django/conf/locale/uk/__init__.py | 0 .../conf/locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 19452 bytes .../django/conf/locale/vi/formats.py | 21 + .../conf/project_template/manage.py-tpl | 21 + .../django/conf/urls/__init__.py | 13 + .../site-packages/django/contrib/__init__.py | 0 .../django/contrib/admin/actions.py | 79 + .../django/contrib/admin/checks.py | 1134 ++ .../django/contrib/admin/filters.py | 422 + .../django/contrib/admin/helpers.py | 402 + .../admin/locale/af/LC_MESSAGES/django.mo | Bin 0 -> 16245 bytes .../admin/locale/ar/LC_MESSAGES/djangojs.po | 227 + .../admin/locale/ast/LC_MESSAGES/django.po | 636 + .../admin/locale/ast/LC_MESSAGES/djangojs.po | 211 + .../admin/locale/az/LC_MESSAGES/django.mo | Bin 0 -> 16875 bytes .../admin/locale/az/LC_MESSAGES/django.po | 716 + .../admin/locale/az/LC_MESSAGES/djangojs.mo | Bin 0 -> 4621 bytes .../admin/locale/az/LC_MESSAGES/djangojs.po | 218 + .../admin/locale/be/LC_MESSAGES/django.mo | Bin 0 -> 20007 bytes .../admin/locale/bg/LC_MESSAGES/django.po | 689 + .../admin/locale/bg/LC_MESSAGES/djangojs.mo | Bin 0 -> 5565 bytes .../admin/locale/bg/LC_MESSAGES/djangojs.po | 218 + .../admin/locale/bn/LC_MESSAGES/django.po | 652 + .../admin/locale/bn/LC_MESSAGES/djangojs.po | 207 + .../admin/locale/br/LC_MESSAGES/django.po | 671 + .../admin/locale/br/LC_MESSAGES/djangojs.mo | Bin 0 -> 1658 bytes .../admin/locale/bs/LC_MESSAGES/django.mo | Bin 0 -> 8845 bytes .../admin/locale/bs/LC_MESSAGES/django.po | 657 + .../admin/locale/ca/LC_MESSAGES/django.po | 720 + .../admin/locale/cy/LC_MESSAGES/django.po | 675 + .../admin/locale/da/LC_MESSAGES/django.mo | Bin 0 -> 16367 bytes .../admin/locale/dsb/LC_MESSAGES/django.po | 715 + .../admin/locale/dsb/LC_MESSAGES/djangojs.mo | Bin 0 -> 5016 bytes .../admin/locale/en/LC_MESSAGES/django.mo | Bin 0 -> 356 bytes .../admin/locale/en/LC_MESSAGES/djangojs.mo | Bin 0 -> 356 bytes .../admin/locale/en_GB/LC_MESSAGES/django.mo | Bin 0 -> 11159 bytes .../admin/locale/en_GB/LC_MESSAGES/django.po | 691 + .../locale/en_GB/LC_MESSAGES/djangojs.po | 218 + .../admin/locale/es_AR/LC_MESSAGES/django.po | 721 + .../admin/locale/es_CO/LC_MESSAGES/django.mo | Bin 0 -> 15156 bytes .../admin/locale/es_CO/LC_MESSAGES/django.po | 697 + .../admin/locale/es_MX/LC_MESSAGES/django.mo | Bin 0 -> 14127 bytes .../admin/locale/es_VE/LC_MESSAGES/django.po | 698 + .../admin/locale/et/LC_MESSAGES/django.po | 709 + .../admin/locale/eu/LC_MESSAGES/django.mo | Bin 0 -> 16336 bytes .../admin/locale/eu/LC_MESSAGES/django.po | 713 + .../admin/locale/eu/LC_MESSAGES/djangojs.mo | Bin 0 -> 4522 bytes .../admin/locale/eu/LC_MESSAGES/djangojs.po | 218 + .../admin/locale/fa/LC_MESSAGES/djangojs.mo | Bin 0 -> 5267 bytes .../admin/locale/fi/LC_MESSAGES/django.po | 708 + .../admin/locale/fi/LC_MESSAGES/djangojs.mo | Bin 0 -> 4561 bytes .../admin/locale/gl/LC_MESSAGES/djangojs.mo | Bin 0 -> 3279 bytes .../admin/locale/he/LC_MESSAGES/django.mo | Bin 0 -> 18109 bytes .../admin/locale/he/LC_MESSAGES/django.po | 703 + .../admin/locale/he/LC_MESSAGES/djangojs.mo | Bin 0 -> 5157 bytes .../admin/locale/hi/LC_MESSAGES/django.mo | Bin 0 -> 18457 bytes .../admin/locale/hi/LC_MESSAGES/django.po | 666 + .../admin/locale/hi/LC_MESSAGES/djangojs.mo | Bin 0 -> 4893 bytes .../admin/locale/hi/LC_MESSAGES/djangojs.po | 217 + .../admin/locale/hr/LC_MESSAGES/djangojs.mo | Bin 0 -> 3360 bytes .../admin/locale/hu/LC_MESSAGES/djangojs.mo | Bin 0 -> 4524 bytes .../admin/locale/ia/LC_MESSAGES/django.po | 664 + .../admin/locale/ia/LC_MESSAGES/djangojs.mo | Bin 0 -> 3177 bytes .../admin/locale/id/LC_MESSAGES/django.po | 715 + .../admin/locale/id/LC_MESSAGES/djangojs.mo | Bin 0 -> 4407 bytes .../admin/locale/id/LC_MESSAGES/djangojs.po | 218 + .../admin/locale/io/LC_MESSAGES/django.po | 668 + .../admin/locale/is/LC_MESSAGES/django.mo | Bin 0 -> 16598 bytes .../admin/locale/is/LC_MESSAGES/django.po | 711 + .../admin/locale/is/LC_MESSAGES/djangojs.mo | Bin 0 -> 4559 bytes .../admin/locale/is/LC_MESSAGES/djangojs.po | 219 + .../admin/locale/it/LC_MESSAGES/django.mo | Bin 0 -> 16882 bytes .../admin/locale/it/LC_MESSAGES/djangojs.po | 223 + .../admin/locale/ja/LC_MESSAGES/django.po | 704 + .../admin/locale/ka/LC_MESSAGES/django.mo | Bin 0 -> 20101 bytes .../admin/locale/ka/LC_MESSAGES/django.po | 699 + .../admin/locale/ka/LC_MESSAGES/djangojs.po | 218 + .../admin/locale/kab/LC_MESSAGES/django.mo | Bin 0 -> 3531 bytes .../admin/locale/kab/LC_MESSAGES/djangojs.po | 204 + .../admin/locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 12845 bytes .../admin/locale/km/LC_MESSAGES/djangojs.po | 201 + .../admin/locale/lt/LC_MESSAGES/django.po | 720 + .../admin/locale/lv/LC_MESSAGES/django.mo | Bin 0 -> 16662 bytes .../admin/locale/lv/LC_MESSAGES/djangojs.mo | Bin 0 -> 4903 bytes .../admin/locale/lv/LC_MESSAGES/djangojs.po | 224 + .../admin/locale/mk/LC_MESSAGES/djangojs.mo | Bin 0 -> 5633 bytes .../admin/locale/mn/LC_MESSAGES/django.mo | Bin 0 -> 20545 bytes .../admin/locale/mn/LC_MESSAGES/django.po | 712 + .../admin/locale/mn/LC_MESSAGES/djangojs.mo | Bin 0 -> 5228 bytes .../admin/locale/mn/LC_MESSAGES/djangojs.po | 218 + .../admin/locale/mr/LC_MESSAGES/djangojs.po | 145 + .../admin/locale/my/LC_MESSAGES/djangojs.mo | Bin 0 -> 3268 bytes .../admin/locale/nb/LC_MESSAGES/django.mo | Bin 0 -> 15980 bytes .../admin/locale/nb/LC_MESSAGES/django.po | 711 + .../admin/locale/nb/LC_MESSAGES/djangojs.mo | Bin 0 -> 4375 bytes .../admin/locale/nb/LC_MESSAGES/djangojs.po | 220 + .../admin/locale/ne/LC_MESSAGES/django.po | 645 + .../admin/locale/ne/LC_MESSAGES/djangojs.mo | Bin 0 -> 5362 bytes .../admin/locale/nl/LC_MESSAGES/djangojs.mo | Bin 0 -> 4619 bytes .../admin/locale/nl/LC_MESSAGES/djangojs.po | 226 + .../admin/locale/os/LC_MESSAGES/django.mo | Bin 0 -> 14978 bytes .../admin/locale/os/LC_MESSAGES/django.po | 665 + .../admin/locale/os/LC_MESSAGES/djangojs.mo | Bin 0 -> 3806 bytes .../admin/locale/os/LC_MESSAGES/djangojs.po | 217 + .../admin/locale/pa/LC_MESSAGES/djangojs.po | 205 + .../admin/locale/pl/LC_MESSAGES/django.mo | Bin 0 -> 17192 bytes .../admin/locale/pt/LC_MESSAGES/djangojs.po | 222 + .../admin/locale/pt_BR/LC_MESSAGES/django.mo | Bin 0 -> 16830 bytes .../locale/pt_BR/LC_MESSAGES/djangojs.mo | Bin 0 -> 4619 bytes .../admin/locale/ro/LC_MESSAGES/django.mo | Bin 0 -> 16893 bytes .../admin/locale/ro/LC_MESSAGES/djangojs.mo | Bin 0 -> 4686 bytes .../admin/locale/ro/LC_MESSAGES/djangojs.po | 228 + .../admin/locale/ru/LC_MESSAGES/django.po | 729 + .../admin/locale/sk/LC_MESSAGES/django.mo | Bin 0 -> 16288 bytes .../admin/locale/sq/LC_MESSAGES/django.po | 715 + .../admin/locale/sq/LC_MESSAGES/djangojs.mo | Bin 0 -> 4590 bytes .../admin/locale/sq/LC_MESSAGES/djangojs.po | 220 + .../admin/locale/sr/LC_MESSAGES/django.mo | Bin 0 -> 20855 bytes .../admin/locale/sr/LC_MESSAGES/djangojs.mo | Bin 0 -> 5221 bytes .../locale/sr_Latn/LC_MESSAGES/django.mo | Bin 0 -> 12383 bytes .../locale/sr_Latn/LC_MESSAGES/django.po | 694 + .../admin/locale/sv/LC_MESSAGES/django.mo | Bin 0 -> 16348 bytes .../admin/locale/sw/LC_MESSAGES/django.po | 676 + .../admin/locale/sw/LC_MESSAGES/djangojs.po | 217 + .../admin/locale/ta/LC_MESSAGES/djangojs.mo | Bin 0 -> 1379 bytes .../admin/locale/ta/LC_MESSAGES/djangojs.po | 204 + .../admin/locale/te/LC_MESSAGES/djangojs.mo | Bin 0 -> 1362 bytes .../admin/locale/th/LC_MESSAGES/djangojs.mo | Bin 0 -> 6250 bytes .../admin/locale/tr/LC_MESSAGES/djangojs.po | 221 + .../admin/locale/tt/LC_MESSAGES/django.mo | Bin 0 -> 12952 bytes .../admin/locale/tt/LC_MESSAGES/django.po | 655 + .../admin/locale/tt/LC_MESSAGES/djangojs.mo | Bin 0 -> 2607 bytes .../admin/locale/uk/LC_MESSAGES/djangojs.po | 230 + .../admin/locale/ur/LC_MESSAGES/djangojs.mo | Bin 0 -> 2678 bytes .../admin/locale/vi/LC_MESSAGES/django.po | 702 + .../admin/locale/vi/LC_MESSAGES/djangojs.po | 220 + .../locale/zh_Hans/LC_MESSAGES/djangojs.mo | Bin 0 -> 4245 bytes .../locale/zh_Hans/LC_MESSAGES/djangojs.po | 220 + .../locale/zh_Hant/LC_MESSAGES/django.po | 660 + .../locale/zh_Hant/LC_MESSAGES/djangojs.mo | Bin 0 -> 4230 bytes .../admin/static/admin/css/autocomplete.css | 260 + .../admin/static/admin/css/dashboard.css | 27 + .../admin/static/admin/css/responsive_rtl.css | 84 + .../admin/css/vendor/select2/select2.css | 484 + .../admin/static/admin/fonts/LICENSE.txt | 202 + .../admin/static/admin/fonts/README.txt | 3 + .../admin/fonts/Roboto-Bold-webfont.woff | Bin 0 -> 86184 bytes .../static/admin/img/gis/move_vertex_off.svg | 1 + .../static/admin/img/gis/move_vertex_on.svg | 1 + .../admin/static/admin/img/icon-addlink.svg | 3 + .../admin/static/admin/img/icon-calendar.svg | 9 + .../static/admin/img/icon-changelink.svg | 3 + .../static/admin/img/icon-deletelink.svg | 3 + .../static/admin/img/icon-unknown-alt.svg | 3 + .../admin/static/admin/img/icon-viewlink.svg | 3 + .../admin/static/admin/img/inline-delete.svg | 3 + .../contrib/admin/static/admin/img/search.svg | 3 + .../admin/static/admin/img/tooltag-add.svg | 3 + .../admin/static/admin/js/SelectBox.js | 144 + .../admin/static/admin/js/actions.min.js | 7 + .../contrib/admin/static/admin/js/calendar.js | 208 + .../contrib/admin/static/admin/js/cancel.js | 13 + .../admin/static/admin/js/change_form.js | 20 + .../admin/static/admin/js/inlines.min.js | 13 + .../admin/static/admin/js/popup_response.js | 16 + .../admin/static/admin/js/timeparse.js | 106 + .../static/admin/js/vendor/select2/i18n/az.js | 3 + .../static/admin/js/vendor/select2/i18n/da.js | 3 + .../static/admin/js/vendor/select2/i18n/es.js | 3 + .../static/admin/js/vendor/select2/i18n/fr.js | 3 + .../static/admin/js/vendor/select2/i18n/it.js | 3 + .../static/admin/js/vendor/select2/i18n/km.js | 3 + .../static/admin/js/vendor/select2/i18n/ko.js | 3 + .../static/admin/js/vendor/select2/i18n/lt.js | 3 + .../static/admin/js/vendor/select2/i18n/mk.js | 3 + .../static/admin/js/vendor/select2/i18n/ms.js | 3 + .../static/admin/js/vendor/select2/i18n/nb.js | 3 + .../static/admin/js/vendor/select2/i18n/ro.js | 3 + .../static/admin/js/vendor/select2/i18n/sk.js | 3 + .../static/admin/js/vendor/select2/i18n/sv.js | 3 + .../static/admin/js/vendor/select2/i18n/tr.js | 3 + .../admin/js/vendor/select2/i18n/zh-CN.js | 3 + .../admin/templates/admin/actions.html | 23 + .../templates/admin/auth/user/add_form.html | 10 + .../contrib/admin/templates/admin/base.html | 93 + .../admin/templates/admin/change_form.html | 81 + .../admin/templates/admin/change_list.html | 82 + .../templates/admin/change_list_results.html | 38 + .../admin/templates/admin/date_hierarchy.html | 16 + .../templates/admin/edit_inline/stacked.html | 25 + .../contrib/admin/templates/admin/filter.html | 8 + .../templates/admin/includes/fieldset.html | 29 + .../contrib/admin/templates/admin/index.html | 86 + .../contrib/admin/templates/admin/login.html | 66 + .../admin/templates/admin/search_form.html | 16 + .../admin/templates/admin/submit_line.html | 14 + .../admin/widgets/clearable_file_input.html | 6 + .../admin/templates/admin/widgets/radio.html | 1 + .../admin/widgets/split_datetime.html | 4 + .../contrib/admin/templatetags/__init__.py | 0 .../contrib/admin/templatetags/admin_list.py | 485 + .../admin/templatetags/admin_modify.py | 111 + .../contrib/admin/templatetags/admin_urls.py | 56 + .../django/contrib/admin/templatetags/log.py | 59 + .../admindocs/locale/ar/LC_MESSAGES/django.mo | Bin 0 -> 7286 bytes .../locale/ast/LC_MESSAGES/django.mo | Bin 0 -> 715 bytes .../admindocs/locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 7837 bytes .../admindocs/locale/bg/LC_MESSAGES/django.po | 286 + .../admindocs/locale/bn/LC_MESSAGES/django.mo | Bin 0 -> 3794 bytes .../locale/dsb/LC_MESSAGES/django.po | 285 + .../admindocs/locale/el/LC_MESSAGES/django.mo | Bin 0 -> 8598 bytes .../locale/en_AU/LC_MESSAGES/django.po | 275 + .../locale/en_GB/LC_MESSAGES/django.po | 260 + .../admindocs/locale/es/LC_MESSAGES/django.po | 292 + .../locale/es_AR/LC_MESSAGES/django.po | 286 + .../locale/es_CO/LC_MESSAGES/django.mo | Bin 0 -> 6476 bytes .../locale/es_MX/LC_MESSAGES/django.mo | Bin 0 -> 1853 bytes .../locale/es_MX/LC_MESSAGES/django.po | 260 + .../admindocs/locale/et/LC_MESSAGES/django.mo | Bin 0 -> 6402 bytes .../admindocs/locale/fi/LC_MESSAGES/django.mo | Bin 0 -> 6413 bytes .../admindocs/locale/fi/LC_MESSAGES/django.po | 278 + .../admindocs/locale/fr/LC_MESSAGES/django.mo | Bin 0 -> 6786 bytes .../admindocs/locale/fr/LC_MESSAGES/django.po | 285 + .../admindocs/locale/ga/LC_MESSAGES/django.po | 262 + .../admindocs/locale/gd/LC_MESSAGES/django.po | 288 + .../admindocs/locale/gl/LC_MESSAGES/django.mo | Bin 0 -> 2265 bytes .../admindocs/locale/hr/LC_MESSAGES/django.mo | Bin 0 -> 2550 bytes .../admindocs/locale/hr/LC_MESSAGES/django.po | 264 + .../locale/hsb/LC_MESSAGES/django.po | 286 + .../admindocs/locale/hu/LC_MESSAGES/django.mo | Bin 0 -> 6660 bytes .../admindocs/locale/hu/LC_MESSAGES/django.po | 286 + .../admindocs/locale/ia/LC_MESSAGES/django.po | 260 + .../admindocs/locale/id/LC_MESSAGES/django.mo | Bin 0 -> 6367 bytes .../admindocs/locale/id/LC_MESSAGES/django.po | 286 + .../locale/kab/LC_MESSAGES/django.mo | Bin 0 -> 1289 bytes .../locale/kab/LC_MESSAGES/django.po | 258 + .../admindocs/locale/km/LC_MESSAGES/django.mo | Bin 0 -> 1476 bytes .../admindocs/locale/km/LC_MESSAGES/django.po | 259 + .../admindocs/locale/kn/LC_MESSAGES/django.mo | Bin 0 -> 1656 bytes .../admindocs/locale/lb/LC_MESSAGES/django.po | 275 + .../admindocs/locale/mk/LC_MESSAGES/django.po | 286 + .../admindocs/locale/ml/LC_MESSAGES/django.po | 268 + .../admindocs/locale/my/LC_MESSAGES/django.mo | Bin 0 -> 1721 bytes .../admindocs/locale/my/LC_MESSAGES/django.po | 258 + .../admindocs/locale/ne/LC_MESSAGES/django.mo | Bin 0 -> 1505 bytes .../admindocs/locale/ne/LC_MESSAGES/django.po | 257 + .../admindocs/locale/nl/LC_MESSAGES/django.mo | Bin 0 -> 6349 bytes .../admindocs/locale/nn/LC_MESSAGES/django.po | 261 + .../admindocs/locale/pa/LC_MESSAGES/django.mo | Bin 0 -> 1275 bytes .../admindocs/locale/pa/LC_MESSAGES/django.po | 258 + .../admindocs/locale/pt/LC_MESSAGES/django.po | 286 + .../locale/pt_BR/LC_MESSAGES/django.po | 290 + .../admindocs/locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 8569 bytes .../admindocs/locale/sl/LC_MESSAGES/django.po | 285 + .../locale/sr_Latn/LC_MESSAGES/django.po | 262 + .../admindocs/locale/sw/LC_MESSAGES/django.po | 259 + .../admindocs/locale/ta/LC_MESSAGES/django.po | 258 + .../admindocs/locale/te/LC_MESSAGES/django.po | 258 + .../admindocs/locale/tr/LC_MESSAGES/django.po | 287 + .../admindocs/locale/tt/LC_MESSAGES/django.mo | Bin 0 -> 1869 bytes .../admindocs/locale/ur/LC_MESSAGES/django.mo | Bin 0 -> 1836 bytes .../admindocs/locale/ur/LC_MESSAGES/django.po | 259 + .../admindocs/templates/admin_doc/index.html | 34 + .../django/contrib/admindocs/urls.py | 50 + .../django/contrib/auth/__init__.py | 225 + .../django/contrib/auth/checks.py | 166 + .../contrib/auth/common-passwords.txt.gz | Bin 0 -> 81355 bytes .../django/contrib/auth/decorators.py | 73 + .../django/contrib/auth/handlers/__init__.py | 0 .../auth/locale/ar/LC_MESSAGES/django.mo | Bin 0 -> 8705 bytes .../auth/locale/ast/LC_MESSAGES/django.mo | Bin 0 -> 2250 bytes .../auth/locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 8751 bytes .../auth/locale/bg/LC_MESSAGES/django.po | 304 + .../auth/locale/bn/LC_MESSAGES/django.mo | Bin 0 -> 5455 bytes .../auth/locale/bs/LC_MESSAGES/django.po | 292 + .../auth/locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 7805 bytes .../auth/locale/cs/LC_MESSAGES/django.po | 306 + .../auth/locale/de/LC_MESSAGES/django.mo | Bin 0 -> 7514 bytes .../auth/locale/dsb/LC_MESSAGES/django.po | 315 + .../auth/locale/el/LC_MESSAGES/django.mo | Bin 0 -> 10150 bytes .../auth/locale/en/LC_MESSAGES/django.po | 369 + .../auth/locale/en_AU/LC_MESSAGES/django.mo | Bin 0 -> 3650 bytes .../auth/locale/eo/LC_MESSAGES/django.mo | Bin 0 -> 7347 bytes .../auth/locale/eo/LC_MESSAGES/django.po | 306 + .../auth/locale/es/LC_MESSAGES/django.mo | Bin 0 -> 7766 bytes .../auth/locale/es_AR/LC_MESSAGES/django.po | 311 + .../auth/locale/es_VE/LC_MESSAGES/django.mo | Bin 0 -> 7415 bytes .../auth/locale/fa/LC_MESSAGES/django.mo | Bin 0 -> 8963 bytes .../auth/locale/fa/LC_MESSAGES/django.po | 308 + .../auth/locale/fr/LC_MESSAGES/django.po | 315 + .../auth/locale/fy/LC_MESSAGES/django.mo | Bin 0 -> 476 bytes .../auth/locale/ga/LC_MESSAGES/django.mo | Bin 0 -> 3572 bytes .../auth/locale/ga/LC_MESSAGES/django.po | 298 + .../auth/locale/gd/LC_MESSAGES/django.po | 333 + .../auth/locale/gl/LC_MESSAGES/django.mo | Bin 0 -> 4022 bytes .../auth/locale/hsb/LC_MESSAGES/django.mo | Bin 0 -> 7925 bytes .../auth/locale/hsb/LC_MESSAGES/django.po | 312 + .../auth/locale/hu/LC_MESSAGES/django.mo | Bin 0 -> 7691 bytes .../auth/locale/hu/LC_MESSAGES/django.po | 308 + .../auth/locale/hy/LC_MESSAGES/django.mo | Bin 0 -> 8001 bytes .../auth/locale/it/LC_MESSAGES/django.mo | Bin 0 -> 7583 bytes .../auth/locale/it/LC_MESSAGES/django.po | 313 + .../auth/locale/ka/LC_MESSAGES/django.po | 300 + .../auth/locale/kab/LC_MESSAGES/django.mo | Bin 0 -> 2982 bytes .../auth/locale/kab/LC_MESSAGES/django.po | 287 + .../auth/locale/km/LC_MESSAGES/django.po | 281 + .../auth/locale/lb/LC_MESSAGES/django.mo | Bin 0 -> 474 bytes .../auth/locale/lv/LC_MESSAGES/django.mo | Bin 0 -> 7599 bytes .../auth/locale/mk/LC_MESSAGES/django.mo | Bin 0 -> 9235 bytes .../auth/locale/mk/LC_MESSAGES/django.po | 308 + .../auth/locale/ml/LC_MESSAGES/django.mo | Bin 0 -> 12611 bytes .../auth/locale/mr/LC_MESSAGES/django.po | 226 + .../auth/locale/my/LC_MESSAGES/django.mo | Bin 0 -> 1026 bytes .../auth/locale/my/LC_MESSAGES/django.po | 282 + .../auth/locale/nb/LC_MESSAGES/django.mo | Bin 0 -> 7222 bytes .../auth/locale/nn/LC_MESSAGES/django.po | 285 + .../auth/locale/pt/LC_MESSAGES/django.po | 313 + .../auth/locale/sl/LC_MESSAGES/django.po | 308 + .../auth/locale/sr/LC_MESSAGES/django.po | 309 + .../auth/locale/sr_Latn/LC_MESSAGES/django.mo | Bin 0 -> 3293 bytes .../auth/locale/sv/LC_MESSAGES/django.mo | Bin 0 -> 7447 bytes .../auth/locale/sv/LC_MESSAGES/django.po | 311 + .../auth/locale/ta/LC_MESSAGES/django.po | 283 + .../auth/locale/te/LC_MESSAGES/django.mo | Bin 0 -> 2955 bytes .../auth/locale/te/LC_MESSAGES/django.po | 285 + .../auth/locale/th/LC_MESSAGES/django.po | 282 + .../auth/locale/uk/LC_MESSAGES/django.po | 319 + .../auth/locale/ur/LC_MESSAGES/django.mo | Bin 0 -> 698 bytes .../auth/locale/ur/LC_MESSAGES/django.po | 282 + .../auth/locale/zh_Hans/LC_MESSAGES/django.po | 295 + .../auth/locale/zh_Hant/LC_MESSAGES/django.mo | Bin 0 -> 6759 bytes .../0002_alter_permission_name_max_length.py | 16 + .../0004_alter_user_username_opts.py | 23 + .../0005_alter_user_last_login_null.py | 16 + .../0010_alter_group_name_max_length.py | 16 + .../contrib/auth/migrations/__init__.py | 0 .../contrib/auth/password_validation.py | 205 + .../django/contrib/auth/signals.py | 5 + .../site-packages/django/contrib/auth/urls.py | 20 + .../django/contrib/auth/validators.py | 25 + .../locale/ar/LC_MESSAGES/django.mo | Bin 0 -> 1259 bytes .../locale/ast/LC_MESSAGES/django.po | 42 + .../locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 1267 bytes .../locale/bg/LC_MESSAGES/django.po | 45 + .../locale/bn/LC_MESSAGES/django.mo | Bin 0 -> 1201 bytes .../locale/bs/LC_MESSAGES/django.po | 43 + .../locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 1142 bytes .../locale/cs/LC_MESSAGES/django.po | 43 + .../locale/de/LC_MESSAGES/django.mo | Bin 0 -> 1092 bytes .../locale/el/LC_MESSAGES/django.mo | Bin 0 -> 1323 bytes .../locale/en/LC_MESSAGES/django.po | 45 + .../locale/eo/LC_MESSAGES/django.mo | Bin 0 -> 1087 bytes .../locale/eo/LC_MESSAGES/django.po | 42 + .../locale/es/LC_MESSAGES/django.mo | Bin 0 -> 1142 bytes .../locale/es_MX/LC_MESSAGES/django.po | 43 + .../locale/fa/LC_MESSAGES/django.mo | Bin 0 -> 1171 bytes .../locale/fa/LC_MESSAGES/django.po | 44 + .../locale/fr/LC_MESSAGES/django.po | 43 + .../locale/fy/LC_MESSAGES/django.mo | Bin 0 -> 476 bytes .../locale/ga/LC_MESSAGES/django.mo | Bin 0 -> 1097 bytes .../locale/gd/LC_MESSAGES/django.po | 44 + .../locale/gl/LC_MESSAGES/django.mo | Bin 0 -> 1072 bytes .../locale/hu/LC_MESSAGES/django.mo | Bin 0 -> 1103 bytes .../locale/hu/LC_MESSAGES/django.po | 44 + .../locale/hy/LC_MESSAGES/django.mo | Bin 0 -> 1290 bytes .../locale/it/LC_MESSAGES/django.mo | Bin 0 -> 1098 bytes .../locale/it/LC_MESSAGES/django.po | 45 + .../locale/ka/LC_MESSAGES/django.po | 43 + .../locale/km/LC_MESSAGES/django.po | 41 + .../locale/lb/LC_MESSAGES/django.mo | Bin 0 -> 474 bytes .../locale/lv/LC_MESSAGES/django.mo | Bin 0 -> 1090 bytes .../locale/mk/LC_MESSAGES/django.mo | Bin 0 -> 1258 bytes .../locale/mk/LC_MESSAGES/django.po | 44 + .../locale/ml/LC_MESSAGES/django.mo | Bin 0 -> 1378 bytes .../locale/mr/LC_MESSAGES/django.po | 41 + .../locale/my/LC_MESSAGES/django.mo | Bin 0 -> 1554 bytes .../locale/my/LC_MESSAGES/django.po | 42 + .../locale/nb/LC_MESSAGES/django.mo | Bin 0 -> 1081 bytes .../locale/nn/LC_MESSAGES/django.po | 43 + .../locale/pt/LC_MESSAGES/django.po | 44 + .../locale/sk/LC_MESSAGES/django.po | 44 + .../locale/sl/LC_MESSAGES/django.po | 45 + .../locale/sr/LC_MESSAGES/django.po | 45 + .../locale/sr_Latn/LC_MESSAGES/django.mo | Bin 0 -> 1098 bytes .../locale/sv/LC_MESSAGES/django.mo | Bin 0 -> 1066 bytes .../locale/sv/LC_MESSAGES/django.po | 45 + .../locale/sw/LC_MESSAGES/django.po | 41 + .../locale/ta/LC_MESSAGES/django.po | 41 + .../locale/te/LC_MESSAGES/django.mo | Bin 0 -> 690 bytes .../locale/te/LC_MESSAGES/django.po | 41 + .../locale/th/LC_MESSAGES/django.po | 42 + .../locale/udm/LC_MESSAGES/django.po | 41 + .../locale/uk/LC_MESSAGES/django.po | 48 + .../locale/ur/LC_MESSAGES/django.mo | Bin 0 -> 671 bytes .../locale/ur/LC_MESSAGES/django.po | 41 + .../locale/zh_Hans/LC_MESSAGES/django.po | 45 + .../django/contrib/contenttypes/views.py | 88 + .../django/contrib/flatpages/forms.py | 69 + .../flatpages/locale/af/LC_MESSAGES/django.mo | Bin 0 -> 2297 bytes .../flatpages/locale/af/LC_MESSAGES/django.po | 89 + .../flatpages/locale/az/LC_MESSAGES/django.mo | Bin 0 -> 2235 bytes .../flatpages/locale/az/LC_MESSAGES/django.po | 89 + .../flatpages/locale/be/LC_MESSAGES/django.mo | Bin 0 -> 2801 bytes .../flatpages/locale/br/LC_MESSAGES/django.mo | Bin 0 -> 2433 bytes .../flatpages/locale/br/LC_MESSAGES/django.po | 95 + .../flatpages/locale/bs/LC_MESSAGES/django.mo | Bin 0 -> 1782 bytes .../flatpages/locale/ca/LC_MESSAGES/django.po | 91 + .../flatpages/locale/cy/LC_MESSAGES/django.po | 88 + .../flatpages/locale/da/LC_MESSAGES/django.mo | Bin 0 -> 2288 bytes .../flatpages/locale/da/LC_MESSAGES/django.po | 92 + .../flatpages/locale/en/LC_MESSAGES/django.mo | Bin 0 -> 356 bytes .../flatpages/locale/en/LC_MESSAGES/django.po | 96 + .../locale/es_CO/LC_MESSAGES/django.po | 86 + .../locale/es_MX/LC_MESSAGES/django.mo | Bin 0 -> 2062 bytes .../flatpages/locale/et/LC_MESSAGES/django.mo | Bin 0 -> 2095 bytes .../flatpages/locale/et/LC_MESSAGES/django.po | 85 + .../flatpages/locale/eu/LC_MESSAGES/django.mo | Bin 0 -> 2244 bytes .../flatpages/locale/fa/LC_MESSAGES/django.mo | Bin 0 -> 2459 bytes .../flatpages/locale/fi/LC_MESSAGES/django.po | 88 + .../flatpages/locale/fr/LC_MESSAGES/django.mo | Bin 0 -> 2452 bytes .../flatpages/locale/hi/LC_MESSAGES/django.po | 81 + .../flatpages/locale/hr/LC_MESSAGES/django.po | 88 + .../locale/hsb/LC_MESSAGES/django.po | 89 + .../flatpages/locale/ia/LC_MESSAGES/django.po | 77 + .../flatpages/locale/io/LC_MESSAGES/django.po | 74 + .../flatpages/locale/is/LC_MESSAGES/django.mo | Bin 0 -> 2252 bytes .../flatpages/locale/is/LC_MESSAGES/django.po | 87 + .../flatpages/locale/ja/LC_MESSAGES/django.mo | Bin 0 -> 2494 bytes .../flatpages/locale/ja/LC_MESSAGES/django.po | 90 + .../flatpages/locale/ka/LC_MESSAGES/django.mo | Bin 0 -> 3022 bytes .../flatpages/locale/ka/LC_MESSAGES/django.po | 88 + .../flatpages/locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 2438 bytes .../flatpages/locale/kn/LC_MESSAGES/django.mo | Bin 0 -> 1902 bytes .../flatpages/locale/kn/LC_MESSAGES/django.po | 82 + .../flatpages/locale/ko/LC_MESSAGES/django.po | 89 + .../flatpages/locale/lt/LC_MESSAGES/django.po | 94 + .../flatpages/locale/mk/LC_MESSAGES/django.mo | Bin 0 -> 2699 bytes .../flatpages/locale/mn/LC_MESSAGES/django.mo | Bin 0 -> 2776 bytes .../flatpages/locale/mr/LC_MESSAGES/django.mo | Bin 0 -> 468 bytes .../flatpages/locale/nb/LC_MESSAGES/django.po | 91 + .../flatpages/locale/ne/LC_MESSAGES/django.po | 77 + .../flatpages/locale/os/LC_MESSAGES/django.po | 86 + .../flatpages/locale/pl/LC_MESSAGES/django.mo | Bin 0 -> 2455 bytes .../flatpages/locale/pl/LC_MESSAGES/django.po | 96 + .../flatpages/locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 2115 bytes .../locale/pt_BR/LC_MESSAGES/django.po | 95 + .../flatpages/locale/ro/LC_MESSAGES/django.mo | Bin 0 -> 2337 bytes .../flatpages/locale/ro/LC_MESSAGES/django.po | 96 + .../flatpages/locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 2966 bytes .../flatpages/locale/ru/LC_MESSAGES/django.po | 94 + .../flatpages/locale/sk/LC_MESSAGES/django.mo | Bin 0 -> 2145 bytes .../flatpages/locale/sq/LC_MESSAGES/django.po | 89 + .../flatpages/locale/ta/LC_MESSAGES/django.mo | Bin 0 -> 1945 bytes .../flatpages/locale/tr/LC_MESSAGES/django.mo | Bin 0 -> 2290 bytes .../flatpages/locale/tt/LC_MESSAGES/django.po | 84 + .../flatpages/locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 1035 bytes .../locale/zh_Hans/LC_MESSAGES/django.mo | Bin 0 -> 2127 bytes .../locale/zh_Hans/LC_MESSAGES/django.po | 88 + .../locale/zh_Hant/LC_MESSAGES/django.mo | Bin 0 -> 2053 bytes .../django/contrib/flatpages/sitemaps.py | 12 + .../flatpages/templatetags/flatpages.py | 99 + .../django/contrib/flatpages/urls.py | 6 + .../django/contrib/gis/__init__.py | 1 + .../django/contrib/gis/admin/__init__.py | 12 + .../contrib/gis/db/backends/__init__.py | 0 .../contrib/gis/db/backends/base/adapter.py | 19 + .../contrib/gis/db/backends/base/models.py | 136 + .../contrib/gis/db/backends/mysql/base.py | 16 + .../gis/db/backends/mysql/introspection.py | 38 + .../gis/db/backends/oracle/introspection.py | 42 + .../contrib/gis/db/backends/postgis/base.py | 26 + .../gis/db/backends/postgis/pgraster.py | 141 + .../gis/db/backends/spatialite/base.py | 74 + .../gis/db/backends/spatialite/client.py | 5 + .../gis/db/backends/spatialite/features.py | 13 + .../db/backends/spatialite/introspection.py | 73 + .../django/contrib/gis/db/models/fields.py | 381 + .../django/contrib/gis/db/models/proxy.py | 80 + .../contrib/gis/db/models/sql/__init__.py | 7 + .../contrib/gis/db/models/sql/conversion.py | 69 + .../django/contrib/gis/forms/fields.py | 132 + .../django/contrib/gis/forms/widgets.py | 117 + .../django/contrib/gis/gdal/envelope.py | 178 + .../django/contrib/gis/gdal/geometries.py | 715 + .../contrib/gis/gdal/prototypes/generation.py | 158 + .../contrib/gis/gdal/prototypes/raster.py | 108 + .../django/contrib/gis/gdal/prototypes/srs.py | 80 + .../django/contrib/gis/gdal/raster/band.py | 252 + .../django/contrib/gis/gdal/raster/base.py | 75 + .../django/contrib/gis/gdal/raster/source.py | 467 + .../django/contrib/gis/gdal/srs.py | 335 + .../django/contrib/gis/geoip2/__init__.py | 23 + .../django/contrib/gis/geoip2/resources.py | 21 + .../django/contrib/gis/geos/LICENSE | 27 + .../django/contrib/gis/geos/coordseq.py | 196 + .../django/contrib/gis/geos/error.py | 3 + .../django/contrib/gis/geos/geometry.py | 738 ++ .../django/contrib/gis/geos/libgeos.py | 175 + .../django/contrib/gis/geos/prepared.py | 49 + .../contrib/gis/geos/prototypes/coordseq.py | 91 + .../contrib/gis/geos/prototypes/topology.py | 53 + .../gis/locale/ar/LC_MESSAGES/django.mo | Bin 0 -> 2428 bytes .../gis/locale/ar/LC_MESSAGES/django.po | 90 + .../gis/locale/ast/LC_MESSAGES/django.mo | Bin 0 -> 850 bytes .../gis/locale/bg/LC_MESSAGES/django.po | 90 + .../gis/locale/bn/LC_MESSAGES/django.mo | Bin 0 -> 1070 bytes .../gis/locale/el/LC_MESSAGES/django.po | 93 + .../gis/locale/es/LC_MESSAGES/django.mo | Bin 0 -> 2056 bytes .../gis/locale/es/LC_MESSAGES/django.po | 93 + .../gis/locale/es_CO/LC_MESSAGES/django.mo | Bin 0 -> 1865 bytes .../gis/locale/es_MX/LC_MESSAGES/django.po | 87 + .../gis/locale/fa/LC_MESSAGES/django.po | 90 + .../gis/locale/fi/LC_MESSAGES/django.mo | Bin 0 -> 1946 bytes .../gis/locale/fr/LC_MESSAGES/django.po | 90 + .../gis/locale/fy/LC_MESSAGES/django.mo | Bin 0 -> 476 bytes .../gis/locale/fy/LC_MESSAGES/django.po | 80 + .../gis/locale/ga/LC_MESSAGES/django.po | 88 + .../gis/locale/gl/LC_MESSAGES/django.mo | Bin 0 -> 1421 bytes .../gis/locale/he/LC_MESSAGES/django.mo | Bin 0 -> 2236 bytes .../gis/locale/hr/LC_MESSAGES/django.po | 91 + .../gis/locale/hsb/LC_MESSAGES/django.mo | Bin 0 -> 2083 bytes .../gis/locale/hsb/LC_MESSAGES/django.po | 90 + .../gis/locale/hu/LC_MESSAGES/django.po | 90 + .../gis/locale/hy/LC_MESSAGES/django.mo | Bin 0 -> 2535 bytes .../gis/locale/ia/LC_MESSAGES/django.mo | Bin 0 -> 1899 bytes .../gis/locale/ia/LC_MESSAGES/django.po | 89 + .../gis/locale/id/LC_MESSAGES/django.mo | Bin 0 -> 1983 bytes .../gis/locale/io/LC_MESSAGES/django.mo | Bin 0 -> 464 bytes .../gis/locale/it/LC_MESSAGES/django.po | 93 + .../gis/locale/ja/LC_MESSAGES/django.mo | Bin 0 -> 2124 bytes .../gis/locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 1349 bytes .../gis/locale/km/LC_MESSAGES/django.po | 80 + .../gis/locale/kn/LC_MESSAGES/django.mo | Bin 0 -> 461 bytes .../gis/locale/lb/LC_MESSAGES/django.mo | Bin 0 -> 474 bytes .../gis/locale/lb/LC_MESSAGES/django.po | 80 + .../gis/locale/ml/LC_MESSAGES/django.po | 88 + .../gis/locale/mr/LC_MESSAGES/django.po | 80 + .../gis/locale/my/LC_MESSAGES/django.mo | Bin 0 -> 525 bytes .../gis/locale/my/LC_MESSAGES/django.po | 85 + .../gis/locale/nb/LC_MESSAGES/django.mo | Bin 0 -> 1930 bytes .../gis/locale/ne/LC_MESSAGES/django.po | 84 + .../gis/locale/nl/LC_MESSAGES/django.mo | Bin 0 -> 1985 bytes .../gis/locale/nl/LC_MESSAGES/django.po | 94 + .../gis/locale/pa/LC_MESSAGES/django.mo | Bin 0 -> 1265 bytes .../gis/locale/pt/LC_MESSAGES/django.po | 95 + .../gis/locale/pt_BR/LC_MESSAGES/django.mo | Bin 0 -> 2011 bytes .../gis/locale/pt_BR/LC_MESSAGES/django.po | 94 + .../gis/locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 2583 bytes .../gis/locale/sl/LC_MESSAGES/django.po | 92 + .../gis/locale/sq/LC_MESSAGES/django.mo | Bin 0 -> 1918 bytes .../gis/locale/sr_Latn/LC_MESSAGES/django.mo | Bin 0 -> 1971 bytes .../gis/locale/sw/LC_MESSAGES/django.mo | Bin 0 -> 1426 bytes .../gis/locale/ta/LC_MESSAGES/django.po | 80 + .../gis/locale/te/LC_MESSAGES/django.po | 84 + .../gis/locale/th/LC_MESSAGES/django.po | 86 + .../gis/locale/tr/LC_MESSAGES/django.po | 91 + .../gis/locale/ur/LC_MESSAGES/django.po | 86 + .../gis/locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 1384 bytes .../gis/locale/zh_Hans/LC_MESSAGES/django.po | 92 + .../gis/locale/zh_Hant/LC_MESSAGES/django.mo | Bin 0 -> 2012 bytes .../gis/locale/zh_Hant/LC_MESSAGES/django.po | 89 + .../django/contrib/gis/sitemaps/__init__.py | 4 + .../gis/static/gis/img/draw_point_on.svg | 1 + .../gis/static/gis/img/draw_polygon_off.svg | 1 + .../gis/static/gis/img/draw_polygon_on.svg | 1 + .../gis/templates/gis/admin/openlayers.html | 40 + .../contrib/gis/templates/gis/admin/osm.html | 2 + .../contrib/gis/templates/gis/admin/osm.js | 2 + .../django/contrib/gis/utils/layermapping.py | 631 + .../django/contrib/gis/utils/ogrinspect.py | 237 + .../django/contrib/humanize/__init__.py | 1 + .../humanize/locale/af/LC_MESSAGES/django.po | 394 + .../humanize/locale/ast/LC_MESSAGES/django.po | 262 + .../humanize/locale/be/LC_MESSAGES/django.po | 320 + .../humanize/locale/bg/LC_MESSAGES/django.po | 265 + .../humanize/locale/bn/LC_MESSAGES/django.mo | Bin 0 -> 4026 bytes .../humanize/locale/bs/LC_MESSAGES/django.po | 292 + .../humanize/locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 6846 bytes .../humanize/locale/cs/LC_MESSAGES/django.po | 476 + .../humanize/locale/da/LC_MESSAGES/django.po | 396 + .../humanize/locale/de/LC_MESSAGES/django.mo | Bin 0 -> 5418 bytes .../humanize/locale/de/LC_MESSAGES/django.po | 395 + .../humanize/locale/el/LC_MESSAGES/django.mo | Bin 0 -> 6740 bytes .../humanize/locale/el/LC_MESSAGES/django.po | 398 + .../humanize/locale/eo/LC_MESSAGES/django.mo | Bin 0 -> 5386 bytes .../humanize/locale/eo/LC_MESSAGES/django.po | 394 + .../humanize/locale/es/LC_MESSAGES/django.mo | Bin 0 -> 5440 bytes .../humanize/locale/es/LC_MESSAGES/django.po | 401 + .../locale/es_MX/LC_MESSAGES/django.po | 264 + .../humanize/locale/fa/LC_MESSAGES/django.po | 400 + .../humanize/locale/fr/LC_MESSAGES/django.po | 396 + .../humanize/locale/fy/LC_MESSAGES/django.mo | Bin 0 -> 476 bytes .../humanize/locale/fy/LC_MESSAGES/django.po | 261 + .../humanize/locale/ga/LC_MESSAGES/django.mo | Bin 0 -> 5112 bytes .../humanize/locale/gd/LC_MESSAGES/django.mo | Bin 0 -> 7232 bytes .../humanize/locale/gl/LC_MESSAGES/django.mo | Bin 0 -> 3474 bytes .../humanize/locale/hsb/LC_MESSAGES/django.mo | Bin 0 -> 7146 bytes .../humanize/locale/hu/LC_MESSAGES/django.po | 397 + .../humanize/locale/is/LC_MESSAGES/django.po | 399 + .../humanize/locale/it/LC_MESSAGES/django.mo | Bin 0 -> 5981 bytes .../humanize/locale/it/LC_MESSAGES/django.po | 404 + .../humanize/locale/ko/LC_MESSAGES/django.mo | Bin 0 -> 4817 bytes .../humanize/locale/lb/LC_MESSAGES/django.mo | Bin 0 -> 474 bytes .../humanize/locale/lv/LC_MESSAGES/django.mo | Bin 0 -> 6252 bytes .../humanize/locale/mk/LC_MESSAGES/django.po | 262 + .../humanize/locale/ml/LC_MESSAGES/django.mo | Bin 0 -> 4736 bytes .../humanize/locale/mn/LC_MESSAGES/django.po | 398 + .../humanize/locale/mr/LC_MESSAGES/django.mo | Bin 0 -> 468 bytes .../humanize/locale/my/LC_MESSAGES/django.po | 234 + .../humanize/locale/nl/LC_MESSAGES/django.mo | Bin 0 -> 5303 bytes .../humanize/locale/nn/LC_MESSAGES/django.po | 263 + .../humanize/locale/pt/LC_MESSAGES/django.po | 398 + .../humanize/locale/ro/LC_MESSAGES/django.po | 441 + .../humanize/locale/sl/LC_MESSAGES/django.mo | Bin 0 -> 5430 bytes .../humanize/locale/sv/LC_MESSAGES/django.mo | Bin 0 -> 5359 bytes .../humanize/locale/sv/LC_MESSAGES/django.po | 398 + .../humanize/locale/sw/LC_MESSAGES/django.mo | Bin 0 -> 4146 bytes .../humanize/locale/ta/LC_MESSAGES/django.mo | Bin 0 -> 466 bytes .../humanize/locale/th/LC_MESSAGES/django.po | 357 + .../humanize/locale/tr/LC_MESSAGES/django.mo | Bin 0 -> 5304 bytes .../humanize/locale/tr/LC_MESSAGES/django.po | 400 + .../humanize/locale/udm/LC_MESSAGES/django.mo | Bin 0 -> 462 bytes .../humanize/locale/udm/LC_MESSAGES/django.po | 233 + .../humanize/locale/uk/LC_MESSAGES/django.mo | Bin 0 -> 8854 bytes .../humanize/locale/ur/LC_MESSAGES/django.mo | Bin 0 -> 1347 bytes .../locale/zh_Hans/LC_MESSAGES/django.mo | Bin 0 -> 4709 bytes .../locale/zh_Hans/LC_MESSAGES/django.po | 362 + .../django/contrib/messages/middleware.py | 26 + .../contrib/messages/storage/__init__.py | 12 + .../django/contrib/messages/storage/base.py | 170 + .../contrib/postgres/aggregates/__init__.py | 2 + .../django/contrib/postgres/apps.py | 66 + .../django/contrib/postgres/fields/hstore.py | 112 + .../django/contrib/postgres/fields/ranges.py | 274 + .../django/contrib/postgres/functions.py | 11 + .../jinja2/postgres/widgets/split_array.html | 1 + .../postgres/locale/af/LC_MESSAGES/django.mo | Bin 0 -> 3135 bytes .../postgres/locale/az/LC_MESSAGES/django.mo | Bin 0 -> 3132 bytes .../postgres/locale/az/LC_MESSAGES/django.po | 112 + .../postgres/locale/be/LC_MESSAGES/django.po | 132 + .../postgres/locale/ca/LC_MESSAGES/django.po | 121 + .../postgres/locale/da/LC_MESSAGES/django.mo | Bin 0 -> 3167 bytes .../postgres/locale/da/LC_MESSAGES/django.po | 120 + .../postgres/locale/en/LC_MESSAGES/django.mo | Bin 0 -> 356 bytes .../postgres/locale/en/LC_MESSAGES/django.po | 128 + .../locale/es_AR/LC_MESSAGES/django.po | 118 + .../locale/es_MX/LC_MESSAGES/django.mo | Bin 0 -> 882 bytes .../postgres/locale/eu/LC_MESSAGES/django.mo | Bin 0 -> 3133 bytes .../postgres/locale/fa/LC_MESSAGES/django.mo | Bin 0 -> 3614 bytes .../postgres/locale/fi/LC_MESSAGES/django.po | 120 + .../postgres/locale/gd/LC_MESSAGES/django.mo | Bin 0 -> 3828 bytes .../postgres/locale/hsb/LC_MESSAGES/django.mo | Bin 0 -> 3767 bytes .../postgres/locale/hsb/LC_MESSAGES/django.po | 129 + .../postgres/locale/hy/LC_MESSAGES/django.po | 119 + .../postgres/locale/ia/LC_MESSAGES/django.po | 108 + .../postgres/locale/is/LC_MESSAGES/django.mo | Bin 0 -> 3212 bytes .../postgres/locale/is/LC_MESSAGES/django.po | 118 + .../postgres/locale/ka/LC_MESSAGES/django.po | 108 + .../postgres/locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 683 bytes .../postgres/locale/kk/LC_MESSAGES/django.po | 107 + .../postgres/locale/ko/LC_MESSAGES/django.mo | Bin 0 -> 3196 bytes .../postgres/locale/ko/LC_MESSAGES/django.po | 114 + .../postgres/locale/lt/LC_MESSAGES/django.po | 130 + .../postgres/locale/mk/LC_MESSAGES/django.mo | Bin 0 -> 3717 bytes .../postgres/locale/mn/LC_MESSAGES/django.mo | Bin 0 -> 3732 bytes .../postgres/locale/nb/LC_MESSAGES/django.po | 117 + .../postgres/locale/pl/LC_MESSAGES/django.mo | Bin 0 -> 3694 bytes .../postgres/locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 3135 bytes .../locale/pt_BR/LC_MESSAGES/django.mo | Bin 0 -> 3190 bytes .../locale/pt_BR/LC_MESSAGES/django.po | 126 + .../postgres/locale/ro/LC_MESSAGES/django.mo | Bin 0 -> 3454 bytes .../postgres/locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 5119 bytes .../postgres/locale/sk/LC_MESSAGES/django.po | 128 + .../postgres/locale/sq/LC_MESSAGES/django.po | 117 + .../postgres/locale/sr/LC_MESSAGES/django.mo | Bin 0 -> 4106 bytes .../postgres/locale/sr/LC_MESSAGES/django.po | 123 + .../postgres/locale/sv/LC_MESSAGES/django.mo | Bin 0 -> 3196 bytes .../postgres/locale/tr/LC_MESSAGES/django.po | 119 + .../django/contrib/postgres/operations.py | 77 + .../django/contrib/postgres/search.py | 239 + .../django/contrib/postgres/utils.py | 29 + .../redirects/locale/af/LC_MESSAGES/django.mo | Bin 0 -> 1119 bytes .../locale/ast/LC_MESSAGES/django.mo | Bin 0 -> 1071 bytes .../redirects/locale/az/LC_MESSAGES/django.mo | Bin 0 -> 1157 bytes .../redirects/locale/be/LC_MESSAGES/django.po | 52 + .../redirects/locale/bs/LC_MESSAGES/django.mo | Bin 0 -> 1115 bytes .../redirects/locale/ca/LC_MESSAGES/django.po | 52 + .../redirects/locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 1156 bytes .../redirects/locale/cy/LC_MESSAGES/django.mo | Bin 0 -> 1132 bytes .../redirects/locale/cy/LC_MESSAGES/django.po | 51 + .../redirects/locale/da/LC_MESSAGES/django.mo | Bin 0 -> 1114 bytes .../locale/dsb/LC_MESSAGES/django.po | 51 + .../redirects/locale/en/LC_MESSAGES/django.mo | Bin 0 -> 356 bytes .../locale/en_AU/LC_MESSAGES/django.mo | Bin 0 -> 486 bytes .../locale/en_AU/LC_MESSAGES/django.po | 42 + .../locale/en_GB/LC_MESSAGES/django.mo | Bin 0 -> 1053 bytes .../locale/en_GB/LC_MESSAGES/django.po | 50 + .../locale/es_AR/LC_MESSAGES/django.po | 51 + .../locale/es_MX/LC_MESSAGES/django.mo | Bin 0 -> 1136 bytes .../locale/es_VE/LC_MESSAGES/django.po | 42 + .../redirects/locale/eu/LC_MESSAGES/django.mo | Bin 0 -> 1119 bytes .../redirects/locale/eu/LC_MESSAGES/django.po | 50 + .../redirects/locale/fi/LC_MESSAGES/django.po | 52 + .../redirects/locale/gd/LC_MESSAGES/django.mo | Bin 0 -> 1252 bytes .../redirects/locale/gl/LC_MESSAGES/django.po | 51 + .../redirects/locale/he/LC_MESSAGES/django.po | 46 + .../redirects/locale/hi/LC_MESSAGES/django.mo | Bin 0 -> 1409 bytes .../redirects/locale/hy/LC_MESSAGES/django.po | 49 + .../redirects/locale/io/LC_MESSAGES/django.po | 48 + .../redirects/locale/is/LC_MESSAGES/django.mo | Bin 0 -> 1065 bytes .../redirects/locale/ja/LC_MESSAGES/django.po | 47 + .../redirects/locale/ka/LC_MESSAGES/django.mo | Bin 0 -> 1511 bytes .../locale/kab/LC_MESSAGES/django.mo | Bin 0 -> 699 bytes .../locale/kab/LC_MESSAGES/django.po | 45 + .../redirects/locale/kk/LC_MESSAGES/django.po | 48 + .../redirects/locale/kn/LC_MESSAGES/django.mo | Bin 0 -> 1396 bytes .../redirects/locale/kn/LC_MESSAGES/django.po | 48 + .../redirects/locale/ko/LC_MESSAGES/django.mo | Bin 0 -> 1112 bytes .../redirects/locale/mr/LC_MESSAGES/django.mo | Bin 0 -> 468 bytes .../redirects/locale/nn/LC_MESSAGES/django.mo | Bin 0 -> 1072 bytes .../redirects/locale/os/LC_MESSAGES/django.mo | Bin 0 -> 1150 bytes .../redirects/locale/os/LC_MESSAGES/django.po | 49 + .../redirects/locale/pl/LC_MESSAGES/django.po | 53 + .../redirects/locale/ro/LC_MESSAGES/django.mo | Bin 0 -> 1222 bytes .../redirects/locale/ro/LC_MESSAGES/django.po | 53 + .../redirects/locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 1456 bytes .../redirects/locale/ru/LC_MESSAGES/django.po | 53 + .../redirects/locale/sk/LC_MESSAGES/django.mo | Bin 0 -> 1160 bytes .../redirects/locale/sk/LC_MESSAGES/django.po | 51 + .../redirects/locale/sl/LC_MESSAGES/django.mo | Bin 0 -> 1173 bytes .../redirects/locale/sq/LC_MESSAGES/django.po | 51 + .../redirects/locale/sr/LC_MESSAGES/django.mo | Bin 0 -> 1350 bytes .../redirects/locale/ta/LC_MESSAGES/django.mo | Bin 0 -> 1502 bytes .../redirects/locale/tt/LC_MESSAGES/django.po | 48 + .../redirects/locale/uk/LC_MESSAGES/django.mo | Bin 0 -> 1414 bytes .../redirects/locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 1106 bytes .../redirects/locale/vi/LC_MESSAGES/django.po | 49 + .../django/contrib/redirects/middleware.py | 50 + .../redirects/migrations/0001_initial.py | 40 + .../django/contrib/sessions/backends/file.py | 202 + .../sessions/locale/af/LC_MESSAGES/django.po | 36 + .../sessions/locale/az/LC_MESSAGES/django.po | 37 + .../sessions/locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 783 bytes .../sessions/locale/bs/LC_MESSAGES/django.mo | Bin 0 -> 759 bytes .../sessions/locale/bs/LC_MESSAGES/django.po | 37 + .../sessions/locale/cs/LC_MESSAGES/django.po | 36 + .../sessions/locale/da/LC_MESSAGES/django.po | 36 + .../sessions/locale/de/LC_MESSAGES/django.mo | Bin 0 -> 721 bytes .../sessions/locale/dsb/LC_MESSAGES/django.mo | Bin 0 -> 810 bytes .../sessions/locale/el/LC_MESSAGES/django.mo | Bin 0 -> 809 bytes .../sessions/locale/el/LC_MESSAGES/django.po | 36 + .../sessions/locale/en/LC_MESSAGES/django.po | 38 + .../locale/en_GB/LC_MESSAGES/django.mo | Bin 0 -> 707 bytes .../locale/en_GB/LC_MESSAGES/django.po | 36 + .../sessions/locale/eo/LC_MESSAGES/django.mo | Bin 0 -> 727 bytes .../sessions/locale/es/LC_MESSAGES/django.po | 37 + .../locale/es_CO/LC_MESSAGES/django.mo | Bin 0 -> 754 bytes .../locale/es_CO/LC_MESSAGES/django.po | 36 + .../locale/es_MX/LC_MESSAGES/django.mo | Bin 0 -> 756 bytes .../locale/es_VE/LC_MESSAGES/django.po | 35 + .../sessions/locale/fa/LC_MESSAGES/django.mo | Bin 0 -> 755 bytes .../sessions/locale/fr/LC_MESSAGES/django.mo | Bin 0 -> 733 bytes .../sessions/locale/fr/LC_MESSAGES/django.po | 36 + .../sessions/locale/fy/LC_MESSAGES/django.mo | Bin 0 -> 476 bytes .../sessions/locale/gd/LC_MESSAGES/django.mo | Bin 0 -> 791 bytes .../sessions/locale/hsb/LC_MESSAGES/django.mo | Bin 0 -> 805 bytes .../sessions/locale/hu/LC_MESSAGES/django.mo | Bin 0 -> 727 bytes .../sessions/locale/hy/LC_MESSAGES/django.mo | Bin 0 -> 815 bytes .../sessions/locale/is/LC_MESSAGES/django.po | 36 + .../sessions/locale/it/LC_MESSAGES/django.mo | Bin 0 -> 726 bytes .../sessions/locale/ka/LC_MESSAGES/django.po | 36 + .../sessions/locale/ko/LC_MESSAGES/django.mo | Bin 0 -> 700 bytes .../sessions/locale/ko/LC_MESSAGES/django.po | 36 + .../sessions/locale/lb/LC_MESSAGES/django.po | 35 + .../sessions/locale/lv/LC_MESSAGES/django.mo | Bin 0 -> 753 bytes .../sessions/locale/mk/LC_MESSAGES/django.mo | Bin 0 -> 816 bytes .../sessions/locale/mr/LC_MESSAGES/django.po | 35 + .../sessions/locale/my/LC_MESSAGES/django.mo | Bin 0 -> 872 bytes .../sessions/locale/ne/LC_MESSAGES/django.mo | Bin 0 -> 802 bytes .../sessions/locale/nn/LC_MESSAGES/django.po | 36 + .../sessions/locale/os/LC_MESSAGES/django.po | 36 + .../sessions/locale/pl/LC_MESSAGES/django.po | 39 + .../sessions/locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 738 bytes .../sessions/locale/pt/LC_MESSAGES/django.po | 37 + .../locale/pt_BR/LC_MESSAGES/django.mo | Bin 0 -> 757 bytes .../locale/pt_BR/LC_MESSAGES/django.po | 37 + .../sessions/locale/ro/LC_MESSAGES/django.mo | Bin 0 -> 776 bytes .../sessions/locale/sl/LC_MESSAGES/django.mo | Bin 0 -> 770 bytes .../sessions/locale/sl/LC_MESSAGES/django.po | 38 + .../sessions/locale/sr/LC_MESSAGES/django.po | 38 + .../locale/sr_Latn/LC_MESSAGES/django.po | 38 + .../sessions/locale/sv/LC_MESSAGES/django.mo | Bin 0 -> 707 bytes .../sessions/locale/ta/LC_MESSAGES/django.po | 35 + .../sessions/locale/te/LC_MESSAGES/django.mo | Bin 0 -> 786 bytes .../sessions/locale/te/LC_MESSAGES/django.po | 36 + .../sessions/locale/th/LC_MESSAGES/django.mo | Bin 0 -> 814 bytes .../sessions/locale/th/LC_MESSAGES/django.po | 36 + .../sessions/locale/tr/LC_MESSAGES/django.mo | Bin 0 -> 726 bytes .../sessions/locale/uk/LC_MESSAGES/django.mo | Bin 0 -> 841 bytes .../sessions/locale/ur/LC_MESSAGES/django.mo | Bin 0 -> 729 bytes .../sessions/locale/vi/LC_MESSAGES/django.po | 38 + .../management/commands/clearsessions.py | 19 + .../contrib/sessions/migrations/__init__.py | 0 .../django/contrib/sessions/models.py | 35 + .../django/contrib/sitemaps/__init__.py | 163 + .../django/contrib/sitemaps/views.py | 92 + .../django/contrib/sites/admin.py | 8 + .../sites/locale/af/LC_MESSAGES/django.mo | Bin 0 -> 786 bytes .../sites/locale/az/LC_MESSAGES/django.mo | Bin 0 -> 773 bytes .../sites/locale/az/LC_MESSAGES/django.po | 37 + .../sites/locale/be/LC_MESSAGES/django.mo | Bin 0 -> 1024 bytes .../sites/locale/bg/LC_MESSAGES/django.po | 38 + .../sites/locale/br/LC_MESSAGES/django.po | 40 + .../sites/locale/bs/LC_MESSAGES/django.mo | Bin 0 -> 692 bytes .../sites/locale/ca/LC_MESSAGES/django.po | 38 + .../sites/locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 815 bytes .../sites/locale/cy/LC_MESSAGES/django.mo | Bin 0 -> 835 bytes .../sites/locale/cy/LC_MESSAGES/django.po | 37 + .../sites/locale/da/LC_MESSAGES/django.mo | Bin 0 -> 794 bytes .../sites/locale/de/LC_MESSAGES/django.mo | Bin 0 -> 792 bytes .../sites/locale/dsb/LC_MESSAGES/django.mo | Bin 0 -> 868 bytes .../sites/locale/en/LC_MESSAGES/django.mo | Bin 0 -> 356 bytes .../sites/locale/en/LC_MESSAGES/django.po | 38 + .../sites/locale/en_GB/LC_MESSAGES/django.po | 36 + .../sites/locale/es/LC_MESSAGES/django.po | 39 + .../sites/locale/es_CO/LC_MESSAGES/django.mo | Bin 0 -> 825 bytes .../sites/locale/es_CO/LC_MESSAGES/django.po | 36 + .../sites/locale/es_MX/LC_MESSAGES/django.mo | Bin 0 -> 809 bytes .../sites/locale/es_VE/LC_MESSAGES/django.po | 35 + .../sites/locale/et/LC_MESSAGES/django.mo | Bin 0 -> 788 bytes .../sites/locale/et/LC_MESSAGES/django.po | 38 + .../sites/locale/fi/LC_MESSAGES/django.mo | Bin 0 -> 786 bytes .../sites/locale/fi/LC_MESSAGES/django.po | 37 + .../sites/locale/gl/LC_MESSAGES/django.mo | Bin 0 -> 742 bytes .../sites/locale/gl/LC_MESSAGES/django.po | 37 + .../sites/locale/he/LC_MESSAGES/django.po | 36 + .../sites/locale/hi/LC_MESSAGES/django.mo | Bin 0 -> 665 bytes .../sites/locale/hsb/LC_MESSAGES/django.mo | Bin 0 -> 863 bytes .../sites/locale/hsb/LC_MESSAGES/django.po | 37 + .../sites/locale/hu/LC_MESSAGES/django.po | 37 + .../sites/locale/hy/LC_MESSAGES/django.po | 36 + .../sites/locale/ia/LC_MESSAGES/django.po | 36 + .../sites/locale/id/LC_MESSAGES/django.po | 38 + .../sites/locale/io/LC_MESSAGES/django.po | 35 + .../sites/locale/is/LC_MESSAGES/django.mo | Bin 0 -> 812 bytes .../sites/locale/ja/LC_MESSAGES/django.mo | Bin 0 -> 814 bytes .../sites/locale/ka/LC_MESSAGES/django.mo | Bin 0 -> 993 bytes .../sites/locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 895 bytes .../sites/locale/kn/LC_MESSAGES/django.mo | Bin 0 -> 676 bytes .../sites/locale/lt/LC_MESSAGES/django.po | 40 + .../sites/locale/ml/LC_MESSAGES/django.po | 37 + .../sites/locale/mn/LC_MESSAGES/django.mo | Bin 0 -> 867 bytes .../sites/locale/nb/LC_MESSAGES/django.po | 38 + .../sites/locale/ne/LC_MESSAGES/django.po | 35 + .../sites/locale/nl/LC_MESSAGES/django.mo | Bin 0 -> 776 bytes .../sites/locale/os/LC_MESSAGES/django.mo | Bin 0 -> 806 bytes .../sites/locale/pa/LC_MESSAGES/django.po | 36 + .../sites/locale/pl/LC_MESSAGES/django.mo | Bin 0 -> 944 bytes .../sites/locale/pt_BR/LC_MESSAGES/django.mo | Bin 0 -> 824 bytes .../sites/locale/pt_BR/LC_MESSAGES/django.po | 38 + .../sites/locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 1016 bytes .../sites/locale/sk/LC_MESSAGES/django.po | 37 + .../sites/locale/sq/LC_MESSAGES/django.po | 36 + .../sites/locale/sr/LC_MESSAGES/django.mo | Bin 0 -> 935 bytes .../sites/locale/sw/LC_MESSAGES/django.po | 36 + .../sites/locale/tt/LC_MESSAGES/django.mo | Bin 0 -> 706 bytes .../sites/locale/uz/LC_MESSAGES/django.po | 35 + .../sites/locale/vi/LC_MESSAGES/django.po | 38 + .../contrib/sites/migrations/0001_initial.py | 31 + .../django/contrib/sites/requests.py | 19 + .../django/contrib/staticfiles/finders.py | 296 + .../django/contrib/staticfiles/handlers.py | 66 + .../management/commands/findstatic.py | 43 + .../django/contrib/staticfiles/urls.py | 19 + .../django/contrib/staticfiles/views.py | 39 + .../django/contrib/syndication/apps.py | 7 + .../site-packages/django/core/__init__.py | 0 .../django/core/cache/__init__.py | 124 + .../django/core/cache/backends/memcached.py | 186 + .../django/core/checks/messages.py | 75 + .../django/core/checks/security/base.py | 210 + .../site-packages/django/core/files/base.py | 160 + .../site-packages/django/core/files/locks.py | 113 + .../site-packages/django/core/files/temp.py | 74 + .../django/core/management/__init__.py | 381 + .../management/commands/createcachetable.py | 108 + .../core/management/commands/diffsettings.py | 79 + .../core/management/commands/makemessages.py | 687 + .../management/commands/makemigrations.py | 311 + .../core/management/commands/runserver.py | 161 + .../core/management/commands/sendtestemail.py | 40 + .../core/management/commands/sqlmigrate.py | 65 + .../management/commands/sqlsequencereset.py | 23 + .../core/management/commands/startproject.py | 20 + .../django/core/management/commands/test.py | 56 + .../django/core/management/sql.py | 52 + .../django/core/serializers/python.py | 156 + .../django/core/serializers/pyyaml.py | 77 + .../django/core/serializers/xml_serializer.py | 420 + .../site-packages/django/core/signals.py | 6 + .../site-packages/django/core/signing.py | 198 + .../site-packages/django/core/validators.py | 539 + .../django/db/backends/base/__init__.py | 0 .../django/db/backends/base/client.py | 12 + .../django/db/backends/base/features.py | 308 + .../django/db/backends/base/validation.py | 25 + .../django/db/backends/dummy/__init__.py | 0 .../django/db/backends/mysql/client.py | 48 + .../django/db/backends/mysql/creation.py | 67 + .../django/db/backends/mysql/features.py | 120 + .../django/db/backends/mysql/operations.py | 306 + .../django/db/backends/mysql/schema.py | 103 + .../django/db/backends/oracle/client.py | 17 + .../django/db/backends/oracle/features.py | 71 + .../django/db/backends/oracle/functions.py | 22 + .../django/db/backends/postgresql/base.py | 283 + .../django/db/backends/postgresql/client.py | 71 + .../django/db/backends/postgresql/creation.py | 77 + .../django/db/backends/postgresql/schema.py | 141 + .../db/backends/postgresql_psycopg2/client.py | 1 + .../postgresql_psycopg2/introspection.py | 1 + .../postgresql_psycopg2/operations.py | 1 + .../db/backends/postgresql_psycopg2/schema.py | 1 + .../db/backends/sqlite3/introspection.py | 434 + .../django/db/migrations/__init__.py | 2 + .../django/db/migrations/autodetector.py | 1320 ++ .../django/db/migrations/exceptions.py | 54 + .../django/db/migrations/executor.py | 376 + .../django/db/migrations/questioner.py | 239 + .../django/db/migrations/recorder.py | 92 + .../django/db/migrations/state.py | 612 + .../django/db/migrations/utils.py | 17 + .../django/db/models/constraints.py | 121 + .../django/db/models/fields/files.py | 466 + .../django/db/models/fields/proxy.py | 18 + .../django/db/models/functions/mixins.py | 50 + .../django/db/models/functions/text.py | 267 + .../django/db/models/functions/window.py | 108 + .../django/db/models/sql/datastructures.py | 170 + .../site-packages/django/dispatch/__init__.py | 9 + .../site-packages/django/dispatch/license.txt | 36 + .../site-packages/django/forms/__init__.py | 11 + .../site-packages/django/forms/forms.py | 506 + .../site-packages/django/forms/formsets.py | 449 + .../django/forms/widgets/checkbox_option.html | 1 + .../django/forms/widgets/checkbox_select.html | 1 + .../jinja2/django/forms/widgets/file.html | 1 + .../jinja2/django/forms/widgets/hidden.html | 1 + .../django/forms/widgets/multiple_input.html | 5 + .../django/forms/widgets/multiwidget.html | 1 + .../django/forms/widgets/select_option.html | 1 + .../django/forms/widgets/splitdatetime.html | 1 + .../jinja2/django/forms/widgets/text.html | 1 + .../jinja2/django/forms/widgets/url.html | 1 + .../site-packages/django/forms/renderers.py | 70 + .../django/forms/widgets/checkbox.html | 1 + .../forms/widgets/clearable_file_input.html | 5 + .../templates/django/forms/widgets/input.html | 1 + .../django/forms/widgets/multiwidget.html | 1 + .../django/forms/widgets/radio_option.html | 1 + .../django/forms/widgets/textarea.html | 2 + .../templates/django/forms/widgets/url.html | 1 + .../site-packages/django/forms/widgets.py | 1079 ++ .../site-packages/django/http/__init__.py | 21 + .../site-packages/django/http/cookie.py | 26 + .../site-packages/django/http/request.py | 603 + .../site-packages/django/http/response.py | 559 + .../django/middleware/__init__.py | 0 .../site-packages/django/middleware/common.py | 173 + .../site-packages/django/middleware/gzip.py | 52 + .../site-packages/django/middleware/locale.py | 61 + .../site-packages/django/shortcuts.py | 158 + .../django/template/backends/dummy.py | 53 + .../django/template/backends/jinja2.py | 108 + .../django/template/backends/utils.py | 14 + .../site-packages/django/template/base.py | 1044 ++ .../site-packages/django/template/context.py | 280 + .../django/template/loaders/base.py | 49 + .../django/template/loaders/cached.py | 95 + .../site-packages/django/template/utils.py | 107 + .../django/templatetags/__init__.py | 0 .../django/templatetags/static.py | 167 + .../site-packages/django/test/html.py | 228 + .../site-packages/django/urls/converters.py | 66 + .../site-packages/django/urls/exceptions.py | 9 + .../site-packages/django/urls/resolvers.py | 673 + .../site-packages/django/urls/utils.py | 62 + .../site-packages/django/utils/_os.py | 65 + .../site-packages/django/utils/baseconv.py | 101 + .../site-packages/django/utils/crypto.py | 84 + .../site-packages/django/utils/deconstruct.py | 55 + .../site-packages/django/utils/deprecation.py | 97 + .../site-packages/django/utils/duration.py | 44 + .../site-packages/django/utils/functional.py | 433 + .../site-packages/django/utils/lorem_ipsum.py | 114 + .../site-packages/django/utils/safestring.py | 84 + .../django/utils/translation/template.py | 227 + .../django/utils/translation/trans_real.py | 515 + .../site-packages/django/utils/version.py | 104 + .../site-packages/django/utils/xmlutils.py | 34 + .../django/views/decorators/cache.py | 47 + .../django/views/decorators/http.py | 121 + .../django/views/generic/__init__.py | 22 + .../django/views/generic/detail.py | 170 + .../django/views/generic/edit.py | 241 + .../site-packages/django/views/i18n.py | 308 + .../django/views/templates/technical_500.txt | 66 + .../installed-files.txt | 51 + .../requires.txt | 6 + .../site-packages/django_eventstream/event.py | 6 + .../management/commands/runserver_ngrok.py | 58 + .../django_eventstream/migrations/__init__.py | 0 .../reconnecting-eventsource.js | 179 + .../site-packages/django_eventstream/utils.py | 165 + .../site-packages/django_eventstream/views.py | 40 + .../django_grip-2.0.2-py3.7.egg-info/PKG-INFO | 12 + .../SOURCES.txt | 9 + .../WHEEL | 5 + .../top_level.txt | 1 + .../site-packages/exampleproj/_version.py | 7 + .../top_level.txt | 1 + .../site-packages/gripcontrol/channel.py | 16 + .../gripcontrol/httpstreamformat.py | 46 + .../gripcontrol/websocketcontext.py | 115 + .../site-packages/hamcrest/__init__.py | 8 + .../site-packages/hamcrest/core/compat.py | 19 + .../hamcrest/core/core/__init__.py | 18 + .../site-packages/hamcrest/core/core/anyof.py | 37 + .../hamcrest/core/core/isanything.py | 31 + .../hamcrest/core/core/isequal.py | 32 + .../hamcrest/core/core/isinstanceof.py | 43 + .../hamcrest/core/core/isnone.py | 26 + .../site-packages/hamcrest/core/core/isnot.py | 57 + .../hamcrest/core/helpers/__init__.py | 5 + .../hamcrest/library/__init__.py | 44 + .../hamcrest/library/collection/__init__.py | 16 + .../collection/isdict_containingkey.py | 48 + .../collection/isdict_containingvalue.py | 48 + .../collection/issequence_containing.py | 89 + .../issequence_containinginanyorder.py | 97 + .../collection/issequence_onlycontaining.py | 55 + .../hamcrest/library/integration/__init__.py | 8 + .../library/integration/match_equality.py | 42 + .../hamcrest/library/object/haslength.py | 50 + .../hamcrest/library/object/hasproperty.py | 154 + .../library/text/isequal_ignoring_case.py | 43 + .../text/isequal_ignoring_whitespace.py | 57 + .../DESCRIPTION.rst | 9 + .../hyperlink-19.0.0.dist-info/INSTALLER | 1 + .../python3.7/site-packages/hyperlink/_url.py | 1921 +++ .../hyperlink/test/test_common.py | 106 + .../hyperlink/test/test_decoded_url.py | 180 + .../test/test_scheme_registration.py | 64 + .../idna-2.8.dist-info/LICENSE.rst | 80 + .../site-packages/idna-2.8.dist-info/RECORD | 22 + .../site-packages/idna-2.8.dist-info/WHEEL | 6 + .../DESCRIPTION.rst | 110 + .../incremental-17.5.0.dist-info/METADATA | 133 + .../incremental-17.5.0.dist-info/RECORD | 24 + .../incremental-17.5.0.dist-info/WHEEL | 6 + .../top_level.txt | 1 + .../incremental/tests/__init__.py | 0 .../site-packages/incremental/update.py | 209 + .../lib/python3.7/site-packages/jwt/compat.py | 68 + .../jwt/contrib/algorithms/py_ecdsa.py | 60 + .../python3.7/site-packages/jwt/exceptions.py | 59 + venv/lib/python3.7/site-packages/jwt/utils.py | 113 + .../EGG-INFO/entry_points.txt | 5 + .../EGG-INFO/not-zip-safe | 1 + .../EGG-INFO/requires.txt | 8 + .../pip/_internal/__init__.py | 246 + .../pip/_internal/cache.py | 202 + .../pip/_internal/cmdoptions.py | 609 + .../pip/_internal/commands/__init__.py | 79 + .../pip/_internal/commands/list.py | 343 + .../pip/_internal/commands/search.py | 135 + .../pip/_internal/commands/show.py | 164 + .../pip/_internal/commands/uninstall.py | 71 + .../pip/_internal/commands/wheel.py | 179 + .../pip/_internal/exceptions.py | 249 + .../pip/_internal/models/__init__.py | 4 + .../pip/_internal/models/index.py | 15 + .../pip/_internal/operations/freeze.py | 252 + .../pip/_internal/req/__init__.py | 69 + .../pip/_internal/req/req_uninstall.py | 455 + .../pip/_internal/utils/appdirs.py | 258 + .../pip/_internal/utils/deprecation.py | 77 + .../pip/_internal/utils/packaging.py | 70 + .../pip/_internal/vcs/git.py | 311 + .../pip/_internal/vcs/subversion.py | 271 + .../pip/_vendor/appdirs.py | 604 + .../pip/_vendor/cachecontrol/adapter.py | 134 + .../pip/_vendor/cachecontrol/cache.py | 39 + .../_vendor/cachecontrol/caches/file_cache.py | 133 + .../pip/_vendor/cachecontrol/serialize.py | 194 + .../pip/_vendor/cachecontrol/wrapper.py | 27 + .../pip/_vendor/certifi/__main__.py | 2 + .../pip/_vendor/chardet/__init__.py | 39 + .../pip/_vendor/chardet/cp949prober.py | 49 + .../pip/_vendor/chardet/escprober.py | 101 + .../pip/_vendor/chardet/euctwfreq.py | 387 + .../pip/_vendor/chardet/euctwprober.py | 46 + .../pip/_vendor/chardet/hebrewprober.py | 292 + .../pip/_vendor/chardet/jpcntx.py | 233 + .../pip/_vendor/chardet/latin1prober.py | 145 + .../pip/_vendor/chardet/sjisprober.py | 92 + .../pip/_vendor/colorama/__init__.py | 7 + .../pip/_vendor/colorama/ansitowin32.py | 236 + .../pip/_vendor/colorama/win32.py | 156 + .../_vendor/distlib/_backport/sysconfig.cfg | 84 + .../pip/_vendor/distlib/locators.py | 1292 ++ .../pip/_vendor/distlib/scripts.py | 415 + .../pip/_vendor/distlib/w32.exe | Bin 0 -> 89088 bytes .../pip/_vendor/html5lib/__init__.py | 35 + .../pip/_vendor/html5lib/_trie/datrie.py | 44 + .../pip/_vendor/html5lib/filters/base.py | 12 + .../pip/_vendor/html5lib/filters/sanitizer.py | 896 ++ .../_vendor/html5lib/filters/whitespace.py | 38 + .../pip/_vendor/html5lib/serializer.py | 409 + .../_vendor/html5lib/treeadapters/__init__.py | 30 + .../pip/_vendor/html5lib/treebuilders/base.py | 417 + .../_vendor/html5lib/treebuilders/etree.py | 340 + .../html5lib/treebuilders/etree_lxml.py | 366 + .../pip/_vendor/html5lib/treewalkers/base.py | 252 + .../_vendor/html5lib/treewalkers/genshi.py | 69 + .../pip/_vendor/idna/__init__.py | 2 + .../pip/_vendor/idna/compat.py | 12 + .../pip/_vendor/idna/idnadata.py | 1585 +++ .../pip/_vendor/lockfile/pidlockfile.py | 190 + .../pip/_vendor/msgpack/__init__.py | 66 + .../pip/_vendor/packaging/__about__.py | 21 + .../pip/_vendor/pkg_resources/__init__.py | 3125 +++++ .../pip/_vendor/pkg_resources/py31compat.py | 22 + .../pip/_vendor/progress/__init__.py | 127 + .../pip/_vendor/pyparsing.py | 5720 ++++++++ .../pip/_vendor/pytoml/__init__.py | 3 + .../pip/_vendor/pytoml/core.py | 13 + .../pip/_vendor/pytoml/parser.py | 374 + .../pip/_vendor/requests/__version__.py | 14 + .../pip/_vendor/requests/adapters.py | 525 + .../pip/_vendor/requests/certs.py | 18 + .../pip/_vendor/requests/packages.py | 16 + .../pip/_vendor/requests/structures.py | 105 + .../pip/_vendor/urllib3/_collections.py | 319 + .../pip/_vendor/urllib3/contrib/__init__.py | 0 .../contrib/_securetransport/__init__.py | 0 .../pip/_vendor/urllib3/contrib/appengine.py | 296 + .../urllib3/contrib/securetransport.py | 810 ++ .../pip/_vendor/urllib3/contrib/socks.py | 188 + .../pip/_vendor/urllib3/fields.py | 178 + .../pip/_vendor/urllib3/packages/__init__.py | 5 + .../urllib3/packages/backports/__init__.py | 0 .../ssl_match_hostname/_implementation.py | 157 + .../pip/_vendor/urllib3/response.py | 626 + .../pip/_vendor/urllib3/util/connection.py | 130 + .../pip/_vendor/urllib3/util/request.py | 118 + .../pip/_vendor/urllib3/util/response.py | 81 + .../pip/_vendor/urllib3/util/ssl_.py | 341 + .../pip/_vendor/urllib3/util/url.py | 230 + .../pip/_vendor/urllib3/util/wait.py | 40 + .../pubcontrol-2.4.2-py3.7.egg-info/PKG-INFO | 12 + .../installed-files.txt | 25 + .../site-packages/pubcontrol/format.py | 21 + .../pubcontrol/pubcontrolclient.py | 308 + .../site-packages/pubcontrol/utilities.py | 81 + .../pyOpenSSL-19.1.0.dist-info/RECORD | 22 + .../pyOpenSSL-19.1.0.dist-info/WHEEL | 6 + .../pyasn1-0.4.8.dist-info/INSTALLER | 1 + .../site-packages/pyasn1/__init__.py | 7 + .../site-packages/pyasn1/codec/__init__.py | 1 + .../site-packages/pyasn1/codec/ber/encoder.py | 890 ++ .../site-packages/pyasn1/codec/der/decoder.py | 94 + .../site-packages/pyasn1/codec/der/encoder.py | 107 + .../pyasn1/codec/native/decoder.py | 213 + .../site-packages/pyasn1/compat/__init__.py | 1 + .../site-packages/pyasn1/compat/integer.py | 110 + .../python3.7/site-packages/pyasn1/debug.py | 157 + .../python3.7/site-packages/pyasn1/error.py | 75 + .../site-packages/pyasn1/type/__init__.py | 1 + .../site-packages/pyasn1/type/base.py | 707 + .../site-packages/pyasn1/type/char.py | 335 + .../site-packages/pyasn1/type/error.py | 11 + .../site-packages/pyasn1/type/useful.py | 191 + .../pyasn1_modules-0.2.7.dist-info/WHEEL | 6 + .../metadata.json | 1 + .../pyasn1_modules-0.2.7.dist-info/zip-safe | 1 + .../site-packages/pyasn1_modules/pem.py | 65 + .../site-packages/pyasn1_modules/rfc1901.py | 22 + .../site-packages/pyasn1_modules/rfc2437.py | 69 + .../site-packages/pyasn1_modules/rfc2511.py | 258 + .../site-packages/pyasn1_modules/rfc2986.py | 75 + .../site-packages/pyasn1_modules/rfc3161.py | 142 + .../site-packages/pyasn1_modules/rfc3279.py | 233 + .../site-packages/pyasn1_modules/rfc3560.py | 74 + .../site-packages/pyasn1_modules/rfc3709.py | 204 + .../site-packages/pyasn1_modules/rfc4055.py | 258 + .../site-packages/pyasn1_modules/rfc4073.py | 59 + .../site-packages/pyasn1_modules/rfc4210.py | 803 ++ .../site-packages/pyasn1_modules/rfc4211.py | 396 + .../site-packages/pyasn1_modules/rfc5035.py | 199 + .../site-packages/pyasn1_modules/rfc5914.py | 119 + .../site-packages/pyasn1_modules/rfc6019.py | 45 + .../site-packages/pyasn1_modules/rfc6031.py | 469 + .../site-packages/pyasn1_modules/rfc6211.py | 72 + .../site-packages/pyasn1_modules/rfc7191.py | 261 + .../site-packages/pyasn1_modules/rfc7296.py | 32 + .../site-packages/pyasn1_modules/rfc8209.py | 20 + .../site-packages/pyasn1_modules/rfc8398.py | 52 + .../pycparser-2.19-py3.7.egg-info/PKG-INFO | 25 + .../pycparser-2.19-py3.7.egg-info/SOURCES.txt | 181 + .../installed-files.txt | 39 + .../site-packages/pycparser/ast_transforms.py | 105 + .../site-packages/pycparser/c_ast.py | 1084 ++ .../site-packages/pycparser/ply/ctokens.py | 133 + .../site-packages/pycparser/ply/lex.py | 1099 ++ .../site-packages/pycparser/ply/yacc.py | 3494 +++++ .../pytz-2019.3.dist-info/DESCRIPTION.rst | 584 + .../pytz-2019.3.dist-info/LICENSE.txt | 19 + .../site-packages/pytz-2019.3.dist-info/WHEEL | 6 + .../pytz-2019.3.dist-info/metadata.json | 1 + .../pytz-2019.3.dist-info/zip-safe | 1 + .../python3.7/site-packages/pytz/__init__.py | 1551 +++ .../site-packages/pytz/exceptions.py | 48 + venv/lib/python3.7/site-packages/pytz/lazy.py | 172 + .../python3.7/site-packages/pytz/reference.py | 140 + .../python3.7/site-packages/pytz/tzinfo.py | 577 + .../site-packages/pytz/zoneinfo/Africa/Accra | Bin 0 -> 816 bytes .../site-packages/pytz/zoneinfo/Africa/Asmera | Bin 0 -> 251 bytes .../site-packages/pytz/zoneinfo/Africa/Bamako | Bin 0 -> 148 bytes .../pytz/zoneinfo/Africa/Blantyre | Bin 0 -> 149 bytes .../site-packages/pytz/zoneinfo/Africa/Ceuta | Bin 0 -> 2036 bytes .../site-packages/pytz/zoneinfo/Africa/Harare | Bin 0 -> 149 bytes .../site-packages/pytz/zoneinfo/Africa/Juba | Bin 0 -> 653 bytes .../pytz/zoneinfo/Africa/Kampala | Bin 0 -> 251 bytes .../pytz/zoneinfo/Africa/Khartoum | Bin 0 -> 679 bytes .../site-packages/pytz/zoneinfo/Africa/Lagos | Bin 0 -> 149 bytes .../site-packages/pytz/zoneinfo/Africa/Luanda | Bin 0 -> 149 bytes .../site-packages/pytz/zoneinfo/Africa/Malabo | Bin 0 -> 149 bytes .../site-packages/pytz/zoneinfo/Africa/Maputo | Bin 0 -> 149 bytes .../site-packages/pytz/zoneinfo/Africa/Niamey | Bin 0 -> 149 bytes .../pytz/zoneinfo/Africa/Ouagadougou | Bin 0 -> 148 bytes .../pytz/zoneinfo/Africa/Sao_Tome | Bin 0 -> 254 bytes .../pytz/zoneinfo/America/Anguilla | Bin 0 -> 148 bytes .../pytz/zoneinfo/America/Antigua | Bin 0 -> 148 bytes .../zoneinfo/America/Argentina/Buenos_Aires | Bin 0 -> 1076 bytes .../zoneinfo/America/Argentina/ComodRivadavia | Bin 0 -> 1076 bytes .../pytz/zoneinfo/America/Argentina/Cordoba | Bin 0 -> 1076 bytes .../pytz/zoneinfo/America/Argentina/Jujuy | Bin 0 -> 1048 bytes .../pytz/zoneinfo/America/Argentina/La_Rioja | Bin 0 -> 1090 bytes .../pytz/zoneinfo/America/Argentina/Mendoza | Bin 0 -> 1076 bytes .../site-packages/pytz/zoneinfo/America/Atka | Bin 0 -> 2356 bytes .../site-packages/pytz/zoneinfo/America/Bahia | Bin 0 -> 1024 bytes .../pytz/zoneinfo/America/Barbados | Bin 0 -> 314 bytes .../pytz/zoneinfo/America/Belize | Bin 0 -> 948 bytes .../pytz/zoneinfo/America/Buenos_Aires | Bin 0 -> 1076 bytes .../pytz/zoneinfo/America/Catamarca | Bin 0 -> 1076 bytes .../pytz/zoneinfo/America/Costa_Rica | Bin 0 -> 316 bytes .../pytz/zoneinfo/America/Creston | Bin 0 -> 208 bytes .../pytz/zoneinfo/America/Cuiaba | Bin 0 -> 1416 bytes .../pytz/zoneinfo/America/Ensenada | Bin 0 -> 2342 bytes .../pytz/zoneinfo/America/Fort_Wayne | Bin 0 -> 1666 bytes .../pytz/zoneinfo/America/Fortaleza | Bin 0 -> 716 bytes .../pytz/zoneinfo/America/Guatemala | Bin 0 -> 280 bytes .../pytz/zoneinfo/America/Hermosillo | Bin 0 -> 416 bytes .../pytz/zoneinfo/America/Indiana/Knox | Bin 0 -> 2428 bytes .../pytz/zoneinfo/America/Indiana/Tell_City | Bin 0 -> 1684 bytes .../pytz/zoneinfo/America/Indiana/Vincennes | Bin 0 -> 1694 bytes .../pytz/zoneinfo/America/Indianapolis | Bin 0 -> 1666 bytes .../pytz/zoneinfo/America/Inuvik | Bin 0 -> 1894 bytes .../pytz/zoneinfo/America/Iqaluit | Bin 0 -> 2032 bytes .../site-packages/pytz/zoneinfo/America/Jujuy | Bin 0 -> 1048 bytes .../pytz/zoneinfo/America/Kentucky/Louisville | Bin 0 -> 2772 bytes .../pytz/zoneinfo/America/La_Paz | Bin 0 -> 232 bytes .../pytz/zoneinfo/America/Louisville | Bin 0 -> 2772 bytes .../pytz/zoneinfo/America/Lower_Princes | Bin 0 -> 186 bytes .../pytz/zoneinfo/America/Maceio | Bin 0 -> 744 bytes .../pytz/zoneinfo/America/Mazatlan | Bin 0 -> 1526 bytes .../pytz/zoneinfo/America/Menominee | Bin 0 -> 2274 bytes .../pytz/zoneinfo/America/Merida | Bin 0 -> 1422 bytes .../pytz/zoneinfo/America/Mexico_City | Bin 0 -> 1584 bytes .../pytz/zoneinfo/America/Moncton | Bin 0 -> 3154 bytes .../pytz/zoneinfo/America/Montevideo | Bin 0 -> 1510 bytes .../pytz/zoneinfo/America/Nassau | Bin 0 -> 2258 bytes .../pytz/zoneinfo/America/New_York | Bin 0 -> 3536 bytes .../pytz/zoneinfo/America/Nipigon | Bin 0 -> 2122 bytes .../zoneinfo/America/North_Dakota/New_Salem | Bin 0 -> 2380 bytes .../pytz/zoneinfo/America/Port_of_Spain | Bin 0 -> 148 bytes .../pytz/zoneinfo/America/Porto_Velho | Bin 0 -> 576 bytes .../pytz/zoneinfo/America/Punta_Arenas | Bin 0 -> 1902 bytes .../pytz/zoneinfo/America/Rankin_Inlet | Bin 0 -> 1892 bytes .../pytz/zoneinfo/America/Recife | Bin 0 -> 716 bytes .../pytz/zoneinfo/America/Regina | Bin 0 -> 980 bytes .../pytz/zoneinfo/America/Resolute | Bin 0 -> 1892 bytes .../pytz/zoneinfo/America/Rio_Branco | Bin 0 -> 628 bytes .../pytz/zoneinfo/America/Santa_Isabel | Bin 0 -> 2342 bytes .../pytz/zoneinfo/America/Sao_Paulo | Bin 0 -> 1444 bytes .../pytz/zoneinfo/America/St_Johns | Bin 0 -> 3655 bytes .../pytz/zoneinfo/America/St_Vincent | Bin 0 -> 148 bytes .../pytz/zoneinfo/America/Toronto | Bin 0 -> 3494 bytes .../pytz/zoneinfo/America/Tortola | Bin 0 -> 148 bytes .../pytz/zoneinfo/America/Virgin | Bin 0 -> 148 bytes .../pytz/zoneinfo/Antarctica/DumontDUrville | Bin 0 -> 194 bytes .../pytz/zoneinfo/Antarctica/Rothera | Bin 0 -> 164 bytes .../pytz/zoneinfo/Antarctica/Syowa | Bin 0 -> 165 bytes .../pytz/zoneinfo/Antarctica/Troll | Bin 0 -> 1162 bytes .../pytz/zoneinfo/Arctic/Longyearbyen | Bin 0 -> 2228 bytes .../site-packages/pytz/zoneinfo/Asia/Anadyr | Bin 0 -> 1188 bytes .../pytz/zoneinfo/Asia/Ashkhabad | Bin 0 -> 619 bytes .../site-packages/pytz/zoneinfo/Asia/Baghdad | Bin 0 -> 983 bytes .../site-packages/pytz/zoneinfo/Asia/Bahrain | Bin 0 -> 199 bytes .../site-packages/pytz/zoneinfo/Asia/Baku | Bin 0 -> 1227 bytes .../site-packages/pytz/zoneinfo/Asia/Bangkok | Bin 0 -> 199 bytes .../site-packages/pytz/zoneinfo/Asia/Barnaul | Bin 0 -> 1221 bytes .../site-packages/pytz/zoneinfo/Asia/Dhaka | Bin 0 -> 337 bytes .../site-packages/pytz/zoneinfo/Asia/Dubai | Bin 0 -> 165 bytes .../pytz/zoneinfo/Asia/Hong_Kong | Bin 0 -> 1203 bytes .../site-packages/pytz/zoneinfo/Asia/Istanbul | Bin 0 -> 1947 bytes .../pytz/zoneinfo/Asia/Kamchatka | Bin 0 -> 1166 bytes .../site-packages/pytz/zoneinfo/Asia/Karachi | Bin 0 -> 379 bytes .../site-packages/pytz/zoneinfo/Asia/Khandyga | Bin 0 -> 1271 bytes .../pytz/zoneinfo/Asia/Kuala_Lumpur | Bin 0 -> 383 bytes .../site-packages/pytz/zoneinfo/Asia/Kuwait | Bin 0 -> 165 bytes .../pytz/zoneinfo/Asia/Novokuznetsk | Bin 0 -> 1165 bytes .../site-packages/pytz/zoneinfo/Asia/Omsk | Bin 0 -> 1207 bytes .../site-packages/pytz/zoneinfo/Asia/Oral | Bin 0 -> 1005 bytes .../pytz/zoneinfo/Asia/Pontianak | Bin 0 -> 353 bytes .../pytz/zoneinfo/Asia/Pyongyang | Bin 0 -> 237 bytes .../site-packages/pytz/zoneinfo/Asia/Shanghai | Bin 0 -> 533 bytes .../pytz/zoneinfo/Asia/Srednekolymsk | Bin 0 -> 1208 bytes .../site-packages/pytz/zoneinfo/Asia/Tashkent | Bin 0 -> 591 bytes .../site-packages/pytz/zoneinfo/Asia/Tbilisi | Bin 0 -> 1035 bytes .../site-packages/pytz/zoneinfo/Asia/Thimphu | Bin 0 -> 203 bytes .../site-packages/pytz/zoneinfo/Asia/Tomsk | Bin 0 -> 1221 bytes .../pytz/zoneinfo/Asia/Ujung_Pandang | Bin 0 -> 254 bytes .../pytz/zoneinfo/Asia/Vientiane | Bin 0 -> 199 bytes .../site-packages/pytz/zoneinfo/Asia/Yakutsk | Bin 0 -> 1207 bytes .../site-packages/pytz/zoneinfo/Asia/Yerevan | Bin 0 -> 1151 bytes .../pytz/zoneinfo/Atlantic/Faeroe | Bin 0 -> 1815 bytes .../pytz/zoneinfo/Atlantic/Faroe | Bin 0 -> 1815 bytes .../pytz/zoneinfo/Australia/Adelaide | Bin 0 -> 2222 bytes .../pytz/zoneinfo/Australia/Brisbane | Bin 0 -> 433 bytes .../pytz/zoneinfo/Australia/Broken_Hill | Bin 0 -> 2243 bytes .../site-packages/pytz/zoneinfo/Australia/LHI | Bin 0 -> 1860 bytes .../pytz/zoneinfo/Australia/Lord_Howe | Bin 0 -> 1860 bytes .../pytz/zoneinfo/Australia/Melbourne | Bin 0 -> 2204 bytes .../site-packages/pytz/zoneinfo/Australia/NSW | Bin 0 -> 2204 bytes .../pytz/zoneinfo/Australia/North | Bin 0 -> 304 bytes .../pytz/zoneinfo/Australia/Sydney | Bin 0 -> 2204 bytes .../pytz/zoneinfo/Canada/Mountain | Bin 0 -> 2332 bytes .../pytz/zoneinfo/Canada/Newfoundland | Bin 0 -> 3655 bytes .../pytz/zoneinfo/Canada/Pacific | Bin 0 -> 2892 bytes .../site-packages/pytz/zoneinfo/Canada/Yukon | Bin 0 -> 2084 bytes .../pytz/zoneinfo/Chile/Continental | Bin 0 -> 2529 bytes .../pytz/zoneinfo/Chile/EasterIsland | Bin 0 -> 2233 bytes .../site-packages/pytz/zoneinfo/Cuba | Bin 0 -> 2416 bytes .../site-packages/pytz/zoneinfo/Eire | Bin 0 -> 3492 bytes .../site-packages/pytz/zoneinfo/Etc/GMT+10 | Bin 0 -> 117 bytes .../site-packages/pytz/zoneinfo/Etc/GMT+11 | Bin 0 -> 117 bytes .../site-packages/pytz/zoneinfo/Etc/GMT+12 | Bin 0 -> 117 bytes .../site-packages/pytz/zoneinfo/Etc/Universal | Bin 0 -> 114 bytes .../pytz/zoneinfo/Europe/Astrakhan | Bin 0 -> 1165 bytes .../site-packages/pytz/zoneinfo/Europe/Berlin | Bin 0 -> 2298 bytes .../pytz/zoneinfo/Europe/Brussels | Bin 0 -> 2933 bytes .../pytz/zoneinfo/Europe/Bucharest | Bin 0 -> 2184 bytes .../pytz/zoneinfo/Europe/Busingen | Bin 0 -> 1909 bytes .../pytz/zoneinfo/Europe/Kaliningrad | Bin 0 -> 1493 bytes .../site-packages/pytz/zoneinfo/Europe/Lisbon | Bin 0 -> 3469 bytes .../site-packages/pytz/zoneinfo/Europe/London | Bin 0 -> 3648 bytes .../site-packages/pytz/zoneinfo/Europe/Moscow | Bin 0 -> 1535 bytes .../pytz/zoneinfo/Europe/Nicosia | Bin 0 -> 2002 bytes .../site-packages/pytz/zoneinfo/Europe/Riga | Bin 0 -> 2198 bytes .../site-packages/pytz/zoneinfo/Europe/Samara | Bin 0 -> 1215 bytes .../pytz/zoneinfo/Europe/San_Marino | Bin 0 -> 2641 bytes .../pytz/zoneinfo/Europe/Sarajevo | Bin 0 -> 1920 bytes .../site-packages/pytz/zoneinfo/Europe/Skopje | Bin 0 -> 1920 bytes .../pytz/zoneinfo/Europe/Uzhgorod | Bin 0 -> 2050 bytes .../pytz/zoneinfo/Europe/Vilnius | Bin 0 -> 2162 bytes .../site-packages/pytz/zoneinfo/Europe/Warsaw | Bin 0 -> 2654 bytes .../python3.7/site-packages/pytz/zoneinfo/GB | Bin 0 -> 3648 bytes .../site-packages/pytz/zoneinfo/GMT-0 | Bin 0 -> 114 bytes .../site-packages/pytz/zoneinfo/GMT0 | Bin 0 -> 114 bytes .../python3.7/site-packages/pytz/zoneinfo/HST | Bin 0 -> 115 bytes .../site-packages/pytz/zoneinfo/Indian/Cocos | Bin 0 -> 174 bytes .../site-packages/pytz/zoneinfo/Indian/Comoro | Bin 0 -> 251 bytes .../site-packages/pytz/zoneinfo/Iran | Bin 0 -> 2582 bytes .../site-packages/pytz/zoneinfo/Israel | Bin 0 -> 2288 bytes .../site-packages/pytz/zoneinfo/Kwajalein | Bin 0 -> 316 bytes .../python3.7/site-packages/pytz/zoneinfo/MET | Bin 0 -> 2094 bytes .../site-packages/pytz/zoneinfo/MST7MDT | Bin 0 -> 2310 bytes .../pytz/zoneinfo/Mexico/BajaSur | Bin 0 -> 1526 bytes .../pytz/zoneinfo/Mexico/General | Bin 0 -> 1584 bytes .../python3.7/site-packages/pytz/zoneinfo/NZ | Bin 0 -> 2437 bytes .../site-packages/pytz/zoneinfo/NZ-CHAT | Bin 0 -> 2068 bytes .../pytz/zoneinfo/Pacific/Easter | Bin 0 -> 2233 bytes .../site-packages/pytz/zoneinfo/Pacific/Efate | Bin 0 -> 466 bytes .../pytz/zoneinfo/Pacific/Funafuti | Bin 0 -> 166 bytes .../pytz/zoneinfo/Pacific/Guadalcanal | Bin 0 -> 166 bytes .../pytz/zoneinfo/Pacific/Kwajalein | Bin 0 -> 316 bytes .../site-packages/pytz/zoneinfo/Pacific/Nauru | Bin 0 -> 252 bytes .../site-packages/pytz/zoneinfo/Pacific/Palau | Bin 0 -> 180 bytes .../pytz/zoneinfo/Pacific/Pohnpei | Bin 0 -> 303 bytes .../pytz/zoneinfo/Pacific/Saipan | Bin 0 -> 494 bytes .../site-packages/pytz/zoneinfo/US/Arizona | Bin 0 -> 328 bytes .../site-packages/pytz/zoneinfo/US/Central | Bin 0 -> 3576 bytes .../site-packages/pytz/zoneinfo/US/Eastern | Bin 0 -> 3536 bytes .../site-packages/pytz/zoneinfo/Zulu | Bin 0 -> 114 bytes .../site-packages/pytz/zoneinfo/tzdata.zi | 4405 ++++++ .../site-packages/pytz/zoneinfo/zone.tab | 452 + .../requests-2.22.0.dist-info/INSTALLER | 1 + .../site-packages/requests/__version__.py | 14 + .../python3.7/site-packages/requests/certs.py | 18 + .../site-packages/requests/compat.py | 70 + .../python3.7/site-packages/requests/hooks.py | 34 + .../site-packages/requests/sessions.py | 770 ++ .../site-packages/rest_framework/__init__.py | 33 + .../rest_framework/authtoken/admin.py | 12 + .../authtoken/management/__init__.py | 0 .../authtoken/migrations/0001_initial.py | 23 + .../rest_framework/authtoken/serializers.py | 34 + .../site-packages/rest_framework/filters.py | 315 + .../site-packages/rest_framework/generics.py | 291 + .../locale/ach/LC_MESSAGES/django.mo | Bin 0 -> 472 bytes .../locale/be/LC_MESSAGES/django.mo | Bin 0 -> 614 bytes .../locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 8990 bytes .../locale/de/LC_MESSAGES/django.mo | Bin 0 -> 10885 bytes .../locale/el/LC_MESSAGES/django.mo | Bin 0 -> 13466 bytes .../locale/en_AU/LC_MESSAGES/django.mo | Bin 0 -> 491 bytes .../locale/en_US/LC_MESSAGES/django.mo | Bin 0 -> 337 bytes .../locale/fr_CA/LC_MESSAGES/django.mo | Bin 0 -> 486 bytes .../locale/gl_ES/LC_MESSAGES/django.mo | Bin 0 -> 628 bytes .../locale/ko_KR/LC_MESSAGES/django.mo | Bin 0 -> 11774 bytes .../locale/lv/LC_MESSAGES/django.mo | Bin 0 -> 10800 bytes .../locale/mk/LC_MESSAGES/django.mo | Bin 0 -> 12619 bytes .../locale/nn/LC_MESSAGES/django.mo | Bin 0 -> 483 bytes .../locale/pl/LC_MESSAGES/django.mo | Bin 0 -> 11080 bytes .../locale/sk/LC_MESSAGES/django.mo | Bin 0 -> 9370 bytes .../locale/tr/LC_MESSAGES/django.mo | Bin 0 -> 10509 bytes .../locale/uk/LC_MESSAGES/django.mo | Bin 0 -> 13437 bytes .../locale/zh_Hant/LC_MESSAGES/django.mo | Bin 0 -> 488 bytes .../rest_framework/negotiation.py | 95 + .../site-packages/rest_framework/relations.py | 554 + .../site-packages/rest_framework/reverse.py | 66 + .../rest_framework/schemas/coreapi.py | 658 + .../rest_framework/schemas/generators.py | 239 + .../rest_framework/schemas/openapi.py | 522 + .../rest_framework/css/bootstrap-tweaks.css | 233 + .../rest_framework/css/bootstrap.min.css | 6 + .../static/rest_framework/css/default.css | 82 + .../rest_framework/docs/img/favicon.ico | Bin 0 -> 5430 bytes .../static/rest_framework/docs/img/grid.png | Bin 0 -> 1458 bytes .../static/rest_framework/docs/js/api.js | 321 + .../fonts/fontawesome-webfont.svg | 414 + .../fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 45404 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23424 bytes .../fonts/glyphicons-halflings-regular.woff2 | Bin 0 -> 18028 bytes .../img/glyphicons-halflings.png | Bin 0 -> 12762 bytes .../static/rest_framework/js/ajax-form.js | 127 + .../static/rest_framework/js/coreapi-0.1.1.js | 2043 +++ .../static/rest_framework/js/csrf.js | 52 + .../site-packages/rest_framework/status.py | 88 + .../templates/rest_framework/admin.html | 267 + .../rest_framework/admin/dict_value.html | 11 + .../templates/rest_framework/admin/list.html | 26 + .../rest_framework/admin/list_value.html | 11 + .../admin/simple_list_value.html | 2 + .../templates/rest_framework/docs/error.html | 71 + .../templates/rest_framework/docs/index.html | 57 + .../rest_framework/docs/interact.html | 51 + .../docs/langs/javascript-intro.html | 5 + .../rest_framework/filters/ordering.html | 14 + .../rest_framework/filters/search.html | 12 + .../horizontal/checkbox_multiple.html | 39 + .../rest_framework/horizontal/fieldset.html | 16 + .../rest_framework/horizontal/list_field.html | 11 + .../rest_framework/horizontal/radio.html | 57 + .../rest_framework/inline/dict_field.html | 9 + .../rest_framework/inline/input.html | 9 + .../rest_framework/inline/select.html | 24 + .../templates/rest_framework/login.html | 3 + .../rest_framework/vertical/checkbox.html | 18 + .../rest_framework/vertical/dict_field.html | 7 + .../rest_framework/vertical/input.html | 17 + .../rest_framework/vertical/textarea.html | 17 + .../rest_framework/templatetags/__init__.py | 0 .../rest_framework/utils/breadcrumbs.py | 53 + .../rest_framework/utils/mediatypes.py | 83 + .../rest_framework/versioning.py | 184 + .../service_identity-18.1.0.dist-info/RECORD | 18 + .../top_level.txt | 1 + .../service_identity/__init__.py | 34 + .../site-packages/service_identity/_common.py | 449 + .../site-packages/setuptools-39.1.0-py3.7.egg | Bin 0 -> 563197 bytes .../six-1.13.0.dist-info/INSTALLER | 1 + .../six-1.13.0.dist-info/top_level.txt | 1 + .../sqlparse-0.3.0.dist-info/RECORD | 52 + .../sqlparse-0.3.0.dist-info/entry_points.txt | 3 + .../site-packages/sqlparse/__init__.py | 72 + .../site-packages/sqlparse/__main__.py | 23 + .../sqlparse/filters/__init__.py | 41 + .../site-packages/sqlparse/filters/tokens.py | 61 + .../python3.7/site-packages/sqlparse/utils.py | 123 + .../site-packages/twisted/__main__.py | 16 + .../twisted/_threads/test/test_convenience.py | 61 + .../twisted/_threads/test/test_memory.py | 65 + .../site-packages/twisted/_version.py | 11 + .../twisted/application/__init__.py | 6 + .../twisted/application/runner/_exit.py | 138 + .../application/runner/test/__init__.py | 7 + .../application/runner/test/test_pidfile.py | 476 + .../application/runner/test/test_runner.py | 460 + .../twisted/application/service.py | 424 + .../twisted/application/test/__init__.py | 6 + .../twisted/application/twist/_twist.py | 128 + .../site-packages/twisted/conch/avatar.py | 45 + .../twisted/conch/client/options.py | 103 + .../site-packages/twisted/conch/error.py | 103 + .../twisted/conch/insults/__init__.py | 4 + .../twisted/conch/manhole_tap.py | 165 + .../twisted/conch/scripts/conch.py | 585 + .../twisted/conch/ssh/__init__.py | 10 + .../twisted/conch/ssh/address.py | 47 + .../site-packages/twisted/conch/ssh/common.py | 93 + .../twisted/conch/ssh/service.py | 48 + .../site-packages/twisted/conch/ssh/sexpy.py | 45 + .../twisted/conch/ssh/transport.py | 2062 +++ .../site-packages/twisted/conch/tap.py | 86 + .../twisted/conch/test/keydata.py | 571 + .../twisted/conch/test/loopback.py | 28 + .../twisted/conch/test/test_address.py | 50 + .../twisted/conch/test/test_cftp.py | 1507 +++ .../twisted/conch/test/test_ckeygen.py | 567 + .../twisted/conch/test/test_conch.py | 813 ++ .../twisted/conch/test/test_connection.py | 761 ++ .../twisted/conch/test/test_default.py | 333 + .../twisted/conch/test/test_forwarding.py | 63 + .../twisted/conch/test/test_knownhosts.py | 1362 ++ .../twisted/conch/test/test_scripts.py | 77 + .../twisted/conch/test/test_ssh.py | 997 ++ .../site-packages/twisted/conch/ttymodes.py | 121 + .../site-packages/twisted/conch/ui/ansi.py | 240 + .../site-packages/twisted/copyright.py | 43 + .../site-packages/twisted/cred/_digest.py | 132 + .../site-packages/twisted/cred/checkers.py | 264 + .../site-packages/twisted/cred/credentials.py | 508 + .../site-packages/twisted/cred/portal.py | 124 + .../twisted/cred/test/test_cred.py | 441 + .../twisted/cred/test/test_digestauth.py | 698 + .../twisted/cred/test/test_strcred.py | 748 ++ .../twisted/enterprise/__init__.py | 8 + .../twisted/internet/_posixstdio.py | 168 + .../twisted/internet/_win32serialport.py | 133 + .../twisted/internet/_win32stdio.py | 133 + .../twisted/internet/abstract.py | 546 + .../twisted/internet/epollreactor.py | 249 + .../site-packages/twisted/internet/error.py | 517 + .../site-packages/twisted/internet/fdesc.py | 118 + .../twisted/internet/gireactor.py | 188 + .../twisted/internet/iocpreactor/__init__.py | 10 + .../twisted/internet/iocpreactor/abstract.py | 399 + .../twisted/internet/iocpreactor/setup.py | 23 + .../site-packages/twisted/internet/main.py | 37 + .../twisted/internet/pyuisupport.py | 37 + .../site-packages/twisted/internet/reactor.py | 39 + .../site-packages/twisted/internet/task.py | 948 ++ .../site-packages/twisted/internet/tcp.py | 1555 +++ .../internet/test/_awaittests.py.3only | 221 + .../twisted/internet/test/_posixifaces.py | 177 + .../twisted/internet/test/fake_CAs/thing1.pem | 26 + .../twisted/internet/test/process_cli.py | 27 + .../twisted/internet/test/reactormixins.py | 350 + .../twisted/internet/test/test_base.py | 450 + .../twisted/internet/test/test_baseprocess.py | 73 + .../twisted/internet/test/test_coroutines.py | 58 + .../twisted/internet/test/test_endpoints.py | 4307 ++++++ .../internet/test/test_epollreactor.py | 248 + .../internet/test/test_filedescriptor.py | 99 + .../twisted/internet/test/test_gireactor.py | 257 + .../twisted/internet/test/test_glibbase.py | 68 + .../twisted/internet/test/test_inlinecb.py | 384 + .../internet/test/test_kqueuereactor.py | 71 + .../twisted/internet/test/test_process.py | 908 ++ .../twisted/internet/test/test_sigchld.py | 125 + .../twisted/internet/test/test_stdio.py | 199 + .../twisted/internet/test/test_tcp.py | 3316 +++++ .../twisted/internet/test/test_testing.py | 515 + .../internet/test/test_win32serialport.py | 175 + .../twisted/internet/tksupport.py | 78 + .../twisted/internet/wxreactor.py | 188 + .../twisted/internet/wxsupport.py | 59 + .../site-packages/twisted/logger/_buffer.py | 59 + .../site-packages/twisted/logger/_file.py | 86 + .../site-packages/twisted/logger/_levels.py | 110 + .../site-packages/twisted/logger/_logger.py | 275 + .../twisted/logger/test/test_buffer.py | 62 + .../twisted/logger/test/test_capture.py | 39 + .../twisted/logger/test/test_file.py | 199 + .../twisted/logger/test/test_global.py | 372 + .../twisted/logger/test/test_levels.py | 38 + .../twisted/logger/test/test_stdlib.py | 304 + .../site-packages/twisted/mail/imap4.py | 6404 +++++++++ .../site-packages/twisted/mail/protocols.py | 404 + .../twisted/mail/scripts/mailmail.py | 402 + .../site-packages/twisted/mail/smtp.py | 2247 ++++ .../twisted/mail/test/test_imap.py | 7893 +++++++++++ .../site-packages/twisted/names/_rfc1982.py | 278 + .../site-packages/twisted/names/resolve.py | 99 + .../site-packages/twisted/names/server.py | 590 + .../twisted/names/test/test_common.py | 133 + .../twisted/names/test/test_dns.py | 4945 +++++++ .../twisted/names/test/test_rfc1982.py | 444 + .../twisted/names/test/test_rootresolve.py | 734 + .../twisted/names/test/test_util.py | 137 + .../twisted/pair/test/test_tuntap.py | 1419 ++ .../site-packages/twisted/persisted/styles.py | 423 + .../twisted/plugins/autobahn_endpoints.py | 178 + .../twisted/plugins/cred_file.py | 61 + .../twisted/plugins/cred_unix.py | 185 + .../twisted/plugins/fd_endpoint.py | 24 + .../twisted/plugins/twisted_core.py | 18 + .../twisted/plugins/twisted_names.py | 10 + .../twisted/plugins/twisted_words.py | 47 + .../site-packages/twisted/positioning/base.py | 947 ++ .../twisted/positioning/test/receiver.py | 46 + .../twisted/positioning/test/test_sentence.py | 158 + .../site-packages/twisted/protocols/amp.py | 2894 ++++ .../site-packages/twisted/protocols/finger.py | 42 + .../twisted/protocols/haproxy/_parser.py | 71 + .../twisted/protocols/haproxy/_v1parser.py | 143 + .../twisted/protocols/haproxy/_wrapper.py | 106 + .../protocols/haproxy/test/__init__.py | 7 + .../site-packages/twisted/protocols/htb.py | 295 + .../twisted/protocols/postfix.py | 158 + .../site-packages/twisted/protocols/sip.py | 1294 ++ .../site-packages/twisted/protocols/socks.py | 255 + .../site-packages/twisted/protocols/wire.py | 124 + .../site-packages/twisted/python/__init__.py | 29 + .../site-packages/twisted/python/_appdirs.py | 32 + .../site-packages/twisted/python/_setup.py | 462 + .../twisted/python/_textattributes.py | 320 + .../site-packages/twisted/python/_tzhelper.py | 119 + .../site-packages/twisted/python/constants.py | 18 + .../site-packages/twisted/python/context.py | 137 + .../site-packages/twisted/python/deprecate.py | 797 ++ .../site-packages/twisted/python/failure.py | 798 ++ .../site-packages/twisted/python/lockfile.py | 248 + .../site-packages/twisted/python/log.py | 767 ++ .../site-packages/twisted/python/monkey.py | 75 + .../site-packages/twisted/python/rebuild.py | 310 + .../site-packages/twisted/python/reflect.py | 634 + .../site-packages/twisted/python/release.py | 67 + .../twisted/python/test/__init__.py | 3 + .../twisted/python/test/modules_helpers.py | 55 + .../twisted/python/test/pullpipe.py | 39 + .../twisted/python/test/test_urlpath.py | 290 + .../twisted/python/test/test_zippath.py | 101 + .../site-packages/twisted/python/versions.py | 14 + .../site-packages/twisted/runner/__init__.py | 6 + .../site-packages/twisted/runner/inetd.py | 70 + .../site-packages/twisted/runner/inetdtap.py | 109 + .../twisted/runner/test/test_procmon.py | 709 + .../twisted/scripts/test/__init__.py | 6 + .../site-packages/twisted/scripts/trial.py | 627 + .../site-packages/twisted/scripts/twistd.py | 34 + .../site-packages/twisted/spread/pb.py | 1677 +++ .../site-packages/twisted/spread/publish.py | 142 + .../twisted/spread/test/__init__.py | 6 + .../twisted/spread/test/test_banana.py | 457 + .../twisted/spread/test/test_pbfailure.py | 486 + .../site-packages/twisted/spread/util.py | 215 + .../site-packages/twisted/tap/ftp.py | 69 + .../site-packages/twisted/tap/socks.py | 39 + .../twisted/test/crash_test_dummy.py | 33 + .../site-packages/twisted/test/iosim.py | 557 + .../twisted/test/myrebuilder2.py | 12 + .../twisted/test/plugin_extra2.py | 31 + .../twisted/test/process_cmdline.py | 11 + .../twisted/test/process_echoer.py | 11 + .../site-packages/twisted/test/process_fds.py | 43 + .../twisted/test/process_tester.py | 53 + .../twisted/test/process_twisted.py | 45 + .../twisted/test/reflect_helper_ZDE.py | 4 + .../twisted/test/stdio_test_loseconn.py | 50 + .../twisted/test/stdio_test_producer.py | 59 + .../site-packages/twisted/test/test_compat.py | 935 ++ .../twisted/test/test_cooperator.py | 711 + .../site-packages/twisted/test/test_dict.py | 43 + .../site-packages/twisted/test/test_ident.py | 233 + .../site-packages/twisted/test/test_log.py | 1086 ++ .../twisted/test/test_logfile.py | 562 + .../twisted/test/test_loopback.py | 474 + .../site-packages/twisted/test/test_main.py | 73 + .../twisted/test/test_protocols.py | 237 + .../twisted/test/test_reflect.py | 892 ++ .../twisted/test/test_shortcut.py | 67 + .../site-packages/twisted/test/test_sob.py | 178 + .../site-packages/twisted/test/test_stdio.py | 380 + .../site-packages/twisted/test/test_task.py | 1214 ++ .../twisted/test/test_threadable.py | 132 + .../twisted/test/test_threadpool.py | 734 + .../twisted/test/test_threads.py | 420 + .../site-packages/twisted/test/test_tpfile.py | 55 + .../site-packages/twisted/test/test_usage.py | 715 + .../site-packages/twisted/trial/__main__.py | 10 + .../site-packages/twisted/trial/_asynctest.py | 405 + .../twisted/trial/_dist/__init__.py | 47 + .../twisted/trial/_dist/test/test_worker.py | 470 + .../trial/_dist/test/test_workerreporter.py | 167 + .../trial/_dist/test/test_workertrial.py | 184 + .../site-packages/twisted/trial/_synctest.py | 1416 ++ .../site-packages/twisted/trial/reporter.py | 1322 ++ .../twisted/trial/test/mockcustomsuite2.py | 21 + .../twisted/trial/test/packages.py | 196 + .../twisted/trial/test/skipping.py | 270 + .../twisted/trial/test/test_assertions.py | 1395 ++ .../twisted/trial/test/test_plugins.py | 46 + .../twisted/trial/test/test_pyunitcompat.py | 254 + .../twisted/trial/test/test_reporter.py | 1721 +++ .../twisted/trial/test/test_runner.py | 1081 ++ .../twisted/trial/test/test_script.py | 868 ++ .../twisted/trial/test/test_testcase.py | 70 + .../twisted/trial/test/test_util.py | 754 ++ .../site-packages/twisted/trial/util.py | 411 + .../twisted/web/_auth/__init__.py | 7 + .../site-packages/twisted/web/_flatten.py | 421 + .../site-packages/twisted/web/_newclient.py | 1778 +++ .../site-packages/twisted/web/html.py | 57 + .../site-packages/twisted/web/http.py | 3131 +++++ .../site-packages/twisted/web/iweb.py | 828 ++ .../site-packages/twisted/web/rewrite.py | 52 + .../site-packages/twisted/web/script.py | 182 + .../site-packages/twisted/web/static.py | 1103 ++ .../site-packages/twisted/web/tap.py | 316 + .../site-packages/twisted/web/template.py | 575 + .../site-packages/twisted/web/test/_util.py | 103 + .../twisted/web/test/test_distrib.py | 527 + .../twisted/web/test/test_html.py | 43 + .../twisted/web/test/test_http_headers.py | 660 + .../twisted/web/test/test_newclient.py | 3035 +++++ .../twisted/web/test/test_resource.py | 289 + .../twisted/web/test/test_vhost.py | 200 + .../twisted/web/test/test_web.py | 1892 +++ .../twisted/web/test/test_web__responses.py | 28 + .../twisted/web/test/test_wsgi.py | 2214 ++++ .../twisted/web/test/test_xmlrpc.py | 915 ++ .../site-packages/twisted/web/twcgi.py | 321 + .../site-packages/twisted/web/xmlrpc.py | 591 + .../site-packages/twisted/words/__init__.py | 8 + .../twisted/words/im/instancemessenger.glade | 3164 +++++ .../twisted/words/im/ircsupport.py | 293 + .../twisted/words/im/pbsupport.py | 262 + .../site-packages/twisted/words/iwords.py | 267 + .../twisted/words/protocols/jabber/sasl.py | 233 + .../words/protocols/jabber/sasl_mechanisms.py | 293 + .../words/protocols/jabber/xmlstream.py | 1170 ++ .../words/protocols/jabber/xmpp_stringprep.py | 244 + .../site-packages/twisted/words/service.py | 1269 ++ .../twisted/words/test/__init__.py | 1 + .../twisted/words/test/test_irc.py | 2978 +++++ .../words/test/test_jabbercomponent.py | 440 + .../words/test/test_jabberjstrports.py | 36 + .../words/test/test_jabberxmppstringprep.py | 115 + .../twisted/words/test/test_tap.py | 78 + .../twisted/words/test/test_xishutil.py | 348 + .../twisted/words/test/test_xmpproutertap.py | 84 + .../twisted/words/xish/__init__.py | 10 + .../site-packages/twisted/words/xish/xpath.py | 337 + .../twisted/words/xish/xpathparser.g | 524 + .../twisted/words/xish/xpathparser.py | 650 + .../txaio-18.8.1.dist-info/INSTALLER | 1 + .../txaio-18.8.1.dist-info/METADATA | 137 + .../txaio-18.8.1.dist-info/top_level.txt | 1 + .../txaio-18.8.1.dist-info/zip-safe | 1 + .../python3.7/site-packages/txaio/_iotype.py | 77 + .../python3.7/site-packages/txaio/_version.py | 1 + .../site-packages/txaio/interfaces.py | 183 + .../urllib3-1.25.7.dist-info/LICENSE.txt | 21 + .../urllib3-1.25.7.dist-info/WHEEL | 6 + .../urllib3-1.25.7.dist-info/top_level.txt | 1 + .../site-packages/urllib3/connection.py | 448 + .../site-packages/urllib3/contrib/__init__.py | 0 .../contrib/_securetransport/bindings.py | 493 + .../site-packages/urllib3/contrib/ntlmpool.py | 121 + .../urllib3/contrib/securetransport.py | 859 ++ .../site-packages/urllib3/filepost.py | 98 + .../urllib3/packages/backports/makefile.py | 52 + .../site-packages/urllib3/packages/six.py | 1021 ++ .../site-packages/urllib3/request.py | 171 + .../site-packages/urllib3/response.py | 809 ++ .../site-packages/urllib3/util/__init__.py | 46 + .../site-packages/urllib3/util/connection.py | 138 + .../site-packages/urllib3/util/queue.py | 21 + .../site-packages/urllib3/util/request.py | 135 + .../site-packages/urllib3/util/retry.py | 450 + .../site-packages/urllib3/util/ssl_.py | 407 + .../site-packages/werkzeug/__init__.py | 221 + .../werkzeug/contrib/sessions.py | 389 + .../site-packages/werkzeug/debug/console.py | 216 + .../werkzeug/debug/shared/debugger.js | 210 + .../werkzeug/debug/shared/less.png | Bin 0 -> 191 bytes .../werkzeug/debug/shared/more.png | Bin 0 -> 200 bytes .../werkzeug/debug/shared/source.png | Bin 0 -> 818 bytes .../site-packages/werkzeug/debug/tbtools.py | 629 + .../site-packages/werkzeug/exceptions.py | 779 ++ .../site-packages/werkzeug/filesystem.py | 64 + .../python3.7/site-packages/werkzeug/http.py | 1259 ++ .../site-packages/werkzeug/middleware/lint.py | 408 + .../site-packages/werkzeug/posixemulation.py | 117 + .../site-packages/werkzeug/security.py | 249 + .../site-packages/werkzeug/useragents.py | 210 + .../python3.7/site-packages/werkzeug/utils.py | 774 ++ .../site-packages/werkzeug/wrappers/auth.py | 33 + .../werkzeug/wrappers/base_request.py | 695 + .../werkzeug/wrappers/base_response.py | 702 + .../site-packages/werkzeug/wrappers/json.py | 145 + .../python3.7/site-packages/werkzeug/wsgi.py | 1013 ++ .../zope.interface-4.7.1-py3.7-nspkg.pth | 1 + .../zope.interface-4.7.1.dist-info/INSTALLER | 1 + .../LICENSE.txt | 44 + .../zope.interface-4.7.1.dist-info/RECORD | 98 + .../zope.interface-4.7.1.dist-info/WHEEL | 5 + .../top_level.txt | 1 + .../site-packages/zope/interface/_flatten.py | 35 + .../_zope_interface_coptimizations.c | 1726 +++ .../site-packages/zope/interface/adapter.py | 712 + .../zope/interface/common/__init__.py | 2 + .../zope/interface/common/idatetime.py | 606 + .../zope/interface/common/sequence.py | 165 + .../zope/interface/common/tests/__init__.py | 2 + .../interface/common/tests/basemapping.py | 107 + .../site-packages/zope/interface/ro.py | 64 + .../zope/interface/tests/idummy.py | 23 + .../zope/interface/tests/test_adapter.py | 1419 ++ .../zope/interface/tests/test_element.py | 31 + .../zope/interface/tests/test_registry.py | 2788 ++++ .../zope/interface/tests/test_sorting.py | 47 + 2122 files changed, 423791 insertions(+) create mode 100644 venv/bin/activate create mode 100644 venv/bin/activate.csh create mode 100755 venv/bin/automat-visualize create mode 100755 venv/bin/django-admin create mode 100755 venv/bin/mailmail create mode 100755 venv/bin/pip create mode 100755 venv/bin/pip3.7 create mode 100755 venv/bin/trial create mode 100755 venv/bin/twist create mode 100755 venv/bin/wamp create mode 100644 venv/lib/python3.7/site-packages/Automat-0.8.0.dist-info/INSTALLER create mode 100644 venv/lib/python3.7/site-packages/Automat-0.8.0.dist-info/LICENSE create mode 100644 venv/lib/python3.7/site-packages/Automat-0.8.0.dist-info/METADATA create mode 100644 venv/lib/python3.7/site-packages/Automat-0.8.0.dist-info/entry_points.txt create mode 100644 venv/lib/python3.7/site-packages/Automat-0.8.0.dist-info/top_level.txt create mode 100644 venv/lib/python3.7/site-packages/Django-2.2.6.dist-info/LICENSE create mode 100644 venv/lib/python3.7/site-packages/Django-2.2.6.dist-info/RECORD create mode 100644 venv/lib/python3.7/site-packages/Django-2.2.6.dist-info/entry_points.txt create mode 100644 venv/lib/python3.7/site-packages/OpenSSL/__init__.py create mode 100644 venv/lib/python3.7/site-packages/OpenSSL/debug.py create mode 100644 venv/lib/python3.7/site-packages/OpenSSL/version.py create mode 100644 venv/lib/python3.7/site-packages/PyHamcrest-1.9.0.dist-info/DESCRIPTION.rst create mode 100644 venv/lib/python3.7/site-packages/PyHamcrest-1.9.0.dist-info/METADATA create mode 100644 venv/lib/python3.7/site-packages/PyHamcrest-1.9.0.dist-info/RECORD create mode 100644 venv/lib/python3.7/site-packages/PyHamcrest-1.9.0.dist-info/WHEEL create mode 100644 venv/lib/python3.7/site-packages/PyHamcrest-1.9.0.dist-info/metadata.json create mode 100644 venv/lib/python3.7/site-packages/PyJWT-1.7.1.dist-info/INSTALLER create mode 100644 venv/lib/python3.7/site-packages/PyJWT-1.7.1.dist-info/RECORD create mode 100644 venv/lib/python3.7/site-packages/PyJWT-1.7.1.dist-info/WHEEL create mode 100644 venv/lib/python3.7/site-packages/Twisted-19.10.0-py3.7.egg-info/PKG-INFO create mode 100644 venv/lib/python3.7/site-packages/Twisted-19.10.0-py3.7.egg-info/SOURCES.txt create mode 100644 venv/lib/python3.7/site-packages/Twisted-19.10.0-py3.7.egg-info/dependency_links.txt create mode 100644 venv/lib/python3.7/site-packages/Twisted-19.10.0-py3.7.egg-info/not-zip-safe create mode 100644 venv/lib/python3.7/site-packages/Twisted-19.10.0-py3.7.egg-info/top_level.txt create mode 100644 venv/lib/python3.7/site-packages/Werkzeug-0.16.0.dist-info/RECORD create mode 100644 venv/lib/python3.7/site-packages/Werkzeug-0.16.0.dist-info/WHEEL create mode 100644 venv/lib/python3.7/site-packages/asgiref-3.2.3.dist-info/LICENSE create mode 100644 venv/lib/python3.7/site-packages/asgiref-3.2.3.dist-info/METADATA create mode 100644 venv/lib/python3.7/site-packages/asgiref/current_thread_executor.py create mode 100644 venv/lib/python3.7/site-packages/asgiref/server.py create mode 100644 venv/lib/python3.7/site-packages/asgiref/sync.py create mode 100644 venv/lib/python3.7/site-packages/asgiref/timeout.py create mode 100644 venv/lib/python3.7/site-packages/attr/__init__.pyi create mode 100644 venv/lib/python3.7/site-packages/attr/_compat.py create mode 100644 venv/lib/python3.7/site-packages/attr/_config.py create mode 100644 venv/lib/python3.7/site-packages/attr/_make.py create mode 100644 venv/lib/python3.7/site-packages/attr/converters.py create mode 100644 venv/lib/python3.7/site-packages/attr/converters.pyi create mode 100644 venv/lib/python3.7/site-packages/attr/exceptions.pyi create mode 100644 venv/lib/python3.7/site-packages/attr/filters.py create mode 100644 venv/lib/python3.7/site-packages/attrs-19.3.0.dist-info/INSTALLER create mode 100644 venv/lib/python3.7/site-packages/attrs-19.3.0.dist-info/LICENSE create mode 100644 venv/lib/python3.7/site-packages/attrs-19.3.0.dist-info/METADATA create mode 100644 venv/lib/python3.7/site-packages/autobahn-19.11.1.dist-info/LICENSE create mode 100644 venv/lib/python3.7/site-packages/autobahn-19.11.1.dist-info/RECORD create mode 100644 venv/lib/python3.7/site-packages/autobahn/_version.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/asyncio/rawsocket.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/asyncio/websocket.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/exception.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/nvx/_utf8validator.c create mode 100644 venv/lib/python3.7/site-packages/autobahn/nvx/test/test_utf8validator.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/rawsocket/test/test_rawsocket_url.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/test/test_rng.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/test/test_util.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/twisted/__init__.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/util.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/wamp/__init__.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/wamp/exception.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/wamp/gen/schema/session.bfbs create mode 100644 venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/Map.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/Void.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/AuthFactor.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/AuthMode.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/AuthTicketChallenge.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/AuthTicketRequest.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/CalleeFeatures.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/CallerFeatures.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/CancelMode.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/Challenge.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/ChannelBinding.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/DealerFeatures.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/Error.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/Event.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/EventReceived.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/Hello.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/Interrupt.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/Kdf.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/Match.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/PublisherFeatures.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/Serializer.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/Yield.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/__init__.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/wamp/message.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/wamp/protocol.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/wamp/test/test_cryptobox.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/wamp/test/test_cryptosign.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/wamp/test/test_uri_pattern.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/wamp/types.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/wamp/websocket.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/websocket/compress_bzip2.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/websocket/compress_snappy.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/xbr/_interfaces.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/xbr/_mnemonic.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/xbr/_util.py create mode 100644 venv/lib/python3.7/site-packages/autobahn/xbr/contracts/ERC20.json create mode 100644 venv/lib/python3.7/site-packages/autobahn/xbr/contracts/XBRMaintained.json create mode 100644 venv/lib/python3.7/site-packages/automat/_test/__init__.py create mode 100644 venv/lib/python3.7/site-packages/automat/_test/test_core.py create mode 100644 venv/lib/python3.7/site-packages/automat/_test/test_discover.py create mode 100644 venv/lib/python3.7/site-packages/automat/_test/test_trace.py create mode 100644 venv/lib/python3.7/site-packages/automat/_test/test_visualize.py create mode 100644 venv/lib/python3.7/site-packages/certifi-2019.11.28.dist-info/METADATA create mode 100644 venv/lib/python3.7/site-packages/certifi-2019.11.28.dist-info/metadata.json create mode 100644 venv/lib/python3.7/site-packages/certifi/cacert.pem create mode 100644 venv/lib/python3.7/site-packages/cffi-1.13.2.dist-info/METADATA create mode 100644 venv/lib/python3.7/site-packages/cffi-1.13.2.dist-info/RECORD create mode 100644 venv/lib/python3.7/site-packages/cffi-1.13.2.dist-info/top_level.txt create mode 100644 venv/lib/python3.7/site-packages/cffi/_cffi_errors.h create mode 100644 venv/lib/python3.7/site-packages/cffi/commontypes.py create mode 100644 venv/lib/python3.7/site-packages/cffi/cparser.py create mode 100644 venv/lib/python3.7/site-packages/cffi/error.py create mode 100644 venv/lib/python3.7/site-packages/cffi/model.py create mode 100644 venv/lib/python3.7/site-packages/cffi/parse_c_type.h create mode 100644 venv/lib/python3.7/site-packages/cffi/pkgconfig.py create mode 100644 venv/lib/python3.7/site-packages/cffi/vengine_cpy.py create mode 100644 venv/lib/python3.7/site-packages/cffi/verifier.py create mode 100644 venv/lib/python3.7/site-packages/channels-2.3.1.dist-info/RECORD create mode 100644 venv/lib/python3.7/site-packages/channels/auth.py create mode 100644 venv/lib/python3.7/site-packages/channels/consumer.py create mode 100644 venv/lib/python3.7/site-packages/channels/hacks.py create mode 100644 venv/lib/python3.7/site-packages/channels/http.py create mode 100644 venv/lib/python3.7/site-packages/channels/middleware.py create mode 100644 venv/lib/python3.7/site-packages/channels/sessions.py create mode 100644 venv/lib/python3.7/site-packages/channels/testing/http.py create mode 100644 venv/lib/python3.7/site-packages/channels/testing/live.py create mode 100644 venv/lib/python3.7/site-packages/channels/testing/websocket.py create mode 100644 venv/lib/python3.7/site-packages/channels/worker.py create mode 100644 venv/lib/python3.7/site-packages/chardet-3.0.4.dist-info/INSTALLER create mode 100644 venv/lib/python3.7/site-packages/chardet-3.0.4.dist-info/entry_points.txt create mode 100644 venv/lib/python3.7/site-packages/chardet-3.0.4.dist-info/metadata.json create mode 100644 venv/lib/python3.7/site-packages/chardet/big5freq.py create mode 100644 venv/lib/python3.7/site-packages/chardet/cli/__init__.py create mode 100644 venv/lib/python3.7/site-packages/chardet/codingstatemachine.py create mode 100644 venv/lib/python3.7/site-packages/chardet/escprober.py create mode 100644 venv/lib/python3.7/site-packages/chardet/escsm.py create mode 100644 venv/lib/python3.7/site-packages/chardet/euckrfreq.py create mode 100644 venv/lib/python3.7/site-packages/chardet/euctwprober.py create mode 100644 venv/lib/python3.7/site-packages/chardet/jisfreq.py create mode 100644 venv/lib/python3.7/site-packages/chardet/jpcntx.py create mode 100644 venv/lib/python3.7/site-packages/constantly-15.1.0.dist-info/INSTALLER create mode 100644 venv/lib/python3.7/site-packages/constantly-15.1.0.dist-info/METADATA create mode 100644 venv/lib/python3.7/site-packages/constantly-15.1.0.dist-info/RECORD create mode 100644 venv/lib/python3.7/site-packages/constantly/_version.py create mode 100644 venv/lib/python3.7/site-packages/cryptography-2.8.dist-info/AUTHORS.rst create mode 100644 venv/lib/python3.7/site-packages/cryptography-2.8.dist-info/INSTALLER create mode 100644 venv/lib/python3.7/site-packages/cryptography-2.8.dist-info/WHEEL create mode 100644 venv/lib/python3.7/site-packages/cryptography/hazmat/_der.py create mode 100644 venv/lib/python3.7/site-packages/cryptography/hazmat/backends/openssl/aead.py create mode 100644 venv/lib/python3.7/site-packages/cryptography/hazmat/backends/openssl/decode_asn1.py create mode 100644 venv/lib/python3.7/site-packages/cryptography/hazmat/backends/openssl/dsa.py create mode 100644 venv/lib/python3.7/site-packages/cryptography/hazmat/backends/openssl/x25519.py create mode 100755 venv/lib/python3.7/site-packages/cryptography/hazmat/bindings/_constant_time.abi3.so create mode 100644 venv/lib/python3.7/site-packages/cryptography/hazmat/bindings/openssl/binding.py create mode 100644 venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/__init__.py create mode 100644 venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/asymmetric/__init__.py create mode 100644 venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/asymmetric/dh.py create mode 100644 venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/asymmetric/ed448.py create mode 100644 venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/asymmetric/utils.py create mode 100644 venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/asymmetric/x25519.py create mode 100644 venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/ciphers/__init__.py create mode 100644 venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/kdf/hkdf.py create mode 100644 venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/kdf/scrypt.py create mode 100644 venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/kdf/x963kdf.py create mode 100644 venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/serialization/__init__.py create mode 100644 venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/twofactor/totp.py create mode 100644 venv/lib/python3.7/site-packages/cryptography/utils.py create mode 100644 venv/lib/python3.7/site-packages/cryptography/x509/__init__.py create mode 100644 venv/lib/python3.7/site-packages/cryptography/x509/extensions.py create mode 100644 venv/lib/python3.7/site-packages/cryptography/x509/oid.py create mode 100644 venv/lib/python3.7/site-packages/daphne-2.4.0.dist-info/LICENSE create mode 100644 venv/lib/python3.7/site-packages/daphne-2.4.0.dist-info/WHEEL create mode 100644 venv/lib/python3.7/site-packages/daphne-2.4.0.dist-info/entry_points.txt create mode 100644 venv/lib/python3.7/site-packages/daphne-2.4.0.dist-info/top_level.txt create mode 100644 venv/lib/python3.7/site-packages/daphne/utils.py create mode 100644 venv/lib/python3.7/site-packages/django/__init__.py create mode 100755 venv/lib/python3.7/site-packages/django/bin/django-admin.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/app_template/apps.py-tpl create mode 100644 venv/lib/python3.7/site-packages/django/conf/global_settings.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/af/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/ar/formats.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/az/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/az/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/az/formats.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/be/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/bg/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/bn/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/br/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/bs/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/bs/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/bs/formats.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/ca/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/cy/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/da/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/da/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/de/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/de/formats.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/de_CH/formats.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/en/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/en/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/en/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/en/formats.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/en_AU/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/en_AU/formats.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/es/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/es/formats.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/es_AR/formats.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/es_CO/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/es_CO/formats.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/es_MX/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/es_NI/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/es_PR/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/et/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/eu/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/eu/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/fi/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/fi/formats.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/fr/formats.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/fy/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/gd/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/he/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/hi/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/hi/formats.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/hr/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/hsb/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/hu/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/ia/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/id/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/id/formats.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/io/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/is/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/is/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/ja/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/ja/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/ja/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/ka/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/kab/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/kk/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/kk/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/kn/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/kn/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/lt/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/mk/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/mk/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/mn/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/mn/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/mn/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/mn/formats.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/nb/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/nb/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/nb/formats.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/nn/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/os/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/pl/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/pl/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/pt/formats.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/pt_BR/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/pt_BR/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/ro/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/ro/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/ru/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/ru/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/sk/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/sq/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/sq/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/sq/formats.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/sr/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/sr/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/sv/formats.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/sw/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/ta/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/te/formats.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/th/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/th/formats.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/tr/formats.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/tt/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/udm/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/uk/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/vi/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/conf/locale/vi/formats.py create mode 100755 venv/lib/python3.7/site-packages/django/conf/project_template/manage.py-tpl create mode 100644 venv/lib/python3.7/site-packages/django/conf/urls/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/actions.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/checks.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/filters.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/helpers.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/af/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/ar/LC_MESSAGES/djangojs.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/ast/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/ast/LC_MESSAGES/djangojs.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/az/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/az/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/az/LC_MESSAGES/djangojs.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/az/LC_MESSAGES/djangojs.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/be/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/bg/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/bg/LC_MESSAGES/djangojs.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/bg/LC_MESSAGES/djangojs.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/bn/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/bn/LC_MESSAGES/djangojs.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/br/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/br/LC_MESSAGES/djangojs.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/bs/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/bs/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/ca/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/cy/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/da/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/dsb/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/dsb/LC_MESSAGES/djangojs.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/en/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/en/LC_MESSAGES/djangojs.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/en_GB/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/en_GB/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/en_GB/LC_MESSAGES/djangojs.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/es_AR/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/es_CO/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/es_CO/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/es_MX/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/es_VE/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/et/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/eu/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/eu/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/eu/LC_MESSAGES/djangojs.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/eu/LC_MESSAGES/djangojs.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/fa/LC_MESSAGES/djangojs.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/fi/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/fi/LC_MESSAGES/djangojs.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/gl/LC_MESSAGES/djangojs.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/he/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/he/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/he/LC_MESSAGES/djangojs.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/hi/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/hi/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/hi/LC_MESSAGES/djangojs.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/hi/LC_MESSAGES/djangojs.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/hr/LC_MESSAGES/djangojs.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/hu/LC_MESSAGES/djangojs.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/ia/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/ia/LC_MESSAGES/djangojs.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/id/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/id/LC_MESSAGES/djangojs.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/id/LC_MESSAGES/djangojs.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/io/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/is/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/is/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/is/LC_MESSAGES/djangojs.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/is/LC_MESSAGES/djangojs.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/it/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/it/LC_MESSAGES/djangojs.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/ja/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/ka/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/ka/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/ka/LC_MESSAGES/djangojs.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/kab/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/kab/LC_MESSAGES/djangojs.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/kk/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/km/LC_MESSAGES/djangojs.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/lt/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/lv/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/lv/LC_MESSAGES/djangojs.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/lv/LC_MESSAGES/djangojs.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/mk/LC_MESSAGES/djangojs.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/mn/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/mn/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/mn/LC_MESSAGES/djangojs.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/mn/LC_MESSAGES/djangojs.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/mr/LC_MESSAGES/djangojs.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/my/LC_MESSAGES/djangojs.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/nb/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/nb/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/nb/LC_MESSAGES/djangojs.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/nb/LC_MESSAGES/djangojs.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/ne/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/ne/LC_MESSAGES/djangojs.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/nl/LC_MESSAGES/djangojs.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/nl/LC_MESSAGES/djangojs.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/os/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/os/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/os/LC_MESSAGES/djangojs.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/os/LC_MESSAGES/djangojs.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/pa/LC_MESSAGES/djangojs.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/pl/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/pt/LC_MESSAGES/djangojs.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/pt_BR/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/pt_BR/LC_MESSAGES/djangojs.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/ro/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/ro/LC_MESSAGES/djangojs.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/ro/LC_MESSAGES/djangojs.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/ru/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/sk/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/sq/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/sq/LC_MESSAGES/djangojs.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/sq/LC_MESSAGES/djangojs.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/sr/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/sr/LC_MESSAGES/djangojs.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/sr_Latn/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/sr_Latn/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/sv/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/sw/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/sw/LC_MESSAGES/djangojs.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/ta/LC_MESSAGES/djangojs.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/ta/LC_MESSAGES/djangojs.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/te/LC_MESSAGES/djangojs.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/th/LC_MESSAGES/djangojs.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/tr/LC_MESSAGES/djangojs.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/tt/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/tt/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/tt/LC_MESSAGES/djangojs.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/uk/LC_MESSAGES/djangojs.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/ur/LC_MESSAGES/djangojs.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/vi/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/vi/LC_MESSAGES/djangojs.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/djangojs.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/djangojs.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/zh_Hant/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/locale/zh_Hant/LC_MESSAGES/djangojs.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/css/autocomplete.css create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/css/dashboard.css create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/css/responsive_rtl.css create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/css/vendor/select2/select2.css create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/fonts/LICENSE.txt create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/fonts/README.txt create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/fonts/Roboto-Bold-webfont.woff create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/img/gis/move_vertex_off.svg create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/img/gis/move_vertex_on.svg create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/img/icon-addlink.svg create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/img/icon-calendar.svg create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/img/icon-changelink.svg create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/img/icon-deletelink.svg create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/img/icon-unknown-alt.svg create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/img/icon-viewlink.svg create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/img/inline-delete.svg create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/img/search.svg create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/img/tooltag-add.svg create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/SelectBox.js create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/actions.min.js create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/calendar.js create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/cancel.js create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/change_form.js create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/inlines.min.js create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/popup_response.js create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/timeparse.js create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/az.js create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/da.js create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/es.js create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/fr.js create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/it.js create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/km.js create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ko.js create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/lt.js create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/mk.js create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ms.js create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/nb.js create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ro.js create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sk.js create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sv.js create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/tr.js create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/zh-CN.js create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/actions.html create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/auth/user/add_form.html create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/base.html create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/change_form.html create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/change_list.html create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/change_list_results.html create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/date_hierarchy.html create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/edit_inline/stacked.html create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/filter.html create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/includes/fieldset.html create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/index.html create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/login.html create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/search_form.html create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/submit_line.html create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/widgets/clearable_file_input.html create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/widgets/radio.html create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/widgets/split_datetime.html create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/templatetags/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/templatetags/admin_list.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/templatetags/admin_modify.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/templatetags/admin_urls.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admin/templatetags/log.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/ar/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/ast/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/bg/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/bg/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/bn/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/dsb/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/el/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/en_AU/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/en_GB/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/es/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/es_AR/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/es_CO/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/es_MX/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/es_MX/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/et/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/fi/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/fi/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/fr/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/fr/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/ga/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/gd/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/gl/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/hr/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/hr/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/hsb/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/hu/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/hu/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/ia/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/id/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/id/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/kab/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/kab/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/km/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/km/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/kn/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/lb/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/mk/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/ml/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/my/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/my/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/ne/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/ne/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/nl/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/nn/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/pa/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/pa/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/pt/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/pt_BR/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/ru/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/sl/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/sr_Latn/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/sw/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/ta/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/te/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/tr/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/tt/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/ur/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/ur/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/templates/admin_doc/index.html create mode 100644 venv/lib/python3.7/site-packages/django/contrib/admindocs/urls.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/checks.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/common-passwords.txt.gz create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/decorators.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/handlers/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/ar/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/ast/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/bg/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/bg/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/bn/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/bs/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/cs/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/cs/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/de/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/dsb/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/el/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/en/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/en_AU/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/eo/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/eo/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/es/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/es_AR/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/es_VE/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/fa/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/fa/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/fr/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/fy/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/ga/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/ga/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/gd/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/gl/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/hsb/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/hsb/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/hu/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/hu/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/hy/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/it/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/it/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/ka/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/kab/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/kab/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/km/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/lb/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/lv/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/mk/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/mk/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/ml/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/mr/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/my/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/my/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/nb/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/nn/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/pt/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/sl/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/sr/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/sr_Latn/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/sv/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/sv/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/ta/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/te/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/te/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/th/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/uk/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/ur/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/ur/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/zh_Hans/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/locale/zh_Hant/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/migrations/0002_alter_permission_name_max_length.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/migrations/0004_alter_user_username_opts.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/migrations/0005_alter_user_last_login_null.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/migrations/0010_alter_group_name_max_length.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/migrations/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/password_validation.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/signals.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/urls.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/auth/validators.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/ar/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/ast/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/bg/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/bg/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/bn/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/bs/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/cs/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/cs/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/de/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/el/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/en/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/eo/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/eo/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/es/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/es_MX/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/fa/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/fa/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/fr/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/fy/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/ga/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/gd/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/gl/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/hu/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/hu/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/hy/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/it/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/it/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/ka/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/km/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/lb/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/lv/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/mk/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/mk/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/ml/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/mr/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/my/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/my/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/nb/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/nn/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/pt/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/sk/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/sl/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/sr/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/sr_Latn/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/sv/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/sv/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/sw/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/ta/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/te/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/te/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/th/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/udm/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/uk/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/ur/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/ur/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/locale/zh_Hans/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/contenttypes/views.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/forms.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/af/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/af/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/az/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/az/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/be/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/br/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/br/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/bs/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/ca/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/cy/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/da/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/da/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/en/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/en/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/es_CO/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/es_MX/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/et/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/et/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/eu/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/fa/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/fi/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/fr/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/hi/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/hr/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/hsb/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/ia/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/io/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/is/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/is/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/ja/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/ja/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/ka/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/ka/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/kk/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/kn/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/kn/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/ko/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/lt/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/mk/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/mn/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/mr/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/nb/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/ne/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/os/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/pl/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/pl/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/pt/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/pt_BR/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/ro/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/ro/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/ru/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/ru/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/sk/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/sq/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/ta/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/tr/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/tt/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/vi/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/zh_Hans/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/zh_Hans/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/locale/zh_Hant/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/sitemaps.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/templatetags/flatpages.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/flatpages/urls.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/admin/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/db/backends/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/db/backends/base/adapter.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/db/backends/base/models.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/db/backends/mysql/base.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/db/backends/mysql/introspection.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/db/backends/oracle/introspection.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/db/backends/postgis/base.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/db/backends/postgis/pgraster.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/db/backends/spatialite/base.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/db/backends/spatialite/client.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/db/backends/spatialite/features.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/db/backends/spatialite/introspection.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/db/models/fields.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/db/models/proxy.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/db/models/sql/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/db/models/sql/conversion.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/forms/fields.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/forms/widgets.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/gdal/envelope.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/gdal/geometries.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/gdal/prototypes/generation.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/gdal/prototypes/raster.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/gdal/prototypes/srs.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/gdal/raster/band.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/gdal/raster/base.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/gdal/raster/source.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/gdal/srs.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/geoip2/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/geoip2/resources.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/geos/LICENSE create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/geos/coordseq.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/geos/error.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/geos/geometry.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/geos/libgeos.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/geos/prepared.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/geos/prototypes/coordseq.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/geos/prototypes/topology.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/ar/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/ar/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/ast/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/bg/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/bn/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/el/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/es/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/es/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/es_CO/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/es_MX/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/fa/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/fi/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/fr/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/fy/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/fy/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/ga/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/gl/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/he/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/hr/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/hsb/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/hsb/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/hu/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/hy/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/ia/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/ia/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/id/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/io/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/it/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/ja/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/kk/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/km/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/kn/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/lb/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/lb/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/ml/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/mr/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/my/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/my/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/nb/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/ne/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/nl/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/nl/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/pa/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/pt/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/pt_BR/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/pt_BR/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/ru/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/sl/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/sq/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/sr_Latn/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/sw/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/ta/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/te/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/th/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/tr/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/ur/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/vi/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/zh_Hans/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/zh_Hant/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/locale/zh_Hant/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/sitemaps/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/static/gis/img/draw_point_on.svg create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/static/gis/img/draw_polygon_off.svg create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/static/gis/img/draw_polygon_on.svg create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/templates/gis/admin/openlayers.html create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/templates/gis/admin/osm.html create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/templates/gis/admin/osm.js create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/utils/layermapping.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/gis/utils/ogrinspect.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/af/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/ast/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/be/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/bg/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/bn/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/bs/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/cs/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/cs/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/da/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/de/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/de/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/el/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/el/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/eo/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/eo/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/es/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/es/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/es_MX/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/fa/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/fr/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/fy/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/fy/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/ga/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/gd/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/gl/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/hsb/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/hu/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/is/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/it/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/it/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/ko/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/lb/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/lv/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/mk/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/ml/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/mn/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/mr/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/my/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/nl/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/nn/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/pt/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/ro/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/sl/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/sv/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/sv/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/sw/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/ta/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/th/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/tr/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/tr/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/udm/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/udm/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/uk/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/ur/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/zh_Hans/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/humanize/locale/zh_Hans/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/messages/middleware.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/messages/storage/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/messages/storage/base.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/aggregates/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/apps.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/fields/hstore.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/fields/ranges.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/functions.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/jinja2/postgres/widgets/split_array.html create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/locale/af/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/locale/az/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/locale/az/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/locale/be/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/locale/ca/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/locale/da/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/locale/da/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/locale/en/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/locale/en/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/locale/es_AR/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/locale/es_MX/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/locale/eu/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/locale/fa/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/locale/fi/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/locale/gd/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/locale/hsb/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/locale/hsb/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/locale/hy/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/locale/ia/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/locale/is/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/locale/is/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/locale/ka/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/locale/kk/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/locale/kk/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/locale/ko/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/locale/ko/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/locale/lt/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/locale/mk/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/locale/mn/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/locale/nb/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/locale/pl/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/locale/pt/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/locale/pt_BR/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/locale/pt_BR/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/locale/ro/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/locale/ru/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/locale/sk/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/locale/sq/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/locale/sr/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/locale/sr/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/locale/sv/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/locale/tr/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/operations.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/search.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/postgres/utils.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/af/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/ast/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/az/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/be/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/bs/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/ca/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/cs/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/cy/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/cy/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/da/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/dsb/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/en/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/en_AU/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/en_AU/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/en_GB/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/en_GB/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/es_AR/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/es_MX/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/es_VE/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/eu/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/eu/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/fi/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/gd/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/gl/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/he/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/hi/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/hy/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/io/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/is/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/ja/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/ka/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/kab/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/kab/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/kk/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/kn/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/kn/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/ko/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/mr/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/nn/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/os/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/os/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/pl/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/ro/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/ro/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/ru/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/ru/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/sk/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/sk/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/sl/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/sq/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/sr/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/ta/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/tt/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/uk/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/vi/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/locale/vi/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/middleware.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/redirects/migrations/0001_initial.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/backends/file.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/af/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/az/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/bg/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/bs/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/bs/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/cs/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/da/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/de/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/dsb/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/el/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/el/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/en/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/en_GB/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/en_GB/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/eo/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/es/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/es_CO/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/es_CO/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/es_MX/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/es_VE/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/fa/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/fr/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/fr/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/fy/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/gd/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/hsb/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/hu/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/hy/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/is/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/it/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/ka/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/ko/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/ko/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/lb/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/lv/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/mk/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/mr/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/my/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/ne/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/nn/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/os/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/pl/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/pt/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/pt/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/pt_BR/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/pt_BR/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/ro/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/sl/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/sl/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/sr/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/sr_Latn/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/sv/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/ta/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/te/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/te/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/th/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/th/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/tr/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/uk/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/ur/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/locale/vi/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/management/commands/clearsessions.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/migrations/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sessions/models.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sitemaps/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sitemaps/views.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/admin.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/af/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/az/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/az/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/be/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/bg/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/br/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/bs/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/ca/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/cs/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/cy/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/cy/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/da/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/de/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/dsb/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/en/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/en/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/en_GB/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/es/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/es_CO/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/es_CO/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/es_MX/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/es_VE/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/et/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/et/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/fi/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/fi/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/gl/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/gl/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/he/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/hi/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/hsb/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/hsb/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/hu/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/hy/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/ia/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/id/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/io/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/is/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/ja/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/ka/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/kk/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/kn/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/lt/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/ml/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/mn/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/nb/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/ne/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/nl/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/os/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/pa/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/pl/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/pt_BR/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/pt_BR/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/ru/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/sk/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/sq/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/sr/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/sw/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/tt/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/uz/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/locale/vi/LC_MESSAGES/django.po create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/migrations/0001_initial.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/sites/requests.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/staticfiles/finders.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/staticfiles/handlers.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/staticfiles/management/commands/findstatic.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/staticfiles/urls.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/staticfiles/views.py create mode 100644 venv/lib/python3.7/site-packages/django/contrib/syndication/apps.py create mode 100644 venv/lib/python3.7/site-packages/django/core/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/core/cache/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/core/cache/backends/memcached.py create mode 100644 venv/lib/python3.7/site-packages/django/core/checks/messages.py create mode 100644 venv/lib/python3.7/site-packages/django/core/checks/security/base.py create mode 100644 venv/lib/python3.7/site-packages/django/core/files/base.py create mode 100644 venv/lib/python3.7/site-packages/django/core/files/locks.py create mode 100644 venv/lib/python3.7/site-packages/django/core/files/temp.py create mode 100644 venv/lib/python3.7/site-packages/django/core/management/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/core/management/commands/createcachetable.py create mode 100644 venv/lib/python3.7/site-packages/django/core/management/commands/diffsettings.py create mode 100644 venv/lib/python3.7/site-packages/django/core/management/commands/makemessages.py create mode 100644 venv/lib/python3.7/site-packages/django/core/management/commands/makemigrations.py create mode 100644 venv/lib/python3.7/site-packages/django/core/management/commands/runserver.py create mode 100644 venv/lib/python3.7/site-packages/django/core/management/commands/sendtestemail.py create mode 100644 venv/lib/python3.7/site-packages/django/core/management/commands/sqlmigrate.py create mode 100644 venv/lib/python3.7/site-packages/django/core/management/commands/sqlsequencereset.py create mode 100644 venv/lib/python3.7/site-packages/django/core/management/commands/startproject.py create mode 100644 venv/lib/python3.7/site-packages/django/core/management/commands/test.py create mode 100644 venv/lib/python3.7/site-packages/django/core/management/sql.py create mode 100644 venv/lib/python3.7/site-packages/django/core/serializers/python.py create mode 100644 venv/lib/python3.7/site-packages/django/core/serializers/pyyaml.py create mode 100644 venv/lib/python3.7/site-packages/django/core/serializers/xml_serializer.py create mode 100644 venv/lib/python3.7/site-packages/django/core/signals.py create mode 100644 venv/lib/python3.7/site-packages/django/core/signing.py create mode 100644 venv/lib/python3.7/site-packages/django/core/validators.py create mode 100644 venv/lib/python3.7/site-packages/django/db/backends/base/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/db/backends/base/client.py create mode 100644 venv/lib/python3.7/site-packages/django/db/backends/base/features.py create mode 100644 venv/lib/python3.7/site-packages/django/db/backends/base/validation.py create mode 100644 venv/lib/python3.7/site-packages/django/db/backends/dummy/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/db/backends/mysql/client.py create mode 100644 venv/lib/python3.7/site-packages/django/db/backends/mysql/creation.py create mode 100644 venv/lib/python3.7/site-packages/django/db/backends/mysql/features.py create mode 100644 venv/lib/python3.7/site-packages/django/db/backends/mysql/operations.py create mode 100644 venv/lib/python3.7/site-packages/django/db/backends/mysql/schema.py create mode 100644 venv/lib/python3.7/site-packages/django/db/backends/oracle/client.py create mode 100644 venv/lib/python3.7/site-packages/django/db/backends/oracle/features.py create mode 100644 venv/lib/python3.7/site-packages/django/db/backends/oracle/functions.py create mode 100644 venv/lib/python3.7/site-packages/django/db/backends/postgresql/base.py create mode 100644 venv/lib/python3.7/site-packages/django/db/backends/postgresql/client.py create mode 100644 venv/lib/python3.7/site-packages/django/db/backends/postgresql/creation.py create mode 100644 venv/lib/python3.7/site-packages/django/db/backends/postgresql/schema.py create mode 100644 venv/lib/python3.7/site-packages/django/db/backends/postgresql_psycopg2/client.py create mode 100644 venv/lib/python3.7/site-packages/django/db/backends/postgresql_psycopg2/introspection.py create mode 100644 venv/lib/python3.7/site-packages/django/db/backends/postgresql_psycopg2/operations.py create mode 100644 venv/lib/python3.7/site-packages/django/db/backends/postgresql_psycopg2/schema.py create mode 100644 venv/lib/python3.7/site-packages/django/db/backends/sqlite3/introspection.py create mode 100644 venv/lib/python3.7/site-packages/django/db/migrations/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/db/migrations/autodetector.py create mode 100644 venv/lib/python3.7/site-packages/django/db/migrations/exceptions.py create mode 100644 venv/lib/python3.7/site-packages/django/db/migrations/executor.py create mode 100644 venv/lib/python3.7/site-packages/django/db/migrations/questioner.py create mode 100644 venv/lib/python3.7/site-packages/django/db/migrations/recorder.py create mode 100644 venv/lib/python3.7/site-packages/django/db/migrations/state.py create mode 100644 venv/lib/python3.7/site-packages/django/db/migrations/utils.py create mode 100644 venv/lib/python3.7/site-packages/django/db/models/constraints.py create mode 100644 venv/lib/python3.7/site-packages/django/db/models/fields/files.py create mode 100644 venv/lib/python3.7/site-packages/django/db/models/fields/proxy.py create mode 100644 venv/lib/python3.7/site-packages/django/db/models/functions/mixins.py create mode 100644 venv/lib/python3.7/site-packages/django/db/models/functions/text.py create mode 100644 venv/lib/python3.7/site-packages/django/db/models/functions/window.py create mode 100644 venv/lib/python3.7/site-packages/django/db/models/sql/datastructures.py create mode 100644 venv/lib/python3.7/site-packages/django/dispatch/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/dispatch/license.txt create mode 100644 venv/lib/python3.7/site-packages/django/forms/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/forms/forms.py create mode 100644 venv/lib/python3.7/site-packages/django/forms/formsets.py create mode 100644 venv/lib/python3.7/site-packages/django/forms/jinja2/django/forms/widgets/checkbox_option.html create mode 100644 venv/lib/python3.7/site-packages/django/forms/jinja2/django/forms/widgets/checkbox_select.html create mode 100644 venv/lib/python3.7/site-packages/django/forms/jinja2/django/forms/widgets/file.html create mode 100644 venv/lib/python3.7/site-packages/django/forms/jinja2/django/forms/widgets/hidden.html create mode 100644 venv/lib/python3.7/site-packages/django/forms/jinja2/django/forms/widgets/multiple_input.html create mode 100644 venv/lib/python3.7/site-packages/django/forms/jinja2/django/forms/widgets/multiwidget.html create mode 100644 venv/lib/python3.7/site-packages/django/forms/jinja2/django/forms/widgets/select_option.html create mode 100644 venv/lib/python3.7/site-packages/django/forms/jinja2/django/forms/widgets/splitdatetime.html create mode 100644 venv/lib/python3.7/site-packages/django/forms/jinja2/django/forms/widgets/text.html create mode 100644 venv/lib/python3.7/site-packages/django/forms/jinja2/django/forms/widgets/url.html create mode 100644 venv/lib/python3.7/site-packages/django/forms/renderers.py create mode 100644 venv/lib/python3.7/site-packages/django/forms/templates/django/forms/widgets/checkbox.html create mode 100644 venv/lib/python3.7/site-packages/django/forms/templates/django/forms/widgets/clearable_file_input.html create mode 100644 venv/lib/python3.7/site-packages/django/forms/templates/django/forms/widgets/input.html create mode 100644 venv/lib/python3.7/site-packages/django/forms/templates/django/forms/widgets/multiwidget.html create mode 100644 venv/lib/python3.7/site-packages/django/forms/templates/django/forms/widgets/radio_option.html create mode 100644 venv/lib/python3.7/site-packages/django/forms/templates/django/forms/widgets/textarea.html create mode 100644 venv/lib/python3.7/site-packages/django/forms/templates/django/forms/widgets/url.html create mode 100644 venv/lib/python3.7/site-packages/django/forms/widgets.py create mode 100644 venv/lib/python3.7/site-packages/django/http/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/http/cookie.py create mode 100644 venv/lib/python3.7/site-packages/django/http/request.py create mode 100644 venv/lib/python3.7/site-packages/django/http/response.py create mode 100644 venv/lib/python3.7/site-packages/django/middleware/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/middleware/common.py create mode 100644 venv/lib/python3.7/site-packages/django/middleware/gzip.py create mode 100644 venv/lib/python3.7/site-packages/django/middleware/locale.py create mode 100644 venv/lib/python3.7/site-packages/django/shortcuts.py create mode 100644 venv/lib/python3.7/site-packages/django/template/backends/dummy.py create mode 100644 venv/lib/python3.7/site-packages/django/template/backends/jinja2.py create mode 100644 venv/lib/python3.7/site-packages/django/template/backends/utils.py create mode 100644 venv/lib/python3.7/site-packages/django/template/base.py create mode 100644 venv/lib/python3.7/site-packages/django/template/context.py create mode 100644 venv/lib/python3.7/site-packages/django/template/loaders/base.py create mode 100644 venv/lib/python3.7/site-packages/django/template/loaders/cached.py create mode 100644 venv/lib/python3.7/site-packages/django/template/utils.py create mode 100644 venv/lib/python3.7/site-packages/django/templatetags/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/templatetags/static.py create mode 100644 venv/lib/python3.7/site-packages/django/test/html.py create mode 100644 venv/lib/python3.7/site-packages/django/urls/converters.py create mode 100644 venv/lib/python3.7/site-packages/django/urls/exceptions.py create mode 100644 venv/lib/python3.7/site-packages/django/urls/resolvers.py create mode 100644 venv/lib/python3.7/site-packages/django/urls/utils.py create mode 100644 venv/lib/python3.7/site-packages/django/utils/_os.py create mode 100644 venv/lib/python3.7/site-packages/django/utils/baseconv.py create mode 100644 venv/lib/python3.7/site-packages/django/utils/crypto.py create mode 100644 venv/lib/python3.7/site-packages/django/utils/deconstruct.py create mode 100644 venv/lib/python3.7/site-packages/django/utils/deprecation.py create mode 100644 venv/lib/python3.7/site-packages/django/utils/duration.py create mode 100644 venv/lib/python3.7/site-packages/django/utils/functional.py create mode 100644 venv/lib/python3.7/site-packages/django/utils/lorem_ipsum.py create mode 100644 venv/lib/python3.7/site-packages/django/utils/safestring.py create mode 100644 venv/lib/python3.7/site-packages/django/utils/translation/template.py create mode 100644 venv/lib/python3.7/site-packages/django/utils/translation/trans_real.py create mode 100644 venv/lib/python3.7/site-packages/django/utils/version.py create mode 100644 venv/lib/python3.7/site-packages/django/utils/xmlutils.py create mode 100644 venv/lib/python3.7/site-packages/django/views/decorators/cache.py create mode 100644 venv/lib/python3.7/site-packages/django/views/decorators/http.py create mode 100644 venv/lib/python3.7/site-packages/django/views/generic/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django/views/generic/detail.py create mode 100644 venv/lib/python3.7/site-packages/django/views/generic/edit.py create mode 100644 venv/lib/python3.7/site-packages/django/views/i18n.py create mode 100644 venv/lib/python3.7/site-packages/django/views/templates/technical_500.txt create mode 100644 venv/lib/python3.7/site-packages/django_eventstream-2.6.0-py3.7.egg-info/installed-files.txt create mode 100644 venv/lib/python3.7/site-packages/django_eventstream-2.6.0-py3.7.egg-info/requires.txt create mode 100644 venv/lib/python3.7/site-packages/django_eventstream/event.py create mode 100644 venv/lib/python3.7/site-packages/django_eventstream/management/commands/runserver_ngrok.py create mode 100644 venv/lib/python3.7/site-packages/django_eventstream/migrations/__init__.py create mode 100644 venv/lib/python3.7/site-packages/django_eventstream/static/django_eventstream/reconnecting-eventsource.js create mode 100644 venv/lib/python3.7/site-packages/django_eventstream/utils.py create mode 100644 venv/lib/python3.7/site-packages/django_eventstream/views.py create mode 100644 venv/lib/python3.7/site-packages/django_grip-2.0.2-py3.7.egg-info/PKG-INFO create mode 100644 venv/lib/python3.7/site-packages/django_grip-2.0.2-py3.7.egg-info/SOURCES.txt create mode 100644 venv/lib/python3.7/site-packages/djangorestframework-3.10.3.dist-info/WHEEL create mode 100644 venv/lib/python3.7/site-packages/djangorestframework-3.10.3.dist-info/top_level.txt create mode 100644 venv/lib/python3.7/site-packages/exampleproj/_version.py create mode 100644 venv/lib/python3.7/site-packages/gripcontrol-3.3.1-py3.7.egg-info/top_level.txt create mode 100644 venv/lib/python3.7/site-packages/gripcontrol/channel.py create mode 100644 venv/lib/python3.7/site-packages/gripcontrol/httpstreamformat.py create mode 100644 venv/lib/python3.7/site-packages/gripcontrol/websocketcontext.py create mode 100644 venv/lib/python3.7/site-packages/hamcrest/__init__.py create mode 100644 venv/lib/python3.7/site-packages/hamcrest/core/compat.py create mode 100644 venv/lib/python3.7/site-packages/hamcrest/core/core/__init__.py create mode 100644 venv/lib/python3.7/site-packages/hamcrest/core/core/anyof.py create mode 100644 venv/lib/python3.7/site-packages/hamcrest/core/core/isanything.py create mode 100644 venv/lib/python3.7/site-packages/hamcrest/core/core/isequal.py create mode 100644 venv/lib/python3.7/site-packages/hamcrest/core/core/isinstanceof.py create mode 100644 venv/lib/python3.7/site-packages/hamcrest/core/core/isnone.py create mode 100644 venv/lib/python3.7/site-packages/hamcrest/core/core/isnot.py create mode 100644 venv/lib/python3.7/site-packages/hamcrest/core/helpers/__init__.py create mode 100644 venv/lib/python3.7/site-packages/hamcrest/library/__init__.py create mode 100644 venv/lib/python3.7/site-packages/hamcrest/library/collection/__init__.py create mode 100644 venv/lib/python3.7/site-packages/hamcrest/library/collection/isdict_containingkey.py create mode 100644 venv/lib/python3.7/site-packages/hamcrest/library/collection/isdict_containingvalue.py create mode 100644 venv/lib/python3.7/site-packages/hamcrest/library/collection/issequence_containing.py create mode 100644 venv/lib/python3.7/site-packages/hamcrest/library/collection/issequence_containinginanyorder.py create mode 100644 venv/lib/python3.7/site-packages/hamcrest/library/collection/issequence_onlycontaining.py create mode 100644 venv/lib/python3.7/site-packages/hamcrest/library/integration/__init__.py create mode 100644 venv/lib/python3.7/site-packages/hamcrest/library/integration/match_equality.py create mode 100644 venv/lib/python3.7/site-packages/hamcrest/library/object/haslength.py create mode 100644 venv/lib/python3.7/site-packages/hamcrest/library/object/hasproperty.py create mode 100644 venv/lib/python3.7/site-packages/hamcrest/library/text/isequal_ignoring_case.py create mode 100644 venv/lib/python3.7/site-packages/hamcrest/library/text/isequal_ignoring_whitespace.py create mode 100644 venv/lib/python3.7/site-packages/hyperlink-19.0.0.dist-info/DESCRIPTION.rst create mode 100644 venv/lib/python3.7/site-packages/hyperlink-19.0.0.dist-info/INSTALLER create mode 100644 venv/lib/python3.7/site-packages/hyperlink/_url.py create mode 100644 venv/lib/python3.7/site-packages/hyperlink/test/test_common.py create mode 100644 venv/lib/python3.7/site-packages/hyperlink/test/test_decoded_url.py create mode 100644 venv/lib/python3.7/site-packages/hyperlink/test/test_scheme_registration.py create mode 100644 venv/lib/python3.7/site-packages/idna-2.8.dist-info/LICENSE.rst create mode 100644 venv/lib/python3.7/site-packages/idna-2.8.dist-info/RECORD create mode 100644 venv/lib/python3.7/site-packages/idna-2.8.dist-info/WHEEL create mode 100644 venv/lib/python3.7/site-packages/incremental-17.5.0.dist-info/DESCRIPTION.rst create mode 100644 venv/lib/python3.7/site-packages/incremental-17.5.0.dist-info/METADATA create mode 100644 venv/lib/python3.7/site-packages/incremental-17.5.0.dist-info/RECORD create mode 100644 venv/lib/python3.7/site-packages/incremental-17.5.0.dist-info/WHEEL create mode 100644 venv/lib/python3.7/site-packages/incremental-17.5.0.dist-info/top_level.txt create mode 100644 venv/lib/python3.7/site-packages/incremental/tests/__init__.py create mode 100644 venv/lib/python3.7/site-packages/incremental/update.py create mode 100644 venv/lib/python3.7/site-packages/jwt/compat.py create mode 100644 venv/lib/python3.7/site-packages/jwt/contrib/algorithms/py_ecdsa.py create mode 100644 venv/lib/python3.7/site-packages/jwt/exceptions.py create mode 100644 venv/lib/python3.7/site-packages/jwt/utils.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/EGG-INFO/entry_points.txt create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/EGG-INFO/not-zip-safe create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/EGG-INFO/requires.txt create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_internal/__init__.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_internal/cache.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_internal/cmdoptions.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_internal/commands/__init__.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_internal/commands/list.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_internal/commands/search.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_internal/commands/show.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_internal/commands/uninstall.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_internal/commands/wheel.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_internal/exceptions.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_internal/models/__init__.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_internal/models/index.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_internal/operations/freeze.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_internal/req/__init__.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_internal/req/req_uninstall.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_internal/utils/appdirs.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_internal/utils/deprecation.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_internal/utils/packaging.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_internal/vcs/git.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_internal/vcs/subversion.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/appdirs.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/cachecontrol/adapter.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/cachecontrol/cache.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/cachecontrol/caches/file_cache.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/cachecontrol/serialize.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/cachecontrol/wrapper.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/certifi/__main__.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/chardet/__init__.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/chardet/cp949prober.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/chardet/escprober.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/chardet/euctwfreq.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/chardet/euctwprober.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/chardet/hebrewprober.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/chardet/jpcntx.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/chardet/latin1prober.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/chardet/sjisprober.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/colorama/__init__.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/colorama/ansitowin32.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/colorama/win32.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/distlib/_backport/sysconfig.cfg create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/distlib/locators.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/distlib/scripts.py create mode 100755 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/distlib/w32.exe create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/html5lib/__init__.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/html5lib/_trie/datrie.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/html5lib/filters/base.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/html5lib/filters/sanitizer.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/html5lib/filters/whitespace.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/html5lib/serializer.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/html5lib/treeadapters/__init__.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/html5lib/treebuilders/base.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/html5lib/treebuilders/etree.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/html5lib/treebuilders/etree_lxml.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/html5lib/treewalkers/base.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/html5lib/treewalkers/genshi.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/idna/__init__.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/idna/compat.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/idna/idnadata.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/lockfile/pidlockfile.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/msgpack/__init__.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/packaging/__about__.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/pkg_resources/__init__.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/pkg_resources/py31compat.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/progress/__init__.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/pyparsing.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/pytoml/__init__.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/pytoml/core.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/pytoml/parser.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/requests/__version__.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/requests/adapters.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/requests/certs.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/requests/packages.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/requests/structures.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/urllib3/_collections.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/urllib3/contrib/__init__.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/urllib3/contrib/_securetransport/__init__.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/urllib3/contrib/appengine.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/urllib3/contrib/securetransport.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/urllib3/contrib/socks.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/urllib3/fields.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/urllib3/packages/__init__.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/urllib3/packages/backports/__init__.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/urllib3/packages/ssl_match_hostname/_implementation.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/urllib3/response.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/urllib3/util/connection.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/urllib3/util/request.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/urllib3/util/response.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/urllib3/util/ssl_.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/urllib3/util/url.py create mode 100644 venv/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip/_vendor/urllib3/util/wait.py create mode 100644 venv/lib/python3.7/site-packages/pubcontrol-2.4.2-py3.7.egg-info/PKG-INFO create mode 100644 venv/lib/python3.7/site-packages/pubcontrol-2.4.2-py3.7.egg-info/installed-files.txt create mode 100644 venv/lib/python3.7/site-packages/pubcontrol/format.py create mode 100644 venv/lib/python3.7/site-packages/pubcontrol/pubcontrolclient.py create mode 100644 venv/lib/python3.7/site-packages/pubcontrol/utilities.py create mode 100644 venv/lib/python3.7/site-packages/pyOpenSSL-19.1.0.dist-info/RECORD create mode 100644 venv/lib/python3.7/site-packages/pyOpenSSL-19.1.0.dist-info/WHEEL create mode 100644 venv/lib/python3.7/site-packages/pyasn1-0.4.8.dist-info/INSTALLER create mode 100644 venv/lib/python3.7/site-packages/pyasn1/__init__.py create mode 100644 venv/lib/python3.7/site-packages/pyasn1/codec/__init__.py create mode 100644 venv/lib/python3.7/site-packages/pyasn1/codec/ber/encoder.py create mode 100644 venv/lib/python3.7/site-packages/pyasn1/codec/der/decoder.py create mode 100644 venv/lib/python3.7/site-packages/pyasn1/codec/der/encoder.py create mode 100644 venv/lib/python3.7/site-packages/pyasn1/codec/native/decoder.py create mode 100644 venv/lib/python3.7/site-packages/pyasn1/compat/__init__.py create mode 100644 venv/lib/python3.7/site-packages/pyasn1/compat/integer.py create mode 100644 venv/lib/python3.7/site-packages/pyasn1/debug.py create mode 100644 venv/lib/python3.7/site-packages/pyasn1/error.py create mode 100644 venv/lib/python3.7/site-packages/pyasn1/type/__init__.py create mode 100644 venv/lib/python3.7/site-packages/pyasn1/type/base.py create mode 100644 venv/lib/python3.7/site-packages/pyasn1/type/char.py create mode 100644 venv/lib/python3.7/site-packages/pyasn1/type/error.py create mode 100644 venv/lib/python3.7/site-packages/pyasn1/type/useful.py create mode 100644 venv/lib/python3.7/site-packages/pyasn1_modules-0.2.7.dist-info/WHEEL create mode 100644 venv/lib/python3.7/site-packages/pyasn1_modules-0.2.7.dist-info/metadata.json create mode 100644 venv/lib/python3.7/site-packages/pyasn1_modules-0.2.7.dist-info/zip-safe create mode 100644 venv/lib/python3.7/site-packages/pyasn1_modules/pem.py create mode 100644 venv/lib/python3.7/site-packages/pyasn1_modules/rfc1901.py create mode 100644 venv/lib/python3.7/site-packages/pyasn1_modules/rfc2437.py create mode 100644 venv/lib/python3.7/site-packages/pyasn1_modules/rfc2511.py create mode 100644 venv/lib/python3.7/site-packages/pyasn1_modules/rfc2986.py create mode 100644 venv/lib/python3.7/site-packages/pyasn1_modules/rfc3161.py create mode 100644 venv/lib/python3.7/site-packages/pyasn1_modules/rfc3279.py create mode 100644 venv/lib/python3.7/site-packages/pyasn1_modules/rfc3560.py create mode 100644 venv/lib/python3.7/site-packages/pyasn1_modules/rfc3709.py create mode 100644 venv/lib/python3.7/site-packages/pyasn1_modules/rfc4055.py create mode 100644 venv/lib/python3.7/site-packages/pyasn1_modules/rfc4073.py create mode 100644 venv/lib/python3.7/site-packages/pyasn1_modules/rfc4210.py create mode 100644 venv/lib/python3.7/site-packages/pyasn1_modules/rfc4211.py create mode 100644 venv/lib/python3.7/site-packages/pyasn1_modules/rfc5035.py create mode 100644 venv/lib/python3.7/site-packages/pyasn1_modules/rfc5914.py create mode 100644 venv/lib/python3.7/site-packages/pyasn1_modules/rfc6019.py create mode 100644 venv/lib/python3.7/site-packages/pyasn1_modules/rfc6031.py create mode 100644 venv/lib/python3.7/site-packages/pyasn1_modules/rfc6211.py create mode 100644 venv/lib/python3.7/site-packages/pyasn1_modules/rfc7191.py create mode 100644 venv/lib/python3.7/site-packages/pyasn1_modules/rfc7296.py create mode 100644 venv/lib/python3.7/site-packages/pyasn1_modules/rfc8209.py create mode 100644 venv/lib/python3.7/site-packages/pyasn1_modules/rfc8398.py create mode 100644 venv/lib/python3.7/site-packages/pycparser-2.19-py3.7.egg-info/PKG-INFO create mode 100644 venv/lib/python3.7/site-packages/pycparser-2.19-py3.7.egg-info/SOURCES.txt create mode 100644 venv/lib/python3.7/site-packages/pycparser-2.19-py3.7.egg-info/installed-files.txt create mode 100644 venv/lib/python3.7/site-packages/pycparser/ast_transforms.py create mode 100644 venv/lib/python3.7/site-packages/pycparser/c_ast.py create mode 100644 venv/lib/python3.7/site-packages/pycparser/ply/ctokens.py create mode 100644 venv/lib/python3.7/site-packages/pycparser/ply/lex.py create mode 100644 venv/lib/python3.7/site-packages/pycparser/ply/yacc.py create mode 100644 venv/lib/python3.7/site-packages/pytz-2019.3.dist-info/DESCRIPTION.rst create mode 100644 venv/lib/python3.7/site-packages/pytz-2019.3.dist-info/LICENSE.txt create mode 100644 venv/lib/python3.7/site-packages/pytz-2019.3.dist-info/WHEEL create mode 100644 venv/lib/python3.7/site-packages/pytz-2019.3.dist-info/metadata.json create mode 100644 venv/lib/python3.7/site-packages/pytz-2019.3.dist-info/zip-safe create mode 100644 venv/lib/python3.7/site-packages/pytz/__init__.py create mode 100644 venv/lib/python3.7/site-packages/pytz/exceptions.py create mode 100644 venv/lib/python3.7/site-packages/pytz/lazy.py create mode 100644 venv/lib/python3.7/site-packages/pytz/reference.py create mode 100644 venv/lib/python3.7/site-packages/pytz/tzinfo.py create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Africa/Accra create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Africa/Asmera create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Africa/Bamako create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Africa/Blantyre create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Africa/Ceuta create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Africa/Harare create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Africa/Juba create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Africa/Kampala create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Africa/Khartoum create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Africa/Lagos create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Africa/Luanda create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Africa/Malabo create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Africa/Maputo create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Africa/Niamey create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Africa/Ouagadougou create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Africa/Sao_Tome create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Anguilla create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Antigua create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Argentina/Buenos_Aires create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Argentina/ComodRivadavia create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Argentina/Cordoba create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Argentina/Jujuy create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Argentina/La_Rioja create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Argentina/Mendoza create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Atka create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Bahia create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Barbados create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Belize create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Buenos_Aires create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Catamarca create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Costa_Rica create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Creston create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Cuiaba create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Ensenada create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Fort_Wayne create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Fortaleza create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Guatemala create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Hermosillo create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Indiana/Knox create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Indiana/Tell_City create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Indiana/Vincennes create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Indianapolis create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Inuvik create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Iqaluit create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Jujuy create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Kentucky/Louisville create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/La_Paz create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Louisville create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Lower_Princes create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Maceio create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Mazatlan create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Menominee create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Merida create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Mexico_City create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Moncton create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Montevideo create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Nassau create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/New_York create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Nipigon create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/North_Dakota/New_Salem create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Port_of_Spain create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Porto_Velho create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Punta_Arenas create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Rankin_Inlet create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Recife create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Regina create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Resolute create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Rio_Branco create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Santa_Isabel create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Sao_Paulo create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/St_Johns create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/St_Vincent create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Toronto create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Tortola create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/America/Virgin create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Antarctica/DumontDUrville create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Antarctica/Rothera create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Antarctica/Syowa create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Antarctica/Troll create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Arctic/Longyearbyen create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Asia/Anadyr create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Asia/Ashkhabad create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Asia/Baghdad create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Asia/Bahrain create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Asia/Baku create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Asia/Bangkok create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Asia/Barnaul create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Asia/Dhaka create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Asia/Dubai create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Asia/Hong_Kong create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Asia/Istanbul create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Asia/Kamchatka create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Asia/Karachi create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Asia/Khandyga create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Asia/Kuala_Lumpur create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Asia/Kuwait create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Asia/Novokuznetsk create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Asia/Omsk create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Asia/Oral create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Asia/Pontianak create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Asia/Pyongyang create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Asia/Shanghai create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Asia/Srednekolymsk create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Asia/Tashkent create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Asia/Tbilisi create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Asia/Thimphu create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Asia/Tomsk create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Asia/Ujung_Pandang create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Asia/Vientiane create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Asia/Yakutsk create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Asia/Yerevan create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Atlantic/Faeroe create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Atlantic/Faroe create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Australia/Adelaide create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Australia/Brisbane create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Australia/Broken_Hill create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Australia/LHI create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Australia/Lord_Howe create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Australia/Melbourne create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Australia/NSW create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Australia/North create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Australia/Sydney create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Canada/Mountain create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Canada/Newfoundland create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Canada/Pacific create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Canada/Yukon create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Chile/Continental create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Chile/EasterIsland create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Cuba create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Eire create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Etc/GMT+10 create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Etc/GMT+11 create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Etc/GMT+12 create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Etc/Universal create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Europe/Astrakhan create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Europe/Berlin create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Europe/Brussels create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Europe/Bucharest create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Europe/Busingen create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Europe/Kaliningrad create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Europe/Lisbon create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Europe/London create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Europe/Moscow create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Europe/Nicosia create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Europe/Riga create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Europe/Samara create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Europe/San_Marino create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Europe/Sarajevo create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Europe/Skopje create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Europe/Uzhgorod create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Europe/Vilnius create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Europe/Warsaw create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/GB create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/GMT-0 create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/GMT0 create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/HST create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Indian/Cocos create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Indian/Comoro create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Iran create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Israel create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Kwajalein create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/MET create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/MST7MDT create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Mexico/BajaSur create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Mexico/General create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/NZ create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/NZ-CHAT create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Pacific/Easter create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Pacific/Efate create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Pacific/Funafuti create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Pacific/Guadalcanal create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Pacific/Kwajalein create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Pacific/Nauru create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Pacific/Palau create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Pacific/Pohnpei create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Pacific/Saipan create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/US/Arizona create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/US/Central create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/US/Eastern create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/Zulu create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/tzdata.zi create mode 100644 venv/lib/python3.7/site-packages/pytz/zoneinfo/zone.tab create mode 100644 venv/lib/python3.7/site-packages/requests-2.22.0.dist-info/INSTALLER create mode 100644 venv/lib/python3.7/site-packages/requests/__version__.py create mode 100644 venv/lib/python3.7/site-packages/requests/certs.py create mode 100644 venv/lib/python3.7/site-packages/requests/compat.py create mode 100644 venv/lib/python3.7/site-packages/requests/hooks.py create mode 100644 venv/lib/python3.7/site-packages/requests/sessions.py create mode 100644 venv/lib/python3.7/site-packages/rest_framework/__init__.py create mode 100644 venv/lib/python3.7/site-packages/rest_framework/authtoken/admin.py create mode 100644 venv/lib/python3.7/site-packages/rest_framework/authtoken/management/__init__.py create mode 100644 venv/lib/python3.7/site-packages/rest_framework/authtoken/migrations/0001_initial.py create mode 100644 venv/lib/python3.7/site-packages/rest_framework/authtoken/serializers.py create mode 100644 venv/lib/python3.7/site-packages/rest_framework/filters.py create mode 100644 venv/lib/python3.7/site-packages/rest_framework/generics.py create mode 100644 venv/lib/python3.7/site-packages/rest_framework/locale/ach/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/rest_framework/locale/be/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/rest_framework/locale/cs/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/rest_framework/locale/de/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/rest_framework/locale/el/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/rest_framework/locale/en_AU/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/rest_framework/locale/en_US/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/rest_framework/locale/fr_CA/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/rest_framework/locale/gl_ES/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/rest_framework/locale/ko_KR/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/rest_framework/locale/lv/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/rest_framework/locale/mk/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/rest_framework/locale/nn/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/rest_framework/locale/pl/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/rest_framework/locale/sk/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/rest_framework/locale/tr/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/rest_framework/locale/uk/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/rest_framework/locale/zh_Hant/LC_MESSAGES/django.mo create mode 100644 venv/lib/python3.7/site-packages/rest_framework/negotiation.py create mode 100644 venv/lib/python3.7/site-packages/rest_framework/relations.py create mode 100644 venv/lib/python3.7/site-packages/rest_framework/reverse.py create mode 100644 venv/lib/python3.7/site-packages/rest_framework/schemas/coreapi.py create mode 100644 venv/lib/python3.7/site-packages/rest_framework/schemas/generators.py create mode 100644 venv/lib/python3.7/site-packages/rest_framework/schemas/openapi.py create mode 100644 venv/lib/python3.7/site-packages/rest_framework/static/rest_framework/css/bootstrap-tweaks.css create mode 100644 venv/lib/python3.7/site-packages/rest_framework/static/rest_framework/css/bootstrap.min.css create mode 100644 venv/lib/python3.7/site-packages/rest_framework/static/rest_framework/css/default.css create mode 100644 venv/lib/python3.7/site-packages/rest_framework/static/rest_framework/docs/img/favicon.ico create mode 100644 venv/lib/python3.7/site-packages/rest_framework/static/rest_framework/docs/img/grid.png create mode 100644 venv/lib/python3.7/site-packages/rest_framework/static/rest_framework/docs/js/api.js create mode 100644 venv/lib/python3.7/site-packages/rest_framework/static/rest_framework/fonts/fontawesome-webfont.svg create mode 100644 venv/lib/python3.7/site-packages/rest_framework/static/rest_framework/fonts/glyphicons-halflings-regular.ttf create mode 100644 venv/lib/python3.7/site-packages/rest_framework/static/rest_framework/fonts/glyphicons-halflings-regular.woff create mode 100644 venv/lib/python3.7/site-packages/rest_framework/static/rest_framework/fonts/glyphicons-halflings-regular.woff2 create mode 100644 venv/lib/python3.7/site-packages/rest_framework/static/rest_framework/img/glyphicons-halflings.png create mode 100644 venv/lib/python3.7/site-packages/rest_framework/static/rest_framework/js/ajax-form.js create mode 100644 venv/lib/python3.7/site-packages/rest_framework/static/rest_framework/js/coreapi-0.1.1.js create mode 100644 venv/lib/python3.7/site-packages/rest_framework/static/rest_framework/js/csrf.js create mode 100644 venv/lib/python3.7/site-packages/rest_framework/status.py create mode 100644 venv/lib/python3.7/site-packages/rest_framework/templates/rest_framework/admin.html create mode 100644 venv/lib/python3.7/site-packages/rest_framework/templates/rest_framework/admin/dict_value.html create mode 100644 venv/lib/python3.7/site-packages/rest_framework/templates/rest_framework/admin/list.html create mode 100644 venv/lib/python3.7/site-packages/rest_framework/templates/rest_framework/admin/list_value.html create mode 100644 venv/lib/python3.7/site-packages/rest_framework/templates/rest_framework/admin/simple_list_value.html create mode 100644 venv/lib/python3.7/site-packages/rest_framework/templates/rest_framework/docs/error.html create mode 100644 venv/lib/python3.7/site-packages/rest_framework/templates/rest_framework/docs/index.html create mode 100644 venv/lib/python3.7/site-packages/rest_framework/templates/rest_framework/docs/interact.html create mode 100644 venv/lib/python3.7/site-packages/rest_framework/templates/rest_framework/docs/langs/javascript-intro.html create mode 100644 venv/lib/python3.7/site-packages/rest_framework/templates/rest_framework/filters/ordering.html create mode 100644 venv/lib/python3.7/site-packages/rest_framework/templates/rest_framework/filters/search.html create mode 100644 venv/lib/python3.7/site-packages/rest_framework/templates/rest_framework/horizontal/checkbox_multiple.html create mode 100644 venv/lib/python3.7/site-packages/rest_framework/templates/rest_framework/horizontal/fieldset.html create mode 100644 venv/lib/python3.7/site-packages/rest_framework/templates/rest_framework/horizontal/list_field.html create mode 100644 venv/lib/python3.7/site-packages/rest_framework/templates/rest_framework/horizontal/radio.html create mode 100644 venv/lib/python3.7/site-packages/rest_framework/templates/rest_framework/inline/dict_field.html create mode 100644 venv/lib/python3.7/site-packages/rest_framework/templates/rest_framework/inline/input.html create mode 100644 venv/lib/python3.7/site-packages/rest_framework/templates/rest_framework/inline/select.html create mode 100644 venv/lib/python3.7/site-packages/rest_framework/templates/rest_framework/login.html create mode 100644 venv/lib/python3.7/site-packages/rest_framework/templates/rest_framework/vertical/checkbox.html create mode 100644 venv/lib/python3.7/site-packages/rest_framework/templates/rest_framework/vertical/dict_field.html create mode 100644 venv/lib/python3.7/site-packages/rest_framework/templates/rest_framework/vertical/input.html create mode 100644 venv/lib/python3.7/site-packages/rest_framework/templates/rest_framework/vertical/textarea.html create mode 100644 venv/lib/python3.7/site-packages/rest_framework/templatetags/__init__.py create mode 100644 venv/lib/python3.7/site-packages/rest_framework/utils/breadcrumbs.py create mode 100644 venv/lib/python3.7/site-packages/rest_framework/utils/mediatypes.py create mode 100644 venv/lib/python3.7/site-packages/rest_framework/versioning.py create mode 100644 venv/lib/python3.7/site-packages/service_identity-18.1.0.dist-info/RECORD create mode 100644 venv/lib/python3.7/site-packages/service_identity-18.1.0.dist-info/top_level.txt create mode 100644 venv/lib/python3.7/site-packages/service_identity/__init__.py create mode 100644 venv/lib/python3.7/site-packages/service_identity/_common.py create mode 100644 venv/lib/python3.7/site-packages/setuptools-39.1.0-py3.7.egg create mode 100644 venv/lib/python3.7/site-packages/six-1.13.0.dist-info/INSTALLER create mode 100644 venv/lib/python3.7/site-packages/six-1.13.0.dist-info/top_level.txt create mode 100644 venv/lib/python3.7/site-packages/sqlparse-0.3.0.dist-info/RECORD create mode 100644 venv/lib/python3.7/site-packages/sqlparse-0.3.0.dist-info/entry_points.txt create mode 100644 venv/lib/python3.7/site-packages/sqlparse/__init__.py create mode 100644 venv/lib/python3.7/site-packages/sqlparse/__main__.py create mode 100644 venv/lib/python3.7/site-packages/sqlparse/filters/__init__.py create mode 100644 venv/lib/python3.7/site-packages/sqlparse/filters/tokens.py create mode 100644 venv/lib/python3.7/site-packages/sqlparse/utils.py create mode 100644 venv/lib/python3.7/site-packages/twisted/__main__.py create mode 100644 venv/lib/python3.7/site-packages/twisted/_threads/test/test_convenience.py create mode 100644 venv/lib/python3.7/site-packages/twisted/_threads/test/test_memory.py create mode 100644 venv/lib/python3.7/site-packages/twisted/_version.py create mode 100644 venv/lib/python3.7/site-packages/twisted/application/__init__.py create mode 100644 venv/lib/python3.7/site-packages/twisted/application/runner/_exit.py create mode 100644 venv/lib/python3.7/site-packages/twisted/application/runner/test/__init__.py create mode 100644 venv/lib/python3.7/site-packages/twisted/application/runner/test/test_pidfile.py create mode 100644 venv/lib/python3.7/site-packages/twisted/application/runner/test/test_runner.py create mode 100644 venv/lib/python3.7/site-packages/twisted/application/service.py create mode 100644 venv/lib/python3.7/site-packages/twisted/application/test/__init__.py create mode 100644 venv/lib/python3.7/site-packages/twisted/application/twist/_twist.py create mode 100644 venv/lib/python3.7/site-packages/twisted/conch/avatar.py create mode 100644 venv/lib/python3.7/site-packages/twisted/conch/client/options.py create mode 100644 venv/lib/python3.7/site-packages/twisted/conch/error.py create mode 100644 venv/lib/python3.7/site-packages/twisted/conch/insults/__init__.py create mode 100644 venv/lib/python3.7/site-packages/twisted/conch/manhole_tap.py create mode 100644 venv/lib/python3.7/site-packages/twisted/conch/scripts/conch.py create mode 100644 venv/lib/python3.7/site-packages/twisted/conch/ssh/__init__.py create mode 100644 venv/lib/python3.7/site-packages/twisted/conch/ssh/address.py create mode 100644 venv/lib/python3.7/site-packages/twisted/conch/ssh/common.py create mode 100644 venv/lib/python3.7/site-packages/twisted/conch/ssh/service.py create mode 100644 venv/lib/python3.7/site-packages/twisted/conch/ssh/sexpy.py create mode 100644 venv/lib/python3.7/site-packages/twisted/conch/ssh/transport.py create mode 100644 venv/lib/python3.7/site-packages/twisted/conch/tap.py create mode 100644 venv/lib/python3.7/site-packages/twisted/conch/test/keydata.py create mode 100644 venv/lib/python3.7/site-packages/twisted/conch/test/loopback.py create mode 100644 venv/lib/python3.7/site-packages/twisted/conch/test/test_address.py create mode 100644 venv/lib/python3.7/site-packages/twisted/conch/test/test_cftp.py create mode 100644 venv/lib/python3.7/site-packages/twisted/conch/test/test_ckeygen.py create mode 100644 venv/lib/python3.7/site-packages/twisted/conch/test/test_conch.py create mode 100644 venv/lib/python3.7/site-packages/twisted/conch/test/test_connection.py create mode 100644 venv/lib/python3.7/site-packages/twisted/conch/test/test_default.py create mode 100644 venv/lib/python3.7/site-packages/twisted/conch/test/test_forwarding.py create mode 100644 venv/lib/python3.7/site-packages/twisted/conch/test/test_knownhosts.py create mode 100644 venv/lib/python3.7/site-packages/twisted/conch/test/test_scripts.py create mode 100644 venv/lib/python3.7/site-packages/twisted/conch/test/test_ssh.py create mode 100644 venv/lib/python3.7/site-packages/twisted/conch/ttymodes.py create mode 100644 venv/lib/python3.7/site-packages/twisted/conch/ui/ansi.py create mode 100644 venv/lib/python3.7/site-packages/twisted/copyright.py create mode 100644 venv/lib/python3.7/site-packages/twisted/cred/_digest.py create mode 100644 venv/lib/python3.7/site-packages/twisted/cred/checkers.py create mode 100644 venv/lib/python3.7/site-packages/twisted/cred/credentials.py create mode 100644 venv/lib/python3.7/site-packages/twisted/cred/portal.py create mode 100644 venv/lib/python3.7/site-packages/twisted/cred/test/test_cred.py create mode 100644 venv/lib/python3.7/site-packages/twisted/cred/test/test_digestauth.py create mode 100644 venv/lib/python3.7/site-packages/twisted/cred/test/test_strcred.py create mode 100644 venv/lib/python3.7/site-packages/twisted/enterprise/__init__.py create mode 100644 venv/lib/python3.7/site-packages/twisted/internet/_posixstdio.py create mode 100644 venv/lib/python3.7/site-packages/twisted/internet/_win32serialport.py create mode 100644 venv/lib/python3.7/site-packages/twisted/internet/_win32stdio.py create mode 100644 venv/lib/python3.7/site-packages/twisted/internet/abstract.py create mode 100644 venv/lib/python3.7/site-packages/twisted/internet/epollreactor.py create mode 100644 venv/lib/python3.7/site-packages/twisted/internet/error.py create mode 100644 venv/lib/python3.7/site-packages/twisted/internet/fdesc.py create mode 100644 venv/lib/python3.7/site-packages/twisted/internet/gireactor.py create mode 100644 venv/lib/python3.7/site-packages/twisted/internet/iocpreactor/__init__.py create mode 100644 venv/lib/python3.7/site-packages/twisted/internet/iocpreactor/abstract.py create mode 100644 venv/lib/python3.7/site-packages/twisted/internet/iocpreactor/setup.py create mode 100644 venv/lib/python3.7/site-packages/twisted/internet/main.py create mode 100644 venv/lib/python3.7/site-packages/twisted/internet/pyuisupport.py create mode 100644 venv/lib/python3.7/site-packages/twisted/internet/reactor.py create mode 100644 venv/lib/python3.7/site-packages/twisted/internet/task.py create mode 100644 venv/lib/python3.7/site-packages/twisted/internet/tcp.py create mode 100644 venv/lib/python3.7/site-packages/twisted/internet/test/_awaittests.py.3only create mode 100644 venv/lib/python3.7/site-packages/twisted/internet/test/_posixifaces.py create mode 100644 venv/lib/python3.7/site-packages/twisted/internet/test/fake_CAs/thing1.pem create mode 100644 venv/lib/python3.7/site-packages/twisted/internet/test/process_cli.py create mode 100644 venv/lib/python3.7/site-packages/twisted/internet/test/reactormixins.py create mode 100644 venv/lib/python3.7/site-packages/twisted/internet/test/test_base.py create mode 100644 venv/lib/python3.7/site-packages/twisted/internet/test/test_baseprocess.py create mode 100644 venv/lib/python3.7/site-packages/twisted/internet/test/test_coroutines.py create mode 100644 venv/lib/python3.7/site-packages/twisted/internet/test/test_endpoints.py create mode 100644 venv/lib/python3.7/site-packages/twisted/internet/test/test_epollreactor.py create mode 100644 venv/lib/python3.7/site-packages/twisted/internet/test/test_filedescriptor.py create mode 100644 venv/lib/python3.7/site-packages/twisted/internet/test/test_gireactor.py create mode 100644 venv/lib/python3.7/site-packages/twisted/internet/test/test_glibbase.py create mode 100644 venv/lib/python3.7/site-packages/twisted/internet/test/test_inlinecb.py create mode 100644 venv/lib/python3.7/site-packages/twisted/internet/test/test_kqueuereactor.py create mode 100644 venv/lib/python3.7/site-packages/twisted/internet/test/test_process.py create mode 100644 venv/lib/python3.7/site-packages/twisted/internet/test/test_sigchld.py create mode 100644 venv/lib/python3.7/site-packages/twisted/internet/test/test_stdio.py create mode 100644 venv/lib/python3.7/site-packages/twisted/internet/test/test_tcp.py create mode 100644 venv/lib/python3.7/site-packages/twisted/internet/test/test_testing.py create mode 100644 venv/lib/python3.7/site-packages/twisted/internet/test/test_win32serialport.py create mode 100644 venv/lib/python3.7/site-packages/twisted/internet/tksupport.py create mode 100644 venv/lib/python3.7/site-packages/twisted/internet/wxreactor.py create mode 100644 venv/lib/python3.7/site-packages/twisted/internet/wxsupport.py create mode 100644 venv/lib/python3.7/site-packages/twisted/logger/_buffer.py create mode 100644 venv/lib/python3.7/site-packages/twisted/logger/_file.py create mode 100644 venv/lib/python3.7/site-packages/twisted/logger/_levels.py create mode 100644 venv/lib/python3.7/site-packages/twisted/logger/_logger.py create mode 100644 venv/lib/python3.7/site-packages/twisted/logger/test/test_buffer.py create mode 100644 venv/lib/python3.7/site-packages/twisted/logger/test/test_capture.py create mode 100644 venv/lib/python3.7/site-packages/twisted/logger/test/test_file.py create mode 100644 venv/lib/python3.7/site-packages/twisted/logger/test/test_global.py create mode 100644 venv/lib/python3.7/site-packages/twisted/logger/test/test_levels.py create mode 100644 venv/lib/python3.7/site-packages/twisted/logger/test/test_stdlib.py create mode 100644 venv/lib/python3.7/site-packages/twisted/mail/imap4.py create mode 100644 venv/lib/python3.7/site-packages/twisted/mail/protocols.py create mode 100644 venv/lib/python3.7/site-packages/twisted/mail/scripts/mailmail.py create mode 100644 venv/lib/python3.7/site-packages/twisted/mail/smtp.py create mode 100644 venv/lib/python3.7/site-packages/twisted/mail/test/test_imap.py create mode 100644 venv/lib/python3.7/site-packages/twisted/names/_rfc1982.py create mode 100644 venv/lib/python3.7/site-packages/twisted/names/resolve.py create mode 100644 venv/lib/python3.7/site-packages/twisted/names/server.py create mode 100644 venv/lib/python3.7/site-packages/twisted/names/test/test_common.py create mode 100644 venv/lib/python3.7/site-packages/twisted/names/test/test_dns.py create mode 100644 venv/lib/python3.7/site-packages/twisted/names/test/test_rfc1982.py create mode 100644 venv/lib/python3.7/site-packages/twisted/names/test/test_rootresolve.py create mode 100644 venv/lib/python3.7/site-packages/twisted/names/test/test_util.py create mode 100644 venv/lib/python3.7/site-packages/twisted/pair/test/test_tuntap.py create mode 100644 venv/lib/python3.7/site-packages/twisted/persisted/styles.py create mode 100644 venv/lib/python3.7/site-packages/twisted/plugins/autobahn_endpoints.py create mode 100644 venv/lib/python3.7/site-packages/twisted/plugins/cred_file.py create mode 100644 venv/lib/python3.7/site-packages/twisted/plugins/cred_unix.py create mode 100644 venv/lib/python3.7/site-packages/twisted/plugins/fd_endpoint.py create mode 100644 venv/lib/python3.7/site-packages/twisted/plugins/twisted_core.py create mode 100644 venv/lib/python3.7/site-packages/twisted/plugins/twisted_names.py create mode 100644 venv/lib/python3.7/site-packages/twisted/plugins/twisted_words.py create mode 100644 venv/lib/python3.7/site-packages/twisted/positioning/base.py create mode 100644 venv/lib/python3.7/site-packages/twisted/positioning/test/receiver.py create mode 100644 venv/lib/python3.7/site-packages/twisted/positioning/test/test_sentence.py create mode 100644 venv/lib/python3.7/site-packages/twisted/protocols/amp.py create mode 100644 venv/lib/python3.7/site-packages/twisted/protocols/finger.py create mode 100644 venv/lib/python3.7/site-packages/twisted/protocols/haproxy/_parser.py create mode 100644 venv/lib/python3.7/site-packages/twisted/protocols/haproxy/_v1parser.py create mode 100644 venv/lib/python3.7/site-packages/twisted/protocols/haproxy/_wrapper.py create mode 100644 venv/lib/python3.7/site-packages/twisted/protocols/haproxy/test/__init__.py create mode 100644 venv/lib/python3.7/site-packages/twisted/protocols/htb.py create mode 100644 venv/lib/python3.7/site-packages/twisted/protocols/postfix.py create mode 100644 venv/lib/python3.7/site-packages/twisted/protocols/sip.py create mode 100644 venv/lib/python3.7/site-packages/twisted/protocols/socks.py create mode 100644 venv/lib/python3.7/site-packages/twisted/protocols/wire.py create mode 100644 venv/lib/python3.7/site-packages/twisted/python/__init__.py create mode 100644 venv/lib/python3.7/site-packages/twisted/python/_appdirs.py create mode 100644 venv/lib/python3.7/site-packages/twisted/python/_setup.py create mode 100644 venv/lib/python3.7/site-packages/twisted/python/_textattributes.py create mode 100644 venv/lib/python3.7/site-packages/twisted/python/_tzhelper.py create mode 100644 venv/lib/python3.7/site-packages/twisted/python/constants.py create mode 100644 venv/lib/python3.7/site-packages/twisted/python/context.py create mode 100644 venv/lib/python3.7/site-packages/twisted/python/deprecate.py create mode 100644 venv/lib/python3.7/site-packages/twisted/python/failure.py create mode 100644 venv/lib/python3.7/site-packages/twisted/python/lockfile.py create mode 100644 venv/lib/python3.7/site-packages/twisted/python/log.py create mode 100644 venv/lib/python3.7/site-packages/twisted/python/monkey.py create mode 100644 venv/lib/python3.7/site-packages/twisted/python/rebuild.py create mode 100644 venv/lib/python3.7/site-packages/twisted/python/reflect.py create mode 100644 venv/lib/python3.7/site-packages/twisted/python/release.py create mode 100644 venv/lib/python3.7/site-packages/twisted/python/test/__init__.py create mode 100644 venv/lib/python3.7/site-packages/twisted/python/test/modules_helpers.py create mode 100644 venv/lib/python3.7/site-packages/twisted/python/test/pullpipe.py create mode 100644 venv/lib/python3.7/site-packages/twisted/python/test/test_urlpath.py create mode 100644 venv/lib/python3.7/site-packages/twisted/python/test/test_zippath.py create mode 100644 venv/lib/python3.7/site-packages/twisted/python/versions.py create mode 100644 venv/lib/python3.7/site-packages/twisted/runner/__init__.py create mode 100644 venv/lib/python3.7/site-packages/twisted/runner/inetd.py create mode 100644 venv/lib/python3.7/site-packages/twisted/runner/inetdtap.py create mode 100644 venv/lib/python3.7/site-packages/twisted/runner/test/test_procmon.py create mode 100644 venv/lib/python3.7/site-packages/twisted/scripts/test/__init__.py create mode 100644 venv/lib/python3.7/site-packages/twisted/scripts/trial.py create mode 100644 venv/lib/python3.7/site-packages/twisted/scripts/twistd.py create mode 100644 venv/lib/python3.7/site-packages/twisted/spread/pb.py create mode 100644 venv/lib/python3.7/site-packages/twisted/spread/publish.py create mode 100644 venv/lib/python3.7/site-packages/twisted/spread/test/__init__.py create mode 100644 venv/lib/python3.7/site-packages/twisted/spread/test/test_banana.py create mode 100644 venv/lib/python3.7/site-packages/twisted/spread/test/test_pbfailure.py create mode 100644 venv/lib/python3.7/site-packages/twisted/spread/util.py create mode 100644 venv/lib/python3.7/site-packages/twisted/tap/ftp.py create mode 100644 venv/lib/python3.7/site-packages/twisted/tap/socks.py create mode 100644 venv/lib/python3.7/site-packages/twisted/test/crash_test_dummy.py create mode 100644 venv/lib/python3.7/site-packages/twisted/test/iosim.py create mode 100644 venv/lib/python3.7/site-packages/twisted/test/myrebuilder2.py create mode 100644 venv/lib/python3.7/site-packages/twisted/test/plugin_extra2.py create mode 100644 venv/lib/python3.7/site-packages/twisted/test/process_cmdline.py create mode 100644 venv/lib/python3.7/site-packages/twisted/test/process_echoer.py create mode 100644 venv/lib/python3.7/site-packages/twisted/test/process_fds.py create mode 100644 venv/lib/python3.7/site-packages/twisted/test/process_tester.py create mode 100644 venv/lib/python3.7/site-packages/twisted/test/process_twisted.py create mode 100644 venv/lib/python3.7/site-packages/twisted/test/reflect_helper_ZDE.py create mode 100644 venv/lib/python3.7/site-packages/twisted/test/stdio_test_loseconn.py create mode 100644 venv/lib/python3.7/site-packages/twisted/test/stdio_test_producer.py create mode 100644 venv/lib/python3.7/site-packages/twisted/test/test_compat.py create mode 100644 venv/lib/python3.7/site-packages/twisted/test/test_cooperator.py create mode 100644 venv/lib/python3.7/site-packages/twisted/test/test_dict.py create mode 100644 venv/lib/python3.7/site-packages/twisted/test/test_ident.py create mode 100644 venv/lib/python3.7/site-packages/twisted/test/test_log.py create mode 100644 venv/lib/python3.7/site-packages/twisted/test/test_logfile.py create mode 100644 venv/lib/python3.7/site-packages/twisted/test/test_loopback.py create mode 100644 venv/lib/python3.7/site-packages/twisted/test/test_main.py create mode 100644 venv/lib/python3.7/site-packages/twisted/test/test_protocols.py create mode 100644 venv/lib/python3.7/site-packages/twisted/test/test_reflect.py create mode 100644 venv/lib/python3.7/site-packages/twisted/test/test_shortcut.py create mode 100644 venv/lib/python3.7/site-packages/twisted/test/test_sob.py create mode 100644 venv/lib/python3.7/site-packages/twisted/test/test_stdio.py create mode 100644 venv/lib/python3.7/site-packages/twisted/test/test_task.py create mode 100644 venv/lib/python3.7/site-packages/twisted/test/test_threadable.py create mode 100644 venv/lib/python3.7/site-packages/twisted/test/test_threadpool.py create mode 100644 venv/lib/python3.7/site-packages/twisted/test/test_threads.py create mode 100644 venv/lib/python3.7/site-packages/twisted/test/test_tpfile.py create mode 100644 venv/lib/python3.7/site-packages/twisted/test/test_usage.py create mode 100644 venv/lib/python3.7/site-packages/twisted/trial/__main__.py create mode 100644 venv/lib/python3.7/site-packages/twisted/trial/_asynctest.py create mode 100644 venv/lib/python3.7/site-packages/twisted/trial/_dist/__init__.py create mode 100644 venv/lib/python3.7/site-packages/twisted/trial/_dist/test/test_worker.py create mode 100644 venv/lib/python3.7/site-packages/twisted/trial/_dist/test/test_workerreporter.py create mode 100644 venv/lib/python3.7/site-packages/twisted/trial/_dist/test/test_workertrial.py create mode 100644 venv/lib/python3.7/site-packages/twisted/trial/_synctest.py create mode 100644 venv/lib/python3.7/site-packages/twisted/trial/reporter.py create mode 100644 venv/lib/python3.7/site-packages/twisted/trial/test/mockcustomsuite2.py create mode 100644 venv/lib/python3.7/site-packages/twisted/trial/test/packages.py create mode 100644 venv/lib/python3.7/site-packages/twisted/trial/test/skipping.py create mode 100644 venv/lib/python3.7/site-packages/twisted/trial/test/test_assertions.py create mode 100644 venv/lib/python3.7/site-packages/twisted/trial/test/test_plugins.py create mode 100644 venv/lib/python3.7/site-packages/twisted/trial/test/test_pyunitcompat.py create mode 100644 venv/lib/python3.7/site-packages/twisted/trial/test/test_reporter.py create mode 100644 venv/lib/python3.7/site-packages/twisted/trial/test/test_runner.py create mode 100644 venv/lib/python3.7/site-packages/twisted/trial/test/test_script.py create mode 100644 venv/lib/python3.7/site-packages/twisted/trial/test/test_testcase.py create mode 100644 venv/lib/python3.7/site-packages/twisted/trial/test/test_util.py create mode 100644 venv/lib/python3.7/site-packages/twisted/trial/util.py create mode 100644 venv/lib/python3.7/site-packages/twisted/web/_auth/__init__.py create mode 100644 venv/lib/python3.7/site-packages/twisted/web/_flatten.py create mode 100644 venv/lib/python3.7/site-packages/twisted/web/_newclient.py create mode 100644 venv/lib/python3.7/site-packages/twisted/web/html.py create mode 100644 venv/lib/python3.7/site-packages/twisted/web/http.py create mode 100644 venv/lib/python3.7/site-packages/twisted/web/iweb.py create mode 100644 venv/lib/python3.7/site-packages/twisted/web/rewrite.py create mode 100644 venv/lib/python3.7/site-packages/twisted/web/script.py create mode 100644 venv/lib/python3.7/site-packages/twisted/web/static.py create mode 100644 venv/lib/python3.7/site-packages/twisted/web/tap.py create mode 100644 venv/lib/python3.7/site-packages/twisted/web/template.py create mode 100644 venv/lib/python3.7/site-packages/twisted/web/test/_util.py create mode 100644 venv/lib/python3.7/site-packages/twisted/web/test/test_distrib.py create mode 100644 venv/lib/python3.7/site-packages/twisted/web/test/test_html.py create mode 100644 venv/lib/python3.7/site-packages/twisted/web/test/test_http_headers.py create mode 100644 venv/lib/python3.7/site-packages/twisted/web/test/test_newclient.py create mode 100644 venv/lib/python3.7/site-packages/twisted/web/test/test_resource.py create mode 100644 venv/lib/python3.7/site-packages/twisted/web/test/test_vhost.py create mode 100644 venv/lib/python3.7/site-packages/twisted/web/test/test_web.py create mode 100644 venv/lib/python3.7/site-packages/twisted/web/test/test_web__responses.py create mode 100644 venv/lib/python3.7/site-packages/twisted/web/test/test_wsgi.py create mode 100644 venv/lib/python3.7/site-packages/twisted/web/test/test_xmlrpc.py create mode 100644 venv/lib/python3.7/site-packages/twisted/web/twcgi.py create mode 100644 venv/lib/python3.7/site-packages/twisted/web/xmlrpc.py create mode 100644 venv/lib/python3.7/site-packages/twisted/words/__init__.py create mode 100644 venv/lib/python3.7/site-packages/twisted/words/im/instancemessenger.glade create mode 100644 venv/lib/python3.7/site-packages/twisted/words/im/ircsupport.py create mode 100644 venv/lib/python3.7/site-packages/twisted/words/im/pbsupport.py create mode 100644 venv/lib/python3.7/site-packages/twisted/words/iwords.py create mode 100644 venv/lib/python3.7/site-packages/twisted/words/protocols/jabber/sasl.py create mode 100644 venv/lib/python3.7/site-packages/twisted/words/protocols/jabber/sasl_mechanisms.py create mode 100644 venv/lib/python3.7/site-packages/twisted/words/protocols/jabber/xmlstream.py create mode 100644 venv/lib/python3.7/site-packages/twisted/words/protocols/jabber/xmpp_stringprep.py create mode 100644 venv/lib/python3.7/site-packages/twisted/words/service.py create mode 100644 venv/lib/python3.7/site-packages/twisted/words/test/__init__.py create mode 100644 venv/lib/python3.7/site-packages/twisted/words/test/test_irc.py create mode 100644 venv/lib/python3.7/site-packages/twisted/words/test/test_jabbercomponent.py create mode 100644 venv/lib/python3.7/site-packages/twisted/words/test/test_jabberjstrports.py create mode 100644 venv/lib/python3.7/site-packages/twisted/words/test/test_jabberxmppstringprep.py create mode 100644 venv/lib/python3.7/site-packages/twisted/words/test/test_tap.py create mode 100644 venv/lib/python3.7/site-packages/twisted/words/test/test_xishutil.py create mode 100644 venv/lib/python3.7/site-packages/twisted/words/test/test_xmpproutertap.py create mode 100644 venv/lib/python3.7/site-packages/twisted/words/xish/__init__.py create mode 100644 venv/lib/python3.7/site-packages/twisted/words/xish/xpath.py create mode 100644 venv/lib/python3.7/site-packages/twisted/words/xish/xpathparser.g create mode 100644 venv/lib/python3.7/site-packages/twisted/words/xish/xpathparser.py create mode 100644 venv/lib/python3.7/site-packages/txaio-18.8.1.dist-info/INSTALLER create mode 100644 venv/lib/python3.7/site-packages/txaio-18.8.1.dist-info/METADATA create mode 100644 venv/lib/python3.7/site-packages/txaio-18.8.1.dist-info/top_level.txt create mode 100644 venv/lib/python3.7/site-packages/txaio-18.8.1.dist-info/zip-safe create mode 100644 venv/lib/python3.7/site-packages/txaio/_iotype.py create mode 100644 venv/lib/python3.7/site-packages/txaio/_version.py create mode 100644 venv/lib/python3.7/site-packages/txaio/interfaces.py create mode 100644 venv/lib/python3.7/site-packages/urllib3-1.25.7.dist-info/LICENSE.txt create mode 100644 venv/lib/python3.7/site-packages/urllib3-1.25.7.dist-info/WHEEL create mode 100644 venv/lib/python3.7/site-packages/urllib3-1.25.7.dist-info/top_level.txt create mode 100644 venv/lib/python3.7/site-packages/urllib3/connection.py create mode 100644 venv/lib/python3.7/site-packages/urllib3/contrib/__init__.py create mode 100644 venv/lib/python3.7/site-packages/urllib3/contrib/_securetransport/bindings.py create mode 100644 venv/lib/python3.7/site-packages/urllib3/contrib/ntlmpool.py create mode 100644 venv/lib/python3.7/site-packages/urllib3/contrib/securetransport.py create mode 100644 venv/lib/python3.7/site-packages/urllib3/filepost.py create mode 100644 venv/lib/python3.7/site-packages/urllib3/packages/backports/makefile.py create mode 100644 venv/lib/python3.7/site-packages/urllib3/packages/six.py create mode 100644 venv/lib/python3.7/site-packages/urllib3/request.py create mode 100644 venv/lib/python3.7/site-packages/urllib3/response.py create mode 100644 venv/lib/python3.7/site-packages/urllib3/util/__init__.py create mode 100644 venv/lib/python3.7/site-packages/urllib3/util/connection.py create mode 100644 venv/lib/python3.7/site-packages/urllib3/util/queue.py create mode 100644 venv/lib/python3.7/site-packages/urllib3/util/request.py create mode 100644 venv/lib/python3.7/site-packages/urllib3/util/retry.py create mode 100644 venv/lib/python3.7/site-packages/urllib3/util/ssl_.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/__init__.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/contrib/sessions.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/debug/console.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/debug/shared/debugger.js create mode 100644 venv/lib/python3.7/site-packages/werkzeug/debug/shared/less.png create mode 100644 venv/lib/python3.7/site-packages/werkzeug/debug/shared/more.png create mode 100644 venv/lib/python3.7/site-packages/werkzeug/debug/shared/source.png create mode 100644 venv/lib/python3.7/site-packages/werkzeug/debug/tbtools.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/exceptions.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/filesystem.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/http.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/middleware/lint.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/posixemulation.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/security.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/useragents.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/utils.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/wrappers/auth.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/wrappers/base_request.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/wrappers/base_response.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/wrappers/json.py create mode 100644 venv/lib/python3.7/site-packages/werkzeug/wsgi.py create mode 100644 venv/lib/python3.7/site-packages/zope.interface-4.7.1-py3.7-nspkg.pth create mode 100644 venv/lib/python3.7/site-packages/zope.interface-4.7.1.dist-info/INSTALLER create mode 100644 venv/lib/python3.7/site-packages/zope.interface-4.7.1.dist-info/LICENSE.txt create mode 100644 venv/lib/python3.7/site-packages/zope.interface-4.7.1.dist-info/RECORD create mode 100644 venv/lib/python3.7/site-packages/zope.interface-4.7.1.dist-info/WHEEL create mode 100644 venv/lib/python3.7/site-packages/zope.interface-4.7.1.dist-info/top_level.txt create mode 100644 venv/lib/python3.7/site-packages/zope/interface/_flatten.py create mode 100644 venv/lib/python3.7/site-packages/zope/interface/_zope_interface_coptimizations.c create mode 100644 venv/lib/python3.7/site-packages/zope/interface/adapter.py create mode 100644 venv/lib/python3.7/site-packages/zope/interface/common/__init__.py create mode 100644 venv/lib/python3.7/site-packages/zope/interface/common/idatetime.py create mode 100644 venv/lib/python3.7/site-packages/zope/interface/common/sequence.py create mode 100644 venv/lib/python3.7/site-packages/zope/interface/common/tests/__init__.py create mode 100644 venv/lib/python3.7/site-packages/zope/interface/common/tests/basemapping.py create mode 100644 venv/lib/python3.7/site-packages/zope/interface/ro.py create mode 100644 venv/lib/python3.7/site-packages/zope/interface/tests/idummy.py create mode 100644 venv/lib/python3.7/site-packages/zope/interface/tests/test_adapter.py create mode 100644 venv/lib/python3.7/site-packages/zope/interface/tests/test_element.py create mode 100644 venv/lib/python3.7/site-packages/zope/interface/tests/test_registry.py create mode 100644 venv/lib/python3.7/site-packages/zope/interface/tests/test_sorting.py diff --git a/venv/bin/activate b/venv/bin/activate new file mode 100644 index 0000000..5655bba --- /dev/null +++ b/venv/bin/activate @@ -0,0 +1,76 @@ +# This file must be used with "source bin/activate" *from bash* +# you cannot run it directly + +deactivate () { + # reset old environment variables + if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then + PATH="${_OLD_VIRTUAL_PATH:-}" + export PATH + unset _OLD_VIRTUAL_PATH + fi + if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then + PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}" + export PYTHONHOME + unset _OLD_VIRTUAL_PYTHONHOME + fi + + # This should detect bash and zsh, which have a hash command that must + # be called to get it to forget past commands. Without forgetting + # past commands the $PATH changes we made may not be respected + if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then + hash -r + fi + + if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then + PS1="${_OLD_VIRTUAL_PS1:-}" + export PS1 + unset _OLD_VIRTUAL_PS1 + fi + + unset VIRTUAL_ENV + if [ ! "$1" = "nondestructive" ] ; then + # Self destruct! + unset -f deactivate + fi +} + +# unset irrelevant variables +deactivate nondestructive + +VIRTUAL_ENV="/Users/gillmannma68984/PycharmProjects/git/demoweb/venv" +export VIRTUAL_ENV + +_OLD_VIRTUAL_PATH="$PATH" +PATH="$VIRTUAL_ENV/bin:$PATH" +export PATH + +# unset PYTHONHOME if set +# this will fail if PYTHONHOME is set to the empty string (which is bad anyway) +# could use `if (set -u; : $PYTHONHOME) ;` in bash +if [ -n "${PYTHONHOME:-}" ] ; then + _OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}" + unset PYTHONHOME +fi + +if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then + _OLD_VIRTUAL_PS1="${PS1:-}" + if [ "x(venv) " != x ] ; then + PS1="(venv) ${PS1:-}" + else + if [ "`basename \"$VIRTUAL_ENV\"`" = "__" ] ; then + # special case for Aspen magic directories + # see http://www.zetadev.com/software/aspen/ + PS1="[`basename \`dirname \"$VIRTUAL_ENV\"\``] $PS1" + else + PS1="(`basename \"$VIRTUAL_ENV\"`)$PS1" + fi + fi + export PS1 +fi + +# This should detect bash and zsh, which have a hash command that must +# be called to get it to forget past commands. Without forgetting +# past commands the $PATH changes we made may not be respected +if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then + hash -r +fi diff --git a/venv/bin/activate.csh b/venv/bin/activate.csh new file mode 100644 index 0000000..79b6d69 --- /dev/null +++ b/venv/bin/activate.csh @@ -0,0 +1,37 @@ +# This file must be used with "source bin/activate.csh" *from csh*. +# You cannot run it directly. +# Created by Davide Di Blasi . +# Ported to Python 3.3 venv by Andrew Svetlov + +alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; test "\!:*" != "nondestructive" && unalias deactivate' + +# Unset irrelevant variables. +deactivate nondestructive + +setenv VIRTUAL_ENV "/Users/gillmannma68984/PycharmProjects/git/demoweb/venv" + +set _OLD_VIRTUAL_PATH="$PATH" +setenv PATH "$VIRTUAL_ENV/bin:$PATH" + + +set _OLD_VIRTUAL_PROMPT="$prompt" + +if (! "$?VIRTUAL_ENV_DISABLE_PROMPT") then + if ("venv" != "") then + set env_name = "venv" + else + if (`basename "VIRTUAL_ENV"` == "__") then + # special case for Aspen magic directories + # see http://www.zetadev.com/software/aspen/ + set env_name = `basename \`dirname "$VIRTUAL_ENV"\`` + else + set env_name = `basename "$VIRTUAL_ENV"` + endif + endif + set prompt = "[$env_name] $prompt" + unset env_name +endif + +alias pydoc python -m pydoc + +rehash diff --git a/venv/bin/automat-visualize b/venv/bin/automat-visualize new file mode 100755 index 0000000..5a35a8d --- /dev/null +++ b/venv/bin/automat-visualize @@ -0,0 +1,11 @@ +#!/Users/gillmannma68984/PycharmProjects/git/demoweb/venv/bin/python + +# -*- coding: utf-8 -*- +import re +import sys + +from automat._visualize import tool + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(tool()) diff --git a/venv/bin/django-admin b/venv/bin/django-admin new file mode 100755 index 0000000..f436aa8 --- /dev/null +++ b/venv/bin/django-admin @@ -0,0 +1,11 @@ +#!/Users/gillmannma68984/PycharmProjects/git/demoweb/venv/bin/python + +# -*- coding: utf-8 -*- +import re +import sys + +from django.core.management import execute_from_command_line + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(execute_from_command_line()) diff --git a/venv/bin/mailmail b/venv/bin/mailmail new file mode 100755 index 0000000..139c5da --- /dev/null +++ b/venv/bin/mailmail @@ -0,0 +1,12 @@ +#!/Users/gillmannma68984/PycharmProjects/git/demoweb/venv/bin/python +# EASY-INSTALL-ENTRY-SCRIPT: 'Twisted==19.10.0','console_scripts','mailmail' +__requires__ = 'Twisted==19.10.0' +import re +import sys +from pkg_resources import load_entry_point + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit( + load_entry_point('Twisted==19.10.0', 'console_scripts', 'mailmail')() + ) diff --git a/venv/bin/pip b/venv/bin/pip new file mode 100755 index 0000000..e04a4d3 --- /dev/null +++ b/venv/bin/pip @@ -0,0 +1,12 @@ +#!/Users/gillmannma68984/PycharmProjects/git/demoweb/venv/bin/python +# EASY-INSTALL-ENTRY-SCRIPT: 'pip==10.0.1','console_scripts','pip' +__requires__ = 'pip==10.0.1' +import re +import sys +from pkg_resources import load_entry_point + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit( + load_entry_point('pip==10.0.1', 'console_scripts', 'pip')() + ) diff --git a/venv/bin/pip3.7 b/venv/bin/pip3.7 new file mode 100755 index 0000000..27ad998 --- /dev/null +++ b/venv/bin/pip3.7 @@ -0,0 +1,12 @@ +#!/Users/gillmannma68984/PycharmProjects/git/demoweb/venv/bin/python +# EASY-INSTALL-ENTRY-SCRIPT: 'pip==10.0.1','console_scripts','pip3.7' +__requires__ = 'pip==10.0.1' +import re +import sys +from pkg_resources import load_entry_point + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit( + load_entry_point('pip==10.0.1', 'console_scripts', 'pip3.7')() + ) diff --git a/venv/bin/trial b/venv/bin/trial new file mode 100755 index 0000000..911880f --- /dev/null +++ b/venv/bin/trial @@ -0,0 +1,12 @@ +#!/Users/gillmannma68984/PycharmProjects/git/demoweb/venv/bin/python +# EASY-INSTALL-ENTRY-SCRIPT: 'Twisted==19.10.0','console_scripts','trial' +__requires__ = 'Twisted==19.10.0' +import re +import sys +from pkg_resources import load_entry_point + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit( + load_entry_point('Twisted==19.10.0', 'console_scripts', 'trial')() + ) diff --git a/venv/bin/twist b/venv/bin/twist new file mode 100755 index 0000000..d2ec0b2 --- /dev/null +++ b/venv/bin/twist @@ -0,0 +1,12 @@ +#!/Users/gillmannma68984/PycharmProjects/git/demoweb/venv/bin/python +# EASY-INSTALL-ENTRY-SCRIPT: 'Twisted==19.10.0','console_scripts','twist' +__requires__ = 'Twisted==19.10.0' +import re +import sys +from pkg_resources import load_entry_point + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit( + load_entry_point('Twisted==19.10.0', 'console_scripts', 'twist')() + ) diff --git a/venv/bin/wamp b/venv/bin/wamp new file mode 100755 index 0000000..4450709 --- /dev/null +++ b/venv/bin/wamp @@ -0,0 +1,11 @@ +#!/Users/gillmannma68984/PycharmProjects/git/demoweb/venv/bin/python + +# -*- coding: utf-8 -*- +import re +import sys + +from autobahn.__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/lib/python3.7/site-packages/Automat-0.8.0.dist-info/INSTALLER b/venv/lib/python3.7/site-packages/Automat-0.8.0.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/lib/python3.7/site-packages/Automat-0.8.0.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/lib/python3.7/site-packages/Automat-0.8.0.dist-info/LICENSE b/venv/lib/python3.7/site-packages/Automat-0.8.0.dist-info/LICENSE new file mode 100644 index 0000000..9773501 --- /dev/null +++ b/venv/lib/python3.7/site-packages/Automat-0.8.0.dist-info/LICENSE @@ -0,0 +1,21 @@ +Copyright (c) 2014 +Rackspace + +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.7/site-packages/Automat-0.8.0.dist-info/METADATA b/venv/lib/python3.7/site-packages/Automat-0.8.0.dist-info/METADATA new file mode 100644 index 0000000..3f0d9a0 --- /dev/null +++ b/venv/lib/python3.7/site-packages/Automat-0.8.0.dist-info/METADATA @@ -0,0 +1,486 @@ +Metadata-Version: 2.1 +Name: Automat +Version: 0.8.0 +Summary: Self-service finite-state machines for the programmer on the go. +Home-page: https://github.com/glyph/Automat +Author: Glyph +Author-email: glyph@twistedmatrix.com +License: MIT +Keywords: fsm finite state machine automata +Platform: UNKNOWN +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.5 +Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Requires-Dist: attrs (>=16.1.0) +Requires-Dist: six +Provides-Extra: visualize +Requires-Dist: graphviz (>0.5.1) ; extra == 'visualize' +Requires-Dist: Twisted (>=16.1.1) ; extra == 'visualize' + +Automat +======= + + +.. image:: https://readthedocs.org/projects/automat/badge/?version=latest + :target: http://automat.readthedocs.io/en/latest/ + :alt: Documentation Status + + +.. image:: https://travis-ci.org/glyph/automat.svg?branch=master + :target: https://travis-ci.org/glyph/automat + :alt: Build Status + + +.. image:: https://coveralls.io/repos/glyph/automat/badge.png + :target: https://coveralls.io/r/glyph/automat + :alt: Coverage Status + + +Self-service finite-state machines for the programmer on the go. +---------------------------------------------------------------- + +Automat is a library for concise, idiomatic Python expression of finite-state +automata (particularly deterministic finite-state transducers). + +Read more here, or on `Read the Docs `_\ , or watch the following videos for an overview and presentation + +Overview and presentation by **Glyph Lefkowitz** at the first talk of the first Pyninsula meetup, on February 21st, 2017: + +.. image:: https://img.youtube.com/vi/0wOZBpD1VVk/0.jpg + :target: https://www.youtube.com/watch?v=0wOZBpD1VVk + :alt: Glyph Lefkowitz - Automat - Pyninsula #0 + + +Presentation by **Clinton Roy** at PyCon Australia, on August 6th 2017: + +.. image:: https://img.youtube.com/vi/TedUKXhu9kE/0.jpg + :target: https://www.youtube.com/watch?v=TedUKXhu9kE + :alt: Clinton Roy - State Machines - Pycon Australia 2017 + + +Why use state machines? +^^^^^^^^^^^^^^^^^^^^^^^ + +Sometimes you have to create an object whose behavior varies with its state, +but still wishes to present a consistent interface to its callers. + +For example, let's say you're writing the software for a coffee machine. It +has a lid that can be opened or closed, a chamber for water, a chamber for +coffee beans, and a button for "brew". + +There are a number of possible states for the coffee machine. It might or +might not have water. It might or might not have beans. The lid might be open +or closed. The "brew" button should only actually attempt to brew coffee in +one of these configurations, and the "open lid" button should only work if the +coffee is not, in fact, brewing. + +With diligence and attention to detail, you can implement this correctly using +a collection of attributes on an object; ``has_water``\ , ``has_beans``\ , +``is_lid_open`` and so on. However, you have to keep all these attributes +consistent. As the coffee maker becomes more complex - perhaps you add an +additional chamber for flavorings so you can make hazelnut coffee, for +example - you have to keep adding more and more checks and more and more +reasoning about which combinations of states are allowed. + +Rather than adding tedious 'if' checks to every single method to make sure that +each of these flags are exactly what you expect, you can use a state machine to +ensure that if your code runs at all, it will be run with all the required +values initialized, because they have to be called in the order you declare +them. + +You can read about state machines and their advantages for Python programmers +in considerably more detail +`in this excellent series of articles from ClusterHQ `_. + +What makes Automat different? +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +There are +`dozens of libraries on PyPI implementing state machines `_. +So it behooves me to say why yet another one would be a good idea. + +Automat is designed around this principle: while organizing your code around +state machines is a good idea, your callers don't, and shouldn't have to, care +that you've done so. In Python, the "input" to a stateful system is a method +call; the "output" may be a method call, if you need to invoke a side effect, +or a return value, if you are just performing a computation in memory. Most +other state-machine libraries require you to explicitly create an input object, +provide that object to a generic "input" method, and then receive results, +sometimes in terms of that library's interfaces and sometimes in terms of +classes you define yourself. + +For example, a snippet of the coffee-machine example above might be implemented +as follows in naive Python: + +.. code-block:: python + + class CoffeeMachine(object): + def brew_button(self): + if self.has_water and self.has_beans and not self.is_lid_open: + self.heat_the_heating_element() + # ... + +With Automat, you'd create a class with a ``MethodicalMachine`` attribute: + +.. code-block:: python + + from automat import MethodicalMachine + + class CoffeeBrewer(object): + _machine = MethodicalMachine() + +and then you would break the above logic into two pieces - the ``brew_button`` +*input*\ , declared like so: + +.. code-block:: python + + @_machine.input() + def brew_button(self): + "The user pressed the 'brew' button." + +It wouldn't do any good to declare a method *body* on this, however, because +input methods don't actually execute their bodies when called; doing actual +work is the *output*\ 's job: + +.. code-block:: python + + @_machine.output() + def _heat_the_heating_element(self): + "Heat up the heating element, which should cause coffee to happen." + self._heating_element.turn_on() + +As well as a couple of *states* - and for simplicity's sake let's say that the +only two states are ``have_beans`` and ``dont_have_beans``\ : + +.. code-block:: python + + @_machine.state() + def have_beans(self): + "In this state, you have some beans." + @_machine.state(initial=True) + def dont_have_beans(self): + "In this state, you don't have any beans." + +``dont_have_beans`` is the ``initial`` state because ``CoffeeBrewer`` starts without beans +in it. + +(And another input to put some beans in:) + +.. code-block:: python + + @_machine.input() + def put_in_beans(self): + "The user put in some beans." + +Finally, you hook everything together with the ``upon`` method of the functions +decorated with ``_machine.state``\ : + +.. code-block:: python + + + # When we don't have beans, upon putting in beans, we will then have beans + # (and produce no output) + dont_have_beans.upon(put_in_beans, enter=have_beans, outputs=[]) + + # When we have beans, upon pressing the brew button, we will then not have + # beans any more (as they have been entered into the brewing chamber) and + # our output will be heating the heating element. + have_beans.upon(brew_button, enter=dont_have_beans, + outputs=[_heat_the_heating_element]) + +To *users* of this coffee machine class though, it still looks like a POPO +(Plain Old Python Object): + +.. code-block:: python + + >>> coffee_machine = CoffeeMachine() + >>> coffee_machine.put_in_beans() + >>> coffee_machine.brew_button() + +All of the *inputs* are provided by calling them like methods, all of the +*outputs* are automatically invoked when they are produced according to the +outputs specified to ``upon`` and all of the states are simply opaque tokens - +although the fact that they're defined as methods like inputs and outputs +allows you to put docstrings on them easily to document them. + +How do I get the current state of a state machine? +-------------------------------------------------- + +Don't do that. + +One major reason for having a state machine is that you want the callers of the +state machine to just provide the appropriate input to the machine at the +appropriate time, and *not have to check themselves* what state the machine is +in. So if you are tempted to write some code like this: + +.. code-block:: python + + if connection_state_machine.state == "CONNECTED": + connection_state_machine.send_message() + else: + print("not connected") + +Instead, just make your calling code do this: + +.. code-block:: python + + connection_state_machine.send_message() + +and then change your state machine to look like this: + +.. code-block:: python + + @_machine.state() + def connected(self): + "connected" + @_machine.state() + def not_connected(self): + "not connected" + @_machine.input() + def send_message(self): + "send a message" + @_machine.output() + def _actually_send_message(self): + self._transport.send(b"message") + @_machine.output() + def _report_sending_failure(self): + print("not connected") + connected.upon(send_message, enter=connected, [_actually_send_message]) + not_connected.upon(send_message, enter=not_connected, [_report_sending_failure]) + +so that the responsibility for knowing which state the state machine is in +remains within the state machine itself. + +Input for Inputs and Output for Outputs +--------------------------------------- + +Quite often you want to be able to pass parameters to your methods, as well as +inspecting their results. For example, when you brew the coffee, you might +expect a cup of coffee to result, and you would like to see what kind of coffee +it is. And if you were to put delicious hand-roasted small-batch artisanal +beans into the machine, you would expect a *better* cup of coffee than if you +were to use mass-produced beans. You would do this in plain old Python by +adding a parameter, so that's how you do it in Automat as well. + +.. code-block:: python + + @_machine.input() + def put_in_beans(self, beans): + "The user put in some beans." + +However, one important difference here is that *we can't add any +implementation code to the input method*. Inputs are purely a declaration of +the interface; the behavior must all come from outputs. Therefore, the change +in the state of the coffee machine must be represented as an output. We can +add an output method like this: + +.. code-block:: python + + @_machine.output() + def _save_beans(self, beans): + "The beans are now in the machine; save them." + self._beans = beans + +and then connect it to the ``put_in_beans`` by changing the transition from +``dont_have_beans`` to ``have_beans`` like so: + +.. code-block:: python + + dont_have_beans.upon(put_in_beans, enter=have_beans, + outputs=[_save_beans]) + +Now, when you call: + +.. code-block:: python + + coffee_machine.put_in_beans("real good beans") + +the machine will remember the beans for later. + +So how do we get the beans back out again? One of our outputs needs to have a +return value. It would make sense if our ``brew_button`` method returned the cup +of coffee that it made, so we should add an output. So, in addition to heating +the heating element, let's add a return value that describes the coffee. First +a new output: + +.. code-block:: python + + @_machine.output() + def _describe_coffee(self): + return "A cup of coffee made with {}.".format(self._beans) + +Note that we don't need to check first whether ``self._beans`` exists or not, +because we can only reach this output method if the state machine says we've +gone through a set of states that sets this attribute. + +Now, we need to hook up ``_describe_coffee`` to the process of brewing, so change +the brewing transition to: + +.. code-block:: python + + have_beans.upon(brew_button, enter=dont_have_beans, + outputs=[_heat_the_heating_element, + _describe_coffee]) + +Now, we can call it: + +.. code-block:: python + + >>> coffee_machine.brew_button() + [None, 'A cup of coffee made with real good beans.'] + +Except... wait a second, what's that ``None`` doing there? + +Since every input can produce multiple outputs, in automat, the default return +value from every input invocation is a ``list``. In this case, we have both +``_heat_the_heating_element`` and ``_describe_coffee`` outputs, so we're seeing +both of their return values. However, this can be customized, with the +``collector`` argument to ``upon``\ ; the ``collector`` is a callable which takes an +iterable of all the outputs' return values and "collects" a single return value +to return to the caller of the state machine. + +In this case, we only care about the last output, so we can adjust the call to +``upon`` like this: + +.. code-block:: python + + have_beans.upon(brew_button, enter=dont_have_beans, + outputs=[_heat_the_heating_element, + _describe_coffee], + collector=lambda iterable: list(iterable)[-1] + ) + +And now, we'll get just the return value we want: + +.. code-block:: python + + >>> coffee_machine.brew_button() + 'A cup of coffee made with real good beans.' + +If I can't get the state of the state machine, how can I save it to (a database, an API response, a file on disk...) +-------------------------------------------------------------------------------------------------------------------- + +There are APIs for serializing the state machine. + +First, you have to decide on a persistent representation of each state, via the +``serialized=`` argument to the ``MethodicalMachine.state()`` decorator. + +Let's take this very simple "light switch" state machine, which can be on or +off, and flipped to reverse its state: + +.. code-block:: python + + class LightSwitch(object): + _machine = MethodicalMachine() + @_machine.state(serialized="on") + def on_state(self): + "the switch is on" + @_machine.state(serialized="off", initial=True) + def off_state(self): + "the switch is off" + @_machine.input() + def flip(self): + "flip the switch" + on_state.upon(flip, enter=off_state, outputs=[]) + off_state.upon(flip, enter=on_state, outputs=[]) + +In this case, we've chosen a serialized representation for each state via the +``serialized`` argument. The on state is represented by the string ``"on"``\ , and +the off state is represented by the string ``"off"``. + +Now, let's just add an input that lets us tell if the switch is on or not. + +.. code-block:: python + + @_machine.input() + def query_power(self): + "return True if powered, False otherwise" + @_machine.output() + def _is_powered(self): + return True + @_machine.output() + def _not_powered(self): + return False + on_state.upon(query_power, enter=on_state, outputs=[_is_powered], + collector=next) + off_state.upon(query_power, enter=off_state, outputs=[_not_powered], + collector=next) + +To save the state, we have the ``MethodicalMachine.serializer()`` method. A +method decorated with ``@serializer()`` gets an extra argument injected at the +beginning of its argument list: the serialized identifier for the state. In +this case, either ``"on"`` or ``"off"``. Since state machine output methods can +also affect other state on the object, a serializer method is expected to +return *all* relevant state for serialization. + +For our simple light switch, such a method might look like this: + +.. code-block:: python + + @_machine.serializer() + def save(self, state): + return {"is-it-on": state} + +Serializers can be public methods, and they can return whatever you like. If +necessary, you can have different serializers - just multiple methods decorated +with ``@_machine.serializer()`` - for different formats; return one data-structure +for JSON, one for XML, one for a database row, and so on. + +When it comes time to unserialize, though, you generally want a private method, +because an unserializer has to take a not-fully-initialized instance and +populate it with state. It is expected to *return* the serialized machine +state token that was passed to the serializer, but it can take whatever +arguments you like. Of course, in order to return that, it probably has to +take it somewhere in its arguments, so it will generally take whatever a paired +serializer has returned as an argument. + +So our unserializer would look like this: + +.. code-block:: python + + @_machine.unserializer() + def _restore(self, blob): + return blob["is-it-on"] + +Generally you will want a classmethod deserialization constructor which you +write yourself to call this, so that you know how to create an instance of your +own object, like so: + +.. code-block:: python + + @classmethod + def from_blob(cls, blob): + self = cls() + self._restore(blob) + return self + +Saving and loading our ``LightSwitch`` along with its state-machine state can now +be accomplished as follows: + +.. code-block:: python + + >>> switch1 = LightSwitch() + >>> switch1.query_power() + False + >>> switch1.flip() + [] + >>> switch1.query_power() + True + >>> blob = switch1.save() + >>> switch2 = LightSwitch.from_blob(blob) + >>> switch2.query_power() + True + +More comprehensive (tested, working) examples are present in ``docs/examples``. + +Go forth and machine all the state! + + diff --git a/venv/lib/python3.7/site-packages/Automat-0.8.0.dist-info/entry_points.txt b/venv/lib/python3.7/site-packages/Automat-0.8.0.dist-info/entry_points.txt new file mode 100644 index 0000000..d793199 --- /dev/null +++ b/venv/lib/python3.7/site-packages/Automat-0.8.0.dist-info/entry_points.txt @@ -0,0 +1,3 @@ +[console_scripts] +automat-visualize = automat._visualize:tool + diff --git a/venv/lib/python3.7/site-packages/Automat-0.8.0.dist-info/top_level.txt b/venv/lib/python3.7/site-packages/Automat-0.8.0.dist-info/top_level.txt new file mode 100644 index 0000000..b69387b --- /dev/null +++ b/venv/lib/python3.7/site-packages/Automat-0.8.0.dist-info/top_level.txt @@ -0,0 +1 @@ +automat diff --git a/venv/lib/python3.7/site-packages/Django-2.2.6.dist-info/LICENSE b/venv/lib/python3.7/site-packages/Django-2.2.6.dist-info/LICENSE new file mode 100644 index 0000000..5f4f225 --- /dev/null +++ b/venv/lib/python3.7/site-packages/Django-2.2.6.dist-info/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) Django Software Foundation and 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 Django 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.7/site-packages/Django-2.2.6.dist-info/RECORD b/venv/lib/python3.7/site-packages/Django-2.2.6.dist-info/RECORD new file mode 100644 index 0000000..2342556 --- /dev/null +++ b/venv/lib/python3.7/site-packages/Django-2.2.6.dist-info/RECORD @@ -0,0 +1,4212 @@ +../../../bin/django-admin.py,sha256=OOv0QKYqhDD2O4X3HQx3gFFQ-CC7hSLnWuzZnQXeiiA,115 +django/__init__.py,sha256=S84JZFEH3dIq8PKB-ufoTOa0mgbfcmDWd_JB9MyNRmw,799 +django/__main__.py,sha256=9a5To1vQXqf2Jg_eh8nLvIc0GXmDjEXv4jE1QZEqBFk,211 +django/shortcuts.py,sha256=MA8fTTdbsz58DZV7_aD7ateNi9H_dYwobxHMAevyf94,5588 +django/apps/__init__.py,sha256=t0F4yceU4SbybMeWBvpuE6RsGaENmQCVbNSdSuXiEMs,90 +django/apps/config.py,sha256=kJMPbuGia8AIZ3HKEBsLBC2El0B3NmqRxSceAk6ZLuo,8711 +django/apps/registry.py,sha256=8n9sZPKefWk7i5pYPYcBuge9NymdukwpR2gLsJNvHlc,17558 +django/bin/django-admin.py,sha256=FWxg_nmLPNGqXwSMw0QvZsKNQsiVBHrSsNfgALIXqQ0,128 +django/conf/__init__.py,sha256=0zwFDSYXDOB__3cU9u2Fs6ZO5jKOIO_aJQcvqm5P0Dc,9493 +django/conf/global_settings.py,sha256=xdNBxw207BRGoonyAoEEqFogYeJa5htrGTOUeIYtwQc,21958 +django/conf/app_template/__init__.py-tpl,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/app_template/admin.py-tpl,sha256=suMo4x8I3JBxAFBVIdE-5qnqZ6JAZV0FESABHOSc-vg,63 +django/conf/app_template/apps.py-tpl,sha256=lZ1k1B3K5ntPWSn-CSd0cvDuijeoQE43wztE0tXyeMQ,114 +django/conf/app_template/models.py-tpl,sha256=Vjc0p2XbAPgE6HyTF6vll98A4eDhA5AvaQqsc4kQ9AQ,57 +django/conf/app_template/tests.py-tpl,sha256=mrbGGRNg5jwbTJtWWa7zSKdDyeB4vmgZCRc2nk6VY-g,60 +django/conf/app_template/views.py-tpl,sha256=xc1IQHrsij7j33TUbo-_oewy3vs03pw_etpBWaMYJl0,63 +django/conf/app_template/migrations/__init__.py-tpl,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/__init__.py,sha256=BObHgz3YwhNajFQXefNvt9xcGCb5Zub1IXwW8-z6nV0,12634 +django/conf/locale/af/LC_MESSAGES/django.mo,sha256=PdT1ZX8UzPBcdhhjpLPEa4p27pyTLd9M9wOsJHchEJ0,26389 +django/conf/locale/af/LC_MESSAGES/django.po,sha256=pVQ0uXZJSnffIq0PoYZiTj-zQoLE0cywfzNx5A_YHt0,28407 +django/conf/locale/ar/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/ar/formats.py,sha256=nm5cnBh1YYjwD4eydBZ5AoknwN54piwrpB25ijpDT-o,696 +django/conf/locale/ar/LC_MESSAGES/django.mo,sha256=6cugqE9KpudwHt4yr_qBqazc-WNVth60LPfSrEnekIQ,30712 +django/conf/locale/ar/LC_MESSAGES/django.po,sha256=9tVjHdBZa3DDYWeHGdwaHpik-RbDTf3PFZl90iEDgNo,35055 +django/conf/locale/ast/LC_MESSAGES/django.mo,sha256=kmN-K4eQG_EvU565NnThO5qSkfcIMLXizk57RoM0YmM,16665 +django/conf/locale/ast/LC_MESSAGES/django.po,sha256=WnsaXWzvgTohaW7h5L6H5FG7QM8y5FifzB3GaahFLQY,23619 +django/conf/locale/az/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/az/formats.py,sha256=kHDIAAKnVH6nGVRLx4GeztAqeMJ5URMZaMGbtPjUDRA,1191 +django/conf/locale/az/LC_MESSAGES/django.mo,sha256=F65C89ufBAcO_XAdDJojR5Hexh2pXkXEKukV5BPLnCE,26630 +django/conf/locale/az/LC_MESSAGES/django.po,sha256=wT7AS2hDvVDzL6rvTlOMkE_Re5QV-8-uU9YZTxa3yWg,28515 +django/conf/locale/be/LC_MESSAGES/django.mo,sha256=E-Qz-U_GunEhxGnOSbb93aKkY2-QWJkd5OwjYTgiiI4,34765 +django/conf/locale/be/LC_MESSAGES/django.po,sha256=sHrLo3kO2dzfmlV743CH9KELtgRbXroQg-qcnJgAa_c,37039 +django/conf/locale/bg/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/bg/formats.py,sha256=iC9zYHKphMaSnluBZfYvH1kV5aDyl3ycsqVjxOoqfOY,705 +django/conf/locale/bg/LC_MESSAGES/django.mo,sha256=oSaycuek5hekuOlUDZvgBWiC8pprSjVlhsPyQqnF2Ss,29687 +django/conf/locale/bg/LC_MESSAGES/django.po,sha256=STgBTki870oeyGqYyPPlyg4WmkdzlDvAUAhsBwHsWTs,32975 +django/conf/locale/bn/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/bn/formats.py,sha256=INeNl0xlt9B-YJTkcdC2kSpJLly9d5AKT60GMyS-Bm4,964 +django/conf/locale/bn/LC_MESSAGES/django.mo,sha256=K7EKhxgCWLfWGA8MenkboQ_pNwo45lAkwrZkGrjIc-c,17250 +django/conf/locale/bn/LC_MESSAGES/django.po,sha256=CUr8W_emf9KSw8z-F26P7drK6z_CCovR9AjWycLpAP4,26693 +django/conf/locale/br/LC_MESSAGES/django.mo,sha256=AFyre_o6eLTF8GGkxxjt01RruZs3WLBQEs22Msi82og,15435 +django/conf/locale/br/LC_MESSAGES/django.po,sha256=7atq8nOYrgQn3sE626n_WFf3LtwR3UfVoJA9AxTLmYk,24055 +django/conf/locale/bs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/bs/formats.py,sha256=NltIKZw0-WnZW0QY2D2EqqdctUyNc8FEARZ1RRYKtHo,705 +django/conf/locale/bs/LC_MESSAGES/django.mo,sha256=DKLskkhih8rc42NtUXt-OZXD7r983w9Ddc4qSmakFis,11073 +django/conf/locale/bs/LC_MESSAGES/django.po,sha256=H4rrXQrd0ph_bHUvxgncbH29mhwtm2__XGo7QhH-ROY,21671 +django/conf/locale/ca/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/ca/formats.py,sha256=rQJTIIy-DNSu0mASIoXLHWpS8rVar64zkJ-NTM1VMTM,951 +django/conf/locale/ca/LC_MESSAGES/django.mo,sha256=kkUhfPNHIlCUH4rjpX14_IFm4e2i9vsrixLrxvcji7E,26667 +django/conf/locale/ca/LC_MESSAGES/django.po,sha256=-IAbFy3EMT0UY_DJgWoQ_pubV9g3ONnRwP_-pii5apQ,28758 +django/conf/locale/cs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/cs/formats.py,sha256=SwI-7bIW0Hc1K8G06IDOuZZ1rocqvtrufcpFdBPuq3Q,1637 +django/conf/locale/cs/LC_MESSAGES/django.mo,sha256=SFQspVDw2FohlraXBMg_ILQu5RCTzc05Ac3Kh1t3UBU,28343 +django/conf/locale/cs/LC_MESSAGES/django.po,sha256=2ebhRfPjcUbFaT0luT_3YSXeqalI74DSPfdIZMX1FGk,30760 +django/conf/locale/cy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/cy/formats.py,sha256=Ukvq4OBLyWTtkeaC8JuX4BJwCzP6BrJE2REEIuh3YWE,1757 +django/conf/locale/cy/LC_MESSAGES/django.mo,sha256=CJL04VXl3vjRWff93fzWDLeEJPw_Il7G5YzjCHdZZok,22280 +django/conf/locale/cy/LC_MESSAGES/django.po,sha256=C14r9gUOnCV5fNb4YZ-NN-fnLlZl1xHBP3H0tu-LgRk,27045 +django/conf/locale/da/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/da/formats.py,sha256=jquE6tLj9nOxcGtH_326w57sH9BKhP4BKtPz6eCi4k8,941 +django/conf/locale/da/LC_MESSAGES/django.mo,sha256=SsHhtghtrU3u3lRIcqpjJtMfQMhb0EdsxwR9RX2-So8,26075 +django/conf/locale/da/LC_MESSAGES/django.po,sha256=dwEwUdqqt2_MbqNGgIJplc3ayb4Z8AqLoGY2_04Gd_8,28152 +django/conf/locale/de/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/de/formats.py,sha256=bbYv_pvU7CcgAK7uwsLP33d4WJKEJ3nHyFjOGoLRSbk,1035 +django/conf/locale/de/LC_MESSAGES/django.mo,sha256=A26uQBVKkIjroEnSsUbwNG57ZkKwvN-hr7Tozl95SjA,27406 +django/conf/locale/de/LC_MESSAGES/django.po,sha256=iVFNqe5Mtn808PEo9_0fy47hiextwdEPfNPyiFOtg-c,29539 +django/conf/locale/de_CH/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/de_CH/formats.py,sha256=Qyry8mSDw2bDA_qGLNA7uWMCD1xMHe7K-5zORrHYF7E,1379 +django/conf/locale/dsb/LC_MESSAGES/django.mo,sha256=okTzL_pawrss_WuJ0fTP0NV2yB9Z1UbNN7UXZxMSPtM,28798 +django/conf/locale/dsb/LC_MESSAGES/django.po,sha256=LkRziiXfT24bg7tX7uXKN0B3oOl2aEDsJAKFSy-gGoc,31019 +django/conf/locale/el/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/el/formats.py,sha256=i6NoGblrfzTMa8YB56ZXwZITwqh1XmVi8TE8a6REOCU,1387 +django/conf/locale/el/LC_MESSAGES/django.mo,sha256=QPWjy3tU8e59mEO_4pGYHQDO5qvtu4-FtP4sbVj0YJA,34441 +django/conf/locale/el/LC_MESSAGES/django.po,sha256=NBgkyK5cIPc8WOnKBJEn7apqiaF9HZ6-hNu4mHg0eO8,36885 +django/conf/locale/en/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/en/formats.py,sha256=QAMybGqJETPG_vx3kQM4UGyaOffkx5no1dqpU9ri9cc,1750 +django/conf/locale/en/LC_MESSAGES/django.mo,sha256=mVpSj1AoAdDdW3zPZIg5ZDsDbkSUQUMACg_BbWHGFig,356 +django/conf/locale/en/LC_MESSAGES/django.po,sha256=HrTXWm-SbDAWr9fEj3bHLUJ1jbPJDEgR7c3I4E3vjBw,28517 +django/conf/locale/en_AU/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/en_AU/formats.py,sha256=ahNtDcF-uKEhsa8J5V2RPn80RCZJIpxSEc2BMEAljKE,2052 +django/conf/locale/en_AU/LC_MESSAGES/django.mo,sha256=vx8-wkZxPq-WseGghwXuLAK5MdDsRScKnrgBATVarwc,16288 +django/conf/locale/en_AU/LC_MESSAGES/django.po,sha256=-9v7S5GrwT9045EePAWwUIqtXmOo_9W9dRQ6kFsCBmQ,23221 +django/conf/locale/en_GB/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/en_GB/formats.py,sha256=qtvBeKK2jv3dTETbbBJDYeFbgTXmAkQsRkyOzR2FGIo,2052 +django/conf/locale/en_GB/LC_MESSAGES/django.mo,sha256=whAV7H3YTMcdt-gFyKY5naykTaV19x1gZoO8SJh2_TI,13133 +django/conf/locale/en_GB/LC_MESSAGES/django.po,sha256=vpqOmBh0ccf7P5-lcwFgxUhCJw35BWi39aALjmEa5nY,22060 +django/conf/locale/eo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/eo/formats.py,sha256=iemUtasv_36Z5WlKy9bSWGzptkBDxsB_MeCBaDqp3W4,2270 +django/conf/locale/eo/LC_MESSAGES/django.mo,sha256=iA9YhYlxq3qn6crp5T45qpMk8nGoed_t5T1oJmnXOV8,26087 +django/conf/locale/eo/LC_MESSAGES/django.po,sha256=2v65pkCQOvPkcTetBe_G-XTrQHivQWCL9HXSiDx6z3I,28260 +django/conf/locale/es/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/es/formats.py,sha256=Z-aM3Z7h7Fjk2SAWKhnUYiuKbHpc7nZZ3-wnelK0NwI,949 +django/conf/locale/es/LC_MESSAGES/django.mo,sha256=4qsEQw1K5MumsbKQvv8DC9WQtGRQSGfHOrKyxtgygx8,26778 +django/conf/locale/es/LC_MESSAGES/django.po,sha256=C1fCJZCswMjw2DYwNmGrQsYheZL9FjRWjDuLTIiDy4I,29588 +django/conf/locale/es_AR/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/es_AR/formats.py,sha256=wY64-6a2hajRveIgJLpkKES_v-QejkkgExdnnJdYN1E,935 +django/conf/locale/es_AR/LC_MESSAGES/django.mo,sha256=pkjQMmIWFgJ2CYTJbxnc93Nvcq-priOH17pFO3KrhKA,27233 +django/conf/locale/es_AR/LC_MESSAGES/django.po,sha256=Nl4OM_ypL7vXKBgMe6JY8J6YMQj2SfWKUFhBdV5CcOY,29171 +django/conf/locale/es_CO/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/es_CO/formats.py,sha256=kvTsKSaK7oDWK6a-SeO3V3e__64SjtDBMWoq0ouVDJ4,700 +django/conf/locale/es_CO/LC_MESSAGES/django.mo,sha256=bXSa4kJtVu9xeQOFgP7RTfirJgEynWk4R32KSKjEezM,22791 +django/conf/locale/es_CO/LC_MESSAGES/django.po,sha256=8X_pdt0Amtvbw3AZUE_fKMy20ItYR-zS1caqnHxKjIE,26533 +django/conf/locale/es_MX/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/es_MX/formats.py,sha256=tny9CPrJJV5qRJ_myuiQ8fMfg3fnNtv3q6aOSxLdK0E,799 +django/conf/locale/es_MX/LC_MESSAGES/django.mo,sha256=0WYdCPgyC0XpF8to_bbyw__IRA5LGj8izt8DoCH1m6I,15095 +django/conf/locale/es_MX/LC_MESSAGES/django.po,sha256=rwJvZGP-6uQX1bvQSW4pVE4y4dfriVZOCfkWRzC9QBI,23042 +django/conf/locale/es_NI/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/es_NI/formats.py,sha256=QMfHoEWcpR_8yLaE66w5UjmPjtgTAU7Yli8JHgSxGRI,740 +django/conf/locale/es_PR/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/es_PR/formats.py,sha256=mYKWumkfGElGDL92G0nO_loBoSOOFKs0ktsI3--nlLQ,671 +django/conf/locale/es_VE/LC_MESSAGES/django.mo,sha256=93zneQv56yHv9DfaIJ0cIv8wBk_E8RCjUgAZYHgfdYc,23797 +django/conf/locale/es_VE/LC_MESSAGES/django.po,sha256=m5bxw3vZNZwDNt5riWNjAqzgYFsMS2PM124ek3JALus,27070 +django/conf/locale/et/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/et/formats.py,sha256=kD0IrKxW4AlMhS6fUEXUtyPWfsdLuBzdDHiEmdfzadQ,707 +django/conf/locale/et/LC_MESSAGES/django.mo,sha256=yeYl_ISf5h1aXOWUWWF_jk4VKDrcdpt0RgxzJrspF64,24191 +django/conf/locale/et/LC_MESSAGES/django.po,sha256=8ooYBubOrtFkgdAZ22OyMc6KQwwk5PNOGGZ0HYDIpNg,27406 +django/conf/locale/eu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/eu/formats.py,sha256=R-Ex1e1CoDDIul2LGuhXH5-ZBsiRpTerqxqRAmB8gFM,749 +django/conf/locale/eu/LC_MESSAGES/django.mo,sha256=35se1szmuv6UW9flVE5CHy34laOvPhcGgNDmyRZSlWE,26371 +django/conf/locale/eu/LC_MESSAGES/django.po,sha256=aE3SnGoSOVdgHbL6HdmuYWxh5KmeCZxSc5z59Y58yn4,28570 +django/conf/locale/fa/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/fa/formats.py,sha256=RCDlj-iiAS7MVgWwOFSvQ_-QROhBm-7d8OP6QhkcGZw,722 +django/conf/locale/fa/LC_MESSAGES/django.mo,sha256=FtnxlcyExAxzTRg4UhpKmoNRRy1OH_Ogj1O3qAvK0Qo,30916 +django/conf/locale/fa/LC_MESSAGES/django.po,sha256=Es7wgkOljcbihnH4O82DVyHxrYBFZVXIwEGqX5O2sjU,33247 +django/conf/locale/fi/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/fi/formats.py,sha256=L4-Y1nX-OwKv__oN5PVgRq3P1uJ8Nwuf72zkd44QiS0,1325 +django/conf/locale/fi/LC_MESSAGES/django.mo,sha256=7XRs-YWV2HX2qqjEZbmUlkcnWkmMhWLoF9G0fKuzeyk,26301 +django/conf/locale/fi/LC_MESSAGES/django.po,sha256=hq9Iivjsd3zM6uiYX59pS4peKqTM1wmJpcbGrrn5siM,28551 +django/conf/locale/fr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/fr/formats.py,sha256=fcbOaNmoQWU5O87YsviFsqQ1SXaRZ0opsCvgygCklqE,1389 +django/conf/locale/fr/LC_MESSAGES/django.mo,sha256=x58bCqzU3NFIghpl7npnA6ZGlEu1XEQzm383X2T9634,27684 +django/conf/locale/fr/LC_MESSAGES/django.po,sha256=mlxmIL742Ln3ti3jeGFwU8LOABrYyTQTyBVzPxi1Q-k,29809 +django/conf/locale/fy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/fy/formats.py,sha256=mJXj1dHUnO883PYWPwuI07CNbjmnfBTQVRXZMg2hmOk,658 +django/conf/locale/fy/LC_MESSAGES/django.mo,sha256=N13eBeS5pewXpx3yIAwiqB8ISjw-J2ku99dncOnz_lY,2525 +django/conf/locale/fy/LC_MESSAGES/django.po,sha256=GyR8MjHB6fS3NuxDCsNegt9rZPyst5pMqs0i0WWIXUM,19283 +django/conf/locale/ga/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/ga/formats.py,sha256=Kotsp4o-6XvJ1sQrxIaab3qEW2k4oyPdJhcqvlgbGnU,682 +django/conf/locale/ga/LC_MESSAGES/django.mo,sha256=Iw1dcW6tAoIFBgjFAWyfXH7lXz__fRrS7cktYtcQ_IM,15097 +django/conf/locale/ga/LC_MESSAGES/django.po,sha256=Adp1JYadvckm_A4nlXZGM-hPAz_8bcdNw08BlEQNorQ,24000 +django/conf/locale/gd/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/gd/formats.py,sha256=tWbR1bTImiH457bq3pEyqdr4H2ONUdhOv2rZ2cYUdC8,715 +django/conf/locale/gd/LC_MESSAGES/django.mo,sha256=6smT7_jkJK2oQTbvfi-crzN6nD5mX6LAlDduSUOd75A,29716 +django/conf/locale/gd/LC_MESSAGES/django.po,sha256=Y9d4Ry4CqmzIBgqrdAf3aoCVs6MuJxzEilxRROTsiYU,32089 +django/conf/locale/gl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/gl/formats.py,sha256=Tr41ECf7XNn4iekgPGUSKI6-lDkcHj1SaHno5gPa5hw,757 +django/conf/locale/gl/LC_MESSAGES/django.mo,sha256=sNVgEfEr_q6kth4MHJvBOZ34H-LkrkiFfjBsfmKA9fc,15342 +django/conf/locale/gl/LC_MESSAGES/django.po,sha256=6Zu_Oi6Xa7igkyjA8jp0BxvkLIYgguXnGFcRwPG3uO8,23283 +django/conf/locale/he/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/he/formats.py,sha256=-3Yt81fQFRo7ZwRpwTdTTDLLtbMdGSyC5n5RWcnqINU,712 +django/conf/locale/he/LC_MESSAGES/django.mo,sha256=2Ucp8PF2To6LwRgcCom3wlY--aUM4fk0yKB7kZA7Hrc,30609 +django/conf/locale/he/LC_MESSAGES/django.po,sha256=gVyChpm3EdPUYiTMx8-fGqAseDLwEL_L-nlgln2-VKE,32825 +django/conf/locale/hi/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/hi/formats.py,sha256=dBY0JvWinGeNiDy4ZrnrtPaZQdwU7JugkzHE22C-M0A,684 +django/conf/locale/hi/LC_MESSAGES/django.mo,sha256=4v9ljgKHyBd4tqUr_5CBNS8rNtLsFERsFOK-zx8kYvY,19270 +django/conf/locale/hi/LC_MESSAGES/django.po,sha256=Ennlas9mqLL6pqYRXhEHK8OPyXNq9I0aKoizn0aeKLk,27774 +django/conf/locale/hr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/hr/formats.py,sha256=XfnsPwZiQfga6RwviGwazNIEU0HAjaj5as_nOk-Frts,2041 +django/conf/locale/hr/LC_MESSAGES/django.mo,sha256=Y5qAfjbubIQDJIbkJzw7tfzUsuIlEYUlsvGfvEYiFP8,24409 +django/conf/locale/hr/LC_MESSAGES/django.po,sha256=iOHjAFvvu8OiBeh2IukSFXEkL-Uqr_dDEKKCAlvGtjo,28207 +django/conf/locale/hsb/LC_MESSAGES/django.mo,sha256=QZ1KaImLMOW0brSZeKFQK2bSuDLrMtFT5Ok8YPSdeK4,28550 +django/conf/locale/hsb/LC_MESSAGES/django.po,sha256=bwhH5UUOlRFbVjcj0mEOqxOhp80EuxmMz0qWIdaZDJg,30750 +django/conf/locale/hu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/hu/formats.py,sha256=l-CD1wEvLKcWMTyYIvnPcA6eQYE14-elkQ4jkEtYSZk,1052 +django/conf/locale/hu/LC_MESSAGES/django.mo,sha256=LEBClk35Wyf8myh7JkvqLT28zAK-9NUlMOcBjeFbmH0,27364 +django/conf/locale/hu/LC_MESSAGES/django.po,sha256=WJyHeY3plRpEmMN6haSULQJc52daK2s54T2Jix5upnQ,29541 +django/conf/locale/hy/LC_MESSAGES/django.mo,sha256=HWkyBxPL9p2r1j3skftd0v2J9R_O7sRn8sazj5lWN78,27713 +django/conf/locale/hy/LC_MESSAGES/django.po,sha256=_gXKlEOS74kKHypQqBVtsq8oNae7yEFOOMXfOFR_J3g,31567 +django/conf/locale/ia/LC_MESSAGES/django.mo,sha256=uctHDWY1qKSlNlcdaEGswjWkPYy3BDJawUbAfEddk4Y,23125 +django/conf/locale/ia/LC_MESSAGES/django.po,sha256=ckopqh_kKLtaJC9upyGY4hh9NSkF-iHsZOm9sur4-A4,26641 +django/conf/locale/id/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/id/formats.py,sha256=d6FIM_bRvKVQtOmS1p_Le81y7UqnS5zqfjtq-krGqzo,2070 +django/conf/locale/id/LC_MESSAGES/django.mo,sha256=pJb0w1JOHkn5p9sBadwC6owUQEXsAKyKI7wpMjbwOd0,25925 +django/conf/locale/id/LC_MESSAGES/django.po,sha256=Bdq_oicrrmLto7paQNC-yvBglS1fGw3flRHi7lNKTrg,28000 +django/conf/locale/io/LC_MESSAGES/django.mo,sha256=1PUSoRgjcrjc8OHIvkjAAh0xtSkSaafGZuO6SYkx5CY,14965 +django/conf/locale/io/LC_MESSAGES/django.po,sha256=aURK_SeTtqM8ko_kI_AM5jWyqKAb1iuqNvOKQ1GQ0SE,22892 +django/conf/locale/is/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/is/formats.py,sha256=4BbmtZUfTOsQ818Qi6NEZ54QUwd2I8H2wbnaTe0Df74,688 +django/conf/locale/is/LC_MESSAGES/django.mo,sha256=Cz2_MRbLOArWsezh8fKEGpIEsQqUoSWg_kjEKYPVhuw,24466 +django/conf/locale/is/LC_MESSAGES/django.po,sha256=7MEcOAKRG1v3Z-E6sR9Xh2of5cf_NQy4QDo_S3kvF2E,27899 +django/conf/locale/it/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/it/formats.py,sha256=QK1cnZ4b420JFItMk6tFibOztIalSseiMMFSyoDMco0,2017 +django/conf/locale/it/LC_MESSAGES/django.mo,sha256=Dn15KQTQaJhoxPiDMAnyrbzyaDbEzeL7BsZDl31rFng,26635 +django/conf/locale/it/LC_MESSAGES/django.po,sha256=wvLu9ylPEWS5jOCkLgNhy6DdQMumPWPCX6Faec-tnJ0,29109 +django/conf/locale/ja/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/ja/formats.py,sha256=V6eTbaEUuWeJr-2NEAdQr08diKzOlFox1DbugC5xHpk,729 +django/conf/locale/ja/LC_MESSAGES/django.mo,sha256=-Ld36PNPNKdCl5wJQO8mTZtbASP3KB3PpjR_mkO7shg,29182 +django/conf/locale/ja/LC_MESSAGES/django.po,sha256=zsYr7_wqU1_jgH6ltzbjuU0HTE4MP8And4_NugmF6hQ,31180 +django/conf/locale/ka/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/ka/formats.py,sha256=He8e8V8LwpCB9R-oZ3xq6XF3OhySg0wIqb16mtME4MQ,2115 +django/conf/locale/ka/LC_MESSAGES/django.mo,sha256=Hf5OQ-xCo_uenldyxOuf7JUymEpBc10QoVW95DOvOqU,29673 +django/conf/locale/ka/LC_MESSAGES/django.po,sha256=mr35hdmo9nW4wnsnwO02Sn4qGhw1dqNsVbMyf9xrzuM,35053 +django/conf/locale/kab/LC_MESSAGES/django.mo,sha256=Y1q3K0U7gFl_0wxVd9BnpaUK8NjBajk_T8lFgyDC_ks,7200 +django/conf/locale/kab/LC_MESSAGES/django.po,sha256=iyxoGXMzvIyj3FedGLNrDDQqv4qRunq_2BZ8_FCOcoY,19730 +django/conf/locale/kk/LC_MESSAGES/django.mo,sha256=q0Un1j5JAPq9T5d6AK-Ks-RlS5c4tidXf0AmuvxvjB0,13916 +django/conf/locale/kk/LC_MESSAGES/django.po,sha256=r9W3U7pAlSsLFL7x9NZLSawT5KvJXJY2W0-ebyv0EG4,24156 +django/conf/locale/km/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/km/formats.py,sha256=o0v-vZQaH-v-7ttAc0H0tSWAQPYQlxHDm0tvLzuPJfw,750 +django/conf/locale/km/LC_MESSAGES/django.mo,sha256=IkYee7gjLxKUUaJ1xrWlm-mGFy-1Q5YQTfOcKaqsdG8,7284 +django/conf/locale/km/LC_MESSAGES/django.po,sha256=BUyjSCQne8sySq1dLsqmKCzCJMja562ocRYcNiZOKPk,21508 +django/conf/locale/kn/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/kn/formats.py,sha256=FK0SWt0_88-SJkA1xz01sKOkAce5ZEyF-F0HUlO5N4k,680 +django/conf/locale/kn/LC_MESSAGES/django.mo,sha256=BAaiqXIUfzFjrsvQiyp6zpfUXC28KsWRzCGieZzHzMQ,18634 +django/conf/locale/kn/LC_MESSAGES/django.po,sha256=4LnQc0QMFjrYi6a68ZvzwXpEhHE1BYuKB7IMdTwvxEE,28689 +django/conf/locale/ko/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/ko/formats.py,sha256=S2EcLIPMbVxRuWnRzWp2R7VzIVBaa4t6XqliTILwM4I,2255 +django/conf/locale/ko/LC_MESSAGES/django.mo,sha256=-tQKUOCJsq6yDeiQRgWo96VZYJaXeLufTYi8OC1r2XE,27294 +django/conf/locale/ko/LC_MESSAGES/django.po,sha256=bJqRw7f021r7rr3Tka7eTVrXWq-8yznBm_0AXdRTOcg,29665 +django/conf/locale/lb/LC_MESSAGES/django.mo,sha256=3JKBA-zIROxVEJFv8eoUKrVoRFjbY9bBk16jQF7Wp3s,8069 +django/conf/locale/lb/LC_MESSAGES/django.po,sha256=v1_uBQpRI8fT88whqpah66AmaJG_uIX65_sRZEN2LPg,20131 +django/conf/locale/lt/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/lt/formats.py,sha256=wnele5vB2HN-LvOli8K7tGZQUJlSmQW_ZhgoULgqa0o,1765 +django/conf/locale/lt/LC_MESSAGES/django.mo,sha256=o8yCAEvftNnmhwCkIs1f3lQMqlHkyRfdulcYf0e3dE8,28609 +django/conf/locale/lt/LC_MESSAGES/django.po,sha256=ji18ceHzldbfAoRv9ON6mpCTxC3-ND9I3g9Y9Zd3AmE,31186 +django/conf/locale/lv/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/lv/formats.py,sha256=NodzlrtA6_0k7bmCs6a9-TjhAriGZcTT12M1-aN-j-4,1841 +django/conf/locale/lv/LC_MESSAGES/django.mo,sha256=3D8YQDDCbMEPy3R1EVgUxzjYar1f50sDmVvDlLIVhpY,27473 +django/conf/locale/lv/LC_MESSAGES/django.po,sha256=gq9OZhMMlWW31HSBZgeaQxSXKRwvSTqSHb4wRwr4xfE,29817 +django/conf/locale/mk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/mk/formats.py,sha256=svukojExoWux5uk8K1W3NhbQUvEbWTht5_HybAmTaiU,1677 +django/conf/locale/mk/LC_MESSAGES/django.mo,sha256=GqcYWwCPmQZeBa9sxroK0LQYqlpwE9CPc088bpmv2Kg,29431 +django/conf/locale/mk/LC_MESSAGES/django.po,sha256=VZT-VhVOlcQaJKau3giyN24XA4GG1aLR6U9e-dDmJWQ,32812 +django/conf/locale/ml/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/ml/formats.py,sha256=QAMybGqJETPG_vx3kQM4UGyaOffkx5no1dqpU9ri9cc,1750 +django/conf/locale/ml/LC_MESSAGES/django.mo,sha256=95ylg5x9-DH6OrRGVAxMEx3sDsHzXRpsB6K7DDhHxsw,36981 +django/conf/locale/ml/LC_MESSAGES/django.po,sha256=96rZup0Fod6fjfDbDBEBZTDvPLexo16q6XBb3LY4Yck,40425 +django/conf/locale/mn/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/mn/formats.py,sha256=ET9fum7iEOCGRt9E-tWXjvHHvr9YmAR5UxmEHXjJsTc,676 +django/conf/locale/mn/LC_MESSAGES/django.mo,sha256=DODflchN0ARw3eKToufj-afz-71ziZhZF6iWxXDPI_E,31170 +django/conf/locale/mn/LC_MESSAGES/django.po,sha256=ATP2UnTppKZsT8Tpi1TjFd6Imo9mT_O3O4cX990dZ6M,33395 +django/conf/locale/mr/LC_MESSAGES/django.mo,sha256=Jy_VbHVKhgNj9MSmdLv3ouVYXYjJ_JFTn8_zmYoYcyg,1652 +django/conf/locale/mr/LC_MESSAGES/django.po,sha256=yyPm1I1uqXG8VkS6yTrwECvi6p07RRep5h9iXx_v7eQ,18910 +django/conf/locale/my/LC_MESSAGES/django.mo,sha256=5pYLrTOipARNLlpG5dp0VZYJUQNqdt0vK2blo1x6keg,2650 +django/conf/locale/my/LC_MESSAGES/django.po,sha256=IVACCaTwYgAANqlcrthvSLFK9zvlOLhJTFRWCRBm11U,19193 +django/conf/locale/nb/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/nb/formats.py,sha256=n2C0JR5Y8JiNXapfAjMHVnaxBL0OhPOwGquca37vI4o,1701 +django/conf/locale/nb/LC_MESSAGES/django.mo,sha256=LgXMq9SNrvX3BB3Ja7LRp1aaJ6Rgk4w47IgnE91WUdo,25948 +django/conf/locale/nb/LC_MESSAGES/django.po,sha256=sZgKv7flqtksUHWMN-ib0WJ3n2zQb98B3NmwxolFnhM,28165 +django/conf/locale/ne/LC_MESSAGES/django.mo,sha256=oFOTWs82az7Vddh8TNtqAC0qgOBbciwC13Xtf2sqcXc,31196 +django/conf/locale/ne/LC_MESSAGES/django.po,sha256=cvlhX4j7aXxp08ZCZHNaiPX9HmvjMoi0iXl5qJL7-oY,35106 +django/conf/locale/nl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/nl/formats.py,sha256=kMY8SpEDMdvSD3Bcluz-EdSYdV3VhgTs30Z2qIpN_wM,4407 +django/conf/locale/nl/LC_MESSAGES/django.mo,sha256=N_qx_zK--FQ8RvRR2lsetBLEtohcki9LrrpatiHav0g,25925 +django/conf/locale/nl/LC_MESSAGES/django.po,sha256=KkgdXeKpH128NM804nfWD3mqoFsoOUR0oSTZPg6iOUM,28684 +django/conf/locale/nn/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/nn/formats.py,sha256=UpOmzU0aFIh2MrRZ0PuY4LZ2mXe15SL-_Z_yAVM3fxM,1745 +django/conf/locale/nn/LC_MESSAGES/django.mo,sha256=yfZvfqfpLCx3lV_LMd3Rw0Y4TTUvJQznZGwmf46nhnY,14256 +django/conf/locale/nn/LC_MESSAGES/django.po,sha256=JguzOlZ92jdHfp1eV3U5zKyxTaphpSjGSxXAIxSEspA,22522 +django/conf/locale/os/LC_MESSAGES/django.mo,sha256=GouuR0wncfpOVJurgDeTkrdKvzaH1iZxr-4IsXVEd6Q,19250 +django/conf/locale/os/LC_MESSAGES/django.po,sha256=DFnTZKUg_hGp2Pu8lJ0_vfZONAUl8JpK8UOhQtWFWR8,26392 +django/conf/locale/pa/LC_MESSAGES/django.mo,sha256=MZHSQcl584TTogQpYXzE1o_AqfZlwpvkb1CeXksVseI,11501 +django/conf/locale/pa/LC_MESSAGES/django.po,sha256=-mzScJHrkxIMp4tbbd8NA1EG6V2_pail2PYhaJ8FWxU,22591 +django/conf/locale/pl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/pl/formats.py,sha256=UjzylphDLBOy4IlFY3SAvaTIwxsjKz41wZMxUDzM7KA,1082 +django/conf/locale/pl/LC_MESSAGES/django.mo,sha256=-AKiAKdQ_HlnhfIObKljYjhnY1h-jvCvOnbiosrgMhc,28877 +django/conf/locale/pl/LC_MESSAGES/django.po,sha256=x-goz7cZnpiUxwNNXJbOzDosKBruXF5D8jgA1JV0MoE,32117 +django/conf/locale/pt/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/pt/formats.py,sha256=B7_tX50445cz2hiLJBid1vY0z9BDYouTAaCXLwr117Y,1652 +django/conf/locale/pt/LC_MESSAGES/django.mo,sha256=w4VlviMTuH2lGdpWxvi3ZlHSowcLzhxugR38oIuPA5Y,26396 +django/conf/locale/pt/LC_MESSAGES/django.po,sha256=W4bjTmIOsvK4QpNf_2NEhYR6OIx9MYUDIsbndWaa8nU,28736 +django/conf/locale/pt_BR/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/pt_BR/formats.py,sha256=46QDzg8pNMlw5MAs3U8Rj8SykK8Ck6SZBONk5_VzY2Q,1369 +django/conf/locale/pt_BR/LC_MESSAGES/django.mo,sha256=KIgQma7yqI0YWE7IEtt6FhQERveRoSQEtfdCdodvf9Y,26707 +django/conf/locale/pt_BR/LC_MESSAGES/django.po,sha256=AdhQBpCDQmIGT2Q2Fdba6L8qH9jNsvkuE1t12ew9n2s,29695 +django/conf/locale/ro/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/ro/formats.py,sha256=hpxpg6HcFGX5HFpypZ-GA4GkAsXCWuivMHLyyV1U2Rw,928 +django/conf/locale/ro/LC_MESSAGES/django.mo,sha256=ma3U3M3i5KWAoFFZmXpFwyTmt2EaRWE12h4d6BGkENs,27531 +django/conf/locale/ro/LC_MESSAGES/django.po,sha256=cTMIF4bOx7ZgipIb1PCagJvSnP4y9NmFAY4v8WPQkzg,29905 +django/conf/locale/ru/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/ru/formats.py,sha256=wM47-gl6N2XbknMIUAvNmqxNyso6bNnwU11RzoLK3RM,1202 +django/conf/locale/ru/LC_MESSAGES/django.mo,sha256=B5UT1xP0cyCplkMWoL-XYtdDj5eAFjjQmROlwC5psQM,36963 +django/conf/locale/ru/LC_MESSAGES/django.po,sha256=Uqe3Hlrebp4r_QjLc3a685jLdleMemN0I0xHdpL-uV4,39891 +django/conf/locale/sk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/sk/formats.py,sha256=uDeovJ6Oo39vxb_Y2EbwlqBh3F4N6D6EOpYzPMDH4yU,1108 +django/conf/locale/sk/LC_MESSAGES/django.mo,sha256=N8mxZSWdUs3AMRooC-aUYC8oKXcqy8bBivOX_qjl1UY,27960 +django/conf/locale/sk/LC_MESSAGES/django.po,sha256=rzE7u5RtBADW3FTd8PaKkWGRwTVf93Bib_jvoqQZTU4,30339 +django/conf/locale/sl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/sl/formats.py,sha256=fChz1Gj0lUVg-BnLITgoKcUXKlRTesowYokrWUbdQtc,2053 +django/conf/locale/sl/LC_MESSAGES/django.mo,sha256=RnfBB1TUFbQl6Ux4fN2A06zGOQf6i0xT0Zbjkl5SLcw,27630 +django/conf/locale/sl/LC_MESSAGES/django.po,sha256=4xZ8TsVvDP1ex0ADRKhQOWLLeWJmEnLjh0q8JGL1k5A,30074 +django/conf/locale/sq/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/sq/formats.py,sha256=X7IXRLlVWmlgNSa2TSvshv8Vhtjfv0V1Okg0adqVl3o,688 +django/conf/locale/sq/LC_MESSAGES/django.mo,sha256=i6blaU6gB1y0cHDwdWCoMm4fFwSOPTPeUhTH0kUWTeo,26966 +django/conf/locale/sq/LC_MESSAGES/django.po,sha256=OnJeUUXu4HoSg04XbCriKhlBlGTuoWQq869-sbUJiJk,29013 +django/conf/locale/sr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/sr/formats.py,sha256=SGrIbHa8LJdOV_nlmwShGOQ1Wz-l4lNpufHQsPMJcFk,1946 +django/conf/locale/sr/LC_MESSAGES/django.mo,sha256=lAZzH3a0Tq5HC8VjQ7-mrU2WIylbkoxPq6_uJrbSNOE,33073 +django/conf/locale/sr/LC_MESSAGES/django.po,sha256=hsS-pEmc3S3GtuNsd-qWLCjluKy3j4uxmXZ2iP9wgrY,35215 +django/conf/locale/sr_Latn/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/sr_Latn/formats.py,sha256=SGrIbHa8LJdOV_nlmwShGOQ1Wz-l4lNpufHQsPMJcFk,1946 +django/conf/locale/sr_Latn/LC_MESSAGES/django.mo,sha256=eD7DcFzYWpfxvnbngcnBazlBPgJwaAtnB7JDfQ4S_hw,14941 +django/conf/locale/sr_Latn/LC_MESSAGES/django.po,sha256=87XW8LhBwQ2dFtqQnnDPA2sjGheqURIsaDUXMoCK_GY,23344 +django/conf/locale/sv/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/sv/formats.py,sha256=25cpkzB06_S54wXu-yGNJ7_6zcsAH39KnvzlWnkzGlI,1504 +django/conf/locale/sv/LC_MESSAGES/django.mo,sha256=38HMVs_MIdAtnYhOTCTESTxkbEhmoXs3Y1PB0cH2Puk,26399 +django/conf/locale/sv/LC_MESSAGES/django.po,sha256=lbmJttaEIp-S_Gt97ZnabZyNBKIo0bFLqfsiv85esT0,28675 +django/conf/locale/sw/LC_MESSAGES/django.mo,sha256=ZHWikD3fPZeBsrQ7qg9iHfzEt5DoQU1rBXvMd5Wzdtk,14903 +django/conf/locale/sw/LC_MESSAGES/django.po,sha256=9BcGhrZMf5gJzw02YCt4QyUdQYVphHUb13oHKy9eTEU,22800 +django/conf/locale/ta/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/ta/formats.py,sha256=LbLmzaXdmz4UbzNCbINYOJLggyU1ytxWAME3iHVt9NY,682 +django/conf/locale/ta/LC_MESSAGES/django.mo,sha256=UsBQWhTd5y0OBsH7Zr8cVX7NV7P6waHpc_0RcpWQPH0,7155 +django/conf/locale/ta/LC_MESSAGES/django.po,sha256=EG-DZKUybRWuFEQ8jHIf171sdnZzpjnbaDXJQuffRVo,21547 +django/conf/locale/te/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/te/formats.py,sha256=aSddq7fhlOce3zBLdTNDQA5L_gfAhsmKRCuyQ8O5TyY,680 +django/conf/locale/te/LC_MESSAGES/django.mo,sha256=h0T8JGVo0EzGXSbwDVWulpVs0PLJM0gfro_QTk5SHEY,13321 +django/conf/locale/te/LC_MESSAGES/django.po,sha256=G0x90aGtPjtouO99ZQMN9Nf-YW83d_qxMSc-7CrwhX4,24597 +django/conf/locale/th/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/th/formats.py,sha256=vBGsPtMZkJZN0gVcX3eCDVE3KHsjJJ94EW2_9tCT0W4,1072 +django/conf/locale/th/LC_MESSAGES/django.mo,sha256=Sn7J8bolyiK25-sCKvKHKosEQy2I07XNTLYSUD3zoG8,20155 +django/conf/locale/th/LC_MESSAGES/django.po,sha256=t7Rqy36VExXTYNYnDwhrNq7QElZZw1hRFw7JPgSAizw,28144 +django/conf/locale/tr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/tr/formats.py,sha256=38lfcqhKBQMUh9mXUMcTgpWMheP4hHryt3b9GZNxWjw,1076 +django/conf/locale/tr/LC_MESSAGES/django.mo,sha256=gOhMQ7TdqgzQF4ghundgsZt6C_kxIYZVVQsdV_cwp74,27131 +django/conf/locale/tr/LC_MESSAGES/django.po,sha256=w9hMpMKE_nwpzoE_F0TO4j3laNzbKNpDiXkxWG5b4FU,29388 +django/conf/locale/tt/LC_MESSAGES/django.mo,sha256=2YqPqclnPPiORixIWcuw2Ne-w_LzYjLsV3o1Ye1AQwo,15352 +django/conf/locale/tt/LC_MESSAGES/django.po,sha256=o4_JxmlTXHAEoSx6vHxiKiZP1va_aRT5kFxIjXZcjSI,24745 +django/conf/locale/udm/LC_MESSAGES/django.mo,sha256=eeu0nDatoybuYCF6z3hXG4XA1rs6FgX2x9d8r8cYc4Q,13564 +django/conf/locale/udm/LC_MESSAGES/django.po,sha256=61Shy8V_t2ChpP-ZehJ82iauo12bKnuVnNRkWg1844k,22914 +django/conf/locale/uk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/uk/formats.py,sha256=VOqr0IcT2ab42aP7FWAXMILV1KXBckqt44v0CKSpJHg,1361 +django/conf/locale/uk/LC_MESSAGES/django.mo,sha256=HzJ8-TLYxnCqWpgYqc-C2fWobXSbpJ3DqG2_G-sjQQA,35688 +django/conf/locale/uk/LC_MESSAGES/django.po,sha256=26-bekBlvSZ6w_ZzboEEYRjKZgKkhbhv_7MPB6XSkz8,38561 +django/conf/locale/ur/LC_MESSAGES/django.mo,sha256=TdYByXk7rMGxKyhaBpPX2tH8SaNJpRZKMYdiXDTGiOg,12566 +django/conf/locale/ur/LC_MESSAGES/django.po,sha256=HE5mzhoMdTYdTih4smcZV4N7BMjwiC7jE9urU1D1c8A,23108 +django/conf/locale/vi/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/vi/formats.py,sha256=H_lZwBQUKUWjtoN0oZOxXw0SsoNWnXg3pKADPYX3RrI,762 +django/conf/locale/vi/LC_MESSAGES/django.mo,sha256=MDt-w99IwQWBwpqjtPagMXe6UlMGacU2w4PFw1vxYNw,19452 +django/conf/locale/vi/LC_MESSAGES/django.po,sha256=BJ50rmwgIa1K52YOcQ9AidcKx1h_Edw5rS-TDylAqUw,25483 +django/conf/locale/zh_Hans/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/zh_Hans/formats.py,sha256=U-1yJketLR187TFCBAzgUCt0UlZNvCxoLgBkYhZz2Ts,1745 +django/conf/locale/zh_Hans/LC_MESSAGES/django.mo,sha256=j4QEh-m0QVHCjl-34-LdufDogFT8G4hZ5opVXm381oE,25378 +django/conf/locale/zh_Hans/LC_MESSAGES/django.po,sha256=6SbePpwTiqg3KNK3YiqeaXS_A1N_qJuDQl7QSy1c9N4,27901 +django/conf/locale/zh_Hant/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/locale/zh_Hant/formats.py,sha256=U-1yJketLR187TFCBAzgUCt0UlZNvCxoLgBkYhZz2Ts,1745 +django/conf/locale/zh_Hant/LC_MESSAGES/django.mo,sha256=TEn43zMlXUa9XjkqvXOS98GB77ZNFl3IraNO1zppM1U,24865 +django/conf/locale/zh_Hant/LC_MESSAGES/django.po,sha256=XZABm4NMgxZEz3rfhu256fsk9D-kcHpBcgBbt-zbP-U,26676 +django/conf/project_template/manage.py-tpl,sha256=ytMiojzkr7Qg3VnkI9Hw6KPuozIpMULyOc0oTnqou8A,638 +django/conf/project_template/project_name/__init__.py-tpl,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/conf/project_template/project_name/settings.py-tpl,sha256=4JwYHW6nbDUufEkQOQjOY08slnLMETQAJ9dqr4PjsmU,3210 +django/conf/project_template/project_name/urls.py-tpl,sha256=vrokVPIRgYajr3Osw2_D1gCndrJ-waGU3tkpnzhWync,775 +django/conf/project_template/project_name/wsgi.py-tpl,sha256=OCfjjCsdEeXPkJgFIrMml_FURt7msovNUPnjzb401fs,428 +django/conf/urls/__init__.py,sha256=Lp9Zc17tRy3bVwULxq1_8qBloXbgmqiQiIzzbqkqDSk,402 +django/conf/urls/i18n.py,sha256=TG_09WedGtcOhijJtDxxcQkcOU15Dikq0NkLGVvwvCI,1184 +django/conf/urls/static.py,sha256=WHZ7JNbBEQVshD0-sdImvAW635uV-msIyP2VYntzrPk,886 +django/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/admin/__init__.py,sha256=K5IZ6J5ujshspna6ubTvpFfTBjU7p8EhsbvW6G7fMwY,1243 +django/contrib/admin/actions.py,sha256=S7p0NpRADNwhPidrN3rKN_LCJaFCKHXX9wcJyVpplsw,3018 +django/contrib/admin/apps.py,sha256=p0EKbVZEU82JyEKrGA5lIY6uPCWgJGzyJM_kij-Juvg,766 +django/contrib/admin/checks.py,sha256=V_P4Hu_wuxcGf3RTDea32CBpQCbc0Mbyco6UdVAE1VQ,45411 +django/contrib/admin/decorators.py,sha256=jQS6FQ2PxaqGYTYNa4jdx-qSVPV9Uf5bRhbC9PF0BMM,969 +django/contrib/admin/exceptions.py,sha256=lWAupa8HTBROgZbDeYS1n_vOl_85dcmPhDwz0-Ke1ug,331 +django/contrib/admin/filters.py,sha256=7zHCG-Og8bTyhh3nd5cG8KTrzHUd4hNEcZdZpoW1Ye0,17465 +django/contrib/admin/forms.py,sha256=hDFBqCKLLp8_ea0T0gshsgUHw0RgUtNoHCp3Q5fkOhA,1001 +django/contrib/admin/helpers.py,sha256=rFT1Hdh44V0PPOVNRg3YYARAZtiR3UyidOziOrw6jKE,15375 +django/contrib/admin/models.py,sha256=EE_bi6_lSBYUsFgtPgaflgyA_8F4CXlEA-xJ8eDlN4Y,5607 +django/contrib/admin/options.py,sha256=2Htd4qWOFV9r_UuWGX38R4_rOk2WTAmEck783f4mIRo,92174 +django/contrib/admin/sites.py,sha256=xvaibbYlNfGlCdDIeSOnPy3fF7qLVrFMajzoEgLSVFM,20569 +django/contrib/admin/tests.py,sha256=eO-iV08qo6zrNuPibtb5hrQyByq20VDk0pjWSLYTXFE,7301 +django/contrib/admin/utils.py,sha256=9CykVdXQyaJL_fIz_00LiIqItXlD0O3b4Sf0ZOu9ut8,18271 +django/contrib/admin/widgets.py,sha256=yjkibTIrvxmHV7EABBI4wA3Nb2ChIpNgJSQToxKNpdw,17223 +django/contrib/admin/locale/af/LC_MESSAGES/django.mo,sha256=Wbc2ubHv3Zw-N7pIV46MHcjv3Cigaab7rPm8qzBvfQI,16245 +django/contrib/admin/locale/af/LC_MESSAGES/django.po,sha256=HcM8xRLWALn6F2Ynz1KgZl7SRq5zDI7BYI38ste4FcI,17622 +django/contrib/admin/locale/af/LC_MESSAGES/djangojs.mo,sha256=dmctO7tPkPwdbpp-tVmZrR0QLZekrJ1aE3rnm6vvUQM,4477 +django/contrib/admin/locale/af/LC_MESSAGES/djangojs.po,sha256=1wwspqp0rsSupVes7zjYLyNT_wY4lFefqhpXH5wBdJM,4955 +django/contrib/admin/locale/am/LC_MESSAGES/django.mo,sha256=UOwMxYH1r5AEBpu-P9zxHazk3kwI4CtsPosGIYtl6Hs,8309 +django/contrib/admin/locale/am/LC_MESSAGES/django.po,sha256=NmsIZoBEQwyBIqbKjkwCJ2_iMHnMKB87atoT0iuNXrw,14651 +django/contrib/admin/locale/ar/LC_MESSAGES/django.mo,sha256=DhTZRYLGi98h9gmQfsIlAms0cCkm0nuozk-lFVNLNVk,17621 +django/contrib/admin/locale/ar/LC_MESSAGES/django.po,sha256=LMfZRZ8yjehdgcLh2HceynRhgDi_XzDEsWZWVXR5noI,19973 +django/contrib/admin/locale/ar/LC_MESSAGES/djangojs.mo,sha256=gLwHSlr1xGvsbFO1S8mnqM-NVzCUQ75n-X1NCBeANe8,4959 +django/contrib/admin/locale/ar/LC_MESSAGES/djangojs.po,sha256=1lgw43gz9MCvcujDQ4eGUvo8Qn5DE2fGvSC_qOs5bEs,6200 +django/contrib/admin/locale/ast/LC_MESSAGES/django.mo,sha256=3uffu2zPbQ1rExUsG_ambggq854Vy8HbullkCYdazA4,2476 +django/contrib/admin/locale/ast/LC_MESSAGES/django.po,sha256=wCWFh9viYUhTGOX0mW3fpN2z0kdE6b7IaA-A5zzb3Yo,11676 +django/contrib/admin/locale/ast/LC_MESSAGES/djangojs.mo,sha256=kiG-lzQidkXER5s_6POO1G91mcAv9VAkAXI25jdYBLE,2137 +django/contrib/admin/locale/ast/LC_MESSAGES/djangojs.po,sha256=s4s6aHocTlzGcFi0p7cFGTi3K8AgoPvFCv7-Hji6At0,4085 +django/contrib/admin/locale/az/LC_MESSAGES/django.mo,sha256=qG76OtMvUFnySaBcdaJQAJPDGH8iaktUyQ8PEdFx4Y8,16875 +django/contrib/admin/locale/az/LC_MESSAGES/django.po,sha256=mNS5Fgr1P8lxWFoPdhsbfM9EaFdu4KFPta-EsX8-UxA,18231 +django/contrib/admin/locale/az/LC_MESSAGES/djangojs.mo,sha256=lwMWU4eHd5TLqpkeebGktXq1cSsqzE-siTD_IcA3bZk,4621 +django/contrib/admin/locale/az/LC_MESSAGES/djangojs.po,sha256=72nOuDSiU2fb_RgmJ_sNpVpTBSFX1oVydPm-QqD8AX0,5102 +django/contrib/admin/locale/be/LC_MESSAGES/django.mo,sha256=5CbgzJ_iVyPTxTpToPEhgVSSfh-EhyjsCK75ecbQtrE,20007 +django/contrib/admin/locale/be/LC_MESSAGES/django.po,sha256=kRmThfssQtP_dr4JX2U2o-9qwwicZiM7i9QT9eSjrx0,21277 +django/contrib/admin/locale/be/LC_MESSAGES/djangojs.mo,sha256=kDqYyYbnP_oh-pw8kOJGGcFtx-MxI-UARlB5f53ow2w,5942 +django/contrib/admin/locale/be/LC_MESSAGES/djangojs.po,sha256=GsjZtvw8_OQNTrNgyUgGfSZvAC1pg2sse8oILC3J6bs,6451 +django/contrib/admin/locale/bg/LC_MESSAGES/django.mo,sha256=iJzYciumvR_r42WmC3yjTdiWrQmS94p_x0gTWvV9lOc,20070 +django/contrib/admin/locale/bg/LC_MESSAGES/django.po,sha256=9ouezfohVViX6NFG57IFXTzcuMSvAafd6NKncMFJBds,21493 +django/contrib/admin/locale/bg/LC_MESSAGES/djangojs.mo,sha256=TGNzP1smzgZmo5-s4VKD1E-nWTMtCSjp_hco1a0j4BQ,5565 +django/contrib/admin/locale/bg/LC_MESSAGES/djangojs.po,sha256=5uiQqnTyz0R-1vJTHqY0opwnQhMfgPoB-PxOkGpxNwk,6016 +django/contrib/admin/locale/bn/LC_MESSAGES/django.mo,sha256=fKmzDwzLp0Qlv4bvWscf0evanPRAXwR04B6IeJ7wGSw,15247 +django/contrib/admin/locale/bn/LC_MESSAGES/django.po,sha256=-go1WtUozfqbnKlUQr-jNnvEXf98eIZjq-C8KjRJ6NA,19812 +django/contrib/admin/locale/bn/LC_MESSAGES/djangojs.mo,sha256=t_OiMyPMsR2IdH65qfD9qvQfpWbwFueNuY72XSed2Io,2313 +django/contrib/admin/locale/bn/LC_MESSAGES/djangojs.po,sha256=iFwEJi4k3ULklCq9eQNUhKVblivQPJIoC_6lbyEkotY,4576 +django/contrib/admin/locale/br/LC_MESSAGES/django.mo,sha256=yCuMwrrEB_H44UsnKwY0E87sLpect_AMo0GdBjMZRPs,6489 +django/contrib/admin/locale/br/LC_MESSAGES/django.po,sha256=WMU_sN0ENWgyEbKOm8uVQfTQh9sabvKihtSdMt4XQBM,13717 +django/contrib/admin/locale/br/LC_MESSAGES/djangojs.mo,sha256=n7Yx2k9sAVSNtdY-2Ao6VFsnsx4aiExZ3TF_DnnrKU0,1658 +django/contrib/admin/locale/br/LC_MESSAGES/djangojs.po,sha256=gjg-VapbI9n_827CqNYhbtIQ8W9UcMmMObCsxCzReUU,4108 +django/contrib/admin/locale/bs/LC_MESSAGES/django.mo,sha256=44D550fxiO59Pczu5HZ6gvWEClsfmMuaxQWbA4lCW2M,8845 +django/contrib/admin/locale/bs/LC_MESSAGES/django.po,sha256=FrieR1JB4ssdWwYitJVpZO-odzPBKrW4ZsGK9LA595I,14317 +django/contrib/admin/locale/bs/LC_MESSAGES/djangojs.mo,sha256=SupUK-RLDcqJkpLEsOVjgZOWBRKQMALZLRXGEnA623M,1183 +django/contrib/admin/locale/bs/LC_MESSAGES/djangojs.po,sha256=TOtcfw-Spn5Y8Yugv2OlPoaZ5DRwJjRIl-YKiyU092U,3831 +django/contrib/admin/locale/ca/LC_MESSAGES/django.mo,sha256=P1SKN-U1ARdH2lG9QOwVCzBGtoiCOV44Sq_TFIP7KJY,16994 +django/contrib/admin/locale/ca/LC_MESSAGES/django.po,sha256=WVZHjstMczy3zkDEntGzDzLaQxFbpa80aUqB4DzA0Ww,18448 +django/contrib/admin/locale/ca/LC_MESSAGES/djangojs.mo,sha256=jQuQQAoB-_hggWhGXDFhk71xu70rKF0GqHN-DjR9o-c,4560 +django/contrib/admin/locale/ca/LC_MESSAGES/djangojs.po,sha256=Mfn1tgpuhe05MBQShhMoJDZ7L5Nn2p1jFy_jYIt0H0g,5098 +django/contrib/admin/locale/cs/LC_MESSAGES/django.mo,sha256=0g1m3rGwPRGfYBPLQwYVlehZJLLECGHCkMjsSVz7Fnc,17190 +django/contrib/admin/locale/cs/LC_MESSAGES/django.po,sha256=fwfy6A-N0IsVrxW0KQlt1CdFYgG3LsPdN0UKetsHDaI,18683 +django/contrib/admin/locale/cs/LC_MESSAGES/djangojs.mo,sha256=K9lJ7JQ2BmIxZuZDIlCfMkIo6pvormd3wYIoPxMH8VU,5053 +django/contrib/admin/locale/cs/LC_MESSAGES/djangojs.po,sha256=FWiaxDEWDMQjkm5j2CidZoRx8RqbWdmTCd-EHZE6gUo,5666 +django/contrib/admin/locale/cy/LC_MESSAGES/django.mo,sha256=7ifUyqraN1n0hbyTVb_UjRIG1jdn1HcwehugHBiQvHs,12521 +django/contrib/admin/locale/cy/LC_MESSAGES/django.po,sha256=bS_gUoKklZwd3Vs0YlRTt24-k5ure5ObTu-b5nB5qCA,15918 +django/contrib/admin/locale/cy/LC_MESSAGES/djangojs.mo,sha256=fOCA1fXEmJw_QaXEISLkuBhaMnEmP1ssP9lhqdCCC3c,3801 +django/contrib/admin/locale/cy/LC_MESSAGES/djangojs.po,sha256=OVcS-3tlMJS_T58qnZbWLGczHwFyAjbuWr35YwuxAVM,5082 +django/contrib/admin/locale/da/LC_MESSAGES/django.mo,sha256=CVE53i98ItqXZUsxPQnRNi_MylEqoBaQJ3nty_D0JAg,16367 +django/contrib/admin/locale/da/LC_MESSAGES/django.po,sha256=7D_QF_KpOnChFnwE8mAiUq8bdaV5eU9q1gqqs2jQjKo,17752 +django/contrib/admin/locale/da/LC_MESSAGES/djangojs.mo,sha256=_K0UgjdfnYyLtno5ibSDtwCNz_4Ak4NASvKMd-2rhP4,4518 +django/contrib/admin/locale/da/LC_MESSAGES/djangojs.po,sha256=KUXicxZHf8rLPKBE64HjMQVB4n3U0hxKGGw_a6Oah3w,5120 +django/contrib/admin/locale/de/LC_MESSAGES/django.mo,sha256=0lfScCgStjRldINiX90iExA4yPncETH4PU98kT7w6ZQ,17151 +django/contrib/admin/locale/de/LC_MESSAGES/django.po,sha256=jXiF0E_apjQ7n5WwyUIymxOkHOObv6IvTchFPvPxMmw,18624 +django/contrib/admin/locale/de/LC_MESSAGES/djangojs.mo,sha256=_aUsqSeIo9dHAiy6daB-BLselNy7tuPUEf7kVCgEByM,4602 +django/contrib/admin/locale/de/LC_MESSAGES/djangojs.po,sha256=ilCflt4q60Rr1D9wEPNpZQMvJO1R7udNsRgZiml3PdI,5068 +django/contrib/admin/locale/dsb/LC_MESSAGES/django.mo,sha256=JrZYVI9p980knGzoAeVXRmoJXoxj9LPfpYnGBibIuaY,17280 +django/contrib/admin/locale/dsb/LC_MESSAGES/django.po,sha256=xuj9qjt70E4GOaz4XqYRw5ArPnXhRNZbEjQCc5zSjUE,18516 +django/contrib/admin/locale/dsb/LC_MESSAGES/djangojs.mo,sha256=dXeUPn56ZlRRGbBeHaG6YIwou46k0mu00FU7HCX1ou8,5016 +django/contrib/admin/locale/dsb/LC_MESSAGES/djangojs.po,sha256=TGt8DJWrQ5Qs0SgJjjjeDmwZTGTPEBgeDFRvUhrrMRA,5490 +django/contrib/admin/locale/el/LC_MESSAGES/django.mo,sha256=7pnFzsUwA3Z3AdqccRmr2K6A2hfrhNGsvtFJFI0uOZU,23088 +django/contrib/admin/locale/el/LC_MESSAGES/django.po,sha256=vnMzGKYAAgZqo03IdyEJQv1jAMPIlQ2INh3P7cR2HDc,24662 +django/contrib/admin/locale/el/LC_MESSAGES/djangojs.mo,sha256=vfha6S1wDTxgteeprHdCY6j1SnSWDdbC67aoks7TVFw,5888 +django/contrib/admin/locale/el/LC_MESSAGES/djangojs.po,sha256=GJQytMIHNrJeWWnpaoGud4M6aiJCtJ7csyXzmfS6GZs,6560 +django/contrib/admin/locale/en/LC_MESSAGES/django.mo,sha256=U0OV81NfbuNL9ctF-gbGUG5al1StqN-daB-F-gFBFC8,356 +django/contrib/admin/locale/en/LC_MESSAGES/django.po,sha256=KSCX2Ly3BuNcwUXpNoOGBMi_lOzprJ-FeZ4cqkjbmOo,23147 +django/contrib/admin/locale/en/LC_MESSAGES/djangojs.mo,sha256=U0OV81NfbuNL9ctF-gbGUG5al1StqN-daB-F-gFBFC8,356 +django/contrib/admin/locale/en/LC_MESSAGES/djangojs.po,sha256=02sibdoGO77DCuqCRr_w9-4wd50f-TK1m-TFZ7vVf5o,6601 +django/contrib/admin/locale/en_AU/LC_MESSAGES/django.mo,sha256=DVjhYEbArfdAQLuE0YAG99eWxa9_eNEz2o9A6X6MrEY,2894 +django/contrib/admin/locale/en_AU/LC_MESSAGES/django.po,sha256=CO7AV-NmmmwnXyBIybSfNZLdXiavphWsd9LNZQNqDL4,11800 +django/contrib/admin/locale/en_AU/LC_MESSAGES/djangojs.mo,sha256=LWNYXUicANYZeiNx4mb6pFpjnsaggPTxTBCbNKxPtFw,1714 +django/contrib/admin/locale/en_AU/LC_MESSAGES/djangojs.po,sha256=UZk0oHToRtHzlviraFzWcZlpVAOk_W2oq4NquxevQoE,3966 +django/contrib/admin/locale/en_GB/LC_MESSAGES/django.mo,sha256=pFkTMRDDj76WA91wtGPjUB7Pq2PN7IJEC54Tewobrlc,11159 +django/contrib/admin/locale/en_GB/LC_MESSAGES/django.po,sha256=REUJMGLGRyDMkqh4kJdYXO9R0Y6CULFVumJ_P3a0nv0,15313 +django/contrib/admin/locale/en_GB/LC_MESSAGES/djangojs.mo,sha256=hW325c2HlYIIdvNE308c935_IaDu7_qeP-NlwPnklhQ,3147 +django/contrib/admin/locale/en_GB/LC_MESSAGES/djangojs.po,sha256=Ol5j1-BLbtSIDgbcC0o7tg_uHImcjJQmkA4-kSmZY9o,4581 +django/contrib/admin/locale/eo/LC_MESSAGES/django.mo,sha256=Kq-XFhLK56KXwDE2r2x93w9JVFSxgXqCU_XKb38DxhU,16252 +django/contrib/admin/locale/eo/LC_MESSAGES/django.po,sha256=Yr37pm5u1xEb9vuUucJmbs9aPErpog9AP9nIr8GQpBU,17752 +django/contrib/admin/locale/eo/LC_MESSAGES/djangojs.mo,sha256=I1Ue345qSHPmJpX4yiYgomQ8vMgshRt1S1D_ZVJWf7g,4452 +django/contrib/admin/locale/eo/LC_MESSAGES/djangojs.po,sha256=BdSRWCYCDxLxtbcPSfRdAMGoTRWOWaxRGpdCIm-3HA0,5040 +django/contrib/admin/locale/es/LC_MESSAGES/django.mo,sha256=xuKy1h77UlayYqn_G4JjJVb1Vy6nVUtiUmdy6MT544Q,17223 +django/contrib/admin/locale/es/LC_MESSAGES/django.po,sha256=YKlRrWfJ1-N_8U9kvLVF9umIfFTtBvw-EpPFsJBITWA,19165 +django/contrib/admin/locale/es/LC_MESSAGES/djangojs.mo,sha256=44RpmIC1vT7OGz4ubSAzoiU8OysfLsnueZcIqdF6gjQ,4627 +django/contrib/admin/locale/es/LC_MESSAGES/djangojs.po,sha256=t2Jn5RZo7e-UzqVwgBAejuBceWCidWjXvd--cWEq6rI,5302 +django/contrib/admin/locale/es_AR/LC_MESSAGES/django.mo,sha256=7xEd1eMXD0XfwJfRnsjsFE55R0U7MohOzTUmF7OqdYo,17374 +django/contrib/admin/locale/es_AR/LC_MESSAGES/django.po,sha256=KWyaVCv13xvRe9wF66RnUG8JT-565b_JKvvVcaivMTo,18661 +django/contrib/admin/locale/es_AR/LC_MESSAGES/djangojs.mo,sha256=am2ZkZFNC_7L7aNKc6imVX-7aY5QK1E26AIe75eEyTU,4892 +django/contrib/admin/locale/es_AR/LC_MESSAGES/djangojs.po,sha256=DB0e4M6Y5sUdEAvByhGA2nhScOnBZx40SManaAWvpyo,5350 +django/contrib/admin/locale/es_CO/LC_MESSAGES/django.mo,sha256=0k8kSiwIawYCa-Lao0uetNPLUzd4m_me3tCAVBvgcSw,15156 +django/contrib/admin/locale/es_CO/LC_MESSAGES/django.po,sha256=4T_syIsVY-nyvn5gEAtfN-ejPrJSUpNT2dmzufxaBsE,17782 +django/contrib/admin/locale/es_CO/LC_MESSAGES/djangojs.mo,sha256=PLS10KgX10kxyy7MUkiyLjqhMzRgkAFGPmzugx9AGfs,3895 +django/contrib/admin/locale/es_CO/LC_MESSAGES/djangojs.po,sha256=Y4bkC8vkJE6kqLbN8t56dR5670B06sB2fbtVzmQygK8,5176 +django/contrib/admin/locale/es_MX/LC_MESSAGES/django.mo,sha256=lQwxsrvK8ZQaqErLj2Uc_6ot5QiczaWgFqIr9K0tzwc,14127 +django/contrib/admin/locale/es_MX/LC_MESSAGES/django.po,sha256=b9BB_rwofNmIl98JB6jA-61AnYq-GvbITLtsOEi_NBM,16964 +django/contrib/admin/locale/es_MX/LC_MESSAGES/djangojs.mo,sha256=2w3CMJFBugP8xMOmXsDU82xUm8cWGRUGZQX5XjiTCpM,3380 +django/contrib/admin/locale/es_MX/LC_MESSAGES/djangojs.po,sha256=OP9cBsdCf3zZAXiKBMJPvY1AHwC_WE1k2vKlzVCtUec,4761 +django/contrib/admin/locale/es_VE/LC_MESSAGES/django.mo,sha256=himCORjsM-U3QMYoURSRbVv09i0P7-cfVh26aQgGnKg,16837 +django/contrib/admin/locale/es_VE/LC_MESSAGES/django.po,sha256=mlmaSYIHpa-Vp3f3NJfdt2RXB88CVZRoPEMfl-tccr0,18144 +django/contrib/admin/locale/es_VE/LC_MESSAGES/djangojs.mo,sha256=Zy-Hj_Mr2FiMiGGrZyssN7GZJrbxRj3_yKQFZKR36Ro,4635 +django/contrib/admin/locale/es_VE/LC_MESSAGES/djangojs.po,sha256=RI8CIdewjL3bAivniMOl7lA9tD7caP4zEo2WK71cX7c,5151 +django/contrib/admin/locale/et/LC_MESSAGES/django.mo,sha256=s7jzFiU_v46bix73UqilOdDI17yz7LB37eMV6vV3K0c,15553 +django/contrib/admin/locale/et/LC_MESSAGES/django.po,sha256=R5oUNDz0vTUiRaZrboRgqn4RZk54GFgAfWk7Hz3PnaU,17422 +django/contrib/admin/locale/et/LC_MESSAGES/djangojs.mo,sha256=GOfcPo6Tge73JsPGShWCmepOAvdGgEcdrVTUI-Fxjm4,4394 +django/contrib/admin/locale/et/LC_MESSAGES/djangojs.po,sha256=6qIvrAmlBVY6KM56LkrAl51R9sL-Hnw4u4GNgCoqbRg,4930 +django/contrib/admin/locale/eu/LC_MESSAGES/django.mo,sha256=sutek-yBmp0yA673dBWQLg11138KCcAn9cBdfl_oVJw,16336 +django/contrib/admin/locale/eu/LC_MESSAGES/django.po,sha256=uR2eY8Y6gS95UYOpd-OjjwFzOVfGCl3QOuWnH3QFCr4,17702 +django/contrib/admin/locale/eu/LC_MESSAGES/djangojs.mo,sha256=bZHiuTFj8MNrO3AntBAY5iUhmCa6LSluGLYw504RKWg,4522 +django/contrib/admin/locale/eu/LC_MESSAGES/djangojs.po,sha256=eMpM70UTWIiCDigCgYVOZ9JKQ2IidYZxYcUWunvG8js,5051 +django/contrib/admin/locale/fa/LC_MESSAGES/django.mo,sha256=sf4By8eUwoXQLf20Bg_xbeeBziWQCJJHD6qSPCNI2l8,19770 +django/contrib/admin/locale/fa/LC_MESSAGES/django.po,sha256=AdPkTplO72E7NU4wvTmPNQfmwrPiHSIMPkcd4OS53n0,21261 +django/contrib/admin/locale/fa/LC_MESSAGES/djangojs.mo,sha256=VXKiFMQnm3YrvanPhoV24y3O_y4BQe8DaXLa6bDiuQQ,5267 +django/contrib/admin/locale/fa/LC_MESSAGES/djangojs.po,sha256=4PJhPH1EiAMiiQo2W0g_jiXp6p7g7FYT973T80rhVng,5915 +django/contrib/admin/locale/fi/LC_MESSAGES/django.mo,sha256=Z3e3GBZbSdFeiRnyzF2DVMl9_j3bZKJuhZgUF9GVYAI,15778 +django/contrib/admin/locale/fi/LC_MESSAGES/django.po,sha256=OAwpDK8PcIQm7881rJ-MPlmiCTp_HyTUcQOmrgBgJz8,17475 +django/contrib/admin/locale/fi/LC_MESSAGES/djangojs.mo,sha256=ez7WTtE6OE878kSxqXniDOQY-wdURYEfxYQXBQJTVpg,4561 +django/contrib/admin/locale/fi/LC_MESSAGES/djangojs.po,sha256=rquknGvUFlWNLcrOc1wwhAPn63PZA48qBN8oWiINiQ0,5045 +django/contrib/admin/locale/fr/LC_MESSAGES/django.mo,sha256=mHE7xvetA6F5IOx5jtwNGF7H1Ax6PIL3mCvtDtkufYU,17947 +django/contrib/admin/locale/fr/LC_MESSAGES/django.po,sha256=ZyWTeeml8HGuVi1d_PlxDad103yi8bez5LwlyIa1PQg,19235 +django/contrib/admin/locale/fr/LC_MESSAGES/djangojs.mo,sha256=KewGnfKOxbAlC7VgPnSkNM-5ASAHw36d_HdKBt06ecw,4735 +django/contrib/admin/locale/fr/LC_MESSAGES/djangojs.po,sha256=xa0hANFCx2bR98OHtpYWny5ggyJhzX2C01umaCxqqQE,5228 +django/contrib/admin/locale/fy/LC_MESSAGES/django.mo,sha256=mWnHXGJUtiewo1F0bsuJCE_YBh7-Ak9gjTpwjOAv-HI,476 +django/contrib/admin/locale/fy/LC_MESSAGES/django.po,sha256=oSKEF_DInUC42Xzhw9HiTobJjE2fLNI1VE5_p6rqnCE,10499 +django/contrib/admin/locale/fy/LC_MESSAGES/djangojs.mo,sha256=YQQy7wpjBORD9Isd-p0lLzYrUgAqv770_56-vXa0EOc,476 +django/contrib/admin/locale/fy/LC_MESSAGES/djangojs.po,sha256=efBDCcu43j4SRxN8duO5Yfe7NlpcM88kUPzz-qOkC04,2864 +django/contrib/admin/locale/ga/LC_MESSAGES/django.mo,sha256=cIOjVge5KC37U6g-0MMaP5p8N0XJxzK6oJqWNUw9jfI,15075 +django/contrib/admin/locale/ga/LC_MESSAGES/django.po,sha256=Qx1D0cEGIIPnO10I_83IfU3faEYpp0lm-KHg48lJMxE,17687 +django/contrib/admin/locale/ga/LC_MESSAGES/djangojs.mo,sha256=G-9VfhiMcooTbAI1IMvbvUwj_h_ttNyxGS89nIgrpw4,5247 +django/contrib/admin/locale/ga/LC_MESSAGES/djangojs.po,sha256=DsDMYhm5PEpFBBGepf2iRD0qCkh2r45Y4tIHzFtjJAo,5920 +django/contrib/admin/locale/gd/LC_MESSAGES/django.mo,sha256=5D_bPlVaOxjWUAddUHgltyfItGzTcI1LcvWF_KQyVTk,18685 +django/contrib/admin/locale/gd/LC_MESSAGES/django.po,sha256=MSWiN5WA9ffzb1DjSAyvi3xXrUx6gGs71wcN4K9fi7c,20005 +django/contrib/admin/locale/gd/LC_MESSAGES/djangojs.mo,sha256=GwtvzwSO_lE6yHEdZLNl3Vzxk0E8KAjhJyIn6aSyc0s,5304 +django/contrib/admin/locale/gd/LC_MESSAGES/djangojs.po,sha256=RJv2lrB2UamHczIbCzzLBnEWodMLqgNX9ihofmL6XRo,5809 +django/contrib/admin/locale/gl/LC_MESSAGES/django.mo,sha256=_9JW7LdCw2on4M1oz3Iyl_VMrhrw_0oVIQl4h_rCX6g,13246 +django/contrib/admin/locale/gl/LC_MESSAGES/django.po,sha256=xqdcVwIX5zPxq471crW0yxcOYcbZVaRwKiKx-MAGiqk,16436 +django/contrib/admin/locale/gl/LC_MESSAGES/djangojs.mo,sha256=YkT7l3U9ffSGqXmu6S41Ex0r7tbK-0BKH5lS6O8PAGs,3279 +django/contrib/admin/locale/gl/LC_MESSAGES/djangojs.po,sha256=EDccOpm1mpT8mVRvu5LBsq8nao50oP1V7aKEnuRmtF8,4803 +django/contrib/admin/locale/he/LC_MESSAGES/django.mo,sha256=vq46ZBK67ZmRBQaY9oP_5rTKzXGDIfYWEs_zM1eR_Nw,18109 +django/contrib/admin/locale/he/LC_MESSAGES/django.po,sha256=eVzhoSXRetzNkVi7BGIN3t6MjEf-I-DUiG3n1-4AOKA,19428 +django/contrib/admin/locale/he/LC_MESSAGES/djangojs.mo,sha256=14LdNNgLoQTtB49gWUMp32cywmgMRIwizD19p3CAgE4,5157 +django/contrib/admin/locale/he/LC_MESSAGES/djangojs.po,sha256=rUeEfJBwQNNSrkxCpjPu3tKD2sc8DrBto4QOdUiuuY0,5737 +django/contrib/admin/locale/hi/LC_MESSAGES/django.mo,sha256=EogCHT8iAURSuE34kZ0kwEIoz5VjgUQUG2eAIqDxReU,18457 +django/contrib/admin/locale/hi/LC_MESSAGES/django.po,sha256=NcTFbFyHhWOIieUpzIVL7aSDWZ8ZNmfnv5gcxhON1zc,21770 +django/contrib/admin/locale/hi/LC_MESSAGES/djangojs.mo,sha256=yCUHDS17dQDKcAbqCg5q8ualaUgaa9qndORgM-tLCIw,4893 +django/contrib/admin/locale/hi/LC_MESSAGES/djangojs.po,sha256=U9rb5tPMICK50bRyTl40lvn-tvh6xL_6o7xIPkzfKi0,6378 +django/contrib/admin/locale/hr/LC_MESSAGES/django.mo,sha256=3TR3uFcd0pnkDi551WaB9IyKX1aOazH7USxqc0lA0KQ,14702 +django/contrib/admin/locale/hr/LC_MESSAGES/django.po,sha256=qcW7tvZoWZIR8l-nMRexGDD8VlrOD7l5Fah6-ecilMk,17378 +django/contrib/admin/locale/hr/LC_MESSAGES/djangojs.mo,sha256=KR34lviGYh1esCkPE9xcDE1pQ_q-RxK1R2LPjnG553w,3360 +django/contrib/admin/locale/hr/LC_MESSAGES/djangojs.po,sha256=w7AqbYcLtu88R3KIKKKXyRt2gwBBBnr-ulxONWbw01I,4870 +django/contrib/admin/locale/hsb/LC_MESSAGES/django.mo,sha256=pqQAcYbKErsLPgW4d5YCywu9zlol9rRB0ovn5SN6XiY,17024 +django/contrib/admin/locale/hsb/LC_MESSAGES/django.po,sha256=U_JoRC-HraehdZVlHPu6s5ojCSMHWW14Rq1l_MXYttI,18236 +django/contrib/admin/locale/hsb/LC_MESSAGES/djangojs.mo,sha256=w_gJCnB7aw68UzYwwMPmBaj5pHpXRx6AQgFdQkKsgZ4,5087 +django/contrib/admin/locale/hsb/LC_MESSAGES/djangojs.po,sha256=t4S38sEiNXswarvPUFKzP4rms0AfQgydGv7W4qIa9eQ,5564 +django/contrib/admin/locale/hu/LC_MESSAGES/django.mo,sha256=udUPQkbtYXnfW5KO8tSAZw20bRPMcyV2n-5B82ChkK0,16903 +django/contrib/admin/locale/hu/LC_MESSAGES/django.po,sha256=WHNUlkrweKlo56lDsiwahxerPRx6ysNPTvbcX7J2urM,18431 +django/contrib/admin/locale/hu/LC_MESSAGES/djangojs.mo,sha256=l3pXOmu379TYVMwPD-6rT4YtBff_MQPtbzfKz1C-jzY,4524 +django/contrib/admin/locale/hu/LC_MESSAGES/djangojs.po,sha256=fVI0wNWgfHJ68cM9RgQgdQ_2KpaZRMDfNeSiXjJ5Dlg,5105 +django/contrib/admin/locale/hy/LC_MESSAGES/django.mo,sha256=Dcx9cOsYBfbgQgoAQoLhn_cG1d2sKGV6dag4DwnUTaY,18274 +django/contrib/admin/locale/hy/LC_MESSAGES/django.po,sha256=CnQlRZ_DUILMIqVEgUTT2sufAseEKJHHjWsYr_LAqi8,20771 +django/contrib/admin/locale/hy/LC_MESSAGES/djangojs.mo,sha256=ttfGmyEN0-3bM-WmfCge2lG8inubMPOzFXfZrfX9sfw,5636 +django/contrib/admin/locale/hy/LC_MESSAGES/djangojs.po,sha256=jf94wzUOMQaKSBR-77aijQXfdRAqiYSeAQopiT_8Obc,6046 +django/contrib/admin/locale/ia/LC_MESSAGES/django.mo,sha256=SRKlr8RqW8FQhzMsXdA9HNqttO3hc0xf4QdQJd4Dy8c,11278 +django/contrib/admin/locale/ia/LC_MESSAGES/django.po,sha256=pBQLQsMinRNh0UzIHBy3qEW0etUWMhFALu4-h-woFyE,15337 +django/contrib/admin/locale/ia/LC_MESSAGES/djangojs.mo,sha256=28MiqUf-0-p3PIaongqgPQp2F3D54MLAujPslVACAls,3177 +django/contrib/admin/locale/ia/LC_MESSAGES/djangojs.po,sha256=CauoEc8Fiowa8k6K-f9N8fQDle40qsgtXdNPDHBiudQ,4567 +django/contrib/admin/locale/id/LC_MESSAGES/django.mo,sha256=HRBCQYRozKfzAOvc5xmzibUQmZnJYM79I-JC1gqi4OU,16118 +django/contrib/admin/locale/id/LC_MESSAGES/django.po,sha256=-xTpxTvtSaPa11Dbq6hwYKSHCvkezYXu0T3RTlclAiA,17588 +django/contrib/admin/locale/id/LC_MESSAGES/djangojs.mo,sha256=IsrbImLKoye0KHfaJ1ddPh2TXtvcuoq5aRskTAUwRhE,4407 +django/contrib/admin/locale/id/LC_MESSAGES/djangojs.po,sha256=o7zQcSD2QkF_DVwHOKS4jxZi7atLPsQQIoG_szM4xFg,4915 +django/contrib/admin/locale/io/LC_MESSAGES/django.mo,sha256=URiYZQZpROBedC-AkpVo0q3Tz78VfkmwN1W7j6jYpMo,12624 +django/contrib/admin/locale/io/LC_MESSAGES/django.po,sha256=y0WXY7v_9ff-ZbFasj33loG-xWlFO8ttvCB6YPyF7FQ,15562 +django/contrib/admin/locale/io/LC_MESSAGES/djangojs.mo,sha256=nMu5JhIy8Fjie0g5bT8-h42YElCiS00b4h8ej_Ie-w0,464 +django/contrib/admin/locale/io/LC_MESSAGES/djangojs.po,sha256=WLh40q6yDs-8ZG1hpz6kfMQDXuUzOZa7cqtEPDywxG4,2852 +django/contrib/admin/locale/is/LC_MESSAGES/django.mo,sha256=9409JxMb_350BPnUEhNTwV6JVCb-Rw2PhUt2_qBV_zU,16598 +django/contrib/admin/locale/is/LC_MESSAGES/django.po,sha256=YML6qQMeENR29jpZWvOa_vL7sY1Veaet-LPy2Efh0fo,17989 +django/contrib/admin/locale/is/LC_MESSAGES/djangojs.mo,sha256=H7vMdlTEejHg-lYjxS11mVa4o7alXMxcAIfsxrM0gpc,4559 +django/contrib/admin/locale/is/LC_MESSAGES/djangojs.po,sha256=AU39DyYbiu8fMzJhL9cVFc2bfqKcm2Si6HHGGtbewpw,5109 +django/contrib/admin/locale/it/LC_MESSAGES/django.mo,sha256=lRyBpAkHnXkYEJFua2-NVO5ggQu0h_SnnrMyZAG6BfM,16882 +django/contrib/admin/locale/it/LC_MESSAGES/django.po,sha256=AF4U5mPjraniCRtgMlfpdNCc-_oLTHOG_uXxyWmZCjQ,18547 +django/contrib/admin/locale/it/LC_MESSAGES/djangojs.mo,sha256=QHgE9TmlziDuR3XooAHLhp6fAYrBHj7JkZGwZMeutQM,4537 +django/contrib/admin/locale/it/LC_MESSAGES/djangojs.po,sha256=5VcM_25w9a2d_H57l24q5mJUXMlhLF0WjuAdiWOG2MI,5171 +django/contrib/admin/locale/ja/LC_MESSAGES/django.mo,sha256=jKU98XwvgSo0TtfLPoDza7qXI1_P81D_ZJNH1IyILl8,18026 +django/contrib/admin/locale/ja/LC_MESSAGES/django.po,sha256=FYrAGD67fiKMhcBQTFaACtXtUEYemK1I6KvEOAJxcGY,19389 +django/contrib/admin/locale/ja/LC_MESSAGES/djangojs.mo,sha256=e1psnvl2PWI9RpwDRY0UV5cqn_jhz_ms6OlKUQnEBt0,4688 +django/contrib/admin/locale/ja/LC_MESSAGES/djangojs.po,sha256=5-4GlF-p7REuRaMvRGBTuTMJW6slZLqdR-UrEEEJjtA,5098 +django/contrib/admin/locale/ka/LC_MESSAGES/django.mo,sha256=M3FBRrXFFa87DlUi0HDD_n7a_0IYElQAOafJoIH_i60,20101 +django/contrib/admin/locale/ka/LC_MESSAGES/django.po,sha256=abkt7pw4Kc-Y74ZCpAk_VpFWIkr7trseCtQdM6IUYpQ,23527 +django/contrib/admin/locale/ka/LC_MESSAGES/djangojs.mo,sha256=GlPU3qUavvU0FXPfvCl-8KboYhDOmMsKM-tv14NqOac,5516 +django/contrib/admin/locale/ka/LC_MESSAGES/djangojs.po,sha256=jDpB9c_edcLoFPHFIogOSPrFkssOjIdxtCA_lum8UCs,6762 +django/contrib/admin/locale/kab/LC_MESSAGES/django.mo,sha256=9QKEWgr8YQV17OJ14rMusgV8b79ZgOOsX4aIFMZrEto,3531 +django/contrib/admin/locale/kab/LC_MESSAGES/django.po,sha256=cSOG_HqsNE4tA5YYDd6txMFoUul8d5UKvk77ZhaqOK0,11711 +django/contrib/admin/locale/kab/LC_MESSAGES/djangojs.mo,sha256=nqwZHJdtjHUSFDJmC0nPNyvWcAdcoRcN3f-4XPIItvs,1844 +django/contrib/admin/locale/kab/LC_MESSAGES/djangojs.po,sha256=tF3RH22p2E236Cv6lpIWQxtuPFeWOvJ-Ery3vBUv6co,3713 +django/contrib/admin/locale/kk/LC_MESSAGES/django.mo,sha256=f2WU3e7dOz0XXHFFe0gnCm1MAPCJ9sva2OUnWYTHOJg,12845 +django/contrib/admin/locale/kk/LC_MESSAGES/django.po,sha256=D1vF3nqANT46f17Gc2D2iGCKyysHAyEmv9nBei6NRA4,17837 +django/contrib/admin/locale/kk/LC_MESSAGES/djangojs.mo,sha256=cBxp5pFJYUF2-zXxPVBIG06UNq6XAeZ72uRLwGeLbiE,2387 +django/contrib/admin/locale/kk/LC_MESSAGES/djangojs.po,sha256=Y30fcDpi31Fn7DU7JGqROAiZY76iumoiW9qGAgPCCbU,4459 +django/contrib/admin/locale/km/LC_MESSAGES/django.mo,sha256=eOe9EcFPzAWrTjbGUr-m6RAz2TryC-qHKbqRP337lPY,10403 +django/contrib/admin/locale/km/LC_MESSAGES/django.po,sha256=RSxy5vY2sgC43h-9sl6eomkFvxClvH_Ka4lFiwTvc2I,17103 +django/contrib/admin/locale/km/LC_MESSAGES/djangojs.mo,sha256=Ja8PIXmw6FMREHZhhBtGrr3nRKQF_rVjgLasGPnU95w,1334 +django/contrib/admin/locale/km/LC_MESSAGES/djangojs.po,sha256=LH4h4toEgpVBb9yjw7d9JQ8sdU0WIZD-M025JNlLXAU,3846 +django/contrib/admin/locale/kn/LC_MESSAGES/django.mo,sha256=955iPq05ru6tm_iPFVMebxwvZMtEa5_7GaFG1mPt6HU,9203 +django/contrib/admin/locale/kn/LC_MESSAGES/django.po,sha256=xMGtsVCItMTs18xdFQHELdVZKCwTNNyKfb8n1ARcFws,16053 +django/contrib/admin/locale/kn/LC_MESSAGES/djangojs.mo,sha256=dHzxizjDQWiZeRfBqnVFcK1yk1-M5p1KOfQ1ya9TMVU,1872 +django/contrib/admin/locale/kn/LC_MESSAGES/djangojs.po,sha256=MqRj6ozyr1e9-qNORUTJXNahe6SL3ee3OveSm3efV4g,4214 +django/contrib/admin/locale/ko/LC_MESSAGES/django.mo,sha256=no1vLxHWNTc38iNPdTSZPxHl8rdTvWsVSQPc1XFGSi4,17405 +django/contrib/admin/locale/ko/LC_MESSAGES/django.po,sha256=3uqoSRni2pVbvHD-PqhdTV2scUU1MNxPpcGVW6Bc96k,19001 +django/contrib/admin/locale/ko/LC_MESSAGES/djangojs.mo,sha256=ziL3F4ymY5DChHli3ZJqvkOz1YLzDgDbLl_mL3meomY,4493 +django/contrib/admin/locale/ko/LC_MESSAGES/djangojs.po,sha256=0oGHxYVwtQEz0sTPE1DoksK-LRTQOyuLzcT2tqcU15U,5029 +django/contrib/admin/locale/lb/LC_MESSAGES/django.mo,sha256=8GGM2sYG6GQTQwQFJ7lbg7w32SvqgSzNRZIUi9dIe6M,913 +django/contrib/admin/locale/lb/LC_MESSAGES/django.po,sha256=PZ3sL-HvghnlIdrdPovNJP6wDrdDMSYp_M1ok6dodrw,11078 +django/contrib/admin/locale/lb/LC_MESSAGES/djangojs.mo,sha256=xokesKl7h7k9dXFKIJwGETgwx1Ytq6mk2erBSxkgY-o,474 +django/contrib/admin/locale/lb/LC_MESSAGES/djangojs.po,sha256=fiMelo6K0_RITx8b9k26X1R86Ck2daQXm86FLJpzt20,2862 +django/contrib/admin/locale/lt/LC_MESSAGES/django.mo,sha256=SpaNUiaGtDlX5qngVj0dWdqNLSin8EOXXyBvRM9AnKg,17033 +django/contrib/admin/locale/lt/LC_MESSAGES/django.po,sha256=tHnRrSNG2ENVduP0sOffCIYQUn69O6zIev3Bb7PjKb0,18497 +django/contrib/admin/locale/lt/LC_MESSAGES/djangojs.mo,sha256=vZtnYQupzdTjVHnWrtjkC2QKNpsca5yrpb4SDuFx0_0,5183 +django/contrib/admin/locale/lt/LC_MESSAGES/djangojs.po,sha256=dMjFClA0mh5g0aNFTyHC8nbYxwmFD0-j-7gCKD8NFnw,5864 +django/contrib/admin/locale/lv/LC_MESSAGES/django.mo,sha256=uABhT4xd_JMJcCQrXaLlLiP6Tx6Tz93pvQD0yOV833Q,16662 +django/contrib/admin/locale/lv/LC_MESSAGES/django.po,sha256=Kt6cfkKmvipb6CheRUzRH1HHnbAp4LqGN8N3qV9hsY4,18114 +django/contrib/admin/locale/lv/LC_MESSAGES/djangojs.mo,sha256=eZAxtfdIDk07LhKgbWG0nAdHLn88mmWXbFX9ZvPPZdo,4903 +django/contrib/admin/locale/lv/LC_MESSAGES/djangojs.po,sha256=xCNNC4beYfhQWx8iC-qS8Hx7J5BGi2O2zq7Y2tQ96J4,5418 +django/contrib/admin/locale/mk/LC_MESSAGES/django.mo,sha256=luKonZA7H7yeCILl4BWXsYn_BncPzYy7_sfCWq7vlI4,20661 +django/contrib/admin/locale/mk/LC_MESSAGES/django.po,sha256=LyznsrasvV6Rtq7X6NnIrdZESGo_PlhISShHrCTbDgc,22056 +django/contrib/admin/locale/mk/LC_MESSAGES/djangojs.mo,sha256=ZyQQ49zqs8GiS73XBaSd5l3Rh3vOA0glMpX98GH6nhU,5633 +django/contrib/admin/locale/mk/LC_MESSAGES/djangojs.po,sha256=bWph0TVgwC-Fmlof8_4SiR21uCFm9rftp59AMZ3WIYA,6188 +django/contrib/admin/locale/ml/LC_MESSAGES/django.mo,sha256=Z4V5iPKuJ8Y2ELZOt7E0HTFKPE_A0Jio7bdpwHN3aXc,24622 +django/contrib/admin/locale/ml/LC_MESSAGES/django.po,sha256=kmzKDsaZjEMwkfpS7kuGosBtLu_paMso_gcp7uFQ6GQ,27000 +django/contrib/admin/locale/ml/LC_MESSAGES/djangojs.mo,sha256=JNbys0qhoL4w7yi0McbvY6p-yBVHusGOTykHgvPaIoU,7547 +django/contrib/admin/locale/ml/LC_MESSAGES/djangojs.po,sha256=R29OQ5pqJkeFOTwh-Fm1T1ZSN4APdJAkPhGY5MYcdL8,8084 +django/contrib/admin/locale/mn/LC_MESSAGES/django.mo,sha256=tsi1Lc7qcDD5dTjMQKy-9Hq-V2Akzyi994QY8wVaqNk,20545 +django/contrib/admin/locale/mn/LC_MESSAGES/django.po,sha256=T9WZQ5k0M9_pLCf5A-fDFIXKgN9fRisfsoZNnm4u-jk,21954 +django/contrib/admin/locale/mn/LC_MESSAGES/djangojs.mo,sha256=H7fIPdWTK3_iuC0WRBJdfXN8zO77p7-IzTviEUVQJ2U,5228 +django/contrib/admin/locale/mn/LC_MESSAGES/djangojs.po,sha256=vJIqqVG34Zd7q8-MhTgZcXTtl6gukOSb6egt70AOyAc,5757 +django/contrib/admin/locale/mr/LC_MESSAGES/django.mo,sha256=UAxGnGliid2PTx6SMgIuHVfbCcqVvcwC4FQUWtDuSTc,468 +django/contrib/admin/locale/mr/LC_MESSAGES/django.po,sha256=TNARpu8Pfmu9fGOLUP0bRwqqDdyFmlh9rWjFspboTyc,10491 +django/contrib/admin/locale/mr/LC_MESSAGES/djangojs.mo,sha256=2Z5jaGJzpiJTCnhCk8ulCDeAdj-WwR99scdHFPRoHoA,468 +django/contrib/admin/locale/mr/LC_MESSAGES/djangojs.po,sha256=uGe9kH2mwrab97Ue77oggJBlrpzZNckKGRUMU1vaigs,2856 +django/contrib/admin/locale/my/LC_MESSAGES/django.mo,sha256=xvlgM0vdYxZuA7kPQR7LhrLzgmyVCHAvqaqvFhKX9wY,3677 +django/contrib/admin/locale/my/LC_MESSAGES/django.po,sha256=zdUCYcyq2-vKudkYvFcjk95YUtbMDDSKQHCysmQ-Pvc,12522 +django/contrib/admin/locale/my/LC_MESSAGES/djangojs.mo,sha256=1fS9FfWi8b9NJKm3DBKETmuffsrTX-_OHo9fkCCXzpg,3268 +django/contrib/admin/locale/my/LC_MESSAGES/djangojs.po,sha256=-z1j108uoswi9YZfh3vSIswLXu1iUKgDXNdZNEA0yrA,5062 +django/contrib/admin/locale/nb/LC_MESSAGES/django.mo,sha256=0u3-bzPhkEo7UqaySnw8m1S_iI4FAgLlN2wKkPOPuWk,15980 +django/contrib/admin/locale/nb/LC_MESSAGES/django.po,sha256=5IczKWtpLRqnXvChpXS1CvAr72auWDXO1thqJwuxthU,17451 +django/contrib/admin/locale/nb/LC_MESSAGES/djangojs.mo,sha256=M9-bGaylF_ZgF9PN_IcNSlwmJASh9UCp-XTt70OI-GE,4375 +django/contrib/admin/locale/nb/LC_MESSAGES/djangojs.po,sha256=RfP3ay2dJ7jIVoOw923KR9yJUGKs6SBQiiprgB-rFJ0,4915 +django/contrib/admin/locale/ne/LC_MESSAGES/django.mo,sha256=vkGnGxQFgLe9TFxEalAj-wLa0mos4ylG24clOGzRWr8,15710 +django/contrib/admin/locale/ne/LC_MESSAGES/django.po,sha256=qWDifq6NZdeyYS2uM7OFuypxeWCmBkCZBKhVEOAvd5g,19569 +django/contrib/admin/locale/ne/LC_MESSAGES/djangojs.mo,sha256=mJdtpLT9k4vDbN9fk2fOeiy4q720B3pLD3OjLbAjmUI,5362 +django/contrib/admin/locale/ne/LC_MESSAGES/djangojs.po,sha256=N91RciTV1m7e8-6Ihod5U2xR9K0vrLoFnyXjn2ta098,6458 +django/contrib/admin/locale/nl/LC_MESSAGES/django.mo,sha256=tjAj_NusfeSE-0aiSVZak5HpL08RNKdPv-R4JabPusY,16768 +django/contrib/admin/locale/nl/LC_MESSAGES/django.po,sha256=gN88Exe4S4OHPuLksvmNq5JxQxEbTsmLFWb1k6VMrxs,18402 +django/contrib/admin/locale/nl/LC_MESSAGES/djangojs.mo,sha256=Nd46ratsRnVbXjiXX2APfWMhN6tLL0gQOxhxVXgweXI,4619 +django/contrib/admin/locale/nl/LC_MESSAGES/djangojs.po,sha256=Nsp0T7IvLgqMuDZ-dh5ZlMmXyy3PmjT_Djg6A6KXfEc,5382 +django/contrib/admin/locale/nn/LC_MESSAGES/django.mo,sha256=zKIlvBLMvoqrXO90TqPJcdTEXkVweUWpz6ynsWeg8mU,10943 +django/contrib/admin/locale/nn/LC_MESSAGES/django.po,sha256=-CFana0-PPFwv1jcdyjYuLK2OYOPva-xxMjlVhvsoCw,14999 +django/contrib/admin/locale/nn/LC_MESSAGES/djangojs.mo,sha256=A7MT59BoyOSiM7W0phx8LLKQyH4Q8AEu6jUsBjUBOoE,3120 +django/contrib/admin/locale/nn/LC_MESSAGES/djangojs.po,sha256=tCXUV4F6FhMa-K0SBw9lQ0U2KY5kcMpGzT7jzKSvceo,4578 +django/contrib/admin/locale/os/LC_MESSAGES/django.mo,sha256=c51PwfOeLU2YcVNEEPCK6kG4ZyNc79jUFLuNopmsRR8,14978 +django/contrib/admin/locale/os/LC_MESSAGES/django.po,sha256=yugDw7iziHto6s6ATNDK4yuG6FN6yJUvYKhrGxvKmcY,18188 +django/contrib/admin/locale/os/LC_MESSAGES/djangojs.mo,sha256=0gMkAyO4Zi85e9qRuMYmxm6JV98WvyRffOKbBVJ_fLQ,3806 +django/contrib/admin/locale/os/LC_MESSAGES/djangojs.po,sha256=skiTlhgUEN8uKk7ihl2z-Rxr1ZXqu5qV4wB4q9qXVq0,5208 +django/contrib/admin/locale/pa/LC_MESSAGES/django.mo,sha256=n31qIjOVaJRpib4VU4EHZRua3tBnBM6t_ukH9Aj37GM,10185 +django/contrib/admin/locale/pa/LC_MESSAGES/django.po,sha256=MR6ZOTypay-qCvafn0J0rZF06rOsWz771CLDD1qvISE,16446 +django/contrib/admin/locale/pa/LC_MESSAGES/djangojs.mo,sha256=vdEMaVBuJtK1bnECgbqd_dS06PcmN7cgdv0hKGH5UKA,1207 +django/contrib/admin/locale/pa/LC_MESSAGES/djangojs.po,sha256=xU8tchSEH3MCLFSu4-71oVCR8pliKmILqFevM13IQ5M,3717 +django/contrib/admin/locale/pl/LC_MESSAGES/django.mo,sha256=_G5S3k029aCFnrMPnioRGQQ6B3vvmhRc4Da_I-YbmMk,17192 +django/contrib/admin/locale/pl/LC_MESSAGES/django.po,sha256=gv7GvvPRtl3mPWDAuWWg3quys5WXJi0_ougOTfqRHjk,18881 +django/contrib/admin/locale/pl/LC_MESSAGES/djangojs.mo,sha256=fY0vkeI4ag4tE2LnWQfJ6ce4BTLN3ye9jsthZ2rGLZo,5106 +django/contrib/admin/locale/pl/LC_MESSAGES/djangojs.po,sha256=-MiZMJeuoyfD17nrkEIc3uLYSWZ2na7lqWWuJq-vDQk,5852 +django/contrib/admin/locale/pt/LC_MESSAGES/django.mo,sha256=MTFRTfUKot-0r-h7qtggPe8l_q0JPAzVF9GzdtB9600,16912 +django/contrib/admin/locale/pt/LC_MESSAGES/django.po,sha256=gzRkbl35HZ-88mlA1Bdj1Y-CUJ752pZKCUIG-NNw2os,18436 +django/contrib/admin/locale/pt/LC_MESSAGES/djangojs.mo,sha256=D6-8QwX6lsACkEcYXq1tK_4W2q_NMc6g5lZQJDZRFHw,4579 +django/contrib/admin/locale/pt/LC_MESSAGES/djangojs.po,sha256=__a9WBgO_o0suf2xvMhyRk_Wkg2tfqNHmJOM5YF86sk,5118 +django/contrib/admin/locale/pt_BR/LC_MESSAGES/django.mo,sha256=pONUdKb8LJNcAzaIaqFjGB60E0cHw4XUqxLZZVgGpKk,16830 +django/contrib/admin/locale/pt_BR/LC_MESSAGES/django.po,sha256=9OyvOYSQOCmOoiNXEkPGB5UbhJM5gHERRTMj6-1gv4k,18864 +django/contrib/admin/locale/pt_BR/LC_MESSAGES/djangojs.mo,sha256=a7KPhFtcwVa7PX1XK1cgF3HOOcRSkT-XYSiRCFyFQFQ,4619 +django/contrib/admin/locale/pt_BR/LC_MESSAGES/djangojs.po,sha256=ENE4HAsUNcYJq2KvLrfBOLuxr1chEyEi39OSlaQU98g,5256 +django/contrib/admin/locale/ro/LC_MESSAGES/django.mo,sha256=cxCSHovSF-TTgFinvBLp-2higIfyFf964OQUVGkJCmA,16893 +django/contrib/admin/locale/ro/LC_MESSAGES/django.po,sha256=y7DK9RPD3dUw9nNeibefjogQ05MOgrXn7w0I4eERG2U,18391 +django/contrib/admin/locale/ro/LC_MESSAGES/djangojs.mo,sha256=pb_H0zmtdSjvpacoMnLZuZy3B2PSeUGteL6-MoldLpg,4686 +django/contrib/admin/locale/ro/LC_MESSAGES/djangojs.po,sha256=OlT5yOHT3MK7M0ZXy467gJfsqNSLgUlUnXqQBhfHy3I,5387 +django/contrib/admin/locale/ru/LC_MESSAGES/django.mo,sha256=W2UrhegkVjKehjb74quRYDiITHWLWkLG8aizytjRHJM,21726 +django/contrib/admin/locale/ru/LC_MESSAGES/django.po,sha256=9QKhB52AqWhGSr7pKcPdezpy_oCm3vW371mhdroF6RU,23383 +django/contrib/admin/locale/ru/LC_MESSAGES/djangojs.mo,sha256=LnAupy3FSz9zH6axWnvh1wtW27O5e8N6Apl5jFeFj0k,6560 +django/contrib/admin/locale/ru/LC_MESSAGES/djangojs.po,sha256=BMFEVFmYedhcRprutX1VBnoD6OuC79hExVt-h4Ep-ng,7360 +django/contrib/admin/locale/sk/LC_MESSAGES/django.mo,sha256=sLMYAOOz90NPuWJJyQdA_pbK31-mdrtsL68d8Xd7Bps,16288 +django/contrib/admin/locale/sk/LC_MESSAGES/django.po,sha256=PDyJDjKEHPc_-y55W_FimqaHVTLDUey4-XHfqn8feAU,18228 +django/contrib/admin/locale/sk/LC_MESSAGES/djangojs.mo,sha256=0FifzbnJmubmNNUsePBcbM2MwExXmtnt699xtY2_uzo,4677 +django/contrib/admin/locale/sk/LC_MESSAGES/djangojs.po,sha256=F9lWj_7Ir6-VBYosrtbQnkxHR_tOVFO1V3VUnvfWNeI,5382 +django/contrib/admin/locale/sl/LC_MESSAGES/django.mo,sha256=iqcg1DYwwDVacRAKJ3QR4fTmKQhRGXU4WkwYco9ASaA,16136 +django/contrib/admin/locale/sl/LC_MESSAGES/django.po,sha256=VeIJDh1PojyUy-4AdPcVezbQ-XVWqp04vFE_u3KU2tU,17508 +django/contrib/admin/locale/sl/LC_MESSAGES/djangojs.mo,sha256=0jqGv5lgcfyxh9pdnB0Nt7e0bF2G0nO-iVWJjKwyZqI,4724 +django/contrib/admin/locale/sl/LC_MESSAGES/djangojs.po,sha256=1DEs7obfCCf-hNM2nIkMizcRcq1KoLBvngMaXLlozUo,5269 +django/contrib/admin/locale/sq/LC_MESSAGES/django.mo,sha256=JKs3yvLPDCmt5aAGXbFoHAv6gYSfkxQm8sfBh2UfSBE,17053 +django/contrib/admin/locale/sq/LC_MESSAGES/django.po,sha256=vTCzTYhe6_fbXILaRbymZTUDAiK9yDAkd044f5pEuEQ,18301 +django/contrib/admin/locale/sq/LC_MESSAGES/djangojs.mo,sha256=Y8QxQzzoGCTZ61b1Y9OSbPosunTPmRv3fGa1anV6vTg,4590 +django/contrib/admin/locale/sq/LC_MESSAGES/djangojs.po,sha256=LbSmumf9GglYFGM60mFvPFoEayWFVL72rPJ1WUYO_d8,5052 +django/contrib/admin/locale/sr/LC_MESSAGES/django.mo,sha256=7OEFKgKl8bhP5sYQQ3GWGuof8fgFUvWI16fjZLL-X4A,20855 +django/contrib/admin/locale/sr/LC_MESSAGES/django.po,sha256=TRKZvSIH8dDUsq8AQsneQmcsDndxUFftOq9jzgCOTdg,22213 +django/contrib/admin/locale/sr/LC_MESSAGES/djangojs.mo,sha256=No_O4m32WrmnovKZ7CgusTPZOiMRDvMusQNS9FAg_pg,5221 +django/contrib/admin/locale/sr/LC_MESSAGES/djangojs.po,sha256=lj1TZE6I5YK0KUBD7ZVGMLV97sYwlIIwZjC5WQyxSyE,5729 +django/contrib/admin/locale/sr_Latn/LC_MESSAGES/django.mo,sha256=8wcRn4O2WYMFJal760MvjtSPBNoDgHAEYtedg8CC7Ao,12383 +django/contrib/admin/locale/sr_Latn/LC_MESSAGES/django.po,sha256=N4fPEJTtUrQnc8q1MioPZ2a7E55YXrE-JvfAcWZubfA,16150 +django/contrib/admin/locale/sr_Latn/LC_MESSAGES/djangojs.mo,sha256=GxyIGHkAtSwuAnIgnjBlO6t_w589LloYIQw4zB-QiGM,4337 +django/contrib/admin/locale/sr_Latn/LC_MESSAGES/djangojs.po,sha256=GyBQ4gDVdhcmwbYod5MFhO-c8XVhv5eHyA6hyxOz_ZA,4862 +django/contrib/admin/locale/sv/LC_MESSAGES/django.mo,sha256=dIBd7h7WcZPWgi8pfGncEgsot4-xQkMYM1EwCiMNl8g,16348 +django/contrib/admin/locale/sv/LC_MESSAGES/django.po,sha256=h0KqMky8fKxucE8ZZkrALgY8U5P4bUkPEnSV6PhOQiQ,17916 +django/contrib/admin/locale/sv/LC_MESSAGES/djangojs.mo,sha256=Q9UBnIR3KTna0BtGSZyXiehzxj8rP2I2NEi_2tTKUTU,4541 +django/contrib/admin/locale/sv/LC_MESSAGES/djangojs.po,sha256=SfGsoatvFSE1fsWsg_aVZl7gNsI0dtEmaro_0cGu9m4,5206 +django/contrib/admin/locale/sw/LC_MESSAGES/django.mo,sha256=Mtj7jvbugkVTj0qyJ_AMokWEa2btJNSG2XrhpY0U1Mc,14353 +django/contrib/admin/locale/sw/LC_MESSAGES/django.po,sha256=ElU-s0MgtNKF_aXdo-uugBnuJIDzHqMmy1ToMDQhuD0,16419 +django/contrib/admin/locale/sw/LC_MESSAGES/djangojs.mo,sha256=p0pi6-Zg-qsDVMDjNHO4aav3GfJ3tKKhy6MK7mPtC50,3647 +django/contrib/admin/locale/sw/LC_MESSAGES/djangojs.po,sha256=lZFP7Po4BM_QMTj-SXGlew1hqyJApZxu0lxMP-YduHI,4809 +django/contrib/admin/locale/ta/LC_MESSAGES/django.mo,sha256=ZdtNRZLRqquwMk7mE0XmTzEjTno9Zni3mV6j4DXL4nI,10179 +django/contrib/admin/locale/ta/LC_MESSAGES/django.po,sha256=D0TCLM4FFF7K9NqUGXNFE2KfoEzx5IHcJQ6-dYQi2Eg,16881 +django/contrib/admin/locale/ta/LC_MESSAGES/djangojs.mo,sha256=2-37FOw9Bge0ahIRxFajzxvMkAZL2zBiQFaELmqyhhY,1379 +django/contrib/admin/locale/ta/LC_MESSAGES/djangojs.po,sha256=Qs-D7N3ZVzpZVxXtMWKOzJfSmu_Mk9pge5W15f21ihI,3930 +django/contrib/admin/locale/te/LC_MESSAGES/django.mo,sha256=aIAG0Ey4154R2wa-vNe2x8X4fz2L958zRmTpCaXZzds,10590 +django/contrib/admin/locale/te/LC_MESSAGES/django.po,sha256=-zJYrDNmIs5fp37VsG4EAOVefgbBNl75c-Pp3RGBDAM,16941 +django/contrib/admin/locale/te/LC_MESSAGES/djangojs.mo,sha256=VozLzWQwrY-USvin5XyVPtUUKEmCr0dxaWC6J14BReo,1362 +django/contrib/admin/locale/te/LC_MESSAGES/djangojs.po,sha256=HI8IfXqJf4I6i-XZB8ELGyp5ZNr-oi5hW9h7n_8XSaQ,3919 +django/contrib/admin/locale/th/LC_MESSAGES/django.mo,sha256=7X6-Mgf5QiBV7xbcl_rwxyNF63v3zKAAAVqjFO6c8gg,18986 +django/contrib/admin/locale/th/LC_MESSAGES/django.po,sha256=bt87Nyr9UXksedki4Hlr3pPF4V1shsBAlBp583vmzEI,22157 +django/contrib/admin/locale/th/LC_MESSAGES/djangojs.mo,sha256=ukj5tyDor9COi5BT9oRLucO2wVTI6jZWclOM-wNpXHM,6250 +django/contrib/admin/locale/th/LC_MESSAGES/djangojs.po,sha256=3L5VU3BNcmfiqzrAWK0tvRRVOtgR8Ceg9YIxL54RGBc,6771 +django/contrib/admin/locale/tr/LC_MESSAGES/django.mo,sha256=gpdN8G40GoN4aETdOzb0_JlmaoRiDJHbagAH-Mw0RPU,16966 +django/contrib/admin/locale/tr/LC_MESSAGES/django.po,sha256=SgK4ajuBY-NwJCIm3Ar3isY8Lx9yYc3d1oCnpu3MJqI,18490 +django/contrib/admin/locale/tr/LC_MESSAGES/djangojs.mo,sha256=1kem0Biv2nHRWs89KfqJew6Vk-uxsFiBV7Do7NB5ykE,4547 +django/contrib/admin/locale/tr/LC_MESSAGES/djangojs.po,sha256=ctZld3zOFwulpBGoE26KbbQxeaaZmbwLSWbERrNeKhs,5070 +django/contrib/admin/locale/tt/LC_MESSAGES/django.mo,sha256=ObJ8zwVLhFsS6XZK_36AkNRCeznoJJwLTMh4_LLGPAA,12952 +django/contrib/admin/locale/tt/LC_MESSAGES/django.po,sha256=VDjg5nDrLqRGXpxCyQudEC_n-6kTCIYsOl3izt1Eblc,17329 +django/contrib/admin/locale/tt/LC_MESSAGES/djangojs.mo,sha256=Sz5qnMHWfLXjaCIHxQNrwac4c0w4oeAAQubn5R7KL84,2607 +django/contrib/admin/locale/tt/LC_MESSAGES/djangojs.po,sha256=_Uh3yH_RXVB3PP75RFztvSzVykVq0SQjy9QtTnyH3Qk,4541 +django/contrib/admin/locale/udm/LC_MESSAGES/django.mo,sha256=2Q_lfocM7OEjFKebqNR24ZBqUiIee7Lm1rmS5tPGdZA,622 +django/contrib/admin/locale/udm/LC_MESSAGES/django.po,sha256=L4TgEk2Fm2mtKqhZroE6k_gfz1VC-_dXe39CiJvaOPE,10496 +django/contrib/admin/locale/udm/LC_MESSAGES/djangojs.mo,sha256=CNmoKj9Uc0qEInnV5t0Nt4ZnKSZCRdIG5fyfSsqwky4,462 +django/contrib/admin/locale/udm/LC_MESSAGES/djangojs.po,sha256=ZLYr0yHdMYAl7Z7ipNSNjRFIMNYmzIjT7PsKNMT6XVk,2811 +django/contrib/admin/locale/uk/LC_MESSAGES/django.mo,sha256=Wc1E8kLHTeu0GRg1vkj_kataySFcnrVk_oCLYMUpa6M,20988 +django/contrib/admin/locale/uk/LC_MESSAGES/django.po,sha256=n7NqZajp0dDWD9r5o1Aot8pQski1gtp6eZziqHg0gEU,22827 +django/contrib/admin/locale/uk/LC_MESSAGES/djangojs.mo,sha256=YL-bL4CeoOsvcXKY30FsakS6A8kG0egbvDf2yYdFfU8,5930 +django/contrib/admin/locale/uk/LC_MESSAGES/djangojs.po,sha256=lKHsuFkzp8_evIKm8mVyZKIf99EIo8BsLYkIiyN29UY,6654 +django/contrib/admin/locale/ur/LC_MESSAGES/django.mo,sha256=HvyjnSeLhUf1JVDy759V_TI7ygZfLaMhLnoCBJxhH_s,13106 +django/contrib/admin/locale/ur/LC_MESSAGES/django.po,sha256=BFxxLbHs-UZWEmbvtWJNA7xeuvO9wDc32H2ysKZQvF4,17531 +django/contrib/admin/locale/ur/LC_MESSAGES/djangojs.mo,sha256=eYN9Q9KKTV2W0UuqRc-gg7y42yFAvJP8avMeZM-W7mw,2678 +django/contrib/admin/locale/ur/LC_MESSAGES/djangojs.po,sha256=Nj-6L6axLrqA0RHUQbidNAT33sXYfVdGcX4egVua-Pk,4646 +django/contrib/admin/locale/vi/LC_MESSAGES/django.mo,sha256=nkSrBQaktbMGWr8IMNoPoOVQBAIR1GJF13BvKLu2CeM,14860 +django/contrib/admin/locale/vi/LC_MESSAGES/django.po,sha256=FxcEsnT3-FvPXjnHp9y51jFPILUgSx27egwtwU_wbS0,17847 +django/contrib/admin/locale/vi/LC_MESSAGES/djangojs.mo,sha256=M_wqHg1NO-I7xfY-mMZ29BqUAqGzlizgJ3_DIGBWOUc,3733 +django/contrib/admin/locale/vi/LC_MESSAGES/djangojs.po,sha256=d3YtQhNuCqtfMO3u5-6zoNhhGBNYkoUhTrxz7I3PRkQ,5018 +django/contrib/admin/locale/zh_Hans/LC_MESSAGES/django.mo,sha256=rCQfiVkB9807tUwp69DfXRpiCbOknSaP6mzgdyM0xIg,15531 +django/contrib/admin/locale/zh_Hans/LC_MESSAGES/django.po,sha256=p18ukLOOh1pW6AmdV8MxoUd7TePeunCTpPbXszY1kBY,17403 +django/contrib/admin/locale/zh_Hans/LC_MESSAGES/djangojs.mo,sha256=ypJV8qNOfp5NDdC4bciIoSST2txTnQZWFJD0bIUNd78,4245 +django/contrib/admin/locale/zh_Hans/LC_MESSAGES/djangojs.po,sha256=p48E5tOcZbks7JipYsUOg3FWuG_6mP2wSWJeb5otzHQ,4982 +django/contrib/admin/locale/zh_Hant/LC_MESSAGES/django.mo,sha256=kEKX-cQPRFCNkiqNs1BnyzEvJQF-EzA814ASnYPFMsw,15152 +django/contrib/admin/locale/zh_Hant/LC_MESSAGES/django.po,sha256=iH3w7Xt_MelkZefKi8F0yAWN6QGdQCJBz8VaFY4maUg,16531 +django/contrib/admin/locale/zh_Hant/LC_MESSAGES/djangojs.mo,sha256=yFwS8aTJUAG5lN4tYLCxx-FLfTsiOxXrCEhlIA-9vcs,4230 +django/contrib/admin/locale/zh_Hant/LC_MESSAGES/djangojs.po,sha256=C4Yk5yuYcmaovVs_CS8YFYY2iS4RGi0oNaUpTm7akeU,4724 +django/contrib/admin/migrations/0001_initial.py,sha256=0p5TjterT80FOrCxhO7YqZPag-xnyRin_mQ01Qj579o,1893 +django/contrib/admin/migrations/0002_logentry_remove_auto_add.py,sha256=_7XFWubtQ7NG0eQ02MqtxXQmjBmYc6Od5rwcAiT1aCs,554 +django/contrib/admin/migrations/0003_logentry_add_action_flag_choices.py,sha256=UCS9mPrkhZ5YL_9RMSrgA7uWDTzvLzqSLq_LSXVXimM,539 +django/contrib/admin/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/admin/static/admin/css/autocomplete.css,sha256=MGqRzeZ1idtUnRM7MnEHw7ClmOVe_Uo7SdLoudapNMU,8440 +django/contrib/admin/static/admin/css/base.css,sha256=yLG2UJK97FigjWpkXt2RUKn3tl7E6GkcL5l9ofptVqs,16378 +django/contrib/admin/static/admin/css/changelists.css,sha256=z-w-H416nJzM01ysLRhynHH-4zyjtkoDlzRPFDARX6U,6170 +django/contrib/admin/static/admin/css/dashboard.css,sha256=M_duSlzrcec1HXMWlLXJQkFw4m6v2dgB3PRaJlWQo14,412 +django/contrib/admin/static/admin/css/fonts.css,sha256=SnBl3KjeUZqRmZw3F0iNm1YpqFhjrNC_fNN0H2TkuYc,423 +django/contrib/admin/static/admin/css/forms.css,sha256=qKCiNqApMyCIUgHvCOQp9YC5t54Gm3-zRmeBGXu9dj8,8518 +django/contrib/admin/static/admin/css/login.css,sha256=X9WSvQoBXD7zH-Vo2UZS1zHobGILGAKmtlXoGKPfRck,1233 +django/contrib/admin/static/admin/css/responsive.css,sha256=l7tqC8lSj_UP0sjiMOwxDL0-COeMDfbF7YsF_f7DWKY,17944 +django/contrib/admin/static/admin/css/responsive_rtl.css,sha256=vlnAVsfb5I8QSoN5GsrabXa65EGTKCKfvcU8NbBZxDA,1921 +django/contrib/admin/static/admin/css/rtl.css,sha256=c3MpnLYEUwyE8vcBXF3dYdgisrEYcFM0MsPePGJGnIQ,3808 +django/contrib/admin/static/admin/css/widgets.css,sha256=FbxIKiGYkWjZwRMm5A_Qv-kKrhsPnfzhsF1j28eSqnA,10340 +django/contrib/admin/static/admin/css/vendor/select2/LICENSE-SELECT2.md,sha256=Py5KwtTr_nv_wJAqcAa1YqXiIY_0XyS08UQXZhXiqNo,1124 +django/contrib/admin/static/admin/css/vendor/select2/select2.css,sha256=xqxV4FDj5tslOz6MV13pdnXgf63lJwViadn__ciKmIs,17604 +django/contrib/admin/static/admin/css/vendor/select2/select2.min.css,sha256=xJOZHfpxLR_uhh1BwYFS5fhmOAdIRQaiOul5F_b7v3s,15196 +django/contrib/admin/static/admin/fonts/LICENSE.txt,sha256=Pd-b5cKP4n2tFDpdx27qJSIq0d1ok0oEcGTlbtL6QMU,11560 +django/contrib/admin/static/admin/fonts/README.txt,sha256=E4rvl9Y9cvKx2wpkrgQZjhaKfRhEUG8pNLCoZoBq-rE,214 +django/contrib/admin/static/admin/fonts/Roboto-Bold-webfont.woff,sha256=sXZ6DD5d-zpQCe_uREX_FdY2LpKFRh4Xve0Ybx6UVvA,86184 +django/contrib/admin/static/admin/fonts/Roboto-Light-webfont.woff,sha256=GIJzScf-vUuNAaqQfGfqm4ARJCB4MmskcDl4RU_fNRo,85692 +django/contrib/admin/static/admin/fonts/Roboto-Regular-webfont.woff,sha256=munWVF19fYI_ipQBDbd8Gg_3Hjcei7FY3xy5g5UWJQc,85876 +django/contrib/admin/static/admin/img/LICENSE,sha256=0RT6_zSIwWwxmzI13EH5AjnT1j2YU3MwM9j3U19cAAQ,1081 +django/contrib/admin/static/admin/img/README.txt,sha256=XqN5MlT1SIi6sdnYnKJrOiJ6h9lTIejT7nLSY-Y74pk,319 +django/contrib/admin/static/admin/img/calendar-icons.svg,sha256=gbMu26nfxZphlqKFcVOXpcv5zhv5x_Qm_P4ba0Ze84I,1094 +django/contrib/admin/static/admin/img/icon-addlink.svg,sha256=kBtPJJ3qeQPWeNftvprZiR51NYaZ2n_ZwJatY9-Zx1Q,331 +django/contrib/admin/static/admin/img/icon-alert.svg,sha256=aXtd9PA66tccls-TJfyECQrmdWrj8ROWKC0tJKa7twA,504 +django/contrib/admin/static/admin/img/icon-calendar.svg,sha256=_bcF7a_R94UpOfLf-R0plVobNUeeTto9UMiUIHBcSHY,1086 +django/contrib/admin/static/admin/img/icon-changelink.svg,sha256=clM2ew94bwVa2xQ6bvfKx8xLtk0i-u5AybNlyP8k-UM,380 +django/contrib/admin/static/admin/img/icon-clock.svg,sha256=k55Yv6R6-TyS8hlL3Kye0IMNihgORFjoJjHY21vtpEA,677 +django/contrib/admin/static/admin/img/icon-deletelink.svg,sha256=06XOHo5y59UfNBtO8jMBHQqmXt8UmohlSMloUuZ6d0A,392 +django/contrib/admin/static/admin/img/icon-no.svg,sha256=QqBaTrrp3KhYJxLYB5E-0cn_s4A_Y8PImYdWjfQSM-c,560 +django/contrib/admin/static/admin/img/icon-unknown-alt.svg,sha256=LyL9oJtR0U49kGHYKMxmmm1vAw3qsfXR7uzZH76sZ_g,655 +django/contrib/admin/static/admin/img/icon-unknown.svg,sha256=ePcXlyi7cob_IcJOpZ66uiymyFgMPHl8p9iEn_eE3fc,655 +django/contrib/admin/static/admin/img/icon-viewlink.svg,sha256=NL7fcy7mQOQ91sRzxoVRLfzWzXBRU59cFANOrGOwWM0,581 +django/contrib/admin/static/admin/img/icon-yes.svg,sha256=_H4JqLywJ-NxoPLqSqk9aGJcxEdZwtSFua1TuI9kIcM,436 +django/contrib/admin/static/admin/img/inline-delete.svg,sha256=Ni1z8eDYBOveVDqtoaGyEMWG5Mdnt9dniiuBWTlnr5Y,560 +django/contrib/admin/static/admin/img/search.svg,sha256=HgvLPNT7FfgYvmbt1Al1yhXgmzYHzMg8BuDLnU9qpMU,458 +django/contrib/admin/static/admin/img/selector-icons.svg,sha256=0RJyrulJ_UR9aYP7Wbvs5jYayBVhLoXR26zawNMZ0JQ,3291 +django/contrib/admin/static/admin/img/sorting-icons.svg,sha256=cCvcp4i3MAr-mo8LE_h8ZRu3LD7Ma9BtpK-p24O3lVA,1097 +django/contrib/admin/static/admin/img/tooltag-add.svg,sha256=fTZCouGMJC6Qq2xlqw_h9fFodVtLmDMrpmZacGVJYZQ,331 +django/contrib/admin/static/admin/img/tooltag-arrowright.svg,sha256=GIAqy_4Oor9cDMNC2fSaEGh-3gqScvqREaULnix3wHc,280 +django/contrib/admin/static/admin/img/gis/move_vertex_off.svg,sha256=ou-ppUNyy5QZCKFYlcrzGBwEEiTDX5mmJvM8rpwC5DM,1129 +django/contrib/admin/static/admin/img/gis/move_vertex_on.svg,sha256=DgmcezWDms_3VhgqgYUGn-RGFHyScBP0MeX8PwHy_nE,1129 +django/contrib/admin/static/admin/js/SelectBox.js,sha256=-pJXLh1cmNQoO6vSjCzs3r1SSRW79LwhHRIuqb6e-iI,5753 +django/contrib/admin/static/admin/js/SelectFilter2.js,sha256=udd2Tcy3mIirjTGRYBloPDjOj1QhG6EwNzr-D7yrFi0,12322 +django/contrib/admin/static/admin/js/actions.js,sha256=jjrnOzXX5kmAFiVPaaMhqQ3uZjs6xDR1MGPKyXh32wE,6766 +django/contrib/admin/static/admin/js/actions.min.js,sha256=wqvSFm3FGV8KnCfsA2XgxsJM7-QhBT4kLAMFKnCBMrY,3195 +django/contrib/admin/static/admin/js/autocomplete.js,sha256=LgImTP2VTEaJKqxBqvJKRa-mfenZBjeVg7LnHetaxQU,1124 +django/contrib/admin/static/admin/js/calendar.js,sha256=8ej_F8SBtoFhNmmoLwONpyVwOJHd5JBWUMe1mwgxpwE,7777 +django/contrib/admin/static/admin/js/cancel.js,sha256=fudRj-OLtq41WGdkpAsE6-gsUBpsgMivJC7n2E_zEPs,409 +django/contrib/admin/static/admin/js/change_form.js,sha256=J-beGDyqR6uyb3iW_OI9Yo0ZFrfwJVqNFFDeL7-njqA,712 +django/contrib/admin/static/admin/js/collapse.js,sha256=gRoPWDtJq4PljhSPGILwk-YueznqwMbZQRij_yhGUVs,2239 +django/contrib/admin/static/admin/js/collapse.min.js,sha256=IZVWAF7T9I3OFywxNZ2EbxmSA0TYUSF9S_v50PBk7bM,1063 +django/contrib/admin/static/admin/js/core.js,sha256=j6UsHGO_VJ9_NFRHD8PoF4e-BhT0wR1DzlxZTyG1Zyg,7099 +django/contrib/admin/static/admin/js/inlines.js,sha256=TlTcEud29JXh9Vo5HhSwFhrDqRIHgL_HueMu94RGnRs,13773 +django/contrib/admin/static/admin/js/inlines.min.js,sha256=7hU_NQKXczvSsYBNL_ClcRgP-b8o1TzOzgocZuXI8Ao,5864 +django/contrib/admin/static/admin/js/jquery.init.js,sha256=Gr-yEd61wY6uBDMhOaVq-amfciz7EZhMvJfai_WxrHE,363 +django/contrib/admin/static/admin/js/popup_response.js,sha256=7XyHe9SDYkB8OMxF7fhL6N5l4Oxf-gXqzGlpPK63tcc,569 +django/contrib/admin/static/admin/js/prepopulate.js,sha256=jBV6-T9KNi-JCczRf_bOkA9tjjWpIYbXxRhG_vNbadc,1530 +django/contrib/admin/static/admin/js/prepopulate.min.js,sha256=j3KNblf8i0JjoV5w5HAd4vEDogZ421xolYqGrzdSC9o,379 +django/contrib/admin/static/admin/js/prepopulate_init.js,sha256=uD3_ZoYfJ62mcSgqzHfePA3Y5jaOBjxn7SU0LuYFgEE,495 +django/contrib/admin/static/admin/js/timeparse.js,sha256=oVk0xpGmRjS0V2sMsjGulzMSNDvIr1gQ6_fpivvh_kQ,2984 +django/contrib/admin/static/admin/js/urlify.js,sha256=J8yD9aydZ2CB6R5zVi4KJG88m7zo5l1ScpkQqdSlJr4,8941 +django/contrib/admin/static/admin/js/admin/DateTimeShortcuts.js,sha256=ZdQsCjY1Lcp_cCIbYKwciL7SwZWrE30wcVwVUFgNUVw,20218 +django/contrib/admin/static/admin/js/admin/RelatedObjectLookups.js,sha256=9LIqZywmXGzPkc8sRJEmAsYzScCMZDM_xZrjtIjuPyE,6918 +django/contrib/admin/static/admin/js/vendor/jquery/LICENSE.txt,sha256=GIg3JQapSjFSu38FkC7Wm4cW4HUcvoWPb0YdP5LxKfU,1282 +django/contrib/admin/static/admin/js/vendor/jquery/jquery.js,sha256=S56QM9rZN2QyB1f-DVE2umnlEiPFtpcfnW193zA4pxA,271817 +django/contrib/admin/static/admin/js/vendor/jquery/jquery.min.js,sha256=rVGRxDk2lHmnx1RLTVAyE2k48fa6BG4EwQ-CJbFjikY,86944 +django/contrib/admin/static/admin/js/vendor/select2/LICENSE.md,sha256=Py5KwtTr_nv_wJAqcAa1YqXiIY_0XyS08UQXZhXiqNo,1124 +django/contrib/admin/static/admin/js/vendor/select2/select2.full.js,sha256=nwWu44AW64pJgDdb4wY7wcWkfUPTfBgwjHkIsnBFUE4,161832 +django/contrib/admin/static/admin/js/vendor/select2/select2.full.min.js,sha256=FJuLxhiJiX-5Qgs0c2JYLIyJ5i0o4ccg6DQ6zgitCYY,75005 +django/contrib/admin/static/admin/js/vendor/select2/i18n/ar.js,sha256=fgVH5qCYQqvtWwa8MGiOx4VSKCg5d_BkMbaknNoncWw,887 +django/contrib/admin/static/admin/js/vendor/select2/i18n/az.js,sha256=WWCwFlKHxZLGDAAacF2YQr1PG6tyPXg7We5DluFuhy4,701 +django/contrib/admin/static/admin/js/vendor/select2/i18n/bg.js,sha256=Lk9-DE7eC6VpLXhcuqR8ggkcZ_AgwJEG3dLADTyMbZs,906 +django/contrib/admin/static/admin/js/vendor/select2/i18n/ca.js,sha256=f1f8z2aYYgqr6cv7AUE_opdjU_XIUDAMvzsSvODkZpA,876 +django/contrib/admin/static/admin/js/vendor/select2/i18n/cs.js,sha256=6WZZ97shyY3gGqfAXak1RDwtD2lVkMPA0jEwwqR30d0,1236 +django/contrib/admin/static/admin/js/vendor/select2/i18n/da.js,sha256=Q-ozOz1DL2NBOPIypU8vjoCxaCiZqJ2rY7_JBQcjrBk,818 +django/contrib/admin/static/admin/js/vendor/select2/i18n/de.js,sha256=mtjCIpmIYVw5CLf7IpjBWp6VtFzdKh_YtZFtpIeIStc,775 +django/contrib/admin/static/admin/js/vendor/select2/i18n/el.js,sha256=HbjnKG1fGks6EHWR6103C5kk8rMLE5_rsPGx9d1jxKY,1132 +django/contrib/admin/static/admin/js/vendor/select2/i18n/en.js,sha256=B-OOZousHwJa-Uuf48D4XzfPJSKCQ3vH_LidT-9KT0c,827 +django/contrib/admin/static/admin/js/vendor/select2/i18n/es.js,sha256=yqV8yK-bz_cS9XBVDUQmbKSykDsXHcqgxlKbPyxDIdw,871 +django/contrib/admin/static/admin/js/vendor/select2/i18n/et.js,sha256=mewAy-15ytAbjTqxZrEZj3p9KebGjBMphc2mIlpgeAE,775 +django/contrib/admin/static/admin/js/vendor/select2/i18n/eu.js,sha256=pmySl5IBT6bSgcOVug5n-518CxqpGf63RUYnwfdq-m8,844 +django/contrib/admin/static/admin/js/vendor/select2/i18n/fa.js,sha256=47-FmirjxeJnuR_90g3OU4DyBYdDXSL0_8qjZ2rnI7U,1004 +django/contrib/admin/static/admin/js/vendor/select2/i18n/fi.js,sha256=CqyMDXQHszgqi0HzoPM0-DtJQGVKAHFCxQq8JDO7zxY,703 +django/contrib/admin/static/admin/js/vendor/select2/i18n/fr.js,sha256=pjC1r5EyH3ebWwWk_DF2mH0Y58yQvOEG6slmjh__SoQ,902 +django/contrib/admin/static/admin/js/vendor/select2/i18n/gl.js,sha256=WObjYM2vK4OgLqH8fS5H_25e_GjqvAOwshQEwJiUT_k,800 +django/contrib/admin/static/admin/js/vendor/select2/i18n/he.js,sha256=RHcoZ7GaEGyF6TaLim-eW4FoQHJJZkPX1XCLpxuakDg,951 +django/contrib/admin/static/admin/js/vendor/select2/i18n/hi.js,sha256=hTkDBVj8ZSlpkXv7JXNWBN3NWxc8lZPBio3ERyy5NQw,1125 +django/contrib/admin/static/admin/js/vendor/select2/i18n/hr.js,sha256=83bnotTzaNwZmyOhQYT6UlRKflq2tqTWn7Wd9SNbY18,839 +django/contrib/admin/static/admin/js/vendor/select2/i18n/hu.js,sha256=OiDzwQj-cuXGt3NNDQw1wN2jaOjob4uDPUk2mU8D5Bs,727 +django/contrib/admin/static/admin/js/vendor/select2/i18n/id.js,sha256=4ccurwgeaJOSzk97ZFplJ2j4UePW47_mZ14fd1l9k5Y,752 +django/contrib/admin/static/admin/js/vendor/select2/i18n/is.js,sha256=6XBFQypKZoXi46_cW5oCQVFnbOvV0tmbsylkIuf2jNI,773 +django/contrib/admin/static/admin/js/vendor/select2/i18n/it.js,sha256=0u_2rM4AQ5f31vCb-GyMsqRm5UiioLlYZQML0GJZft0,876 +django/contrib/admin/static/admin/js/vendor/select2/i18n/ja.js,sha256=iVNfAjWOdeLGYsPy54JSqQ70Q7LGO7T9BshHeos1YoQ,848 +django/contrib/admin/static/admin/js/vendor/select2/i18n/km.js,sha256=CEd7gx5c131ZQEim-sdwFnM-8R_W4ILk3s3B59pqMcI,1065 +django/contrib/admin/static/admin/js/vendor/select2/i18n/ko.js,sha256=PZqna7eaSjadvZWOF-EwX0oQ9MD1jHRpRqsv3ieZXHc,854 +django/contrib/admin/static/admin/js/vendor/select2/i18n/lt.js,sha256=4aX2ESzIxXXM_45PjloFzbdOkEBvG8l0Lzbn9a07S-Y,913 +django/contrib/admin/static/admin/js/vendor/select2/i18n/lv.js,sha256=m_9yurF2g_oLJPoFsrFyyUOooOjSde5x9jLllVgYa68,872 +django/contrib/admin/static/admin/js/vendor/select2/i18n/mk.js,sha256=AzBhv0x9TUGCUeNsuSSN3UnT1wSBZhtgp9B7LoXccHs,979 +django/contrib/admin/static/admin/js/vendor/select2/i18n/ms.js,sha256=--btj7UZrXBbhKESfI-z_6YxYJXAlkTxPIEXateVQ54,791 +django/contrib/admin/static/admin/js/vendor/select2/i18n/nb.js,sha256=gQM3p_YY-hjZ9own3O0rZJYHqK4CYxFBJTrkTvICyK8,785 +django/contrib/admin/static/admin/js/vendor/select2/i18n/nl.js,sha256=4N5ht1J1MjVCGRqU8Dzo81MZhKeQxAo-fvMDqaiQosg,896 +django/contrib/admin/static/admin/js/vendor/select2/i18n/pl.js,sha256=ir3_tPNqhQ6ri-J3YyOlsZJrbdBvUC3ibpYsEfdMtgg,925 +django/contrib/admin/static/admin/js/vendor/select2/i18n/pt-BR.js,sha256=nfaZQpzSrOFJ0VRsxEmlH6azVlcRQpilM7-uHZbD3r0,853 +django/contrib/admin/static/admin/js/vendor/select2/i18n/pt.js,sha256=0Hmb5IG2hPFnhMzYFjMOza5OIqJEiD7WlqHy6YDNzQA,859 +django/contrib/admin/static/admin/js/vendor/select2/i18n/ro.js,sha256=oLsIzIZQGT7HZqhJ8DXqoiP1JE4OnSQPRBAMWXhvdSM,909 +django/contrib/admin/static/admin/js/vendor/select2/i18n/ru.js,sha256=YOIol4UzD2BGvz28zaarwdUDawpKTmEpIcvkwakmAHQ,1127 +django/contrib/admin/static/admin/js/vendor/select2/i18n/sk.js,sha256=T5nCVJX52HimSLw8yrMKTSdvLbSysaopsKtoknIoNhg,1184 +django/contrib/admin/static/admin/js/vendor/select2/i18n/sr-Cyrl.js,sha256=s5f_D0U7r2thU6UPBAJJ8rzKFUQmRgzE5Y3K07amhbk,1067 +django/contrib/admin/static/admin/js/vendor/select2/i18n/sr.js,sha256=zRM5Y0fpg0u0V7rkR4-ZgHELW2gj4YDEDa0sx_zye2o,938 +django/contrib/admin/static/admin/js/vendor/select2/i18n/sv.js,sha256=UEGr4C1Cs20s2iaMBzmWDew9hlVg8h9ZQZvVpwGnwXI,786 +django/contrib/admin/static/admin/js/vendor/select2/i18n/th.js,sha256=TbMY7IxUby7KiZKng-SEHvCavoks7d8hN77192lLfMY,951 +django/contrib/admin/static/admin/js/vendor/select2/i18n/tr.js,sha256=yqv5e--8eGpw9uZDk0GAfR0nxYnYdj5qegnFHxSAjM4,720 +django/contrib/admin/static/admin/js/vendor/select2/i18n/uk.js,sha256=LsPBQ5q5xisqXxgdV4Yf8CU8FO7mhnYRUxm7tJXNl4E,1117 +django/contrib/admin/static/admin/js/vendor/select2/i18n/vi.js,sha256=ZWpJDPBtRbDJ3YyQ4Z02Le6BRnN0gRxSAoFzYqFE7Nw,801 +django/contrib/admin/static/admin/js/vendor/select2/i18n/zh-CN.js,sha256=J4dFzbG57aghBD5x1PmkURHSi5y6AytiJgcl9iq-3z0,769 +django/contrib/admin/static/admin/js/vendor/select2/i18n/zh-TW.js,sha256=zqyrNXby3B33G7De41AQ-OFpy-Cgi3vTXZm_-IGnsXY,708 +django/contrib/admin/static/admin/js/vendor/xregexp/LICENSE.txt,sha256=tyAi9RwLIDwjSrjyBhtyJIkgOHWM469_UzZTr1MmRys,1103 +django/contrib/admin/static/admin/js/vendor/xregexp/xregexp.js,sha256=TjYx21bQgQXDFTdvSqSUh7S8TkYRjT4L4X-SlWNR8CE,128820 +django/contrib/admin/static/admin/js/vendor/xregexp/xregexp.min.js,sha256=E-Plu9EZfyt0PJCSYrCkHuPquVVj9V7g7jQklIOgGDU,62474 +django/contrib/admin/templates/admin/404.html,sha256=o528Ro8Q0JMgd7mtszp8nl1ADHNA12AyclVdmGQnYGc,268 +django/contrib/admin/templates/admin/500.html,sha256=AUIdN7Ka_1KRAGzvo1GvwAHCSJNIbo8oNSF07cMKcj4,527 +django/contrib/admin/templates/admin/actions.html,sha256=dLU-S_iMBWkrzc1LRJd3TKViD8lhHoGkl3ok8u4F-TI,1200 +django/contrib/admin/templates/admin/app_index.html,sha256=BSJsWtgum_H2hCxcb2xe-XJozbVOVpUBN_KTe8pcRts,385 +django/contrib/admin/templates/admin/base.html,sha256=2H2owQZumUnSZL6O80Z-wYYWKtUE1lwz4xQcBWKVmJ8,3656 +django/contrib/admin/templates/admin/base_site.html,sha256=1v0vGrcN4FNEIF_VBiQE6yf2HPdkKhag2_v0AUsaGmM,316 +django/contrib/admin/templates/admin/change_form.html,sha256=E-zUkd_ONrRG2BwHE9kHexGmKbzLhOIq16YYlgapMnE,3043 +django/contrib/admin/templates/admin/change_form_object_tools.html,sha256=jrTmQiU24E7srnWpjTkKABohw9LNoMevSqKSoS4GrqQ,395 +django/contrib/admin/templates/admin/change_list.html,sha256=Z3qYnsgVudK2kCyRgccQAaEN7MqtmWEnXzgEYadaxek,2983 +django/contrib/admin/templates/admin/change_list_object_tools.html,sha256=7usDFjSpWHUv3m4mjtRPOqgoY_heo3950PJvgvLCaC8,370 +django/contrib/admin/templates/admin/change_list_results.html,sha256=HlV3Tqxx6G4oTR8oGDP6lwEz22qrGM6VmTFLoDObww4,1569 +django/contrib/admin/templates/admin/date_hierarchy.html,sha256=I9Nj9WJb3JM_9ZBHrg4xIFku_a59U-KoqO5yuSaqVJQ,518 +django/contrib/admin/templates/admin/delete_confirmation.html,sha256=yomrRPvVB5SORbn38IGiApTvv75RUke4hHZHoBPOH8Y,2397 +django/contrib/admin/templates/admin/delete_selected_confirmation.html,sha256=BPRdmt4BerVSQnzI4wQzbTUYLYWIRdFp0TJukKTypUI,2312 +django/contrib/admin/templates/admin/filter.html,sha256=A59SgwTTgEf2iYjV0IiDIixSZ7yCu1Fs66n0Vguu-NI,330 +django/contrib/admin/templates/admin/index.html,sha256=JkWPzNip--iek76cnSycjo3GIa1dpWOHt-2C6uyu4t8,3181 +django/contrib/admin/templates/admin/invalid_setup.html,sha256=58ugkYPi6FHmS--y77fhLAdUr4PyrtGwTg6-hm0_Xxg,437 +django/contrib/admin/templates/admin/login.html,sha256=-lORxVDc8VDNcfuKzMqIgJTL5bPttOnJC2TznlfbtFE,1870 +django/contrib/admin/templates/admin/object_history.html,sha256=tjE0pTYaSM43e8QxjNabL2FmrB5wPKm8V3jpuziwPdI,1444 +django/contrib/admin/templates/admin/pagination.html,sha256=T4ssv7ALQ776tE6NKMGFmYLfoBhi4ZeMya_Up91889A,553 +django/contrib/admin/templates/admin/popup_response.html,sha256=m_9AnbMHEhmLXcJHiep4cs5MW_bG_eN_0j5z4USB0Ks,358 +django/contrib/admin/templates/admin/prepopulated_fields_js.html,sha256=Q3QxBgVvxePpiz502FjSHOS3szSlHkvUQoPe8sF1YDs,245 +django/contrib/admin/templates/admin/search_form.html,sha256=Qq_vEbQup3hzfbuCmS8pyCfzMdnm_9NUZ5iJHfLl7_M,1020 +django/contrib/admin/templates/admin/submit_line.html,sha256=LOQvzN_sZIx96s4VqeNNABGEdkMlPAaVVGqE0lEoc24,1024 +django/contrib/admin/templates/admin/auth/user/add_form.html,sha256=pMsoxDLGJDzjIkcMmKdTYEnUzZ1ESEhBeDLCW17XN5k,310 +django/contrib/admin/templates/admin/auth/user/change_password.html,sha256=qQhT2rSRdZK-VJ3Tc4H8gtAcWKh-Rsj2E7YWmEw5Hss,2339 +django/contrib/admin/templates/admin/edit_inline/stacked.html,sha256=kW6E_qrLX_qSqYOONeBsT7HaW5MT3qfTiZbqO2d0omk,2358 +django/contrib/admin/templates/admin/edit_inline/tabular.html,sha256=iNULOY_oHawtveA66nmsYB89ibRNHiOJT9K88uT6-nE,4230 +django/contrib/admin/templates/admin/includes/fieldset.html,sha256=DgcBbVUfkho33IMZGEg42Xr9P5y3ZAefFzqkxf74v1Q,1787 +django/contrib/admin/templates/admin/includes/object_delete_summary.html,sha256=i_I2BADSutoccAxARIwbP4VRlDHsag-llDOi3kjcoXw,188 +django/contrib/admin/templates/admin/widgets/clearable_file_input.html,sha256=w6Lx3NII4fh2e6BNbJ-VahriO8FA9aOB7opUalGZPjs,568 +django/contrib/admin/templates/admin/widgets/foreign_key_raw_id.html,sha256=0-PzMOEe3KSRVOBeivruUc8nJRcziIqWO-DyU8pvgEE,346 +django/contrib/admin/templates/admin/widgets/many_to_many_raw_id.html,sha256=w18JMKnPKrw6QyqIXBcdPs3YJlTRtHK5HGxj0lVkMlY,54 +django/contrib/admin/templates/admin/widgets/radio.html,sha256=-ob26uqmvrEUMZPQq6kAqK4KBk2YZHTCWWCM6BnaL0w,57 +django/contrib/admin/templates/admin/widgets/related_widget_wrapper.html,sha256=bif78V69e6H9kvo0YtWHPJYivYs1xlFNDPHPwZ-5pjc,1454 +django/contrib/admin/templates/admin/widgets/split_datetime.html,sha256=BQ9XNv3eqtvNqZZGW38VBM2Nan-5PBxokbo2Fm_wwCQ,238 +django/contrib/admin/templates/admin/widgets/url.html,sha256=Tf7PwdoKAiimfmDTVbWzRVxxUeyfhF0OlsuiOZ1tHgI,218 +django/contrib/admin/templates/registration/logged_out.html,sha256=9NdzlTMq7QQpj2ftUqZ7FPeHDv0KYbjETF8qMJVGGqI,374 +django/contrib/admin/templates/registration/password_change_done.html,sha256=ldLa6UAVgn_FiKQ9TkO2EZraTBZx1URJrRGOn-_VZJs,671 +django/contrib/admin/templates/registration/password_change_form.html,sha256=Q1-5p82B7oFkbFocUSBaelomL4u8NIadxzgbY3fE70I,2046 +django/contrib/admin/templates/registration/password_reset_complete.html,sha256=RD0DbFybLTVfHtkU4yN7HG3YXY-xs_BLVgl3vSB7czU,505 +django/contrib/admin/templates/registration/password_reset_confirm.html,sha256=a1jISSwO_3OkJD1-Q_20Sv4oB8NhEcn7dcQBcm9ipI8,1369 +django/contrib/admin/templates/registration/password_reset_done.html,sha256=ofGCzPs--2mOPLlGcTbZJAoZQkEpfwFb5reLxaKq12g,669 +django/contrib/admin/templates/registration/password_reset_email.html,sha256=d_NtuuiWTS9AZu6qObmp-lux0UkUCdA9ZUIUKyYJeHE,582 +django/contrib/admin/templates/registration/password_reset_form.html,sha256=NGW3MhDnsD3bmrLEhEtJuMaHByN79uUTyr0QJXP20Pg,966 +django/contrib/admin/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/admin/templatetags/admin_list.py,sha256=9bs3ES12mt-2vZvuR1UvfYha8Q10JWlpWMpuhBk6ANs,17799 +django/contrib/admin/templatetags/admin_modify.py,sha256=yr73KRXuizBIiKrSsgf8jatziGrUTMF7vwfm4mHlAcg,4222 +django/contrib/admin/templatetags/admin_static.py,sha256=WQitV4udeLfD8B36sRJn7QqncP0KWc5a8A83LsIOIeU,399 +django/contrib/admin/templatetags/admin_urls.py,sha256=b_RxDLR7yLBTMe-_ylzO-m0R3ITq3ZP_pnddRyM_Nos,1791 +django/contrib/admin/templatetags/base.py,sha256=54mdDPyCnaMS4N0WNgZBJakx_e1204CNSn68vaLP5Bg,1321 +django/contrib/admin/templatetags/log.py,sha256=mxV6mvfVJo0qRCelkjRBNWfrurLABhZvGQlcp5Bn4IU,2079 +django/contrib/admin/views/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/admin/views/autocomplete.py,sha256=vfLa2YPZNRSHlbZXVNnlpBtTwLtY-GQ1yvvCd8D1fHY,1962 +django/contrib/admin/views/decorators.py,sha256=J4wYcyaFr_-xY1ANl6QF4cFhOupRvjjmBotN0FshVYg,658 +django/contrib/admin/views/main.py,sha256=rMEbv_0VRKCVTzrWQM4w-4f_Q1VN-tzZ5NoGcSAljuM,21004 +django/contrib/admindocs/__init__.py,sha256=oY-eBzAOwpf5g222-vlH5BWHpDzpkj_DW7_XGDj7zgI,69 +django/contrib/admindocs/apps.py,sha256=rV3aWVevgI6o8_9WY0yQ62O5CSMRRZrVwZFt1gpfKk0,216 +django/contrib/admindocs/middleware.py,sha256=AZpS3DbqX7jhGl3Va1ylGl7IXrRS-5xaBiDA8CLEyT0,1302 +django/contrib/admindocs/urls.py,sha256=zdHaV60yJMjuLqO9xU0H-j7hz1PmSsepEWZA2GH-eI0,1310 +django/contrib/admindocs/utils.py,sha256=ZxXUYcj8uyz-87jGOeKj28x4Ii-fs6qEJjk-G1O1cx4,7983 +django/contrib/admindocs/views.py,sha256=3p1uR4r0Gga1BfsVX2v2afV19Xe_VOSwTj9BF-e9swc,16619 +django/contrib/admindocs/locale/af/LC_MESSAGES/django.mo,sha256=RnpPLulXkAXe6s5TmlkNbHWyK5R-0nGlOv-3TOFT_JU,702 +django/contrib/admindocs/locale/af/LC_MESSAGES/django.po,sha256=18HnMLlT8NzeujAJRPHGmwkKesl9Uy8Fllt3AP_lYgw,4608 +django/contrib/admindocs/locale/ar/LC_MESSAGES/django.mo,sha256=IoUExlNwqSYql6zMAuXcFt0cmkjMc_i0fb0qp7cBQlA,7286 +django/contrib/admindocs/locale/ar/LC_MESSAGES/django.po,sha256=KT8AOJeiYBk4dyJCyLnHAQJcOP3Fjw6XHOjmHsJ9pEY,7924 +django/contrib/admindocs/locale/ast/LC_MESSAGES/django.mo,sha256=d4u-2zZXnnueWm9CLSnt4TRWgZk2NMlrA6gaytJ2gdU,715 +django/contrib/admindocs/locale/ast/LC_MESSAGES/django.po,sha256=TUkc-Hm4h1kD0NKyndteW97jH6bWcJMFXUuw2Bd62qo,4578 +django/contrib/admindocs/locale/az/LC_MESSAGES/django.mo,sha256=yWjmqVrGit7XjELYepZ9R48eOKma5Wau2RkkSSiJrgc,1687 +django/contrib/admindocs/locale/az/LC_MESSAGES/django.po,sha256=wGdq-g4u8ssHHvODJB-knjZdrP6noxRW9APn_kmOz7w,4993 +django/contrib/admindocs/locale/be/LC_MESSAGES/django.mo,sha256=KY94OxY-NFsFbfZG9cFw77xw68YLDWyuYs04rxwpyU8,8185 +django/contrib/admindocs/locale/be/LC_MESSAGES/django.po,sha256=ijhluxI7Wn9PcZUDG3O8VpRsRVU6AYwZEdkUBfgXAS0,8707 +django/contrib/admindocs/locale/bg/LC_MESSAGES/django.mo,sha256=n9GdBZljKJBmfups8Zt82lpHgEWvonacXztOS6qbAjM,7837 +django/contrib/admindocs/locale/bg/LC_MESSAGES/django.po,sha256=SrmOtJ6nOi3lrgEwr-s76jYzN7lZs05dbEwh9OFxFHU,8692 +django/contrib/admindocs/locale/bn/LC_MESSAGES/django.mo,sha256=NOKVcE8id9G1OctSly4C5lm64CgEF8dohX-Pdyt4kCM,3794 +django/contrib/admindocs/locale/bn/LC_MESSAGES/django.po,sha256=6M7LjIEjvDTjyraxz70On_TIsgqJPLW7omQ0Fz_zyfQ,6266 +django/contrib/admindocs/locale/br/LC_MESSAGES/django.mo,sha256=UsPTado4ZNJM_arSMXyuBGsKN-bCHXQZdFbh0GB3dtg,1571 +django/contrib/admindocs/locale/br/LC_MESSAGES/django.po,sha256=SHOxPSgozJbOkm8u5LQJ9VmL58ZSBmlxfOVw1fAGl2s,5139 +django/contrib/admindocs/locale/bs/LC_MESSAGES/django.mo,sha256=clvhu0z3IF5Nt0tZ85hOt4M37pnGEWeIYumE20vLpsI,1730 +django/contrib/admindocs/locale/bs/LC_MESSAGES/django.po,sha256=1-OrVWFqLpeXQFfh7JNjJtvWjVww7iB2s96dcSgLy90,5042 +django/contrib/admindocs/locale/ca/LC_MESSAGES/django.mo,sha256=RZp6R180mKEuO_zKKaMfhP8qDQge9obnuF4qKxvn7Mk,6681 +django/contrib/admindocs/locale/ca/LC_MESSAGES/django.po,sha256=xZfd_o522aYaeqISmPK9vpSuDAWS4XJ1ODULTzaDFg8,7337 +django/contrib/admindocs/locale/cs/LC_MESSAGES/django.mo,sha256=qbdYC_4t3scD3GqnJC76t31ln3xFGfqzf-QuYf2pmSg,6641 +django/contrib/admindocs/locale/cs/LC_MESSAGES/django.po,sha256=jWCCrjIsQv5sucbv9TP2BW8d9YzIRmL4NSa0uWJlSQ0,7206 +django/contrib/admindocs/locale/cy/LC_MESSAGES/django.mo,sha256=sYeCCq0CMrFWjT6rKtmFrpC09OEFpYLSI3vu9WtpVTY,5401 +django/contrib/admindocs/locale/cy/LC_MESSAGES/django.po,sha256=GhdikiXtx8Aea459uifQtBjHuTlyUeiKu0_rR_mDKyg,6512 +django/contrib/admindocs/locale/da/LC_MESSAGES/django.mo,sha256=SWw8DiXbYPQCc8nwUPOt68FRUgrd_Eb7Dw9SqKXWrhY,6458 +django/contrib/admindocs/locale/da/LC_MESSAGES/django.po,sha256=_j2DkNr1pVGMcVLA4F1lzurLyS8ElKR4w8qWyhSlUOw,7062 +django/contrib/admindocs/locale/de/LC_MESSAGES/django.mo,sha256=6KJ9OfmvE6yzBF-n6sboLq4vv_o0uhLeevUEAZj-uEo,6585 +django/contrib/admindocs/locale/de/LC_MESSAGES/django.po,sha256=y2kXww5nrZpLJZtWm45d1hUCCq2HeplU9hAtDiOj9qo,7097 +django/contrib/admindocs/locale/dsb/LC_MESSAGES/django.mo,sha256=jJNiddLBOMe9oeadm1h4iDRUqaTmfbJ28fS3h141VCk,6836 +django/contrib/admindocs/locale/dsb/LC_MESSAGES/django.po,sha256=MQQidlh2Ljp0ChO92tVJ_gkbTC0kpEbNAMOC2F903qM,7314 +django/contrib/admindocs/locale/el/LC_MESSAGES/django.mo,sha256=dJy15irtJqzPFc_yHS3LTeXYmPu0-bIlyrDPfbE5pSE,8598 +django/contrib/admindocs/locale/el/LC_MESSAGES/django.po,sha256=82wcERwp7_v3l66v3GKdlT-lVGhwGs8DK0184SbV3zk,9259 +django/contrib/admindocs/locale/en/LC_MESSAGES/django.mo,sha256=U0OV81NfbuNL9ctF-gbGUG5al1StqN-daB-F-gFBFC8,356 +django/contrib/admindocs/locale/en/LC_MESSAGES/django.po,sha256=nR84XXUZlLxu-CriBHo6ljWVqGmeARQvZVvyIIF6JHY,10680 +django/contrib/admindocs/locale/en_AU/LC_MESSAGES/django.mo,sha256=BQ54LF9Tx88m-pG_QVz_nm_vqvoy6pVJzL8urSO4l1Q,486 +django/contrib/admindocs/locale/en_AU/LC_MESSAGES/django.po,sha256=ho7s1uKEs9FGooyZBurvSjvFz1gDSX6R4G2ZKpF1c9Q,5070 +django/contrib/admindocs/locale/en_GB/LC_MESSAGES/django.mo,sha256=xKGbswq1kuWCbn4zCgUQUb58fEGlICIOr00oSdCgtU4,1821 +django/contrib/admindocs/locale/en_GB/LC_MESSAGES/django.po,sha256=No09XHkzYVFBgZqo7bPlJk6QD9heE0oaI3JmnrU_p24,4992 +django/contrib/admindocs/locale/eo/LC_MESSAGES/django.mo,sha256=cwozZwZY0TylDQe7JguENqwGIqVhq0PCHK0htOixhsA,6391 +django/contrib/admindocs/locale/eo/LC_MESSAGES/django.po,sha256=WvbW_97wH7tBCbQqzDi0sr4hbsL74V621Bn7lFrMQ4U,6879 +django/contrib/admindocs/locale/es/LC_MESSAGES/django.mo,sha256=OYjdorHASk8cvZfzh4S1tzsB8ukZZQqEP8CJ8ZZD_-w,6673 +django/contrib/admindocs/locale/es/LC_MESSAGES/django.po,sha256=0d-YNcIC4QxJ4c0J62mqCjz7CbrgZZx1J_E4t7PPk7M,7516 +django/contrib/admindocs/locale/es_AR/LC_MESSAGES/django.mo,sha256=1-41H1OzEb3L-4LV9OfnbazGm0VQ5oPRxjOpxnjvjLA,6691 +django/contrib/admindocs/locale/es_AR/LC_MESSAGES/django.po,sha256=VBSHCqICgxdcVhVH4OvIvocIlv5BOP2QI6xQBgWp3Lk,7247 +django/contrib/admindocs/locale/es_CO/LC_MESSAGES/django.mo,sha256=KFjQyWtSxH_kTdSJ-kNUDAFt3qVZI_3Tlpg2pdkvJfs,6476 +django/contrib/admindocs/locale/es_CO/LC_MESSAGES/django.po,sha256=dwrTVjYmueLiVPu2yiJ_fkFF8ZeRntABoVND5H2WIRI,7038 +django/contrib/admindocs/locale/es_MX/LC_MESSAGES/django.mo,sha256=3hZiFFVO8J9cC624LUt4lBweqmpgdksRtvt2TLq5Jqs,1853 +django/contrib/admindocs/locale/es_MX/LC_MESSAGES/django.po,sha256=gNmx1QTbmyMxP3ftGXGWJH_sVGThiSe_VNKkd7M9jOY,5043 +django/contrib/admindocs/locale/es_VE/LC_MESSAGES/django.mo,sha256=sMwJ7t5GqPF496w-PvBYUneZ9uSwmi5jP-sWulhc6BM,6663 +django/contrib/admindocs/locale/es_VE/LC_MESSAGES/django.po,sha256=ZOcE0f95Q6uD9SelK6bQlKtS2c3JX9QxNYCihPdlM5o,7201 +django/contrib/admindocs/locale/et/LC_MESSAGES/django.mo,sha256=cQwLB8r0hRdWCxp2P8atYGambrKLR18GorVlp_O995M,6402 +django/contrib/admindocs/locale/et/LC_MESSAGES/django.po,sha256=Q3hVcRl3jtexQufNAZWacz3F_VRL1IctRMXYxdXArNE,7009 +django/contrib/admindocs/locale/eu/LC_MESSAGES/django.mo,sha256=WHgK7vGaqjO4MwjBkWz2Y3ABPXCqfnwSGelazRhOiuo,6479 +django/contrib/admindocs/locale/eu/LC_MESSAGES/django.po,sha256=718XgJN7UQcHgE9ku0VyFp7Frs-cvmCTO1o-xS5kpqc,7099 +django/contrib/admindocs/locale/fa/LC_MESSAGES/django.mo,sha256=5LnONa6ZHXFffSvhtIHOc-nnbltpgasyeZK8nUkoyIs,7533 +django/contrib/admindocs/locale/fa/LC_MESSAGES/django.po,sha256=LqY_cJ3KiQ_SbRvn1gffAv4-8N64cpWuoMsJ53dm3UQ,8199 +django/contrib/admindocs/locale/fi/LC_MESSAGES/django.mo,sha256=-iPQyWSVn46CF-huqytiomENda1cM0VGAnnVRlwlezQ,6413 +django/contrib/admindocs/locale/fi/LC_MESSAGES/django.po,sha256=AG_WPvp2-c8mQy_Gp4tUACvqN-ACKbr-jxMKb86ilKQ,6945 +django/contrib/admindocs/locale/fr/LC_MESSAGES/django.mo,sha256=Dfrp3u91kvkvJA7cwSnud9adSGWIE8iVl8V_Ku6CYZ4,6786 +django/contrib/admindocs/locale/fr/LC_MESSAGES/django.po,sha256=ojxKajQOZkHXlNN6FE324WustYzdUu4iyjVG0bTG9vs,7313 +django/contrib/admindocs/locale/fy/LC_MESSAGES/django.mo,sha256=_xVO-FkPPoTla_R0CzktpRuafD9fuIP_G5N-Q08PxNg,476 +django/contrib/admindocs/locale/fy/LC_MESSAGES/django.po,sha256=b3CRH9bSUl_jjb9s51RlvFXp3bmsmuxTfN_MTmIIVNA,5060 +django/contrib/admindocs/locale/ga/LC_MESSAGES/django.mo,sha256=PkY5sLKd7gEIE2IkuuNJXP5RmjC-D4OODRv6KCCUDX8,1940 +django/contrib/admindocs/locale/ga/LC_MESSAGES/django.po,sha256=-l6VME96KR1KKNACVu7oHzlhCrnkC1PaJQyskOUqOvk,5211 +django/contrib/admindocs/locale/gd/LC_MESSAGES/django.mo,sha256=g_HxI2sDlCSI4QMkXmCM1BaBLyA_zm605-lrwWklIWI,6995 +django/contrib/admindocs/locale/gd/LC_MESSAGES/django.po,sha256=8EmFRNWJ1zAdwlK6BMgYe6aw7KwGyDkdUujaYyZJxlI,7477 +django/contrib/admindocs/locale/gl/LC_MESSAGES/django.mo,sha256=CYtHrSyH_Lw0YxmmmndEnMPU-cw5TMr-8NHUjz6v7JM,2265 +django/contrib/admindocs/locale/gl/LC_MESSAGES/django.po,sha256=0S2CJju3EIiEp6kqJIn0Jl1IyRAg2-5ovYMOW0YRtVA,5188 +django/contrib/admindocs/locale/he/LC_MESSAGES/django.mo,sha256=mWWnjeFI5eoi-al_VB03RT-7LtP7VvdUKh9EJufU-9E,7006 +django/contrib/admindocs/locale/he/LC_MESSAGES/django.po,sha256=O1shu9ypDpw9zk4_2xyVnTRX6ivw6SpXbNet-xJHedg,7505 +django/contrib/admindocs/locale/hi/LC_MESSAGES/django.mo,sha256=sZhObIxqrmFu5Y-ZOQC0JGM3ly4IVFr02yqOOOHnDag,2297 +django/contrib/admindocs/locale/hi/LC_MESSAGES/django.po,sha256=X6UfEc6q0BeaxVP_C4priFt8irhh-YGOUUzNQyVnEYY,5506 +django/contrib/admindocs/locale/hr/LC_MESSAGES/django.mo,sha256=fMsayjODNoCdbpBAk9GHtIUaGJGFz4sD9qYrguj-BQA,2550 +django/contrib/admindocs/locale/hr/LC_MESSAGES/django.po,sha256=qi2IB-fBkGovlEz2JAQRUNE54MDdf5gjNJWXM-dIG1s,5403 +django/contrib/admindocs/locale/hsb/LC_MESSAGES/django.mo,sha256=ft4a_FXwxSoabWHHBrX9e9g3SzQG5aYBkOAFki6OK0M,6797 +django/contrib/admindocs/locale/hsb/LC_MESSAGES/django.po,sha256=eQY8M7whVdInK2EeqaeyZCWTH33-qlB2a1IU8eF3uLs,7278 +django/contrib/admindocs/locale/hu/LC_MESSAGES/django.mo,sha256=pAK3eTIgFlPjtJw-3rkd765P78o-LhgM94O8yNBJab8,6660 +django/contrib/admindocs/locale/hu/LC_MESSAGES/django.po,sha256=pJnWzCsWYOZhu0MjMdP3CsTe7Fff4REALZR1SmsJ22Y,7196 +django/contrib/admindocs/locale/ia/LC_MESSAGES/django.mo,sha256=KklX2loobVtA6PqHOZHwF1_A9YeVGlqORinHW09iupI,1860 +django/contrib/admindocs/locale/ia/LC_MESSAGES/django.po,sha256=Z7btOCeARREgdH4CIJlVob_f89r2M9j55IDtTLtgWJU,5028 +django/contrib/admindocs/locale/id/LC_MESSAGES/django.mo,sha256=ls_B8o3QtpvZj8Wbjye1ls_LqgOP3oP-6jcuJzHslkE,6367 +django/contrib/admindocs/locale/id/LC_MESSAGES/django.po,sha256=fHTl0NjPK9xFvhLwLZqgfzTRtrvs6QTpLcAtNaZSQmI,6989 +django/contrib/admindocs/locale/io/LC_MESSAGES/django.mo,sha256=5t9Vurrh6hGqKohwsZIoveGeYCsUvRBRMz9M7k9XYY8,464 +django/contrib/admindocs/locale/io/LC_MESSAGES/django.po,sha256=SVZZEmaS1WbXFRlLLGg5bzUe09pXR23TeJtHUbhyl0w,5048 +django/contrib/admindocs/locale/is/LC_MESSAGES/django.mo,sha256=pEr-_MJi4D-WpNyFaQe3tVKVLq_9V-a4eIF18B3Qyko,1828 +django/contrib/admindocs/locale/is/LC_MESSAGES/django.po,sha256=-mD5fFnL6xUqeW4MITzm8Lvx6KXq4C9DGsEM9kDluZ8,5045 +django/contrib/admindocs/locale/it/LC_MESSAGES/django.mo,sha256=AhGl2DDlIiX9AS3VSj14Hpl86Khrh0USuIIrNajfAvA,6480 +django/contrib/admindocs/locale/it/LC_MESSAGES/django.po,sha256=EWpNc6wFL9vzmTjeB323GlnyuIQ3zy3H-5swX9FIPYA,7155 +django/contrib/admindocs/locale/ja/LC_MESSAGES/django.mo,sha256=F4QwDOvTwCEzGa1E9PoX-VHkF5uJoUcHDVzGl-Fkvc0,7377 +django/contrib/admindocs/locale/ja/LC_MESSAGES/django.po,sha256=Cljuw8oHQafTq2Uw6oDhM4C0Lt_JlQKFebkpkr_zWhA,7936 +django/contrib/admindocs/locale/ka/LC_MESSAGES/django.mo,sha256=w2cHLI1O3pVt43H-h71cnNcjNNvDC8y9uMYxZ_XDBtg,4446 +django/contrib/admindocs/locale/ka/LC_MESSAGES/django.po,sha256=omKVSzNA3evF5Mk_Ud6utHql-Do7s9xDzCVQGQA0pSg,6800 +django/contrib/admindocs/locale/kab/LC_MESSAGES/django.mo,sha256=XTuWnZOdXhCFXEW4Hp0zFtUtAF0wJHaFpQqoDUTWYGw,1289 +django/contrib/admindocs/locale/kab/LC_MESSAGES/django.po,sha256=lQWewMZncWUvGhpkgU_rtwWHcgAyvhIkrDfjFu1l-d8,4716 +django/contrib/admindocs/locale/kk/LC_MESSAGES/django.mo,sha256=mmhLzn9lo4ff_LmlIW3zZuhE77LoSUfpaMMMi3oyi38,1587 +django/contrib/admindocs/locale/kk/LC_MESSAGES/django.po,sha256=72sxLw-QDSFnsH8kuzeQcV5jx7Hf1xisBmxI8XqSCYw,5090 +django/contrib/admindocs/locale/km/LC_MESSAGES/django.mo,sha256=Fff1K0qzialXE_tLiGM_iO5kh8eAmQhPZ0h-eB9iNOU,1476 +django/contrib/admindocs/locale/km/LC_MESSAGES/django.po,sha256=E_CaaYc4GqOPgPh2t7iuo0Uf4HSQQFWAoxSOCG-uEGU,4998 +django/contrib/admindocs/locale/kn/LC_MESSAGES/django.mo,sha256=lisxE1zzW-Spdm7hIzXxDAfS7bM-RdrAG_mQVwz9WMU,1656 +django/contrib/admindocs/locale/kn/LC_MESSAGES/django.po,sha256=fbiHUPdw_iXrOvgiIvPTJI3WPLD_T77VBfhqW6gjq1c,5178 +django/contrib/admindocs/locale/ko/LC_MESSAGES/django.mo,sha256=eZaKtL6wL4GjEnx6wKO2wJoV-BrTjGyPpKHx8pZ7Fug,6609 +django/contrib/admindocs/locale/ko/LC_MESSAGES/django.po,sha256=mlCXxR8y6pV9egVZTsCucsKAi4D-wiSSwq1wMGqHjcg,7285 +django/contrib/admindocs/locale/lb/LC_MESSAGES/django.mo,sha256=N0hKFuAdDIq5clRKZirGh4_YDLsxi1PSX3DVe_CZe4k,474 +django/contrib/admindocs/locale/lb/LC_MESSAGES/django.po,sha256=B46-wRHMKUMcbvMCdojOCxqIVL5qVEh4Czo20Qgz6oU,5058 +django/contrib/admindocs/locale/lt/LC_MESSAGES/django.mo,sha256=KOnpaVeomKJIHcVLrkeRVnaqQHzFdYM_wXZbbqxWs4g,6741 +django/contrib/admindocs/locale/lt/LC_MESSAGES/django.po,sha256=-uzCS8193VCZPyhO8VOi11HijtBG9CWVKStFBZSXfI4,7444 +django/contrib/admindocs/locale/lv/LC_MESSAGES/django.mo,sha256=lHUI2I_Xj9zQQXReg_StrXPNvNxqme0fcjHqQO545jM,6487 +django/contrib/admindocs/locale/lv/LC_MESSAGES/django.po,sha256=uPOUrYKB-osuZ0Hg9vSSvirrKT1gdSOy1gDRHLGe9-g,7049 +django/contrib/admindocs/locale/mk/LC_MESSAGES/django.mo,sha256=8H9IpRASM7O2-Ql1doVgM9c4ybZ2KcfnJr12PpprgP4,8290 +django/contrib/admindocs/locale/mk/LC_MESSAGES/django.po,sha256=Uew7tEljjgmslgfYJOP9JF9ELp6NbhkZG_v50CZgBg8,8929 +django/contrib/admindocs/locale/ml/LC_MESSAGES/django.mo,sha256=bm4tYwcaT8XyPcEW1PNZUqHJIds9CAq3qX_T1-iD4k4,6865 +django/contrib/admindocs/locale/ml/LC_MESSAGES/django.po,sha256=yNINX5M7JMTbYnFqQGetKGIXqOjGJtbN2DmIW9BKQ_c,8811 +django/contrib/admindocs/locale/mn/LC_MESSAGES/django.mo,sha256=KqdcvSpqmjRfA8M4nGB9Cnu9Auj4pTu9aH07XtCep3I,7607 +django/contrib/admindocs/locale/mn/LC_MESSAGES/django.po,sha256=PGhlnzDKyAIRzaPCbNujpxSpf_JaOG66LK_NMlnZy6I,8316 +django/contrib/admindocs/locale/mr/LC_MESSAGES/django.mo,sha256=LDGC7YRyVBU50W-iH0MuESunlRXrNfNjwjXRCBdfFVg,468 +django/contrib/admindocs/locale/mr/LC_MESSAGES/django.po,sha256=5cUgPltXyS2Z0kIKF5ER8f5DuBhwmAINJQyfHj652d0,5052 +django/contrib/admindocs/locale/my/LC_MESSAGES/django.mo,sha256=AsdUmou0FjCiML3QOeXMdbHiaSt2GdGMcEKRJFonLOQ,1721 +django/contrib/admindocs/locale/my/LC_MESSAGES/django.po,sha256=c75V-PprKrWzgrHbfrZOpm00U_zZRzxAUr2U_j8MF4w,5189 +django/contrib/admindocs/locale/nb/LC_MESSAGES/django.mo,sha256=-bqqbUhhOeXaLpNaBPdvAOMVOcUycSn_LMc4KQZ3-cI,6346 +django/contrib/admindocs/locale/nb/LC_MESSAGES/django.po,sha256=Pinb5oYBHqxDF0X5PXcZ4ypW2awXBE4q2p3eYVjTDRo,6935 +django/contrib/admindocs/locale/ne/LC_MESSAGES/django.mo,sha256=vx3Rcm4p1TNT1NXHEVk5q6C5Cux_5zK3ozwNorGzUjk,1505 +django/contrib/admindocs/locale/ne/LC_MESSAGES/django.po,sha256=FTpLzGCFoGAAeZjGI-ZlyaLVfUKwsV758Ca8o5AjREQ,5009 +django/contrib/admindocs/locale/nl/LC_MESSAGES/django.mo,sha256=q2AkgM7vSz-4oNmeBdkzlJ6CYeHotSz46pouZzRfrRM,6349 +django/contrib/admindocs/locale/nl/LC_MESSAGES/django.po,sha256=051HnemeTAcVvvNxkFKzYzxQso-WwM0u1pnRPJil688,6998 +django/contrib/admindocs/locale/nn/LC_MESSAGES/django.mo,sha256=Dx-A4dlDEoOKrtvis1mWfvwA2Urj-QAiKNmBy--v0oY,1662 +django/contrib/admindocs/locale/nn/LC_MESSAGES/django.po,sha256=VAHAyol0YEaHd0TaGxaQuVUIR72QB3VUnB1ARtr-AWw,4974 +django/contrib/admindocs/locale/os/LC_MESSAGES/django.mo,sha256=zSQBgSj4jSu5Km0itNgDtbkb1SbxzRvQeZ5M9sXHI8k,2044 +django/contrib/admindocs/locale/os/LC_MESSAGES/django.po,sha256=hZlMmmqfbGmoiElGbJg7Fp791ZuOpRFrSu09xBXt6z4,5215 +django/contrib/admindocs/locale/pa/LC_MESSAGES/django.mo,sha256=yFeO0eZIksXeDhAl3CrnkL1CF7PHz1PII2kIxGA0opQ,1275 +django/contrib/admindocs/locale/pa/LC_MESSAGES/django.po,sha256=DA5LFFLOXHIJIqrrnj9k_rqL-wr63RYX_i-IJFhBuc0,4900 +django/contrib/admindocs/locale/pl/LC_MESSAGES/django.mo,sha256=EesxAXz7TGC7Llv85MWiqgXmJboTTCXcTw-58RvOQH0,6652 +django/contrib/admindocs/locale/pl/LC_MESSAGES/django.po,sha256=F9BXW5MygjhwJ0yw672hRl7c6612caR60KOxfcaZcKM,7455 +django/contrib/admindocs/locale/pt/LC_MESSAGES/django.mo,sha256=WcXhSlbGdJgVMvydkPYYee7iOQ9SYdrLkquzgIBhVWU,6566 +django/contrib/admindocs/locale/pt/LC_MESSAGES/django.po,sha256=J98Hxa-ApyzRevBwcAldK9bRYbkn5DFw3Z5P7SMEwx0,7191 +django/contrib/admindocs/locale/pt_BR/LC_MESSAGES/django.mo,sha256=7R52AIZM0NjoASXDmNLzv4x1fePtn9Fj3HJy3iSOsz4,6601 +django/contrib/admindocs/locale/pt_BR/LC_MESSAGES/django.po,sha256=gIraoQfr6DLWV418adqzym7untmC4fN42WT6X057_A4,7404 +django/contrib/admindocs/locale/ro/LC_MESSAGES/django.mo,sha256=wEimPgw2SwK1LDEuAc1cw9LBO-a09LZrR0b6qcpyxXk,6755 +django/contrib/admindocs/locale/ro/LC_MESSAGES/django.po,sha256=SOA9H817U6hntoqJ5Bf5PAEXr1tMwcuG5yWE29KL4Qc,7391 +django/contrib/admindocs/locale/ru/LC_MESSAGES/django.mo,sha256=m6sfSIxFI5WJjxdSXZvDcm9A1xIxXJD2r5-UdeIbdlc,8569 +django/contrib/admindocs/locale/ru/LC_MESSAGES/django.po,sha256=i0xEq4zScDKrmRJODgIewx_kUMkmeIPxPNE42Vw9AsI,9226 +django/contrib/admindocs/locale/sk/LC_MESSAGES/django.mo,sha256=Y9vQluxcGX9liYofnZb80iwgrdLs9WneKHX4-JX4evY,6644 +django/contrib/admindocs/locale/sk/LC_MESSAGES/django.po,sha256=X9eNfQfHj-SBIEUq5beCU3l5hpVPgv5ktn7GHT__2Qc,7337 +django/contrib/admindocs/locale/sl/LC_MESSAGES/django.mo,sha256=FMg_s9ZpeRD42OsSF9bpe8pRQ7wP7-a9WWnaVliqXpU,6508 +django/contrib/admindocs/locale/sl/LC_MESSAGES/django.po,sha256=JWO_WZAwBpXw-4FoB7rkWXGhi9aEVq1tH2fOC69rcgg,7105 +django/contrib/admindocs/locale/sq/LC_MESSAGES/django.mo,sha256=lbUhjyQWbGARQ6BggqWH1tO6kNi5lMwu-523mC9JCMA,6565 +django/contrib/admindocs/locale/sq/LC_MESSAGES/django.po,sha256=ZA_o7xIUMTVYadovn4Yxl7W54nGzPnIBjkrL66V8pAE,7081 +django/contrib/admindocs/locale/sr/LC_MESSAGES/django.mo,sha256=PyE8DXRYELzSs4RWh1jeADXOPrDEN3k-nLr8sbM1Ssw,3672 +django/contrib/admindocs/locale/sr/LC_MESSAGES/django.po,sha256=ri7v9WHXORY-3Dl-YDKGsCFfQzH-a5y8t1vT6yziIyo,6108 +django/contrib/admindocs/locale/sr_Latn/LC_MESSAGES/django.mo,sha256=au90IT43VR162L2jEsYqhRpso2dvOjpCPSCFiglokTc,1932 +django/contrib/admindocs/locale/sr_Latn/LC_MESSAGES/django.po,sha256=tJ4tHLJj0tDaVZba3WIkI0kg95_jEYWTmqXD0rFb6T8,5140 +django/contrib/admindocs/locale/sv/LC_MESSAGES/django.mo,sha256=FsErCRG8EAsZB7DhFxnvU_GeAv9gy5VC0gOYgV7-teA,6417 +django/contrib/admindocs/locale/sv/LC_MESSAGES/django.po,sha256=1sPLsQ6XXpmeIvqtKTFrsYpD39tg1ijy37iaBEmsq5Y,7042 +django/contrib/admindocs/locale/sw/LC_MESSAGES/django.mo,sha256=pyJfGL7UdPrJAVlCB3YimXxTjTfEkoZQWX-CSpDkcWc,1808 +django/contrib/admindocs/locale/sw/LC_MESSAGES/django.po,sha256=SIywrLX1UGx4OiPxoxUYelmQ1YaY2LMa3dxynGQpHp8,4929 +django/contrib/admindocs/locale/ta/LC_MESSAGES/django.mo,sha256=8SjQ9eGGyaZGhkuDoZTdtYKuqcVyEtWrJuSabvNRUVM,1675 +django/contrib/admindocs/locale/ta/LC_MESSAGES/django.po,sha256=k593yzVqpSQOsdpuF-rdsSLwKQU8S_QFMRpZXww__1A,5194 +django/contrib/admindocs/locale/te/LC_MESSAGES/django.mo,sha256=eAzNpYRy_G1erCcKDAMnJC4809ITRHvJjO3vpyAC_mk,1684 +django/contrib/admindocs/locale/te/LC_MESSAGES/django.po,sha256=oDg_J8JxepFKIe5m6lDKVC4YWQ_gDLibgNyQ3508VOM,5204 +django/contrib/admindocs/locale/th/LC_MESSAGES/django.mo,sha256=bHK49r45Q1nX4qv0a0jtDja9swKbDHHJVLa3gM13Cb4,2167 +django/contrib/admindocs/locale/th/LC_MESSAGES/django.po,sha256=_GMgPrD8Zs0lPKQOMlBmVu1I59yXSV42kfkrHzeiehY,5372 +django/contrib/admindocs/locale/tr/LC_MESSAGES/django.mo,sha256=qK7BooitjyWEj-KtIR6mkGVfqrAh92un_D2RDYqHfK0,6625 +django/contrib/admindocs/locale/tr/LC_MESSAGES/django.po,sha256=9Q2F3sWt8Y5WA6y8is8BZb74g80PaazArlZmim7X40E,7235 +django/contrib/admindocs/locale/tt/LC_MESSAGES/django.mo,sha256=pQmAQOPbrBVzBqtoQ0dsFWFwC6LxA5mQZ9QPqL6pSFw,1869 +django/contrib/admindocs/locale/tt/LC_MESSAGES/django.po,sha256=NCLv7sSwvEficUOSoMJlHGqjgjYvrvm2V3j1Gkviw80,5181 +django/contrib/admindocs/locale/udm/LC_MESSAGES/django.mo,sha256=hwDLYgadsKrQEPi9HiuMWF6jiiYUSy4y-7PVNJMaNpY,618 +django/contrib/admindocs/locale/udm/LC_MESSAGES/django.po,sha256=29fpfn4p8KxxrBdg4QB0GW_l8genZVV0kYi50zO-qKs,5099 +django/contrib/admindocs/locale/uk/LC_MESSAGES/django.mo,sha256=8LrLmRaZCxJL76RqROdH49rLsvq2TVuMTfuhsp8Wfjg,8449 +django/contrib/admindocs/locale/uk/LC_MESSAGES/django.po,sha256=uxziDeiYiDJ6TVk_fiquHe-6pxrGBtgK8ZRIn92KuJQ,9279 +django/contrib/admindocs/locale/ur/LC_MESSAGES/django.mo,sha256=VNg9o_7M0Z2LC0n3_-iwF3zYmncRJHaFqqpxuPmMq84,1836 +django/contrib/admindocs/locale/ur/LC_MESSAGES/django.po,sha256=QTg85c4Z13hMN_PnhjaLX3wx6TU4SH4hPTzNBfNVaMU,5148 +django/contrib/admindocs/locale/vi/LC_MESSAGES/django.mo,sha256=F6dyo00yeyUND_w1Ocm9SL_MUdXb60QQpmAQPto53IU,1306 +django/contrib/admindocs/locale/vi/LC_MESSAGES/django.po,sha256=JrVKjT848Y1cS4tpH-eRivFNwM-cUs886UEhY2FkTPw,4836 +django/contrib/admindocs/locale/zh_Hans/LC_MESSAGES/django.mo,sha256=ofyr93DAtNADnsn3OWY5fo8Rh6VL8w9DRJXeUe2zod8,6110 +django/contrib/admindocs/locale/zh_Hans/LC_MESSAGES/django.po,sha256=bMvp2QdcvV36p7SOvqGgCE6ov1nPyU-EDiHJzNVGTHI,6761 +django/contrib/admindocs/locale/zh_Hant/LC_MESSAGES/django.mo,sha256=R7NJ9FsGg7h6sETHiXL8jCN6vk_R5AP5vSY9u6R2d1I,4747 +django/contrib/admindocs/locale/zh_Hant/LC_MESSAGES/django.po,sha256=lFWmaYFnY4pf8HQ1WJSAlX6HrOGIdHp_aqMb4e5pgVY,6138 +django/contrib/admindocs/templates/admin_doc/bookmarklets.html,sha256=KbUjr9cygmTvlCiilIGvDTvLuYDdvi4HqzLLK_UBAHw,1333 +django/contrib/admindocs/templates/admin_doc/index.html,sha256=o1Z-Z6Dx8jzLwjihNnhROUOUKK_ILALjWGlMYz4U8u8,1313 +django/contrib/admindocs/templates/admin_doc/missing_docutils.html,sha256=LA8fyI_q_kRmE0e99XgiIDry3GRQ7ZjAu9EYBuCLT3Q,734 +django/contrib/admindocs/templates/admin_doc/model_detail.html,sha256=OfrSMc1vE_qItQrHO6GBBkwlhOQKex03ogvJJSyr2Jg,1824 +django/contrib/admindocs/templates/admin_doc/model_index.html,sha256=ow10WgNZUa6fUCp23ZmvR-kVdYUL29i3HBJ_iwlezfw,1322 +django/contrib/admindocs/templates/admin_doc/template_detail.html,sha256=xN-QihBsDVvpAI3C219Q__FMijnxw8j-wevYkk_mxMQ,995 +django/contrib/admindocs/templates/admin_doc/template_filter_index.html,sha256=QB9_QWIvHCGACzOo6yPOZtKIoKsJM8XLVgWhb5nJxmc,1747 +django/contrib/admindocs/templates/admin_doc/template_tag_index.html,sha256=rAyUTvECyomyB9u2er8oJE_FIMbQOd1auABqEHIupzE,1703 +django/contrib/admindocs/templates/admin_doc/view_detail.html,sha256=4mNkUt1_Q8ZGsvsZ1XMirPWNzJyptYMXZVIdPo9UVMc,896 +django/contrib/admindocs/templates/admin_doc/view_index.html,sha256=ewSVys3o1hzMjKmHJFZHqBdASsJnV6BJDlvnRuAMrs4,1682 +django/contrib/auth/__init__.py,sha256=BR69jz0xC6a1r7qyMur4YG5eoB9-4snK-TSQvJWxYB0,7986 +django/contrib/auth/admin.py,sha256=YbVtoNYWSkoLWKePeJ0Pl6u6wrhaoxeS8dTd3n7hXws,8607 +django/contrib/auth/apps.py,sha256=NGdy1h4yrogCn9YZOkhnO7LcVFHZAS60j-Bb7-Rz17A,1168 +django/contrib/auth/backends.py,sha256=rYAJ-B2kL5SkQn0l8SWUxdcJeEME5cRDRYkDdjjFios,7119 +django/contrib/auth/base_user.py,sha256=gXmS3Me_xTfKTTf5PSQRxn0sPJmDp044YrncXr5xQ7U,4450 +django/contrib/auth/checks.py,sha256=eml6rKyw4rEIHxBJUcqChUdvfEh69Monyjkm9FDTOoY,6355 +django/contrib/auth/common-passwords.txt.gz,sha256=CnCdMuzzpa5EVwTpCqtO7-x3CIPsy47PWWw7GUT9C5M,81355 +django/contrib/auth/context_processors.py,sha256=Vb91feuKV9a3BBgR0hrrGmZvVPw0JyYgeA_mRX9QK1c,1822 +django/contrib/auth/decorators.py,sha256=2iowUAGrkZBzaX_Wf0UkUbd0po00UCxtdFQxXj1HIyo,2892 +django/contrib/auth/forms.py,sha256=YK-5Y73-Pwj2OqZ58EcsYv34UdMfxD97ceGZh1vedzI,15057 +django/contrib/auth/hashers.py,sha256=p6eRs4Itse8BWvhmSgvGgHO9R1A1tglyD624jsCpDZc,22084 +django/contrib/auth/middleware.py,sha256=ihtkwdqyINaDDix1w3WKE9GayaGABY88j6drV0mHGDs,5399 +django/contrib/auth/mixins.py,sha256=qdnrUp7L9WTCVimH1ULAoZcsaO5g6_2iE_pT4dea0dY,3846 +django/contrib/auth/models.py,sha256=tGyNAtuQsYxKZret2qhR3vC17m6ctg6j568TV0OwcCg,14364 +django/contrib/auth/password_validation.py,sha256=2YyJVWx6UiA1jKxfgwJVWckHXS7acEkCQAYDbKew9ew,7631 +django/contrib/auth/signals.py,sha256=_QNYY-RzkwTvY3FRo01AW1S-D9l8lVb3ebt6F1GBfMU,227 +django/contrib/auth/tokens.py,sha256=JxZ6aEPibAvAoDNTIlIrYDz8_V8UZQs8KOYKRUTJfKo,3567 +django/contrib/auth/urls.py,sha256=6M54eTFdCFEqW0pzzKND4R5-8S9JrzoPcaVt0qA3JXc,1054 +django/contrib/auth/validators.py,sha256=AXlNhfwEd2sonzVAsitbBvKLnBc9CqdGuAmjUB8mEPM,685 +django/contrib/auth/views.py,sha256=aX2frKj1DrVCs-kSusIWUIaqffzXWWXdA5oD77fXRPw,13410 +django/contrib/auth/handlers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/auth/handlers/modwsgi.py,sha256=bTXKVMezywsn1KA2MVyDWeHvTNa2KrwIxn2olH7o_5I,1248 +django/contrib/auth/locale/af/LC_MESSAGES/django.mo,sha256=tRVmdxgSniXopRvpzie69lomr-NLoM3oqICKnxltnQw,7427 +django/contrib/auth/locale/af/LC_MESSAGES/django.po,sha256=E-HRXA5g27P73zQq3wsySxV-4o-yIwL_0-tikfkw5MU,7607 +django/contrib/auth/locale/ar/LC_MESSAGES/django.mo,sha256=lw7pjDDz5lRnSE6bvyGjdcuX06-mUxRZ6AOGreBP8o0,8705 +django/contrib/auth/locale/ar/LC_MESSAGES/django.po,sha256=3RZUD_C65heRnHppLoljc8REA_l1Df-vJ5rvhjEPr-g,9762 +django/contrib/auth/locale/ast/LC_MESSAGES/django.mo,sha256=Pt3gYY3j8Eroo4lAEmf-LR6u9U56mpE3vqLhjR4Uq-o,2250 +django/contrib/auth/locale/ast/LC_MESSAGES/django.po,sha256=Kiq4s8d1HnYpo3DQGlgUl3bOkxmgGW8CvGp9AbryRk8,5440 +django/contrib/auth/locale/az/LC_MESSAGES/django.mo,sha256=oE-fzJ6uz7Tdhs-8V9C65I-x1AakaxYR1rR8H1XqmQk,7450 +django/contrib/auth/locale/az/LC_MESSAGES/django.po,sha256=YnDzQ-iinkAcbYm_F7MHaj5-dEyVyiXtTZ_yS0IL7Kc,7691 +django/contrib/auth/locale/be/LC_MESSAGES/django.mo,sha256=YmJ7Gh14qYbk1OTHXqR4GEVdHcxGRHnpgf7xqzUKCR8,10008 +django/contrib/auth/locale/be/LC_MESSAGES/django.po,sha256=vPm5UJWEbhpoAslJhfvHyeTw6MGAfkrvSMd3EbnnmGk,10285 +django/contrib/auth/locale/bg/LC_MESSAGES/django.mo,sha256=ZwwXfAeWM92GObhxU6zzGu36KJUpkGOuEeprRMu5mZc,8751 +django/contrib/auth/locale/bg/LC_MESSAGES/django.po,sha256=_a2hoIiJRbvW3ymKAkAp-UZNk5AiUy5HqPBBby74Jew,9492 +django/contrib/auth/locale/bn/LC_MESSAGES/django.mo,sha256=cJSawQn3rNh2I57zK9vRi0r1xc598Wr26AyHh6D50ZQ,5455 +django/contrib/auth/locale/bn/LC_MESSAGES/django.po,sha256=5Vqd4n9ab98IMev4GHLxpO7f4r9nnhC3Nfx27HQNd8s,7671 +django/contrib/auth/locale/br/LC_MESSAGES/django.mo,sha256=nxLj88BBhT3Hudev1S_BRC8P6Jv7eoR8b6CHGt5eoPo,1436 +django/contrib/auth/locale/br/LC_MESSAGES/django.po,sha256=rFo68wfXMyju633KCAhg0Jcb3GVm3rk4opFQqI89d6Y,5433 +django/contrib/auth/locale/bs/LC_MESSAGES/django.mo,sha256=1i1CxyXwfskDZtItZQuEpZFlV3cpIo6Ls7Ocs0X3VTA,2963 +django/contrib/auth/locale/bs/LC_MESSAGES/django.po,sha256=C5CQ5vqjuLscWSKHVu0niGzmhxX0y-pf_eiuEr-ZmGU,5793 +django/contrib/auth/locale/ca/LC_MESSAGES/django.mo,sha256=ausOBfdpUjtBq1XQrP8tLsdC9rVVXNLOD5-C1tZ05AI,7641 +django/contrib/auth/locale/ca/LC_MESSAGES/django.po,sha256=wMkKe4lSk-kJVGd7HCJ4-PpFymyZDezvxePEF2gI2TQ,8019 +django/contrib/auth/locale/cs/LC_MESSAGES/django.mo,sha256=opNGqnxvwf68Cw8_D1tY45Pj8AV4eVTPhOK1JD2wVWY,7805 +django/contrib/auth/locale/cs/LC_MESSAGES/django.po,sha256=vCe6Lp8o9XnAywf_-W1c5UmQCPrVVWMfLLZS59IrgYc,8211 +django/contrib/auth/locale/cy/LC_MESSAGES/django.mo,sha256=lSfCwEVteW4PDaiGKPDxnSnlDUcGMkPfsxIluExZar0,4338 +django/contrib/auth/locale/cy/LC_MESSAGES/django.po,sha256=-LPAKGXNzB77lVHfCRmFlH3SUaLgOXk_YxfC0BomcEs,6353 +django/contrib/auth/locale/da/LC_MESSAGES/django.mo,sha256=NJ-Kky5bcJ2Typ8Kfu3FI7aG4qqmnzpBkd_nkO32VGc,7443 +django/contrib/auth/locale/da/LC_MESSAGES/django.po,sha256=HZHuz-_mdoBAyntlHeZnPwy8JIXoCZ351vaeF0FVz94,7790 +django/contrib/auth/locale/de/LC_MESSAGES/django.mo,sha256=Z4KFdT7BIn3DIVkwpdodfiFcvWTeVQEPUWU4QgMOYcc,7514 +django/contrib/auth/locale/de/LC_MESSAGES/django.po,sha256=plqGyseVxlR310SFqvPrkXParg-7Z-MfdNBk1UiD52Y,7919 +django/contrib/auth/locale/dsb/LC_MESSAGES/django.mo,sha256=BAAXuvUHRZYPdNoKFh1UiqBYAbyOC2SQRCpQGuW1zR4,8096 +django/contrib/auth/locale/dsb/LC_MESSAGES/django.po,sha256=UopznBtYDxdKbSenij3cIiBcdnsDhzyCnieIdVlkJEU,8350 +django/contrib/auth/locale/el/LC_MESSAGES/django.mo,sha256=tfjgL-_ZACj_GjsfR7jw1PTjxovgR51-LSo5ngtRX-U,10150 +django/contrib/auth/locale/el/LC_MESSAGES/django.po,sha256=IXkrUAGvMZrQTUb6DpdgftRkWg4aKy9vwyO6i-ajsjU,10753 +django/contrib/auth/locale/en/LC_MESSAGES/django.mo,sha256=U0OV81NfbuNL9ctF-gbGUG5al1StqN-daB-F-gFBFC8,356 +django/contrib/auth/locale/en/LC_MESSAGES/django.po,sha256=m_pwsxUew88m8RWQ-67V473WosKFWfV2nkSTWxIyt50,7918 +django/contrib/auth/locale/en_AU/LC_MESSAGES/django.mo,sha256=74v8gY8VcSrDgsPDaIMET5frCvtzgLE8oHgX1xNWUvw,3650 +django/contrib/auth/locale/en_AU/LC_MESSAGES/django.po,sha256=lg-LFEeZXxGsNNZ656ePDvAAncjuy0LKuQxUFvQCUJk,5921 +django/contrib/auth/locale/en_GB/LC_MESSAGES/django.mo,sha256=p57gDaYVvgEk1x80Hq4Pn2SZbsp9ly3XrJ5Ttlt2yOE,3179 +django/contrib/auth/locale/en_GB/LC_MESSAGES/django.po,sha256=-yDflw5-81VOlyqkmLJN17FRuwDrhYXItFUJwx2aqpE,5787 +django/contrib/auth/locale/eo/LC_MESSAGES/django.mo,sha256=4deiZv4tbjsp2HHn3O5DAidWPpI8gfhpoLbw9Mq_0a4,7347 +django/contrib/auth/locale/eo/LC_MESSAGES/django.po,sha256=KpeJqyXFj1ns0beDaXamNC6P7Rdq0Qff9i8rfHFKQug,7671 +django/contrib/auth/locale/es/LC_MESSAGES/django.mo,sha256=fu-Qpqz4XyYu1_irM742YYT4KUFa2niDZuVo1bbXpTM,7766 +django/contrib/auth/locale/es/LC_MESSAGES/django.po,sha256=U3C1QK5ZVLREVepW6oLVnD3hBNhdlv7ZrjzzMyDLcY4,8427 +django/contrib/auth/locale/es_AR/LC_MESSAGES/django.mo,sha256=DnK67G_cBQ62T8FzOeT9UAe5dkYOOYo__cUoCRAcv8w,7920 +django/contrib/auth/locale/es_AR/LC_MESSAGES/django.po,sha256=vcwNz5PSwMs5vOIFR-xN4ZIjYfzTOAmiYTJHAFFDaxU,8146 +django/contrib/auth/locale/es_CO/LC_MESSAGES/django.mo,sha256=K5VaKTyeV_WoKsLR1x8ZG4VQmk3azj6ZM8Phqjs81So,6529 +django/contrib/auth/locale/es_CO/LC_MESSAGES/django.po,sha256=qJywTaYi7TmeMB1sjwsiwG8GXtxAOaOX0voj7lLVZRw,7703 +django/contrib/auth/locale/es_MX/LC_MESSAGES/django.mo,sha256=WUwyvMgNFfKTRfzP4hExhNVMsZ0pee_ZT0p5mwMsu3E,7860 +django/contrib/auth/locale/es_MX/LC_MESSAGES/django.po,sha256=K-QHks0l3VP9R2LXsgcPcSIvRYlYQ7zNIkekMHr2_4o,8166 +django/contrib/auth/locale/es_VE/LC_MESSAGES/django.mo,sha256=GwpZytNHtK7Y9dqQKDiVi4SfA1AtPlk824_k7awqrdI,7415 +django/contrib/auth/locale/es_VE/LC_MESSAGES/django.po,sha256=G3mSCo_XGRUfOAKUeP_UNfWVzDPpbQrVYQt8Hv3VZVM,7824 +django/contrib/auth/locale/et/LC_MESSAGES/django.mo,sha256=DgY1GY3M_oBtdW692gk2RxcrGMiy7Eqdg2mD0iHsNVo,7432 +django/contrib/auth/locale/et/LC_MESSAGES/django.po,sha256=Wvqd4XplrtEA2dXg1SLGFgWcchkh3gPHgj8cOovQ3XU,7842 +django/contrib/auth/locale/eu/LC_MESSAGES/django.mo,sha256=K0AoFJGJJSnD1IzYqCY9qB4HZHwx-F7QaDTAGehyo7w,7396 +django/contrib/auth/locale/eu/LC_MESSAGES/django.po,sha256=y9BAASQYTTYfoTKWFVQUYs5-zPlminfJ6C5ZORD6g-s,7749 +django/contrib/auth/locale/fa/LC_MESSAGES/django.mo,sha256=7oQ_0XxUniTEDAGKLXODgouH80NdkDANKBQ749gLkok,8963 +django/contrib/auth/locale/fa/LC_MESSAGES/django.po,sha256=OUGU1vy0hLFb8Bv8V6gykbOB9Qw2Gk1MVMR7aHXS4FU,9362 +django/contrib/auth/locale/fi/LC_MESSAGES/django.mo,sha256=g8UTplFBR9rPuglnruZtE0Vo6tkhDhqbSlc1eh0DSFE,7514 +django/contrib/auth/locale/fi/LC_MESSAGES/django.po,sha256=1znv9S6mls8uwk6AVt8pYkYEG9Qr7TnHNOwL8rB6b-A,7824 +django/contrib/auth/locale/fr/LC_MESSAGES/django.mo,sha256=U1cycgOoKsx65naJRvcEa0qaI40olHZpH2I7IKluStM,8116 +django/contrib/auth/locale/fr/LC_MESSAGES/django.po,sha256=Dap58AsfuLC7Z4tWpoZzoUAP2Sz_wxRB7aUiGPHBSCA,8451 +django/contrib/auth/locale/fy/LC_MESSAGES/django.mo,sha256=95N-77SHF0AzQEer5LuBKu5n5oWf3pbH6_hQGvDrlP4,476 +django/contrib/auth/locale/fy/LC_MESSAGES/django.po,sha256=8XOzOFx-WerF7whzTie03hgO-dkbUFZneyrpZtat5JY,3704 +django/contrib/auth/locale/ga/LC_MESSAGES/django.mo,sha256=Nd02Ed9ACCY6JCCSwtiWl3DTODLFFu9Mq6JVlr5YbYk,3572 +django/contrib/auth/locale/ga/LC_MESSAGES/django.po,sha256=FQJMR5DosuKqo4vvF0NAQnjfqbH54MSzqL2-4BO4-uM,6127 +django/contrib/auth/locale/gd/LC_MESSAGES/django.mo,sha256=VviVmi6nVpH5U3za23353_MXTIkExdVJOFzdu1FDCgo,8720 +django/contrib/auth/locale/gd/LC_MESSAGES/django.po,sha256=Vn_dHeBR4q-Nb-Z14MGE9xFiDKK7eaNa8ySM0dhT-2Q,9018 +django/contrib/auth/locale/gl/LC_MESSAGES/django.mo,sha256=ZqVb1YCn_0_HyVtb_rnxmn0BSYAuKTVTFNHf2gftt5c,4022 +django/contrib/auth/locale/gl/LC_MESSAGES/django.po,sha256=YN_7iJTGc1Kh5llxHnwqq1kZmdQVMUMv1bkti30fMCI,6371 +django/contrib/auth/locale/he/LC_MESSAGES/django.mo,sha256=IbmufFuUd40JE8YBQgF4mnJZ4jENwFcJBr3oZXQnmeQ,8624 +django/contrib/auth/locale/he/LC_MESSAGES/django.po,sha256=LbZF6SdPBdItnr7_AQpFbtLjF0axZmOXRwQn6TjKzdU,8937 +django/contrib/auth/locale/hi/LC_MESSAGES/django.mo,sha256=7CxV1H37hMbgKIhnAWx-aJmipLRosJe1qg8BH2CABfw,5364 +django/contrib/auth/locale/hi/LC_MESSAGES/django.po,sha256=DU5YM6r1kd5fo40yqFXzEaNh42ezFQFQ-0dmVqkaKQ0,7769 +django/contrib/auth/locale/hr/LC_MESSAGES/django.mo,sha256=GEap3QClwCkuwQZKJE7qOZl93RRxmyyvTTnOTYaAWUo,5894 +django/contrib/auth/locale/hr/LC_MESSAGES/django.po,sha256=ALftoYSaI1U90RNDEvnaFATbw1SL0m8fNXAyl6DkSvo,7355 +django/contrib/auth/locale/hsb/LC_MESSAGES/django.mo,sha256=PanVy6rcRBJ_Mr-BVKk8GIQOFZvtNz5Frga_GC5Ulmc,7925 +django/contrib/auth/locale/hsb/LC_MESSAGES/django.po,sha256=ZctqPoxjR1ofZ35OjDqaFi4QWcPXW6U_uGkudpOiAAc,8170 +django/contrib/auth/locale/hu/LC_MESSAGES/django.mo,sha256=JG0ZJ06LWE0XHjm7oS2n5tycMRkNGAV1qDJVkR7O45I,7691 +django/contrib/auth/locale/hu/LC_MESSAGES/django.po,sha256=3GSfUuXh7T7xH4_bLtgihH575dP63o1pSH0o7c8df2o,7999 +django/contrib/auth/locale/hy/LC_MESSAGES/django.mo,sha256=zoLe0EqIH8HQYC5XAWd8b8mA2DpbmDSEBsF-WIKX_OQ,8001 +django/contrib/auth/locale/hy/LC_MESSAGES/django.po,sha256=wIWLbz6f0n44ZcjEbZZsgoWTpzXRGND15hudr_DQ3l0,8787 +django/contrib/auth/locale/ia/LC_MESSAGES/django.mo,sha256=oTzOm7fRjn79_pU9zy6D_Ehex5FK7hjQYe4soeHhRkk,3314 +django/contrib/auth/locale/ia/LC_MESSAGES/django.po,sha256=LzJOXjj1Fa61zk3v2d-aWS48eva2S0b0jJ9r5CqiFDY,5881 +django/contrib/auth/locale/id/LC_MESSAGES/django.mo,sha256=LUcZxGYRwKz6C6nQ-AaXeYUlxjGU-7Yr6frh93xFDsI,7169 +django/contrib/auth/locale/id/LC_MESSAGES/django.po,sha256=p3i1D8-qZYdBAfhzZRIuzEJNOZm59ABx8qy5IKNFaoI,7583 +django/contrib/auth/locale/io/LC_MESSAGES/django.mo,sha256=YwAS3aWljAGXWcBhGU_GLVuGJbHJnGY8kUCE89CPdks,464 +django/contrib/auth/locale/io/LC_MESSAGES/django.po,sha256=W36JXuA1HQ72LspixRxeuvxogVxtk7ZBbT0VWI38_oM,3692 +django/contrib/auth/locale/is/LC_MESSAGES/django.mo,sha256=04pHypFYzzOUc9O0fS0n9EiPjG5w3KV96ffMYtXddrA,7540 +django/contrib/auth/locale/is/LC_MESSAGES/django.po,sha256=Pdy1izQ1K718XqGdb8OZaxY7yoTnzq300x-etW9mdvo,7890 +django/contrib/auth/locale/it/LC_MESSAGES/django.mo,sha256=msIGxB__lTtLXQT_SdoVxBN6j2RbXrbXWHxxZIhGHxA,7583 +django/contrib/auth/locale/it/LC_MESSAGES/django.po,sha256=EQqX3Zr1LsRLAdW6zqOIKl8BmS-3WBPfJe0vNM4laJ0,8067 +django/contrib/auth/locale/ja/LC_MESSAGES/django.mo,sha256=t3UJj76znV0oWwddRywtKiTeNKgmV3N3moLgEuaFZoo,8062 +django/contrib/auth/locale/ja/LC_MESSAGES/django.po,sha256=xGmVEPon-B6__imklMQ-mvcuRMEl62Czjo5wDToV7Nw,8335 +django/contrib/auth/locale/ka/LC_MESSAGES/django.mo,sha256=0QWYd58Dz5Az3OfZo7wV3o-QCre2oc5dgEPu0rnLVJI,10625 +django/contrib/auth/locale/ka/LC_MESSAGES/django.po,sha256=oCtz7gS4--mhv7biS1rIh43I4v1UpZX4DKdrB-xZ2RA,11217 +django/contrib/auth/locale/kab/LC_MESSAGES/django.mo,sha256=9qKeQ-gDByoOdSxDpSbLaM4uSP5sIi7qlTn8tJidVDs,2982 +django/contrib/auth/locale/kab/LC_MESSAGES/django.po,sha256=8cq5_rjRXPzTvn1jPo6H_Jcrv6IXkWr8n9fTPvghsS8,5670 +django/contrib/auth/locale/kk/LC_MESSAGES/django.mo,sha256=RJablrXpRba6YVB_8ACSt2q_BjmxrHQZzX6RxMJImlA,3542 +django/contrib/auth/locale/kk/LC_MESSAGES/django.po,sha256=OebwPN9iWBvjDu0P2gQyBbShvIFxFIqCw8DpKuti3xk,6360 +django/contrib/auth/locale/km/LC_MESSAGES/django.mo,sha256=FahcwnCgzEamtWcDEPOiJ4KpXCIHbnSowfSRdRQ2F9U,2609 +django/contrib/auth/locale/km/LC_MESSAGES/django.po,sha256=lvRHHIkClbt_8-9Yn0xY57dMxcS72z4sUkxLb4cohP0,5973 +django/contrib/auth/locale/kn/LC_MESSAGES/django.mo,sha256=u0YygqGJYljBZwI9rm0rRk_DdgaBEMA1etL-Lk-7Mls,4024 +django/contrib/auth/locale/kn/LC_MESSAGES/django.po,sha256=HKQ1t2yhh9OwsqvMft337VpPmi8KU8PhF2M8gKOdtXw,6951 +django/contrib/auth/locale/ko/LC_MESSAGES/django.mo,sha256=r1de3B_rb-ImWCAmmZ8_c1y7bUK3Hyi7kRvcSKCTiFg,7612 +django/contrib/auth/locale/ko/LC_MESSAGES/django.po,sha256=V4hYbR-Vj32MeFWyD4D1iQ7HhbdPx4ZNLT1FKGxepkU,8205 +django/contrib/auth/locale/lb/LC_MESSAGES/django.mo,sha256=OFhpMA1ZXhrs5fwZPO5IjubvWDiju4wfwWiV94SFkiA,474 +django/contrib/auth/locale/lb/LC_MESSAGES/django.po,sha256=dOfY9HjTfMQ0nkRYumw_3ZaywbUrTgT-oTXAnrRyfxo,3702 +django/contrib/auth/locale/lt/LC_MESSAGES/django.mo,sha256=-nlZHl7w__TsFUmBb5pQV_XJtKGsi9kzP6CBZXkfM8M,8146 +django/contrib/auth/locale/lt/LC_MESSAGES/django.po,sha256=-rdhB6eroSSemsdZkG1Jl4CruNZc_7dj4m5IVoyRBUQ,8620 +django/contrib/auth/locale/lv/LC_MESSAGES/django.mo,sha256=U5tO0SjCBU0Tx_Cu4PxnSiUEFJGWv0UIrbAr3Gas1nA,7599 +django/contrib/auth/locale/lv/LC_MESSAGES/django.po,sha256=t9BhUX5fNT7F-_Q9nCU0hdXylb0UW2Jyc6BZtYJ0neI,7908 +django/contrib/auth/locale/mk/LC_MESSAGES/django.mo,sha256=XS9dslnD_YBeD07P8WQkss1gT7GIV-qLiCx4i5_Vd_k,9235 +django/contrib/auth/locale/mk/LC_MESSAGES/django.po,sha256=QOLgcwHub9Uo318P2z6sp69MI8syIIWCcr4VOom9vfs,9799 +django/contrib/auth/locale/ml/LC_MESSAGES/django.mo,sha256=UEaqq7nnGvcZ8vqFicLiuqsuEUhEjd2FpWfyzy2HqdU,12611 +django/contrib/auth/locale/ml/LC_MESSAGES/django.po,sha256=xBROIwJb5h2LmyBLAafZ2tUlPVTAOcMgt-olq5XnPT8,13107 +django/contrib/auth/locale/mn/LC_MESSAGES/django.mo,sha256=hBYT0p3LcvIKKPtIn2NzPk_2di9L8jYrUt9j3TcVvaY,9403 +django/contrib/auth/locale/mn/LC_MESSAGES/django.po,sha256=R3wAEwnefEHZsma8J-XOn4XlLtuWYKDPLwJ99DUYmvE,9913 +django/contrib/auth/locale/mr/LC_MESSAGES/django.mo,sha256=zGuqUTqcWZZn8lZY56lf5tB0_lELn7Dd0Gj78wwO5T4,468 +django/contrib/auth/locale/mr/LC_MESSAGES/django.po,sha256=yLW9WuaBHqdp9PXoDEw7c05Vt0oOtlks5TS8oxYPAO8,3696 +django/contrib/auth/locale/my/LC_MESSAGES/django.mo,sha256=gYzFJKi15RbphgG1IHbJF3yGz3P2D9vaPoHZpA7LoH8,1026 +django/contrib/auth/locale/my/LC_MESSAGES/django.po,sha256=lH5mrq-MyY8gvrNkH2_20rkjFnbviq23wIUqIjPIgFI,5130 +django/contrib/auth/locale/nb/LC_MESSAGES/django.mo,sha256=Lg5Yf7DbiD8m_MUIYyD8u5GE3yuL5NE2DYLZ9fcaMrk,7222 +django/contrib/auth/locale/nb/LC_MESSAGES/django.po,sha256=zy1cf3zV3nFpE8ZwKKKJea2LxBw0VWZQ_F38OzlSfTY,7570 +django/contrib/auth/locale/ne/LC_MESSAGES/django.mo,sha256=x1sZcDaH6bGxtyFs0PrNmgPMKLWjQ9lYVZqvaUQySlc,8553 +django/contrib/auth/locale/ne/LC_MESSAGES/django.po,sha256=CDCIeUfJQl131zMeXHn5sFpgmh7gA5uSaapBEOtC5tM,9385 +django/contrib/auth/locale/nl/LC_MESSAGES/django.mo,sha256=TqscMRNGeqiw73bl3ftu4EQ7ZvDTGZLp1Z0_NtbW5X4,7485 +django/contrib/auth/locale/nl/LC_MESSAGES/django.po,sha256=8q5WXFzg0UxBdgMW019zEr0ObszmkWjLKvQLpbjg6dE,8169 +django/contrib/auth/locale/nn/LC_MESSAGES/django.mo,sha256=020nmL8b1yQL0ZyrDAdr0ZOsEGmNxvUpp9ISPBOVI8U,2801 +django/contrib/auth/locale/nn/LC_MESSAGES/django.po,sha256=SKgBiBM1llWFIvVjWRR0r2i3O8VcAdWe-PUhxckqmbE,5590 +django/contrib/auth/locale/os/LC_MESSAGES/django.mo,sha256=DVsYGz-31nofEjZla4YhM5L7qoBnQaYnZ4TBki03AI4,4434 +django/contrib/auth/locale/os/LC_MESSAGES/django.po,sha256=Akc1qelQWRA1DE6xseoK_zsY7SFI8SpiVflsSTUhQLw,6715 +django/contrib/auth/locale/pa/LC_MESSAGES/django.mo,sha256=PeOLukzQ_CZjWBa5FGVyBEysat4Gwv40xGMS29UKRww,3666 +django/contrib/auth/locale/pa/LC_MESSAGES/django.po,sha256=7ts9PUSuvfXGRLpfyVirJLDtsQcsVWFXDepVKUVlmtc,6476 +django/contrib/auth/locale/pl/LC_MESSAGES/django.mo,sha256=91p5VP2bZRjdzx8vNLHo-AIW03B4nq80-JNHFoa4E_c,7927 +django/contrib/auth/locale/pl/LC_MESSAGES/django.po,sha256=VwjH_beq0bu-xrLilf5hWmuGnf0TIWP4XHa2Wy7odlk,8597 +django/contrib/auth/locale/pt/LC_MESSAGES/django.mo,sha256=oyKCSXRo55UiO3-JKcodMUnK7fuOuQxQrXcU7XkWidA,7756 +django/contrib/auth/locale/pt/LC_MESSAGES/django.po,sha256=tEazw0kctJ3BaP21IblsMhno6qooOGW54zwende522Q,8128 +django/contrib/auth/locale/pt_BR/LC_MESSAGES/django.mo,sha256=yMiLyIJPG54W-3QnrlNMRnYI9Ko90FIXM_vtUShBMrc,7554 +django/contrib/auth/locale/pt_BR/LC_MESSAGES/django.po,sha256=3ym8Ohvl_q8fh4tqnZmPkhUt_17ZDBnZB99ykuR2g9o,8420 +django/contrib/auth/locale/ro/LC_MESSAGES/django.mo,sha256=ltOJP8BImDO1eVPQ_iA4UtZm4pMfLI3HsgRKiY_Gtx8,7961 +django/contrib/auth/locale/ro/LC_MESSAGES/django.po,sha256=NHHwZ8qVGgLkBXT_r2y13ZJiWNJ2kFI20-qaZChco5o,8398 +django/contrib/auth/locale/ru/LC_MESSAGES/django.mo,sha256=tfK9L7EYNZd9d1k_EGQrDcr8ruUGJ1JbRJ3-TvJ6cR8,10482 +django/contrib/auth/locale/ru/LC_MESSAGES/django.po,sha256=nQnaxPKmCJ6N2VVJzNDNt6oeqwSxG0lfY60DSDotJ94,10959 +django/contrib/auth/locale/sk/LC_MESSAGES/django.mo,sha256=hJ_ep7FCbG4DVZawMfx4GjOPcJc4ruFSki8bkYn2l2Y,7838 +django/contrib/auth/locale/sk/LC_MESSAGES/django.po,sha256=NOYdZ3dv3Vtl-5vOwJH26Rthl-5nn4JrXgnm3i-d0bY,8199 +django/contrib/auth/locale/sl/LC_MESSAGES/django.mo,sha256=UAzD5UAqHBdiCMIPjZdouGt14xoHuo5EXDctNSDTEJk,7552 +django/contrib/auth/locale/sl/LC_MESSAGES/django.po,sha256=tUqZLZJegGLteWOQiDwFRUGayBB2j9qATmL6SMgEhb8,7943 +django/contrib/auth/locale/sq/LC_MESSAGES/django.mo,sha256=Nrfoks9rpAdeYtAvbd78imw20YrBQLbqXezC28GG5Xg,7846 +django/contrib/auth/locale/sq/LC_MESSAGES/django.po,sha256=DMF3vHqmlERrwKnlOjkWYZlChWHzcS1x2Ldcx63hD2E,8115 +django/contrib/auth/locale/sr/LC_MESSAGES/django.mo,sha256=XPJB-rwpS8c7sEH7RChft-DHllMWqUEoTFLA06Q_noc,9754 +django/contrib/auth/locale/sr/LC_MESSAGES/django.po,sha256=HPk2yuyvr9krU3CEf6p5v_4cLFG-Cu1lXsFTs1C9vmo,10010 +django/contrib/auth/locale/sr_Latn/LC_MESSAGES/django.mo,sha256=hwAo5ishpZZ9kb9WHrSMHdxmWV9afdxOHgVEwWqb4VE,3293 +django/contrib/auth/locale/sr_Latn/LC_MESSAGES/django.po,sha256=qccS0IkO-JT504Y2uVGY5nPYfN8EA_58I9z492iQHKI,5934 +django/contrib/auth/locale/sv/LC_MESSAGES/django.mo,sha256=gdDygCzmJZghqebC_Za9BqVjy2EHS9UgrWhi0Lm5rC0,7447 +django/contrib/auth/locale/sv/LC_MESSAGES/django.po,sha256=4csJy-CtwoOYh_tN7qk6yt_A7FICPwJfgHh8gqFyiZA,7970 +django/contrib/auth/locale/sw/LC_MESSAGES/django.mo,sha256=I_lEsKuMGm07X1vM3-ReGDx2j09PGLkWcG0onC8q1uQ,5029 +django/contrib/auth/locale/sw/LC_MESSAGES/django.po,sha256=TiZS5mh0oN0e6dFEdh-FK81Vk-tdv35ngJ-EbM1yX80,6455 +django/contrib/auth/locale/ta/LC_MESSAGES/django.mo,sha256=T1t5CKEb8hIumvbOtai-z4LKj2et8sX-PgBMd0B3zuA,2679 +django/contrib/auth/locale/ta/LC_MESSAGES/django.po,sha256=X8UDNmk02X9q1leNV1qWWwPNakhvNd45mCKkQ8EpZQQ,6069 +django/contrib/auth/locale/te/LC_MESSAGES/django.mo,sha256=i9hG4thA0P-Hc-S2oX7GufWFDO4Y_LF4RcdQ22cbLyE,2955 +django/contrib/auth/locale/te/LC_MESSAGES/django.po,sha256=txND8Izv2oEjSlcsx3q6l5fEUqsS-zv-sjVVILB1Bmc,6267 +django/contrib/auth/locale/th/LC_MESSAGES/django.mo,sha256=zRpZ2xM5JEQoHtfXm2_XYdhe2FtaqH-hULJadLJ1MHU,6013 +django/contrib/auth/locale/th/LC_MESSAGES/django.po,sha256=Yhh_AQS_aM_9f_yHNNSu_3THbrU-gOoMpfiDKhkaSHo,7914 +django/contrib/auth/locale/tr/LC_MESSAGES/django.mo,sha256=MqxtamKKi0P7UmWiiNz9jGOp_obhLij6WBMZwS5La-I,7480 +django/contrib/auth/locale/tr/LC_MESSAGES/django.po,sha256=Mz7mRvzk7qBnn1yF62en2OiMlgLNuaIbwDzwz7tzhV0,8027 +django/contrib/auth/locale/tt/LC_MESSAGES/django.mo,sha256=g4pTk8QLQFCOkU29RZvR1wOd1hkOZe_o5GV9Cg5u8N4,1371 +django/contrib/auth/locale/tt/LC_MESSAGES/django.po,sha256=owkJ7iPT-zJYkuKLykfWsw8j7O8hbgzVTOD0DVv956E,5222 +django/contrib/auth/locale/udm/LC_MESSAGES/django.mo,sha256=zey19UQmS79AJFxHGrOziExPDDpJ1AbUegbCRm0x0hM,462 +django/contrib/auth/locale/udm/LC_MESSAGES/django.po,sha256=gLVgaMGg0GA3Tey1_nWIjV1lnM7czLC0XR9NFBgL2Zk,3690 +django/contrib/auth/locale/uk/LC_MESSAGES/django.mo,sha256=YEqVD82aG8LuY3WZ-q2p65M2nbgSOawv5xwHyvnsTQY,10079 +django/contrib/auth/locale/uk/LC_MESSAGES/django.po,sha256=tLWzzj6dbLutVkE5KZSWuFbQLwT2HSXLxfcz6t5XhBE,10688 +django/contrib/auth/locale/ur/LC_MESSAGES/django.mo,sha256=rippTNHoh49W19c4HDUF8G5Yo3SknL3C87Afu8YXxzA,698 +django/contrib/auth/locale/ur/LC_MESSAGES/django.po,sha256=gwSd8noEwbcvDE1Q4ZsrftvoWMwhw1J15gvdtK6E9ns,4925 +django/contrib/auth/locale/vi/LC_MESSAGES/django.mo,sha256=4YOb_ZbCI90UB01DpNsBAe6qqrc3P209Bz22FSVqvog,4703 +django/contrib/auth/locale/vi/LC_MESSAGES/django.po,sha256=1YjTrGYr04j9GtG8w0c7v71pHjHU8mHzT7tChroyfaw,6723 +django/contrib/auth/locale/zh_Hans/LC_MESSAGES/django.mo,sha256=ADtCGX8Lb8ON84-sf-OU3LT2XOK9a_5my0lqS7xPNdY,6729 +django/contrib/auth/locale/zh_Hans/LC_MESSAGES/django.po,sha256=ZfdDCQTLFcpP5737U1Rbb_lHqGktMjYKe6Mjth4FiOg,7332 +django/contrib/auth/locale/zh_Hant/LC_MESSAGES/django.mo,sha256=Pnc78tGkY9-ZH6HaQBl4NQ6-ITp8Mt103ZoCvm65Lr4,6759 +django/contrib/auth/locale/zh_Hant/LC_MESSAGES/django.po,sha256=4N7kl30QCVVL5f3CkD7tKOd2SxP6owmBjxsPooUalzM,7130 +django/contrib/auth/management/__init__.py,sha256=9Dk5PxHrfnpYOloPc1ClI7KMLKIZtLB-eKGhd3cftm8,4938 +django/contrib/auth/management/commands/changepassword.py,sha256=y8rT5O0IILk9J0oODu_Cj-bLcmJgrPIRBoO7p2fFxXA,2548 +django/contrib/auth/management/commands/createsuperuser.py,sha256=8IG8k2wxUZCkOVF_7Cgy2houwaJnL2So3q8JqMajNEY,9454 +django/contrib/auth/migrations/0001_initial.py,sha256=bz7B12K5Ovs0aiXfZGMEbVtWAeV05JyLKDGyMrhCd_c,4960 +django/contrib/auth/migrations/0002_alter_permission_name_max_length.py,sha256=xSlhMiUbrVCPMOwmwVNAUgYjZih3t-ieALNm7rQ1OI0,347 +django/contrib/auth/migrations/0003_alter_user_email_max_length.py,sha256=bPcpCTPAJV2NgrwEa6WFfxkhbPmj5J-EqU1HM3RXtq0,389 +django/contrib/auth/migrations/0004_alter_user_username_opts.py,sha256=aN0oHoA5q2bKpJN8SnI8T9GNtTBKzLRFozL87tNh8_I,785 +django/contrib/auth/migrations/0005_alter_user_last_login_null.py,sha256=0s9ZPGWNP9HT7TmXAuChMLLwL1Ml5SdQwNs9qfy5dN4,381 +django/contrib/auth/migrations/0006_require_contenttypes_0002.py,sha256=_S7o_MhU0lAnPhDEt0kh1sBmpCLXW88VBuATERiMBlk,370 +django/contrib/auth/migrations/0007_alter_validators_add_error_messages.py,sha256=JeJpm_jyu2CbBckw4xJt0DlwQ4SDg2fyHqduRLZ1HFI,740 +django/contrib/auth/migrations/0008_alter_user_username_max_length.py,sha256=KpeVuknt_7WErQO_WLDSCMg1sJkXCXjNQ5I4u_l99kc,752 +django/contrib/auth/migrations/0009_alter_user_last_name_max_length.py,sha256=rwLs5SDzFJsDKtCfyMP6XueUPHiRvRMein3wXMzHeDk,386 +django/contrib/auth/migrations/0010_alter_group_name_max_length.py,sha256=JQ2cqUnTooqDKlZ5LcXQDbQld9xQmC3up5_wCWn1LFg,379 +django/contrib/auth/migrations/0011_update_proxy_permissions.py,sha256=_rYzmWi7I4AhV7x6xyetYJMXpz5Bo8mjg2msmZLN7NQ,2684 +django/contrib/auth/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/auth/templates/auth/widgets/read_only_password_hash.html,sha256=cMrG-iMsrVQ6Qd6T_Xz21b6WIWhXxaIwgNDW2NpDpuM,185 +django/contrib/auth/templates/registration/password_reset_subject.txt,sha256=j8rO05woNdwv8-_F6EMy6FTZGMf-Dp9usdUJXSZHs7Q,124 +django/contrib/contenttypes/__init__.py,sha256=OVcoCHYF9hFs-AnFfg2tjmdetuqx9-Zhi9pdGPAgwH4,75 +django/contrib/contenttypes/admin.py,sha256=QeElFtZgIUzCWa1QfLhb9rpb-XZSY-xalx-RNAN5CoQ,5104 +django/contrib/contenttypes/apps.py,sha256=lVmnJW7DgIc42uc0V5vZL8qxnsnVijQmgelhs3nybIE,797 +django/contrib/contenttypes/checks.py,sha256=ooW997jE1y5goWgO3dzc7tfJt5Z4tJPWRRSG1P1-AcU,1234 +django/contrib/contenttypes/fields.py,sha256=8oLvxgJtTGU6odNu694hZvZI_GKPdjUw8nFnQYeh610,26689 +django/contrib/contenttypes/forms.py,sha256=95tGX_F2KkIjoBTFQcdvraypLz6Fj3LdCLOHx-8gCrQ,3615 +django/contrib/contenttypes/models.py,sha256=5gfvYpQkhRuPN2VhyRZ56KtyMJcr9c15McKUVlV5CQI,6450 +django/contrib/contenttypes/views.py,sha256=0gyy3AjEmXD9RWfy9st8wOR7JamcUREMmUNVlkf_VIM,3545 +django/contrib/contenttypes/locale/af/LC_MESSAGES/django.mo,sha256=93nlniPFfVcxfBCs_PsLtMKrJ2BqpcofPRNYYTTlels,1070 +django/contrib/contenttypes/locale/af/LC_MESSAGES/django.po,sha256=SY04sW55-xpO_qBjv8pHoN7eqB2C5q_9CxQguMz7Q94,1244 +django/contrib/contenttypes/locale/ar/LC_MESSAGES/django.mo,sha256=YXeD6WDlMQ7No_1PbR1PYE7As6GYXSQBVKkWdF_bHMo,1259 +django/contrib/contenttypes/locale/ar/LC_MESSAGES/django.po,sha256=PHvyo3UF4beWdczghk7xqrtJEu-u4802Yn6fmQvKbtA,1504 +django/contrib/contenttypes/locale/ast/LC_MESSAGES/django.mo,sha256=y88CPGGbwTVRmZYIipCNIWkn4OuzuxEk2QCYsBhc7RY,643 +django/contrib/contenttypes/locale/ast/LC_MESSAGES/django.po,sha256=H-qMo5ikva84ycnlmBT4XXEWhzMIw-r7J_zuqxo3wu4,1088 +django/contrib/contenttypes/locale/az/LC_MESSAGES/django.mo,sha256=aaKSEUnbZZMDDl4lrNpG6e18R73kD_-nY2A_dAtHtxw,1101 +django/contrib/contenttypes/locale/az/LC_MESSAGES/django.po,sha256=txoRBy2uMeiT7aUzjADfXnf8FF3zjmCr_mLsFbVcpXs,1314 +django/contrib/contenttypes/locale/be/LC_MESSAGES/django.mo,sha256=lQjyKyBbwBjIl1rn6itLToQIKMvG-v-TjECiGepZrnw,1394 +django/contrib/contenttypes/locale/be/LC_MESSAGES/django.po,sha256=V04WIP5qYaBOaku2AV2tNSsGKFoloDHmOjskG2o3uEM,1575 +django/contrib/contenttypes/locale/bg/LC_MESSAGES/django.mo,sha256=yVH2saAhE3bVtamkCeIBDQuJpn2awfF2M7ISujswiRU,1267 +django/contrib/contenttypes/locale/bg/LC_MESSAGES/django.po,sha256=YdzC82ifG-pPY5Iy4mXIBj9Qq583g37OqZir-jpbUpc,1576 +django/contrib/contenttypes/locale/bn/LC_MESSAGES/django.mo,sha256=2Z1GL6c1ukKQCMcls7R0_n4eNdH3YOXZSR8nCct7SLI,1201 +django/contrib/contenttypes/locale/bn/LC_MESSAGES/django.po,sha256=PLjnppx0FxfGBQMuWVjo0N4sW2QYc2DAEMK6ziGWUc8,1491 +django/contrib/contenttypes/locale/br/LC_MESSAGES/django.mo,sha256=kAlOemlwBvCdktgYoV-4NpC7XFDaIue_XN7GJYzDu88,1419 +django/contrib/contenttypes/locale/br/LC_MESSAGES/django.po,sha256=BQmHVQqOc6xJWJLeAo49rl_Ogfv-lFtx18mj82jT_to,1613 +django/contrib/contenttypes/locale/bs/LC_MESSAGES/django.mo,sha256=klj9n7AKBkTf7pIa9m9b-itsy4UlbYPnHiuvSLcFZXY,700 +django/contrib/contenttypes/locale/bs/LC_MESSAGES/django.po,sha256=pmJaMBLWbYtYFFXYBvPEvwXkTPdjQDv2WkFI5jNGmTI,1151 +django/contrib/contenttypes/locale/ca/LC_MESSAGES/django.mo,sha256=SMwTCqtIJedetZYstY4lcKqTD9xoE4vuvyOaDRENcTg,1134 +django/contrib/contenttypes/locale/ca/LC_MESSAGES/django.po,sha256=__UUPN27_GLZxOATgFO_THR-H9e5JARo52vGyuGXrFs,1360 +django/contrib/contenttypes/locale/cs/LC_MESSAGES/django.mo,sha256=pFafjdvR3gxHfVNldpTit-pDHxMqW60uWgIbU2kSZP0,1142 +django/contrib/contenttypes/locale/cs/LC_MESSAGES/django.po,sha256=_mMMJ8SsDut72o3P6sXSLOC117j3_1HN-EguH7HYnnA,1362 +django/contrib/contenttypes/locale/cy/LC_MESSAGES/django.mo,sha256=2QyCWeXFyymoFu0Jz1iVFgOIdLtt4N1rCZATZAwiH-8,1159 +django/contrib/contenttypes/locale/cy/LC_MESSAGES/django.po,sha256=ZWDxQTHJcw1UYav1C3MX08wCFrSeJNNI2mKjzRVd6H0,1385 +django/contrib/contenttypes/locale/da/LC_MESSAGES/django.mo,sha256=wIEwYctl3CsjBou71rpRvGiR24jcVSEgQW1kNeb1Lsg,1081 +django/contrib/contenttypes/locale/da/LC_MESSAGES/django.po,sha256=k_ztS6LIORMJ0T45_XMFHMDWdvh4rMfURYbKV37Bo7Y,1346 +django/contrib/contenttypes/locale/de/LC_MESSAGES/django.mo,sha256=WdGKHOdSGoscynVfOmjXD3_NRPOoTzZNWYjYdEVzahY,1092 +django/contrib/contenttypes/locale/de/LC_MESSAGES/django.po,sha256=141sVDNz98hS_QxjyM5GEEfpvHnL8Dvbmjb_P-RtkFk,1299 +django/contrib/contenttypes/locale/dsb/LC_MESSAGES/django.mo,sha256=JfVRcAuhU7jt3iv8orjFpzFZUEWa9Tf98Z0KwKynBB0,1169 +django/contrib/contenttypes/locale/dsb/LC_MESSAGES/django.po,sha256=2vfMUWWYDKZ9K8ujm1OgYSwl04cVDUUE5-942VGz150,1346 +django/contrib/contenttypes/locale/el/LC_MESSAGES/django.mo,sha256=cGjt7dcY9L6GusXl9eQgezR9phjMqfTUixC9hFC4ORc,1323 +django/contrib/contenttypes/locale/el/LC_MESSAGES/django.po,sha256=VWwuQYX1La2lvPZJwp-cprA-jyxe0qTxxT0neb9AegM,1634 +django/contrib/contenttypes/locale/en/LC_MESSAGES/django.mo,sha256=U0OV81NfbuNL9ctF-gbGUG5al1StqN-daB-F-gFBFC8,356 +django/contrib/contenttypes/locale/en/LC_MESSAGES/django.po,sha256=ENzOpatkejwQ6F1IwZAYsMWNGtTHAVPlKCKcVrTygSI,1106 +django/contrib/contenttypes/locale/en_AU/LC_MESSAGES/django.mo,sha256=dTndJxA-F1IE_nMUOtf1sRr7Kq2s_8yjgKk6mkWkVu4,486 +django/contrib/contenttypes/locale/en_AU/LC_MESSAGES/django.po,sha256=wmxyIJtz628AbsxgkB-MjdImcIJWhcW7NV3tWbDpedg,1001 +django/contrib/contenttypes/locale/en_GB/LC_MESSAGES/django.mo,sha256=_uM-jg43W7Pz8RQhMcR_o15wRkDaYD8aRcl2_NFGoNs,1053 +django/contrib/contenttypes/locale/en_GB/LC_MESSAGES/django.po,sha256=SyzwSvqAgKF8BEhXYh4598GYP583OK2GUXH1lc4iDMk,1298 +django/contrib/contenttypes/locale/eo/LC_MESSAGES/django.mo,sha256=MFC-mQeWLeFry7d2EXeAf2G47YRLLKFhenGLCwo5O9A,1087 +django/contrib/contenttypes/locale/eo/LC_MESSAGES/django.po,sha256=BgQ7lRtsjD-XHaNvlHMu9AxCCqx38XdOCG4zYpKgDn4,1279 +django/contrib/contenttypes/locale/es/LC_MESSAGES/django.mo,sha256=rG5-Lt7Mutoa42O_5I2rjcQ5p0rnA2T-cDMbgxaJsYU,1142 +django/contrib/contenttypes/locale/es/LC_MESSAGES/django.po,sha256=iR5eAl6d6Ol2Ufd9hQWfau8vNG0pPKvSgTToqvGMGK8,1417 +django/contrib/contenttypes/locale/es_AR/LC_MESSAGES/django.mo,sha256=iSq2trgItDc4apHlZdZey4vVJF2k38KrKQRorDvHmG8,1121 +django/contrib/contenttypes/locale/es_AR/LC_MESSAGES/django.po,sha256=ejs7IoMryYl-stXjIx7slZ3pESU-3X3NUogwIbSDHBo,1328 +django/contrib/contenttypes/locale/es_CO/LC_MESSAGES/django.mo,sha256=aACo1rOrgs_BYK3AWzXEljCdAc4bC3BXpyXrwE4lzAs,1158 +django/contrib/contenttypes/locale/es_CO/LC_MESSAGES/django.po,sha256=vemhoL-sESessGmIlHoRvtWICqF2aO05WvcGesUZBRM,1338 +django/contrib/contenttypes/locale/es_MX/LC_MESSAGES/django.mo,sha256=hfjH_3T9YfIhOGEE25TflbKWoiZZvmagaVW2YcNDKq8,1109 +django/contrib/contenttypes/locale/es_MX/LC_MESSAGES/django.po,sha256=Tkt5m04QFdBiPVbRWRh9tiyVL4K6E9Qe42xdmeVaRxQ,1303 +django/contrib/contenttypes/locale/es_VE/LC_MESSAGES/django.mo,sha256=TVGDydYVg_jGfnYghk_cUFjCCtpGchuoTB4Vf0XJPYk,1152 +django/contrib/contenttypes/locale/es_VE/LC_MESSAGES/django.po,sha256=vJW37vuKYb_KpXBPmoNSqtNstFgCDlKmw-8iOoSCenU,1342 +django/contrib/contenttypes/locale/et/LC_MESSAGES/django.mo,sha256=Rs8vsaZp2RX68U_dQge4wkZQMfH8Dh1br4IWkKzfECA,1066 +django/contrib/contenttypes/locale/et/LC_MESSAGES/django.po,sha256=AIl4zK9fs3_euQMwu0ORQZWPyBrIikvQfq-fhiRu2ug,1323 +django/contrib/contenttypes/locale/eu/LC_MESSAGES/django.mo,sha256=K0f1cXEhfg_djPzgCL9wC0iHGWF_JGIhWGFL0Y970g0,1077 +django/contrib/contenttypes/locale/eu/LC_MESSAGES/django.po,sha256=sSuVV0o8MeWN6BxlaeKcjKA3h4H29fCo1kKEtkczEp4,1344 +django/contrib/contenttypes/locale/fa/LC_MESSAGES/django.mo,sha256=QNJlQhJ6b183Y8SZejokLLvH4whuJ2sadMLrm5z5ero,1171 +django/contrib/contenttypes/locale/fa/LC_MESSAGES/django.po,sha256=ELZMaN9tyEC-DIraWM_Ipv4JOq4ANvyTWEzCYmGRnRY,1427 +django/contrib/contenttypes/locale/fi/LC_MESSAGES/django.mo,sha256=yZNZ0btS15XQPW5sGVQWqUbQ3_ZIGD0JjgMcz2-_xgU,1073 +django/contrib/contenttypes/locale/fi/LC_MESSAGES/django.po,sha256=LTt_nF73_BxrerGmK4ly__1PeesGNpWlH3CSLETMvuI,1316 +django/contrib/contenttypes/locale/fr/LC_MESSAGES/django.mo,sha256=--hcS97AwKMSkriQKcZ9hdSF9swN732tII_b7JszY4k,1112 +django/contrib/contenttypes/locale/fr/LC_MESSAGES/django.po,sha256=yk486-Y0VCwUGQy3DjfvpM0o2UlHREVXy_SufqkkWKQ,1367 +django/contrib/contenttypes/locale/fy/LC_MESSAGES/django.mo,sha256=YQQy7wpjBORD9Isd-p0lLzYrUgAqv770_56-vXa0EOc,476 +django/contrib/contenttypes/locale/fy/LC_MESSAGES/django.po,sha256=SB07aEGG7n4oX_5rqHB6OnjpK_K0KwFM7YxaWYNpB_4,991 +django/contrib/contenttypes/locale/ga/LC_MESSAGES/django.mo,sha256=GYQYfYWbgwL3nQJR5d7XGjc5KeYYXsB0yRQJz7zxd_k,1097 +django/contrib/contenttypes/locale/ga/LC_MESSAGES/django.po,sha256=byvw9sQ9VLVjS7Au81LcNpxOzwA29_4Al9nB1ZyV2b4,1408 +django/contrib/contenttypes/locale/gd/LC_MESSAGES/django.mo,sha256=GXwvJ2csT38SBvqMB_YoPQ_Swcy7mhZYDEr1nQBNOgc,1191 +django/contrib/contenttypes/locale/gd/LC_MESSAGES/django.po,sha256=H4U-T07ZGgSF2LjOng5g8N-jC92SFeO5Fg9u1-g954g,1346 +django/contrib/contenttypes/locale/gl/LC_MESSAGES/django.mo,sha256=gMDLuxVazSNvwLmi5AqJEsxugmDVLk8DlxseHRRoQoc,1072 +django/contrib/contenttypes/locale/gl/LC_MESSAGES/django.po,sha256=hFPL2GH-o6XN0SKu5kqgiEaGT8lKnbi_zmlUNCn3Obg,1364 +django/contrib/contenttypes/locale/he/LC_MESSAGES/django.mo,sha256=X-91PCG5ftulkyc3zTnczlWQ62zM7-47EJkE7S__CtI,1256 +django/contrib/contenttypes/locale/he/LC_MESSAGES/django.po,sha256=NDEa2I5p29YJCEXdvmA6fyDyXTgdJsuLGeB95KPGbP8,1477 +django/contrib/contenttypes/locale/hi/LC_MESSAGES/django.mo,sha256=KAZuQMKOvIPj3a7GrNJE3yhT70O2abCEF2GOsbwTE5A,1321 +django/contrib/contenttypes/locale/hi/LC_MESSAGES/django.po,sha256=PcsNgu2YmT0biklhwOF_nSvoGTvWVKw2IsBxIwSVAtI,1577 +django/contrib/contenttypes/locale/hr/LC_MESSAGES/django.mo,sha256=DbOUA8ks3phsEwQvethkwZ9-ymrd36aQ6mP7OnGdpjU,1167 +django/contrib/contenttypes/locale/hr/LC_MESSAGES/django.po,sha256=722KxvayO6YXByAmO4gfsfzyVbT-HqqrLYQsr02KDc8,1445 +django/contrib/contenttypes/locale/hsb/LC_MESSAGES/django.mo,sha256=IEjKVQBez7h6phH_ozALY0sNjQmcDSAtCFn7JbBOFMg,1143 +django/contrib/contenttypes/locale/hsb/LC_MESSAGES/django.po,sha256=VlIhdng3HZ-r9XzbdJWtQ4m1UMpmdnpBLWInGMTciZE,1320 +django/contrib/contenttypes/locale/hu/LC_MESSAGES/django.mo,sha256=3fpAT3FGjXjajM3Omz_vcIZ7uqmvSgr4zfB7lfMfhas,1103 +django/contrib/contenttypes/locale/hu/LC_MESSAGES/django.po,sha256=zLI8xh3t_p23EITZnZ7Dme2MXexL9Rt8chxpj8W7w9g,1336 +django/contrib/contenttypes/locale/hy/LC_MESSAGES/django.mo,sha256=hKOErB5dzj44ThQ1_nZHak2-aXZlwMoxYcDWmPb3Xo8,1290 +django/contrib/contenttypes/locale/hy/LC_MESSAGES/django.po,sha256=UeGzaghsEt9Lt5DsEzRb9KCbuphWUQwLayt4AN194ao,1421 +django/contrib/contenttypes/locale/ia/LC_MESSAGES/django.mo,sha256=3yDFJFxh16B2WigXeJxZV9vOyRxnjZ4MAUq3T_-PHGs,1079 +django/contrib/contenttypes/locale/ia/LC_MESSAGES/django.po,sha256=4JsXrJxsMVVu9Y6OuFrwMV5L4Dglh9XJ5sp9CHDGHaA,1288 +django/contrib/contenttypes/locale/id/LC_MESSAGES/django.mo,sha256=9o50TqX6hHloHvBJbf4pkK4a554L5UmiJnp9vGfq25k,1066 +django/contrib/contenttypes/locale/id/LC_MESSAGES/django.po,sha256=xMRNmOipOt-18KLux7PrJn8NS25qMCVLxmmceR1P93s,1374 +django/contrib/contenttypes/locale/io/LC_MESSAGES/django.mo,sha256=3SSRXx4tYiMUc00LZ9kGHuvTgaWpsICEf5G208CEqgg,1051 +django/contrib/contenttypes/locale/io/LC_MESSAGES/django.po,sha256=1ku9WPcenn47DOF05HL2eRqghZeRYfklo2huYUrkeJ0,1266 +django/contrib/contenttypes/locale/is/LC_MESSAGES/django.mo,sha256=Lzl9gXdkji1Eg4vKahCW8ZIJY8U1hBs52O2hQftopPc,1086 +django/contrib/contenttypes/locale/is/LC_MESSAGES/django.po,sha256=YY0C2qJRSc1cX__k-vm4LXhJZJl731NXYe2w3gTSCGU,1351 +django/contrib/contenttypes/locale/it/LC_MESSAGES/django.mo,sha256=gr8UGpZMY39rE8z0vNEDQyxh_ZD7lC3Py8Dj4B24iHg,1098 +django/contrib/contenttypes/locale/it/LC_MESSAGES/django.po,sha256=wycvlyGUXqjmDSg0FluwvM4XpY2NU0oaKob02Q7236s,1391 +django/contrib/contenttypes/locale/ja/LC_MESSAGES/django.mo,sha256=U-RemvFRnmWnRDBADa3r4tlbwUFBIUCf7aLdd3sJazE,1239 +django/contrib/contenttypes/locale/ja/LC_MESSAGES/django.po,sha256=V6smnquz_1esdvNi-dmuHzRNXqs-AjfWSKq2NJq2GPY,1469 +django/contrib/contenttypes/locale/ka/LC_MESSAGES/django.mo,sha256=1_yGL68sK0QG_mhwFAVdksiDlB57_1W5QkL7NGGE5L0,1429 +django/contrib/contenttypes/locale/ka/LC_MESSAGES/django.po,sha256=fr8rGQDWgUQSv-ZjXhSAR5P_zWLhQ7bq1cHLKIzY4bY,1649 +django/contrib/contenttypes/locale/kk/LC_MESSAGES/django.mo,sha256=SNY0vydwLyR2ExofAHjmg1A2ykoLI7vU5Ryq-QFu5Gs,627 +django/contrib/contenttypes/locale/kk/LC_MESSAGES/django.po,sha256=PU-NAl6xUEeGV0jvJx9siVBTZIzHywL7oKc4DgUjNkc,1130 +django/contrib/contenttypes/locale/km/LC_MESSAGES/django.mo,sha256=BXifukxf48Lr0t0V3Y0GJUMhD1KiHN1wwbueoK0MW1A,678 +django/contrib/contenttypes/locale/km/LC_MESSAGES/django.po,sha256=fTPlBbnaNbLZxjzJutGvqe33t6dWsEKiHQYaw27m7KQ,1123 +django/contrib/contenttypes/locale/kn/LC_MESSAGES/django.mo,sha256=a4sDGaiyiWn-1jFozYI4vdAvuHXrs8gbZErP_SAUk9Y,714 +django/contrib/contenttypes/locale/kn/LC_MESSAGES/django.po,sha256=QDD_q_loZtGRlhmaqgNDtJ_5AjVFQ8fSmypvaWLOwp4,1162 +django/contrib/contenttypes/locale/ko/LC_MESSAGES/django.mo,sha256=N6Keqbx9NmPby_m9jswXWPLTdeeM-_9SQlFbheRzpC8,1127 +django/contrib/contenttypes/locale/ko/LC_MESSAGES/django.po,sha256=bLGMv1dLIEKhsoBfuWXs_FQly0prT4udebB5uu4CexU,1338 +django/contrib/contenttypes/locale/lb/LC_MESSAGES/django.mo,sha256=xokesKl7h7k9dXFKIJwGETgwx1Ytq6mk2erBSxkgY-o,474 +django/contrib/contenttypes/locale/lb/LC_MESSAGES/django.po,sha256=dwVKpCRYmXTD9h69v5ivkZe-yFtvdZNZ3VfuyIl4olY,989 +django/contrib/contenttypes/locale/lt/LC_MESSAGES/django.mo,sha256=HucsRl-eqfxw6ESTuXvl7IGjPGYSI9dxM5lMly_P1sc,1215 +django/contrib/contenttypes/locale/lt/LC_MESSAGES/django.po,sha256=odzYqHprxKFIrR8TzdxA4WeeMK0W0Nvn2gAVuzAsEqI,1488 +django/contrib/contenttypes/locale/lv/LC_MESSAGES/django.mo,sha256=4Qk6bGcd2qjhz6j6RYGdB3E7z7X4yVZTH2X-ob7QRYI,1090 +django/contrib/contenttypes/locale/lv/LC_MESSAGES/django.po,sha256=22qvaurZjlCA-z3JXBUikzIhAmcmdW9h-pbk0ujvQSg,1299 +django/contrib/contenttypes/locale/mk/LC_MESSAGES/django.mo,sha256=KTFZWm0F4S6lmi1FX76YKOyJqIZN5cTsiTBI_D4ADHs,1258 +django/contrib/contenttypes/locale/mk/LC_MESSAGES/django.po,sha256=mQZosS90S-Bil6-EoGjs9BDWYlvOF6mtUDZ8h9NxEdE,1534 +django/contrib/contenttypes/locale/ml/LC_MESSAGES/django.mo,sha256=rtmLWfuxJED-1KuqkUT8F5CU1KGJP0Of718n2Gl_gI0,1378 +django/contrib/contenttypes/locale/ml/LC_MESSAGES/django.po,sha256=Z-kL9X9CD7rYfa4Uoykye2UgCNQlgyql0HTv1eUXAf4,1634 +django/contrib/contenttypes/locale/mn/LC_MESSAGES/django.mo,sha256=J6kKYjUOsQxptNXDcCaY4d3dHJio4HRibRk3qfwO6Xc,1225 +django/contrib/contenttypes/locale/mn/LC_MESSAGES/django.po,sha256=x8aRJH2WQvMBBWlQt3T3vpV4yHeZXLmRTT1U0at4ZIk,1525 +django/contrib/contenttypes/locale/mr/LC_MESSAGES/django.mo,sha256=2Z5jaGJzpiJTCnhCk8ulCDeAdj-WwR99scdHFPRoHoA,468 +django/contrib/contenttypes/locale/mr/LC_MESSAGES/django.po,sha256=FgZKD9E-By0NztUnBM4llpR59K0MJSIMZIrJYGKDqpc,983 +django/contrib/contenttypes/locale/my/LC_MESSAGES/django.mo,sha256=YYa2PFe9iJygqL-LZclfpgR6rBmIvx61JRpBkKS6Hrs,1554 +django/contrib/contenttypes/locale/my/LC_MESSAGES/django.po,sha256=6F3nXd9mBc-msMchkC8OwAHME1x1O90xrsZp7xmynpU,1732 +django/contrib/contenttypes/locale/nb/LC_MESSAGES/django.mo,sha256=RMxLSKOqQ6omrnSlAoRohWOEC0SBwYwJyO6QGaPo5KU,1081 +django/contrib/contenttypes/locale/nb/LC_MESSAGES/django.po,sha256=xgm6KYjgFPyYM0HXu3qY6uamoyeuhJ8xR_KBWLZ6IY0,1382 +django/contrib/contenttypes/locale/ne/LC_MESSAGES/django.mo,sha256=-zZAn5cex4PkScoZVqS74PUMThJJuovZSk3WUKZ8hnw,1344 +django/contrib/contenttypes/locale/ne/LC_MESSAGES/django.po,sha256=1ZCUkulQ9Gxb50yMKFKWaTJli2SinBeNj0KpXkKpsNE,1519 +django/contrib/contenttypes/locale/nl/LC_MESSAGES/django.mo,sha256=QH0B253GqlbTkARxjnuxCI6B6ITSsOnVZli0qwIGRUs,1077 +django/contrib/contenttypes/locale/nl/LC_MESSAGES/django.po,sha256=lkitOZ96BK24YHAdhxY9x4IP9tSFukRWIPGGYwQDz-Q,1392 +django/contrib/contenttypes/locale/nn/LC_MESSAGES/django.mo,sha256=jfxiglKOxjX2xdbLDnJhujJiGcbDJv3NDcUUCWrZmuU,1054 +django/contrib/contenttypes/locale/nn/LC_MESSAGES/django.po,sha256=c1sz3ssHULL1c5gpbEOy4Xo2Nh0_2ar_Zg4nECouM4k,1299 +django/contrib/contenttypes/locale/os/LC_MESSAGES/django.mo,sha256=QV533Wu-UpjV3XiCe83jlz7XGuwgRviV0ggoeMaIOIY,1116 +django/contrib/contenttypes/locale/os/LC_MESSAGES/django.po,sha256=UZahnxo8z6oWJfEz4JNHGng0EAifXYtJupB6lx0JB60,1334 +django/contrib/contenttypes/locale/pa/LC_MESSAGES/django.mo,sha256=qacd7eywof8rvJpstNfEmbHgvDiQ9gmkcyG7gfato8s,697 +django/contrib/contenttypes/locale/pa/LC_MESSAGES/django.po,sha256=Kq2NTzdbgq8Q9jLLgV-ZJaSRj43D1dDHcRIgNnJXu-s,1145 +django/contrib/contenttypes/locale/pl/LC_MESSAGES/django.mo,sha256=a57HnU25bDdtrep5ksckyx7BsCQSHbBvZ-W3Hp6CVDQ,1251 +django/contrib/contenttypes/locale/pl/LC_MESSAGES/django.po,sha256=KC_XKtt7QieDVfsu-uEY3eT9miIIQfs1Ied7ebQaK7A,1539 +django/contrib/contenttypes/locale/pt/LC_MESSAGES/django.mo,sha256=MjyyKlA75YtEG9m6hm0GxKhU-cF3m1PA_j63BuIPPlE,1125 +django/contrib/contenttypes/locale/pt/LC_MESSAGES/django.po,sha256=X2Rec6LXIqPa9AVqF4J2mzYrwfls1BdUfN8XOe0zkdQ,1379 +django/contrib/contenttypes/locale/pt_BR/LC_MESSAGES/django.mo,sha256=fPCrA5N-k2uOHyZtBVolLM-CiFyv7luskvTKoJiDF4o,1137 +django/contrib/contenttypes/locale/pt_BR/LC_MESSAGES/django.po,sha256=x-dcuvjBVXVe4zBNxd4vbwYAMzeOCNzVFLc7S_te_fI,1414 +django/contrib/contenttypes/locale/ro/LC_MESSAGES/django.mo,sha256=sCthDD10v7GY2cui9Jj9HK8cofVEg2WERCm6aktOM-4,1142 +django/contrib/contenttypes/locale/ro/LC_MESSAGES/django.po,sha256=n-BPEfua0Gd6FN0rsP7qAlTGbQEZ14NnDMA8jI2844Y,1407 +django/contrib/contenttypes/locale/ru/LC_MESSAGES/django.mo,sha256=EYIBQ4DumWdn6zC8Oy2QDdMsdwDZz4patKbuhFxN1AY,1426 +django/contrib/contenttypes/locale/ru/LC_MESSAGES/django.po,sha256=YULjNSTutYL3FhT4njhz9pQiP_xmoAVuJTBb1Hzio04,1728 +django/contrib/contenttypes/locale/sk/LC_MESSAGES/django.mo,sha256=Wkcfu7VTpa6IMqGHUH6Rra42ydbyyaLnMa6wg137E7o,1104 +django/contrib/contenttypes/locale/sk/LC_MESSAGES/django.po,sha256=oFmpjsUP8WXXd6TpObHcnM-mstebPAB4wCjsluH5EFc,1398 +django/contrib/contenttypes/locale/sl/LC_MESSAGES/django.mo,sha256=sMML-ubI_9YdKptzeri1du8FOdKcEzJbe4Tt0J4ePFI,1147 +django/contrib/contenttypes/locale/sl/LC_MESSAGES/django.po,sha256=0zxiyzRWWDNVpNNLlcwl-OLh5sLukma1vm-kYrGHYrE,1392 +django/contrib/contenttypes/locale/sq/LC_MESSAGES/django.mo,sha256=xXE5L6OmOz3oI9xYKyS8VKb37NDJ8buQOhjwtuMnwNs,1103 +django/contrib/contenttypes/locale/sq/LC_MESSAGES/django.po,sha256=_z4SsvtdEmT91TqVd-GXMzNK86H-6LmnWTUK4ZBi878,1276 +django/contrib/contenttypes/locale/sr/LC_MESSAGES/django.mo,sha256=PGihuAsBD_pc1ww4UILWtWgaGhn-IsBi5leknCCrPoU,1265 +django/contrib/contenttypes/locale/sr/LC_MESSAGES/django.po,sha256=YHZOZ3UsDAL7GCZGwpVPaqC1hI-ksHt1oOzMy13Ugu4,1531 +django/contrib/contenttypes/locale/sr_Latn/LC_MESSAGES/django.mo,sha256=COMPdT_5SOn_x7yc27_A2gudPaTPJOCMVckSohEXLVs,1098 +django/contrib/contenttypes/locale/sr_Latn/LC_MESSAGES/django.po,sha256=E3H73fIXuvf_00NSENk8_2f_jeKnb9GT0ICx_Wwx1XU,1381 +django/contrib/contenttypes/locale/sv/LC_MESSAGES/django.mo,sha256=I5bmwlJ8jVHoJW6-uGZ6r8FRIEVdg3xQseenfnhKkpg,1066 +django/contrib/contenttypes/locale/sv/LC_MESSAGES/django.po,sha256=KybZ8wY7r_ZU0beG8plP36ba8CEMKa3MTWwbL_Sf8zg,1331 +django/contrib/contenttypes/locale/sw/LC_MESSAGES/django.mo,sha256=XLPle0JYPPkmm5xpJRmWztMTF1_3a2ZubWE4ur2sav8,563 +django/contrib/contenttypes/locale/sw/LC_MESSAGES/django.po,sha256=jRc8Eh6VuWgqc4kM-rxjbVE3yV9uip6mOJLdD6yxGLM,1009 +django/contrib/contenttypes/locale/ta/LC_MESSAGES/django.mo,sha256=L3eF4z9QSmIPqzEWrNk8-2uLteQUMsuxiD9VZyRuSfo,678 +django/contrib/contenttypes/locale/ta/LC_MESSAGES/django.po,sha256=iDb9lRU_-YPmO5tEQeXEZeGeFe-wVZy4k444sp_vTgw,1123 +django/contrib/contenttypes/locale/te/LC_MESSAGES/django.mo,sha256=S_UF_mZbYfScD6Z36aB-kwtTflTeX3Wt4k7z_pEcOV8,690 +django/contrib/contenttypes/locale/te/LC_MESSAGES/django.po,sha256=aAGMMoJPg_pF9_rCNZmda5A_TvDCvQfYEL64Xdoa4jo,1135 +django/contrib/contenttypes/locale/th/LC_MESSAGES/django.mo,sha256=qilt-uZMvt0uw-zFz7-eCmkGEx3XYz7NNo9Xbq3s7uI,1186 +django/contrib/contenttypes/locale/th/LC_MESSAGES/django.po,sha256=42F34fNEn_3yQKBBJnCLttNeyktuLVpilhMyepOd6dg,1444 +django/contrib/contenttypes/locale/tr/LC_MESSAGES/django.mo,sha256=97r7jUJMbkhpnk4fEy-sg3oMDQU8N8A76qrXKX7CNxg,1121 +django/contrib/contenttypes/locale/tr/LC_MESSAGES/django.po,sha256=fS_Vgpat2dLaXgpT4bsUPjJx_1B_6vb25qH0vH92ZVk,1355 +django/contrib/contenttypes/locale/tt/LC_MESSAGES/django.mo,sha256=_LQ1N04FgosdDLUYXJOEqpCB2Mg92q95cBRgYPi1MyY,659 +django/contrib/contenttypes/locale/tt/LC_MESSAGES/django.po,sha256=L7wMMpxGnpQiKd_mjv2bJpE2iqCJ8XwiXK0IN4EHSbM,1110 +django/contrib/contenttypes/locale/udm/LC_MESSAGES/django.mo,sha256=CNmoKj9Uc0qEInnV5t0Nt4ZnKSZCRdIG5fyfSsqwky4,462 +django/contrib/contenttypes/locale/udm/LC_MESSAGES/django.po,sha256=YVyej0nAhhEf7knk4vCeRQhmSQeGZLhMPPXyIyWObnM,977 +django/contrib/contenttypes/locale/uk/LC_MESSAGES/django.mo,sha256=LK_0RNZeRjH6l6F3IS_FfyGrnjjst__pSU-7SIfqMV4,1382 +django/contrib/contenttypes/locale/uk/LC_MESSAGES/django.po,sha256=hckQ42e_T3As0Yq_1yLwU3pX5wpcBdZyd7h2uin3bhw,1707 +django/contrib/contenttypes/locale/ur/LC_MESSAGES/django.mo,sha256=OJs_EmDBps-9a_KjFJnrS8IqtJfd25LaSWeyG8u8UfI,671 +django/contrib/contenttypes/locale/ur/LC_MESSAGES/django.po,sha256=f0FnsaAM_qrBuCXzLnkBrW5uFfVc6pUh7S-qp4918Ng,1122 +django/contrib/contenttypes/locale/vi/LC_MESSAGES/django.mo,sha256=kGYgEI1gHkyU4y_73mBJN1hlKC2JujVXMg6iCdWncDg,1155 +django/contrib/contenttypes/locale/vi/LC_MESSAGES/django.po,sha256=RIDUgsElfRF8bvBdUKtshizuMnupdMGAM896s7qZKD4,1439 +django/contrib/contenttypes/locale/zh_Hans/LC_MESSAGES/django.mo,sha256=KTYCw4pEOPOfAObHiyBQTzZBX1mY0r9095QLAZfjvQM,1062 +django/contrib/contenttypes/locale/zh_Hans/LC_MESSAGES/django.po,sha256=bJp1GCxJwVfqD-rMAWTBg9OLIKginTCMs0V6mESrVrc,1353 +django/contrib/contenttypes/locale/zh_Hant/LC_MESSAGES/django.mo,sha256=fPIlKpeLGhOtsbLsJOef5d5Y8jCyT9hFiOfZ1v9yFTQ,1083 +django/contrib/contenttypes/locale/zh_Hant/LC_MESSAGES/django.po,sha256=Jwtnwk0R2c2Kh7KUg0t0GKjQrMO48YUNntbCT6dIHAM,1329 +django/contrib/contenttypes/management/__init__.py,sha256=KKf4YWuuvUAOf5l2Xn5zEIR4WHA8vKQ5R5paVfYAPeM,4857 +django/contrib/contenttypes/management/commands/remove_stale_contenttypes.py,sha256=dPxDDpEOHsoRoeHYosHn59oEYYo31RPmo2dM8dTnu0U,3282 +django/contrib/contenttypes/migrations/0001_initial.py,sha256=o3bVVr-O_eUNiloAC1z-JIHDoCJQ4ifdA-6DhdVUrp8,1157 +django/contrib/contenttypes/migrations/0002_remove_content_type_name.py,sha256=4h1AUWSWAvwfEMAaopJZce-yNj1AVpCYFAk2E-Ur-wM,1103 +django/contrib/contenttypes/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/flatpages/__init__.py,sha256=pa6Mmr3sfZ2KBkXHAvYIw_haRx8tSqTNZluUKg5zQCk,69 +django/contrib/flatpages/admin.py,sha256=m_TsFRA36bunPrg2dSdxDJpWLfJkiaVmE3kcYAO9trY,654 +django/contrib/flatpages/apps.py,sha256=EMKrGuulQwqXlcGKRvmISVaiqSNVwwUetEeEo3PTjxA,198 +django/contrib/flatpages/forms.py,sha256=hz310DhZusEvLUxCJXIpMMc_ZTwuc-HYPNHDo1IdHYA,2379 +django/contrib/flatpages/middleware.py,sha256=aXeOeOkUmpdkGOyqZnkR-l1VrDQ161RWIWa3WPBhGac,784 +django/contrib/flatpages/models.py,sha256=LDnyMzLbmSmpmEemdgzrx2urg8PtnRgY2jxbC-uQH9g,1483 +django/contrib/flatpages/sitemaps.py,sha256=0WGMLfr61H5aVX1inE4X_BJhx2b_lw4LKMO4OQGiDX4,554 +django/contrib/flatpages/urls.py,sha256=v_bP8Axlf0XLgb2kJVdEPDqW8WY7RkwSwm7_BH_0eWE,179 +django/contrib/flatpages/views.py,sha256=DLrol_x7lYfvd_b8EYgFeOYled3TgSoR-KZOOaTzJAQ,2747 +django/contrib/flatpages/locale/af/LC_MESSAGES/django.mo,sha256=c0XEKXJYgpy2snfmWFPQqeYeVla1F5s_wXIBaioiyPc,2297 +django/contrib/flatpages/locale/af/LC_MESSAGES/django.po,sha256=_psp14JfICDxrKx_mKF0uLnItkJPkCNMvrNOyE35nFw,2428 +django/contrib/flatpages/locale/ar/LC_MESSAGES/django.mo,sha256=G1GCOfhvPoJA5XpI3hE6zIxyhgec1ZUjHEt4lprfRr4,2475 +django/contrib/flatpages/locale/ar/LC_MESSAGES/django.po,sha256=ZypIMRzRQA72sV4lVB8RVUtLjcmbqhow97-e20R02uk,2732 +django/contrib/flatpages/locale/ast/LC_MESSAGES/django.mo,sha256=4SEsEE2hIZJwQUNs8jDgN6qVynnUYJUIE4w-usHKA6M,924 +django/contrib/flatpages/locale/ast/LC_MESSAGES/django.po,sha256=5UlyS59bVo1lccM6ZgdYSgHe9NLt_WeOdXX-swLKubU,1746 +django/contrib/flatpages/locale/az/LC_MESSAGES/django.mo,sha256=_7vXhoLm5K8LuzkNOXK-D0DIP0XFF-EcDM0DPF-BZjI,2235 +django/contrib/flatpages/locale/az/LC_MESSAGES/django.po,sha256=HDo3gW0Pz4L3KZkVJMbFfFKrgMTjXuPAtgBMArsR78I,2496 +django/contrib/flatpages/locale/be/LC_MESSAGES/django.mo,sha256=N1snVmwE9oa2Hi_77quF7DhOFJwFNdv07x6pSXF_hKE,2801 +django/contrib/flatpages/locale/be/LC_MESSAGES/django.po,sha256=4iBnHyRJ1XkixqUWrmxfMlmKsqyZYhMb3zsI0aLIJwY,2933 +django/contrib/flatpages/locale/bg/LC_MESSAGES/django.mo,sha256=p3RZmS9PAqdlAmbc7UswSoG0t1eeuXYDp1WZ3mWfFow,2569 +django/contrib/flatpages/locale/bg/LC_MESSAGES/django.po,sha256=DqRp9KTLxks9tNEXs2g_jvIp7dI92jXLkKNDNyLhHac,2779 +django/contrib/flatpages/locale/bn/LC_MESSAGES/django.mo,sha256=2oK2Rm0UtAI7QFRwpUR5aE3-fOltE6kTilsTbah737Y,2988 +django/contrib/flatpages/locale/bn/LC_MESSAGES/django.po,sha256=QrbX69iqXOD6oByLcgPkD1QzAkfthpfTjezIFQ-6kVg,3172 +django/contrib/flatpages/locale/br/LC_MESSAGES/django.mo,sha256=SKbykdilX_NcpkVi_lHF8LouB2G49ZAzdF09xw49ERc,2433 +django/contrib/flatpages/locale/br/LC_MESSAGES/django.po,sha256=O_mwrHIiEwV4oB1gZ7Yua4nVKRgyIf3j5UtedZWAtwk,2783 +django/contrib/flatpages/locale/bs/LC_MESSAGES/django.mo,sha256=bd7ID7OsEhp57JRw_TXoTwsVQNkFYiR_sxSkgi4WvZU,1782 +django/contrib/flatpages/locale/bs/LC_MESSAGES/django.po,sha256=IyFvI5mL_qesEjf6NO1nNQbRHhCAZQm0UhIpmGjrSwQ,2233 +django/contrib/flatpages/locale/ca/LC_MESSAGES/django.mo,sha256=EyMOB0PboHHBg90oMvqLkfTBhBv8tgCAhvIHva8udr4,2258 +django/contrib/flatpages/locale/ca/LC_MESSAGES/django.po,sha256=5rpcdQuv5FhvhJ0N_H5iDEuCM7eHEtwjUdG5GD_mYto,2567 +django/contrib/flatpages/locale/cs/LC_MESSAGES/django.mo,sha256=mAPPhi7qRIrOnT-crPpFZ3fZWHreToq97o_jKHiRn0w,2359 +django/contrib/flatpages/locale/cs/LC_MESSAGES/django.po,sha256=JKPt_Umqavcp1sKny9fuiCcKg6F0UXtF47ILPBFPFBo,2584 +django/contrib/flatpages/locale/cy/LC_MESSAGES/django.mo,sha256=zr_2vsDZsrby3U8AmvlJMU3q1U_4IrrTmz6oS29OWtQ,2163 +django/contrib/flatpages/locale/cy/LC_MESSAGES/django.po,sha256=E_NC_wtuhWKYKB3YvYGB9ccJgKI3AfIZlB2HpXSyOsk,2370 +django/contrib/flatpages/locale/da/LC_MESSAGES/django.mo,sha256=XRWvKh9BpeKH1nuSm30RBC4UTfCfKZ7QRhvFLDnvaPg,2288 +django/contrib/flatpages/locale/da/LC_MESSAGES/django.po,sha256=2egDWU6gdtu7ZXOTlF6KmFGySE4xrYnVhib0JxZXhJs,2553 +django/contrib/flatpages/locale/de/LC_MESSAGES/django.mo,sha256=v4pUUVzPH3UBtzBuCBSJsHYzaltnzB-0rI-ls6h1e1M,2216 +django/contrib/flatpages/locale/de/LC_MESSAGES/django.po,sha256=ArWO6LbvSwJmStJLmdUXeXuMS_EtHeQc-4V235941Bk,2378 +django/contrib/flatpages/locale/dsb/LC_MESSAGES/django.mo,sha256=N4BRieE_dA-ggQLtG3XouzmilwPw7yyQWhIibqOnt-0,2398 +django/contrib/flatpages/locale/dsb/LC_MESSAGES/django.po,sha256=pAsTk2Eo9Qn2C_ichVi4TsqLEbMuckAAGs5hLwL5h98,2537 +django/contrib/flatpages/locale/el/LC_MESSAGES/django.mo,sha256=WxBbtlMvLwH2e7KUP7RcrxgEHP4DC9MKiO_KLCuFbmc,2870 +django/contrib/flatpages/locale/el/LC_MESSAGES/django.po,sha256=oIgwZoftZQVOrfsTDdL8iN9CpPN7UdmkCfpFOJoNHt0,3141 +django/contrib/flatpages/locale/en/LC_MESSAGES/django.mo,sha256=U0OV81NfbuNL9ctF-gbGUG5al1StqN-daB-F-gFBFC8,356 +django/contrib/flatpages/locale/en/LC_MESSAGES/django.po,sha256=7L4raxmh---knOc4LRFyRQxJhzUN-XjPDD_XIOIK3fs,2151 +django/contrib/flatpages/locale/en_AU/LC_MESSAGES/django.mo,sha256=cuifXT2XlF4c_bR6ECRhlraSZyA7q4ZLhUgwvW73miw,486 +django/contrib/flatpages/locale/en_AU/LC_MESSAGES/django.po,sha256=ZMAJRrjovd_cdWvzkuEiJ-9ZU9rqRTwoA3x8uY2khcs,1533 +django/contrib/flatpages/locale/en_GB/LC_MESSAGES/django.mo,sha256=7zyXYOsqFkUGxclW-VPPxrQTZKDuiYQ7MQJy4m8FClo,1989 +django/contrib/flatpages/locale/en_GB/LC_MESSAGES/django.po,sha256=oHrBd6lVnO7-SdnO-Taa7iIyiqp_q2mQZjkuuU3Qa_s,2232 +django/contrib/flatpages/locale/eo/LC_MESSAGES/django.mo,sha256=EiyCzj22pdY0PboTmlaPgZdwRiuGuevHHzJcgU96su0,2295 +django/contrib/flatpages/locale/eo/LC_MESSAGES/django.po,sha256=WXTOk4Al2MlbfgWcHqBcwiY8HEzjVynds_3o-XJqhfg,2578 +django/contrib/flatpages/locale/es/LC_MESSAGES/django.mo,sha256=aglISA-piajtIN46RnR2cBSV7tECsiLuXkpEqdGe9Bk,2293 +django/contrib/flatpages/locale/es/LC_MESSAGES/django.po,sha256=mvQNUGNYQQR_-T0UOAB5UpabocGNbn4kUk4mL0SOPVs,2674 +django/contrib/flatpages/locale/es_AR/LC_MESSAGES/django.mo,sha256=sNjmbLHdYbmaNHXiEPcOxwKnQbtGThOkNP8irx0sUvw,2282 +django/contrib/flatpages/locale/es_AR/LC_MESSAGES/django.po,sha256=BnT81w4T9nrYnOyb0FpCFcaYwXDMYu7gQdclo4txIN0,2453 +django/contrib/flatpages/locale/es_CO/LC_MESSAGES/django.mo,sha256=jt8wzeYky5AEnoNuAv8W4nGgd45XsMbpEdRuLnptr3U,2140 +django/contrib/flatpages/locale/es_CO/LC_MESSAGES/django.po,sha256=xrbAayPoxT7yksXOGPb-0Nc-4g14UmWANaKTD4ItAFA,2366 +django/contrib/flatpages/locale/es_MX/LC_MESSAGES/django.mo,sha256=Y5IOKRzooJHIhJzD9q4PKOe39Z4Rrdz8dBKuvmGkqWU,2062 +django/contrib/flatpages/locale/es_MX/LC_MESSAGES/django.po,sha256=Y-EXhw-jISttA9FGMz7gY_kB-hQ3wEyKEaOc2gu2hKQ,2246 +django/contrib/flatpages/locale/es_VE/LC_MESSAGES/django.mo,sha256=EI6WskepXUmbwCPBNFKqLGNcWFVZIbvXayOHxOCLZKo,2187 +django/contrib/flatpages/locale/es_VE/LC_MESSAGES/django.po,sha256=ipG6a0A2d0Pyum8GcknA-aNExVLjSyuUqbgHM9VdRQo,2393 +django/contrib/flatpages/locale/et/LC_MESSAGES/django.mo,sha256=1pqbiN3UlyuN26dXLazlUUZudJEjyjaPEb2D2jejd38,2095 +django/contrib/flatpages/locale/et/LC_MESSAGES/django.po,sha256=4yQAnUtnnqzAjRAAZD95Z69gLqkXgDVko4xeg24dOaU,2302 +django/contrib/flatpages/locale/eu/LC_MESSAGES/django.mo,sha256=FoKazUkuPpDgsEEI6Gm-xnZYVHtxILiy6Yzvnu8y-L0,2244 +django/contrib/flatpages/locale/eu/LC_MESSAGES/django.po,sha256=POPFB5Jd8sE9Z_ivYSdnet14u-aaXneTUNDMuOrJy00,2478 +django/contrib/flatpages/locale/fa/LC_MESSAGES/django.mo,sha256=Zc-OsiwBJYrvVY6tefxec0VC97uD8__foLTLT_V0rCY,2459 +django/contrib/flatpages/locale/fa/LC_MESSAGES/django.po,sha256=H48bg8qlnzAQn22fEYZbYV_PhTiTao7KAezN5BekDyE,2717 +django/contrib/flatpages/locale/fi/LC_MESSAGES/django.mo,sha256=K_-A8ccHnFcWnViuPAKR7IxhcG0YWNG7iCKYOxxXgMg,2127 +django/contrib/flatpages/locale/fi/LC_MESSAGES/django.po,sha256=-Ik04K4va6HcOoG8bWukAsHThf3IWREZGeRzewYfC7o,2366 +django/contrib/flatpages/locale/fr/LC_MESSAGES/django.mo,sha256=kQFHWfmTka0I_ZbNsabcjT-CqYESevreU-khAsoKLAk,2452 +django/contrib/flatpages/locale/fr/LC_MESSAGES/django.po,sha256=9LmqH-vI0ZMlZTbfsPS4_kKsPLeUJUKrCAzYXMqrA3E,2726 +django/contrib/flatpages/locale/fy/LC_MESSAGES/django.mo,sha256=DRsFoZKo36F34XaiQg_0KUOr3NS_MG3UHptzOI4uEAU,476 +django/contrib/flatpages/locale/fy/LC_MESSAGES/django.po,sha256=9JIrRVsPL1m0NPN6uHiaAYxJXHp5IghZmQhVSkGo5g8,1523 +django/contrib/flatpages/locale/ga/LC_MESSAGES/django.mo,sha256=KKvDhZULHQ4JQ_31ltLkk88H2BKUbBXDQFSvdKFqjn8,2191 +django/contrib/flatpages/locale/ga/LC_MESSAGES/django.po,sha256=Yat7oU2XPQFQ8vhNq1nJFAlX2rqfxz4mjpU5TcnaYO8,2400 +django/contrib/flatpages/locale/gd/LC_MESSAGES/django.mo,sha256=FC4qtdjuLYBtEtORo74AaRAQF4FUdj4RWg6Bn1wpY3c,2295 +django/contrib/flatpages/locale/gd/LC_MESSAGES/django.po,sha256=SYC8csqVmTyI1OYFj41YSHcm_WEo0O8BK_VbIBC1Cng,2423 +django/contrib/flatpages/locale/gl/LC_MESSAGES/django.mo,sha256=VXyPsc6cXB97dJJFGfD8Oh2lYpn8TFYjIOeFUQeYpVU,2039 +django/contrib/flatpages/locale/gl/LC_MESSAGES/django.po,sha256=MzE7lepmRu60wy9gn6Wxx-LtKIO9JwScSdJ3SyLRU9s,2366 +django/contrib/flatpages/locale/he/LC_MESSAGES/django.mo,sha256=3IzEeNWqOl9OA3eD1wGYtj9mNjBiqrb9ZstkyTL_l-w,2548 +django/contrib/flatpages/locale/he/LC_MESSAGES/django.po,sha256=JVNRxTOdAHlpyC3Ctw0i1nj0sFMbBQSete8quWAA-Q4,2777 +django/contrib/flatpages/locale/hi/LC_MESSAGES/django.mo,sha256=w29ukoF48C7iJ6nE045YoWi7Zcrgu_oXoxT-r6gcQy8,2770 +django/contrib/flatpages/locale/hi/LC_MESSAGES/django.po,sha256=nXq5y1FqMGVhpXpQVdV3uU5JcUtBc2BIrf-n__C2q30,3055 +django/contrib/flatpages/locale/hr/LC_MESSAGES/django.mo,sha256=Mt4gpBuUXvcBl8K714ls4PimHQqee82jFxY1BEAYQOE,2188 +django/contrib/flatpages/locale/hr/LC_MESSAGES/django.po,sha256=ZbUMJY6a-os-xDmcDCJNrN4-YqRe9b_zJ4V5gt2wlGI,2421 +django/contrib/flatpages/locale/hsb/LC_MESSAGES/django.mo,sha256=ITxM4Yl1IvKC3PIh4nrVWfU4i52KIMSRUbUgotA-tuY,2384 +django/contrib/flatpages/locale/hsb/LC_MESSAGES/django.po,sha256=S69IIggzzgv1RaJQmCXTy6kRLbd3kqS9TI5DgT0gWtY,2520 +django/contrib/flatpages/locale/hu/LC_MESSAGES/django.mo,sha256=2oz-UfEsdxUxkftZPLWb3JkF4f8Pvx0UWjCoawOJj_s,2263 +django/contrib/flatpages/locale/hu/LC_MESSAGES/django.po,sha256=L4zzF9itlShNCPqbNyU12-Tffigm4cklvkEueYx9euQ,2528 +django/contrib/flatpages/locale/hy/LC_MESSAGES/django.mo,sha256=qocNtyLcQpjmGqQ130VGjJo-ruaOCtfmZehS9If_hWk,2536 +django/contrib/flatpages/locale/hy/LC_MESSAGES/django.po,sha256=WD8ohMnsaUGQItyqQmS46d76tKgzhQ17X_tGevqULO0,2619 +django/contrib/flatpages/locale/ia/LC_MESSAGES/django.mo,sha256=bochtCPlc268n0WLF0bJtUUT-XveZLPOZPQUetnOWfU,500 +django/contrib/flatpages/locale/ia/LC_MESSAGES/django.po,sha256=gOJ850e8sFcjR2G79zGn3_0-9-KSy591i7ketBRFjyw,1543 +django/contrib/flatpages/locale/id/LC_MESSAGES/django.mo,sha256=Rd_xkvYoD15_gKAC2oP-iGutDUZCe3G4tpVoNsZ4KUg,2236 +django/contrib/flatpages/locale/id/LC_MESSAGES/django.po,sha256=oubDeX4_ccixc4VNwIJkRiVgYQQmoEEbWUWmWOV6mF0,2467 +django/contrib/flatpages/locale/io/LC_MESSAGES/django.mo,sha256=N8R9dXw_cnBSbZtwRbX6Tzw5XMr_ZdRkn0UmsQFDTi4,464 +django/contrib/flatpages/locale/io/LC_MESSAGES/django.po,sha256=_pJveonUOmMu3T6WS-tV1OFh-8egW0o7vU3i5YqgChA,1511 +django/contrib/flatpages/locale/is/LC_MESSAGES/django.mo,sha256=dQ8MXLDoDs8Sz-Uaq5pY3vAiQlGo8-K-QqRPPB_rmUg,2252 +django/contrib/flatpages/locale/is/LC_MESSAGES/django.po,sha256=HknW5IeVZtxdnvexkyVQ5qmNS4vDDfJ6a3s3WD52cas,2472 +django/contrib/flatpages/locale/it/LC_MESSAGES/django.mo,sha256=U3Esxa7Hc6ox6dC8mr-6pbqbg29w3-hq7exSoHamROQ,2245 +django/contrib/flatpages/locale/it/LC_MESSAGES/django.po,sha256=obw6oujMNgnZgoeKMtRVTZfhxtGxHDJcNQovStAmjCg,2467 +django/contrib/flatpages/locale/ja/LC_MESSAGES/django.mo,sha256=0m18iVnCHzf7piLN2v-WeM68dZjP08Gt54rRoPvHBNU,2494 +django/contrib/flatpages/locale/ja/LC_MESSAGES/django.po,sha256=wKJ-DRslfYhxK7jeSMtMTAOwTWJ1_QU-wvBEhQ9ZThg,2783 +django/contrib/flatpages/locale/ka/LC_MESSAGES/django.mo,sha256=R4OSbZ-lGxMdeJYsaXVXpo6-KSZWeKPuErKmEsUvEQE,3022 +django/contrib/flatpages/locale/ka/LC_MESSAGES/django.po,sha256=YCVnkX9uayvAQjYy_2jS7fYb36meoMJTKSc2lfoUbeM,3301 +django/contrib/flatpages/locale/kk/LC_MESSAGES/django.mo,sha256=lMPryzUQr21Uy-NAGQhuIZjHz-4LfBHE_zxEc2_UPaw,2438 +django/contrib/flatpages/locale/kk/LC_MESSAGES/django.po,sha256=3y9PbPw-Q8wM7tCq6u3KeYUT6pfTqcQwlNlSxpAXMxQ,2763 +django/contrib/flatpages/locale/km/LC_MESSAGES/django.mo,sha256=FYRfhNSqBtavYb10sHZNfB-xwLwdZEfVEzX116nBs-k,1942 +django/contrib/flatpages/locale/km/LC_MESSAGES/django.po,sha256=d2AfbR78U0rJqbFmJQvwiBl_QvYIeSwsPKEnfYM4JZA,2471 +django/contrib/flatpages/locale/kn/LC_MESSAGES/django.mo,sha256=n5HCZEPYN_YIVCXrgA1qhxvfhZtDbhfiannJy5EkHkI,1902 +django/contrib/flatpages/locale/kn/LC_MESSAGES/django.po,sha256=o9xnLjwDw7L49Mkyr8C6aQZ13Yq5MYx1JYXEtcIsiWU,2437 +django/contrib/flatpages/locale/ko/LC_MESSAGES/django.mo,sha256=ehwhiy0x7bgBrY_UtNwvCktLC8g44iMVOElR0CJL6zs,2285 +django/contrib/flatpages/locale/ko/LC_MESSAGES/django.po,sha256=2_fhKNsIUf5AnOLpvCwhjkCBuDDMvIb5KlVK3PkFt7Y,2686 +django/contrib/flatpages/locale/lb/LC_MESSAGES/django.mo,sha256=Wkvlh5L_7CopayfNM5Z_xahmyVje1nYOBfQJyqucI_0,502 +django/contrib/flatpages/locale/lb/LC_MESSAGES/django.po,sha256=gGeTuniu3ZZ835t9HR-UtwCcd2s_Yr7ihIUm3jgQ7Y0,1545 +django/contrib/flatpages/locale/lt/LC_MESSAGES/django.mo,sha256=es6xV6X1twtqhIMkV-MByA7KZ5SoVsrx5Qh8BuzJS0Q,2506 +django/contrib/flatpages/locale/lt/LC_MESSAGES/django.po,sha256=T__44veTC_u4hpPvkLekDOWfntXYAMzCd5bffRtGxWA,2779 +django/contrib/flatpages/locale/lv/LC_MESSAGES/django.mo,sha256=BuBwRAtQRAUwyZZS8GAKNYzMfAwSf_7ftf0_2AtTlZk,2367 +django/contrib/flatpages/locale/lv/LC_MESSAGES/django.po,sha256=mFrPgFTYA2Jow3zGtBchaOET5l9pL43HG0lB8EJ53WU,2577 +django/contrib/flatpages/locale/mk/LC_MESSAGES/django.mo,sha256=55H8w6fB-B-RYlKKkGw3fg2m-djxUoEp_XpupK-ZL70,2699 +django/contrib/flatpages/locale/mk/LC_MESSAGES/django.po,sha256=OhHJ5OVWb0jvNaOB3wip9tSIZ1yaPPLkfQR--uUEyUI,2989 +django/contrib/flatpages/locale/ml/LC_MESSAGES/django.mo,sha256=xBigFnQjazp9yPqMdSk5lmSVzTyFyyMxPR4IamS3BNA,3565 +django/contrib/flatpages/locale/ml/LC_MESSAGES/django.po,sha256=bdUaZ2dKlW_Wr3HXryRQ0nIZ4yc1pvNj3US24kOkGII,3821 +django/contrib/flatpages/locale/mn/LC_MESSAGES/django.mo,sha256=tqwROY6D-bJ4gbDQIowKXfuLIIdCWksGwecL2sj_wco,2776 +django/contrib/flatpages/locale/mn/LC_MESSAGES/django.po,sha256=jqiBpFLXlptDyU4F8ZWbP61S4APSPh0-nuTpNOejA6c,3003 +django/contrib/flatpages/locale/mr/LC_MESSAGES/django.mo,sha256=GvSfsp0Op7st6Ifd8zp8Cj4tTHoFMltQb4p64pebrqI,468 +django/contrib/flatpages/locale/mr/LC_MESSAGES/django.po,sha256=sayU0AfVaSFpBj0dT32Ri55LRafQFUHLi03K06kI7gc,1515 +django/contrib/flatpages/locale/my/LC_MESSAGES/django.mo,sha256=OcbiA7tJPkyt_WNrqyvoFjHt7WL7tMGHV06AZSxzkho,507 +django/contrib/flatpages/locale/my/LC_MESSAGES/django.po,sha256=EPWE566Vn7tax0PYUKq93vtydvmt-A4ooIau9Cwcdfc,1550 +django/contrib/flatpages/locale/nb/LC_MESSAGES/django.mo,sha256=dBs5KtfQCt5z1cxJNPrm_AIMTfebhfFWdUJoKcB3LcI,2196 +django/contrib/flatpages/locale/nb/LC_MESSAGES/django.po,sha256=sCXLT1Ps6WmLrbvj4WzqkPgXy1P4cAJRSD8FZEaF0UQ,2551 +django/contrib/flatpages/locale/ne/LC_MESSAGES/django.mo,sha256=gDZKhcku1NVlSs5ZPPupc7RI8HOF7ex0R4Rs8tMmrYE,1500 +django/contrib/flatpages/locale/ne/LC_MESSAGES/django.po,sha256=GWlzsDaMsJkOvw2TidJOEf1Fvxx9WxGdGAtfZIHkHwk,2178 +django/contrib/flatpages/locale/nl/LC_MESSAGES/django.mo,sha256=zmGi_idc2kgzkRgzYuwPifiTrYmS0j_it9cgtL2Ar18,2238 +django/contrib/flatpages/locale/nl/LC_MESSAGES/django.po,sha256=pR7Gv2BqiOhZuu7tmJYnpHQrKvxlgww480JfKHYLIrk,2635 +django/contrib/flatpages/locale/nn/LC_MESSAGES/django.mo,sha256=A50zQJ-0YYPjPCeeEa-gwqA2N5eON13YW8SJZvtJBZc,1693 +django/contrib/flatpages/locale/nn/LC_MESSAGES/django.po,sha256=H5hnBsH3sUdlPkMjxiqNnh8izcrTSAs6o-ywlNCTKtw,2119 +django/contrib/flatpages/locale/os/LC_MESSAGES/django.mo,sha256=cXGTA5M229UFsgc7hEiI9vI9SEBrNQ8d3A0XrtazO6w,2329 +django/contrib/flatpages/locale/os/LC_MESSAGES/django.po,sha256=m-qoTiKePeFviKGH1rJRjZRH-doJ2Fe4DcZ6W52rG8s,2546 +django/contrib/flatpages/locale/pa/LC_MESSAGES/django.mo,sha256=69_ZsZ4nWlQ0krS6Mx3oL6c4sP5W9mx-yAmOhZOnjPU,903 +django/contrib/flatpages/locale/pa/LC_MESSAGES/django.po,sha256=N6gkoRXP5MefEnjywzRiE3aeU6kHQ0TUG6IGdLV7uww,1780 +django/contrib/flatpages/locale/pl/LC_MESSAGES/django.mo,sha256=BBcBF68r5M0cFEJ4Ffpz3tB2h2aBkPImp2B4HabZRRE,2455 +django/contrib/flatpages/locale/pl/LC_MESSAGES/django.po,sha256=OMP2-u5LVkOHlRwU95Ba5QsxZFkkiFVuf4NImxT-8iI,2759 +django/contrib/flatpages/locale/pt/LC_MESSAGES/django.mo,sha256=xD2pWdS3XMg7gAqBrUBmCEXFsOzEs0Npe8AJnlpueRY,2115 +django/contrib/flatpages/locale/pt/LC_MESSAGES/django.po,sha256=-K2jipPUWjXpfSPq3upnC_bvtaRAeOw0OLRFv03HWFY,2326 +django/contrib/flatpages/locale/pt_BR/LC_MESSAGES/django.mo,sha256=QBrD3JxBjq8PRB-VZjkaqDRKS3rXkmNrGYwFsMvle-0,2274 +django/contrib/flatpages/locale/pt_BR/LC_MESSAGES/django.po,sha256=wtj6fD32hd9NqIyP1m3w7QUbyJ8hN3WDOkb5-sj68yc,2771 +django/contrib/flatpages/locale/ro/LC_MESSAGES/django.mo,sha256=oS3MXuRh2USyLOMrMH0WfMSFpgBcZWfrbCrovYgbONo,2337 +django/contrib/flatpages/locale/ro/LC_MESSAGES/django.po,sha256=UNKGNSZKS92pJDjxKDLqVUW87DKCWP4_Q51xS16IZl0,2632 +django/contrib/flatpages/locale/ru/LC_MESSAGES/django.mo,sha256=wR8PsYu1LFuE5L29g4W-vLX2Py0juKcVaryfCqZvu2c,2966 +django/contrib/flatpages/locale/ru/LC_MESSAGES/django.po,sha256=dml7ipThZdNLm5BXG5TxqQmKTiJqcmosP7OHuXHNnIo,3263 +django/contrib/flatpages/locale/sk/LC_MESSAGES/django.mo,sha256=f_qbUdkwYKzg3DQT5x-ab883NUWF80gNMc7yekFctPM,2145 +django/contrib/flatpages/locale/sk/LC_MESSAGES/django.po,sha256=OD_E2Z-nElhfFcsnuK8Y3r341OXjLON2CoWjNJfHIt8,2482 +django/contrib/flatpages/locale/sl/LC_MESSAGES/django.mo,sha256=MBjwhw6wppQUl0Lb_rShXZj_Sq-JLSkdYU5Xhi0OtYY,2173 +django/contrib/flatpages/locale/sl/LC_MESSAGES/django.po,sha256=6zbOXzkLTsdWRKAhuLzBVBc53n6MQKpvOeHw4cRrAlc,2400 +django/contrib/flatpages/locale/sq/LC_MESSAGES/django.mo,sha256=k9EPefyh9amDQ4V0Bc8gQbYHHD1mm8BZpHkkW6lXfqw,2328 +django/contrib/flatpages/locale/sq/LC_MESSAGES/django.po,sha256=XKFwOQUPGA00NaM5Rc36vRPF35GXE9LOkizFvTZ1kIg,2507 +django/contrib/flatpages/locale/sr/LC_MESSAGES/django.mo,sha256=ThYTwsaxEtcEPoh9BZ9Ag_QY0qNZu3oEqFr-A2TZf5E,2755 +django/contrib/flatpages/locale/sr/LC_MESSAGES/django.po,sha256=kHv5vT5i_0CfH-decXgAUvDmU4P6_bRcF0gh9XUFDw8,3045 +django/contrib/flatpages/locale/sr_Latn/LC_MESSAGES/django.mo,sha256=DRemg_nTBYpH5qoofYbe_VwerYeMl1kSzwrwfrs133s,2307 +django/contrib/flatpages/locale/sr_Latn/LC_MESSAGES/django.po,sha256=57cHJ7Tkap5UE0VDpL1CvFDTapfaM5KYOx8_DqpE-e8,2552 +django/contrib/flatpages/locale/sv/LC_MESSAGES/django.mo,sha256=ATOsOiNTLlCDWZO630xUUdnXfs7YW4nuqy9wUVOfzmU,2288 +django/contrib/flatpages/locale/sv/LC_MESSAGES/django.po,sha256=4bhfJNUKc1K1Z8IWSB9_YQVk_Gy3q4ZhkhfDS9FKaaw,2562 +django/contrib/flatpages/locale/sw/LC_MESSAGES/django.mo,sha256=Lhf99AGmazKJHzWk2tkGrMInoYOq0mtdCd8SGblnVCQ,1537 +django/contrib/flatpages/locale/sw/LC_MESSAGES/django.po,sha256=cos3eahuznpTfTdl1Vj_07fCOSYE8C9CRYHCBLYZrVw,1991 +django/contrib/flatpages/locale/ta/LC_MESSAGES/django.mo,sha256=nNuoOX-FPAmTvM79o7colM4C7TtBroTFxYtETPPatcQ,1945 +django/contrib/flatpages/locale/ta/LC_MESSAGES/django.po,sha256=XE4SndPZPLf1yXGl5xQSb0uor4OE8CKJ0EIXBRDA3qU,2474 +django/contrib/flatpages/locale/te/LC_MESSAGES/django.mo,sha256=bMxhDMTQc_WseqoeqJMCSNy71o4U5tJZYgD2G0p-jD0,1238 +django/contrib/flatpages/locale/te/LC_MESSAGES/django.po,sha256=tmUWOrAZ98B9T6Cai8AgLCfb_rLeoPVGjDTgdsMOY1Y,2000 +django/contrib/flatpages/locale/th/LC_MESSAGES/django.mo,sha256=mct17_099pUn0aGuHu8AlZG6UqdKDpYLojqGYDLRXRg,2698 +django/contrib/flatpages/locale/th/LC_MESSAGES/django.po,sha256=PEcRx5AtXrDZvlNGWFH-0arroD8nZbutdJBe8_I02ag,2941 +django/contrib/flatpages/locale/tr/LC_MESSAGES/django.mo,sha256=N2TchJuU5h7bvRP5khjHBNMf8qvI4U5lyLgzebp24zo,2290 +django/contrib/flatpages/locale/tr/LC_MESSAGES/django.po,sha256=IdSq-XOJtdOWqVeUfKImJSFcepdvAheewAuYJqKSI2k,2544 +django/contrib/flatpages/locale/tt/LC_MESSAGES/django.mo,sha256=9RfCKyn0ZNYsqLvFNmY18xVMl7wnmDq5uXscrsFfupk,2007 +django/contrib/flatpages/locale/tt/LC_MESSAGES/django.po,sha256=SUwalSl8JWI9tuDswmnGT8SjuWR3DQGND9roNxJtH1o,2402 +django/contrib/flatpages/locale/udm/LC_MESSAGES/django.mo,sha256=7KhzWgskBlHmi-v61Ax9fjc3NBwHB17WppdNMuz-rEc,490 +django/contrib/flatpages/locale/udm/LC_MESSAGES/django.po,sha256=zidjP05Hx1OpXGqWEmF2cg9SFxASM4loOV85uW7zV5U,1533 +django/contrib/flatpages/locale/uk/LC_MESSAGES/django.mo,sha256=4LPDGENnexeg6awO1IHjau7CTZ0Y1EIkeXMspY9gj1Q,2962 +django/contrib/flatpages/locale/uk/LC_MESSAGES/django.po,sha256=15bRsN4P6kkY08RXROnl7aT63tWsRO1xNwdH-6Qlzcw,3289 +django/contrib/flatpages/locale/ur/LC_MESSAGES/django.mo,sha256=Li4gVdFoNOskGKAKiNuse6B2sz6ePGqGvZu7aGXMNy0,1976 +django/contrib/flatpages/locale/ur/LC_MESSAGES/django.po,sha256=hDasKiKrYov9YaNIHIpoooJo0Bzba___IuN2Hl6ofSc,2371 +django/contrib/flatpages/locale/vi/LC_MESSAGES/django.mo,sha256=FsFUi96oGTWGlZwM4qSMpuL1M2TAxsW51qO70TrybSM,1035 +django/contrib/flatpages/locale/vi/LC_MESSAGES/django.po,sha256=ITX3MWd7nlWPxTCoNPl22_OMLTt0rfvajGvTVwo0QC8,1900 +django/contrib/flatpages/locale/zh_Hans/LC_MESSAGES/django.mo,sha256=0laVf3Ma-KSXHMTBPOGCP46Ftmz2XcA77rVZWuf3FeM,2127 +django/contrib/flatpages/locale/zh_Hans/LC_MESSAGES/django.po,sha256=jDjc6Jyvd5l62rdyb828Z7xDhat7tI8pMmipNRHwsho,2456 +django/contrib/flatpages/locale/zh_Hant/LC_MESSAGES/django.mo,sha256=a-KLBISo2n7mn10SuNfT0K883RTjKjPYCpHCAivUz18,2053 +django/contrib/flatpages/locale/zh_Hant/LC_MESSAGES/django.po,sha256=GtvYArHRgiEQo5KSIYd4lsOeHCrXkWaZIiKFH4m1peM,2283 +django/contrib/flatpages/migrations/0001_initial.py,sha256=dLSlPpjfc6jMKhxYPsw6yKohxn4ejRXVOJ1VyJf12r4,1710 +django/contrib/flatpages/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/flatpages/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/flatpages/templatetags/flatpages.py,sha256=q0wsGQqXHhSCH4_UR-wHkj_pJsxBOo_liODBT_BZcTc,3561 +django/contrib/gis/__init__.py,sha256=GTSQJbKqQkNiljWZylYy_ofRICJeqIkfqmnC9ZdxZ2I,57 +django/contrib/gis/apps.py,sha256=YkIbEk4rWlbN0zZru2uewGsLzqWsMDl7yqA4g_5pT10,341 +django/contrib/gis/feeds.py,sha256=43TmSa40LR3LguE4VDeBThJZgO_rbtfrT5Y6DQ7RBiQ,5732 +django/contrib/gis/geometry.py,sha256=sTXZdh3D1UGGDBP-WZ2jvLUVstcJ_2Kn1_PlKJshNDo,677 +django/contrib/gis/measure.py,sha256=BLWTkDMMunvaN9lR8QDujmKOxUyhBQKy10Auo0npDaQ,11948 +django/contrib/gis/ptr.py,sha256=RK-5GCUUaQtBuDD3lAoraS7G05fzYhR5p0acKrzpQVE,1289 +django/contrib/gis/shortcuts.py,sha256=fHf3HYP6MP8GeuBW6G3y6d30Mjxa6IL2xtmblDjS8k4,1027 +django/contrib/gis/views.py,sha256=GpOJ8W5gk-xbB8y3wPe2dvoVutPKZqswhcMWCETBnx0,698 +django/contrib/gis/admin/__init__.py,sha256=Hni2JCw5ihVuor2HupxDffokiBOG11tu74EcKhiO89w,486 +django/contrib/gis/admin/options.py,sha256=z4UrI7Pzb73FsT2WgIMX9zsMG_Hg6g89vkkvgKPHOz8,5145 +django/contrib/gis/admin/widgets.py,sha256=_X3Li-k9q0m7soBvu0Vu3jwwmODZWTx9A3IswYKeXLM,4720 +django/contrib/gis/db/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/gis/db/backends/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/gis/db/backends/utils.py,sha256=y4q0N0oDplot6dZQIFnjGPqVsTiGyLTmEMt5-xj-2b4,784 +django/contrib/gis/db/backends/base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/gis/db/backends/base/adapter.py,sha256=zBcccriBRK9JowhREgLKirkWllHzir0Hw3BkC3koAZs,481 +django/contrib/gis/db/backends/base/features.py,sha256=hz9h_D5BD39M1-uGviOISrPfsCH7ELJL1MYM0HiREyQ,3402 +django/contrib/gis/db/backends/base/models.py,sha256=vkDweNsExmKWkHNSae9G6P-fT-SMdIgHZ85i31ihXg0,3962 +django/contrib/gis/db/backends/base/operations.py,sha256=I69Yyv0EIBl0GXVfdTqMEqXBBclaj1ZTLcB2QPXGaiw,6363 +django/contrib/gis/db/backends/mysql/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/gis/db/backends/mysql/base.py,sha256=rz8tnvXJlY4V6liWxYshuxQE-uTNuKSBogCz_GtXoaY,507 +django/contrib/gis/db/backends/mysql/features.py,sha256=3jtyW-7OWQWCIAgrt0jumq2ceIRuFXlxdYtHHYSkq9w,962 +django/contrib/gis/db/backends/mysql/introspection.py,sha256=iWNgt9pptmf0fSWTGKc4J7xdmpjvjTLfNCtgZQFmf8E,1821 +django/contrib/gis/db/backends/mysql/operations.py,sha256=tcl2uV0jrhgecaatZEYs1izlfWt1IjRoK67IRwXQls4,3847 +django/contrib/gis/db/backends/mysql/schema.py,sha256=I8eJcKXqiyv15ATHLs5qVsHfWDE07lf0_-iaNdGv0ew,2890 +django/contrib/gis/db/backends/oracle/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/gis/db/backends/oracle/adapter.py,sha256=y9ewCXAoQZ4iXCHzf_bsRwSXpCHdK9HJyUZy_1AiA40,1872 +django/contrib/gis/db/backends/oracle/base.py,sha256=NQYlEvE4ioobvMd7u2WC7vMtDiRq_KtilGprD6qfJCo,516 +django/contrib/gis/db/backends/oracle/features.py,sha256=lHjxvF4bQqlv8VQGgXhCNrfnDgbUUm6GwjYeva4HKMc,420 +django/contrib/gis/db/backends/oracle/introspection.py,sha256=0mikP0QbOsM4Fm2hHXU9iWv23ds13UXXcuzgFkhRxDs,1788 +django/contrib/gis/db/backends/oracle/models.py,sha256=pT32f_A1FRYwO5hWMigX7PU_ojpRmIhdUlhOqdz2R9k,2084 +django/contrib/gis/db/backends/oracle/operations.py,sha256=ZkRr8rKawFG4aeIV7Br-YBiS3dTSUrVdObWhhAXhCxk,8311 +django/contrib/gis/db/backends/oracle/schema.py,sha256=wnb56CJ9Er40E4Yw7RK1hOOYZAHRJJFbNGNK9E9IHRk,3916 +django/contrib/gis/db/backends/postgis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/gis/db/backends/postgis/adapter.py,sha256=jDa5X2uIj6qRpgJ8DUfEkWBZETMifyxqDtnkA73kUu8,2117 +django/contrib/gis/db/backends/postgis/base.py,sha256=sFCNoMHRzd-a_MRc9hv-tyVHEODmGveyIopbP6CTPCg,937 +django/contrib/gis/db/backends/postgis/const.py,sha256=He7mVpJrJdbMGjPAgHRXkmm225CuVxVc-viiJSTKOik,1482 +django/contrib/gis/db/backends/postgis/features.py,sha256=iBZqX6o1YBrmw5pSUYeft-ga6FGa05J-9ADFNsRtLgk,422 +django/contrib/gis/db/backends/postgis/introspection.py,sha256=I5Kf14nZKew-NWFAPo-rRkJ85Qg_NDNEEwByEH9xrcA,4388 +django/contrib/gis/db/backends/postgis/models.py,sha256=tKiRZzO6p2YJnPbPXReMlFcAiFij-C_H_6w8FHhLqxk,2000 +django/contrib/gis/db/backends/postgis/operations.py,sha256=_0Khzy9Dap7eQh2Nr7M6FPJJCdaAwvv8C2vZ7C92i6Q,16073 +django/contrib/gis/db/backends/postgis/pgraster.py,sha256=_XKNfncFbEPgeiHCfkZmQv8rjnCNN0r90pa4DZSOW00,4444 +django/contrib/gis/db/backends/postgis/schema.py,sha256=GGK3PSohXwRWhoHaxGBXHnDkZdUSiz8TxOalgdDFcNQ,2676 +django/contrib/gis/db/backends/spatialite/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/gis/db/backends/spatialite/adapter.py,sha256=y74p_UEgLtoYjNZEi72mwcJOh_b-MzJ7sZd68WJXBiY,317 +django/contrib/gis/db/backends/spatialite/base.py,sha256=pg7m0arvmnwOsDJo-Mj9NudCclRMThEhQzDBjQWQLNI,3011 +django/contrib/gis/db/backends/spatialite/client.py,sha256=NsqD2vAnfjqn_FbQnCQeAqbGyZf9oa6gl7EPsMTPf8c,138 +django/contrib/gis/db/backends/spatialite/features.py,sha256=HeeWFDRGxkgfTQ_ryzEKzRxJPnf5BJVs0ifYs8SEIXU,449 +django/contrib/gis/db/backends/spatialite/introspection.py,sha256=CvQfKqV-pOR7S21XYKLKvnV5pys3F5X2SxI0hPpUqiQ,3054 +django/contrib/gis/db/backends/spatialite/models.py,sha256=iiodcKYWAMIz_xrJagr-1nbiiO2YJY_Q0vt_0uyaD54,1928 +django/contrib/gis/db/backends/spatialite/operations.py,sha256=_nhQw90ZEe7AbZB4ScnwUtkM36X6j5IUau7tZzk2gng,8377 +django/contrib/gis/db/backends/spatialite/schema.py,sha256=WLvCcCOqdTcBmsjaBNt15YwVzE05vXzQVvfGva6q1Xo,6838 +django/contrib/gis/db/models/__init__.py,sha256=BR3kQAefIv4O1NksiVCUShwlSO4OCNoUGan6dCRGIyU,817 +django/contrib/gis/db/models/aggregates.py,sha256=O8ANjyiMG2eA92_efLfecr06UfLHWCxf4id7joCmFHA,2617 +django/contrib/gis/db/models/fields.py,sha256=nH-3mDEaGNf4gNihMF3-D9WvtIleEnFRCl_1lgp0JoM,13683 +django/contrib/gis/db/models/functions.py,sha256=2tW2s_HMHgCbfNf9qPRZPV_poutsQW_ROWwvrdF69KQ,17047 +django/contrib/gis/db/models/lookups.py,sha256=yleGLXa0oLkYrH4QgFV3d5zgzgmCpU2DIi3J_Th2DmQ,10849 +django/contrib/gis/db/models/proxy.py,sha256=uO-35A6mMrritgzfrZvDfEe2w7TX9BsnhYJ7KMjvilI,3163 +django/contrib/gis/db/models/sql/__init__.py,sha256=oYJYL-5DAO-DIcpIQ7Jmeq_cuKapRB83V1KLVIs_5iU,139 +django/contrib/gis/db/models/sql/conversion.py,sha256=gG1mTUWb33YK_Uf1ZJRg5MRhkCTLtgajD3xxi7thODA,2400 +django/contrib/gis/forms/__init__.py,sha256=fREam1OSkDWr9ugUMNZMFn8Y9TufpRCn3Glj14DTMbQ,298 +django/contrib/gis/forms/fields.py,sha256=hlOZOkuKR2Q8wcl-3u5h6S6CUYBTtYQheeOtaVGiPBg,4460 +django/contrib/gis/forms/widgets.py,sha256=J8EMJkmHrGkZVqf6ktIwZbO8lYmg63CJQbUYILVsVNc,3739 +django/contrib/gis/gdal/LICENSE,sha256=VwoEWoNyts1qAOMOuv6OPo38Cn_j1O8sxfFtQZ62Ous,1526 +django/contrib/gis/gdal/__init__.py,sha256=Zs9bOGm9RStYhhlWCnqRNChJG4K_oWDPRXYylplur1Q,1760 +django/contrib/gis/gdal/base.py,sha256=yymyL0vZRMBfiFUzrehvaeaunIxMH5ucGjPRfKj-rAo,181 +django/contrib/gis/gdal/datasource.py,sha256=_bezml3LzZHdVe21Xp8NAkn6MAEKjmqhbiQTlIOQq4E,4492 +django/contrib/gis/gdal/driver.py,sha256=hx4NRCduKMJFXF0GtyfRMPUNLAjoIDVqe_5M2nvzZ7U,3266 +django/contrib/gis/gdal/envelope.py,sha256=lL13BYlaEyxDNkCJCPnFZk13eyRb9pOkOOrAdP16Qtw,6970 +django/contrib/gis/gdal/error.py,sha256=yv9yvtBPjLWRqQHlzglF-gLDW-nR7zF_F5xsej_oBx4,1576 +django/contrib/gis/gdal/feature.py,sha256=D4dewcLE_kjElK2gXmfUOCA1mJk-JbYdouhUOZvAYyQ,3929 +django/contrib/gis/gdal/field.py,sha256=tphx1sKMqYZ-SrDiZ62KtFJphMq93fvB5VIDb0cyffs,6701 +django/contrib/gis/gdal/geometries.py,sha256=b1FG4dhg1tJhETulc2wk517LaXiN3nKeIFyQrd1-7vA,24196 +django/contrib/gis/gdal/geomtype.py,sha256=hCHfxQsecBakIZUDZwEkECdH7dg3CdF4Y_kAFYkW9Og,3071 +django/contrib/gis/gdal/layer.py,sha256=Oy4IWRwup_XNZMK6d8zph8Y8FVEj6-eEVuWJCxI-izc,8538 +django/contrib/gis/gdal/libgdal.py,sha256=TPM8vynXVlCDHLyG00GCE_Fmb4sKNH8I4qrUALVPGbE,3588 +django/contrib/gis/gdal/srs.py,sha256=jJDIApRPMhm6gQNVKmqCzrgufx1MFo44Eu7tk_Elu7k,11540 +django/contrib/gis/gdal/prototypes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/gis/gdal/prototypes/ds.py,sha256=AAu7QnwigZ-3Dme-uHsOySlT1TGvAYSvqF1pZtauMto,4413 +django/contrib/gis/gdal/prototypes/errcheck.py,sha256=81MQSCm3lvq8LYMi7t901Z82X9ChgApD0MC6jh2TKT4,4151 +django/contrib/gis/gdal/prototypes/generation.py,sha256=WmFEbrwQQJpdHd5bBZYYO07bsR_3Sv8ZFQXNjGgffGA,4612 +django/contrib/gis/gdal/prototypes/geom.py,sha256=ELRO7bR8RxO3HIuxtitr06yhsG4DxYTlRsTa6NenTqI,4946 +django/contrib/gis/gdal/prototypes/raster.py,sha256=zPIc-Vahtau1XQTADqxQNtzcAv6LunbhVHkWkMOEWKo,5690 +django/contrib/gis/gdal/prototypes/srs.py,sha256=yzAqWOFjP626Kovwd1HOlJuWcT3kuLCFq_PCVNN7Gaw,3540 +django/contrib/gis/gdal/raster/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/gis/gdal/raster/band.py,sha256=xY3OCQzLIgHTJSYghDdmpV7ZW7aHEW4w_Z5kd4fI9TA,8249 +django/contrib/gis/gdal/raster/base.py,sha256=WLdZNgRlGAT6kyIXz5bBhPbpNY53ImxQkSeVLyv4Ohc,2861 +django/contrib/gis/gdal/raster/const.py,sha256=uPk8859YSREMtiQtXGkVOhISmgsF6gXP7JUfufQDXII,2891 +django/contrib/gis/gdal/raster/source.py,sha256=_rOAFGeuxkm0q9qyfOsX6P80ikwtSkvcy8wQZU-kBaI,16634 +django/contrib/gis/geoip2/__init__.py,sha256=uIUWQyMsbSrYL-oVqFsmhqQkYGrh7pHLIVvIM3W_EG4,822 +django/contrib/gis/geoip2/base.py,sha256=rz8KYyxRuWBBrWIU2OXoQsFm7mj43vHc9VsBkiHi4ZY,9074 +django/contrib/gis/geoip2/resources.py,sha256=YlldCGQe_U-J90znMdAEQ0SxWIkfZvkuD7uSGKHVcG8,748 +django/contrib/gis/geos/LICENSE,sha256=CL8kt1USOK4yUpUkVCWxyuua0PQvni0wPHs1NQJjIEU,1530 +django/contrib/gis/geos/__init__.py,sha256=DXFaljVp6gf-E0XAbfO1JnYjPYSDfGZQ2VLtGYBcUZQ,648 +django/contrib/gis/geos/base.py,sha256=NdlFg5l9akvDp87aqzh9dk0A3ZH2TI3cOq10mmmuHBk,181 +django/contrib/gis/geos/collections.py,sha256=OHpBZoruCk_rySBZ4gpEA2ZWLODFCHwkOyGIn1wxGJc,4162 +django/contrib/gis/geos/coordseq.py,sha256=cMGg3XPm2x3VYjkYys8rojRG7uzMez8FpOr2HD-Jy8Q,6419 +django/contrib/gis/geos/error.py,sha256=r3SNTnwDBI6HtuyL3mQ_iEEeKlOqqqdkHnhNoUkMohw,104 +django/contrib/gis/geos/factory.py,sha256=f6u2m1AtmYYHk_KrIC9fxt7VGsJokJVoSWEx-DkPWx0,961 +django/contrib/gis/geos/geometry.py,sha256=SwpE8Za5-Ii5awX_qeewWNZqKzQqjwElXr8Oh_I-RbQ,25526 +django/contrib/gis/geos/io.py,sha256=Om5DBSlttixUc3WQAGZDhzPdb5JTe82728oImIj_l3k,787 +django/contrib/gis/geos/libgeos.py,sha256=AtMP5GPGgjPPQzgzk8G-fxDFWlhd7e-LWR4idA3dXh8,5127 +django/contrib/gis/geos/linestring.py,sha256=6CctplhRZKi8UvK-B2kJGRZySVsonUJwieQ8S0kxj6U,5935 +django/contrib/gis/geos/mutable_list.py,sha256=8uJ_9r48AlIIDzYaUb_qAD0eYslek9yvAX9ICdCmh5A,10131 +django/contrib/gis/geos/point.py,sha256=Aj6khdIPMMIE-cDeDqiCOQ6SqHpDGdo5NHC8fPoSjdE,4662 +django/contrib/gis/geos/polygon.py,sha256=nAJFsaBXbIM9ZA_gSxVB_3WNXJHwakmhlxN_VzKs4WQ,6664 +django/contrib/gis/geos/prepared.py,sha256=rJf35HOTxPrrk_yA-YR9bQlL_pPDKecuhwZlcww8lxY,1575 +django/contrib/gis/geos/prototypes/__init__.py,sha256=0jfLanLmI1q-3NIpdIZr3EHnMzhPRXMhbCNIHf3glfI,1221 +django/contrib/gis/geos/prototypes/coordseq.py,sha256=Cq7HqMVXt8F-0C1cOfYfkapHY0t5ZNu9v7h7_YLD5mo,2993 +django/contrib/gis/geos/prototypes/errcheck.py,sha256=YTUBFoHU5pZOAamBPgogFymDswgnMr1_KL59sZfInYo,2654 +django/contrib/gis/geos/prototypes/geom.py,sha256=FoWEduMbbWb6_blM2IJOP_WkYCVISLksuXOaFAL_9c8,3565 +django/contrib/gis/geos/prototypes/io.py,sha256=V2SlUEniZGfVnj_9r17XneT7w-OoCUpkL_sumKIhLbU,11229 +django/contrib/gis/geos/prototypes/misc.py,sha256=7Xwk0HG__JtPt6wJD-ieMkD-7KxpnofYrHSk6NEUeJo,1161 +django/contrib/gis/geos/prototypes/predicates.py,sha256=Ya06ir7LZQBSUypB05iv9gpvZowOSLIKa4fhCnhZuYY,1587 +django/contrib/gis/geos/prototypes/prepared.py,sha256=SC7g9_vvsW_ty7LKqlMzJfF9v3EvsJX9-j3kpSeCRfY,1184 +django/contrib/gis/geos/prototypes/threadsafe.py,sha256=Ll_TmpfJhRTmWV5dgKJx_Dh67ay1pa-SdlH558NRPw4,2309 +django/contrib/gis/geos/prototypes/topology.py,sha256=wd0OxkUQiMNioDXpJdRc1h9swsZ2CeOgqMvHxqJFY5s,2256 +django/contrib/gis/locale/af/LC_MESSAGES/django.mo,sha256=TN3GddZjlqXnhK8UKLlMoMIXNw2szzj7BeRjoKjsR5c,470 +django/contrib/gis/locale/af/LC_MESSAGES/django.po,sha256=XPdXaQsZ6yDPxF3jVMEI4bli_5jrEawoO-8DHMk8Q_A,1478 +django/contrib/gis/locale/ar/LC_MESSAGES/django.mo,sha256=q0DhiLoyS8WBktN150bvtusd885p2E7e23VMFAqJPj0,2428 +django/contrib/gis/locale/ar/LC_MESSAGES/django.po,sha256=rnZPCzub0GRmC3FwmfyhATesLcm4yTRNr8jDSvM9wBQ,2639 +django/contrib/gis/locale/ast/LC_MESSAGES/django.mo,sha256=8o0Us4wR14bdv1M5oBeczYC4oW5uKnycWrj1-lMIqV4,850 +django/contrib/gis/locale/ast/LC_MESSAGES/django.po,sha256=0beyFcBkBOUNvPP45iqewTNv2ExvCPvDYwpafCJY5QM,1684 +django/contrib/gis/locale/az/LC_MESSAGES/django.mo,sha256=i52TIQuWn72ykTPYSRfBgqeJ254hhGt8LvBQHtXCWMg,2013 +django/contrib/gis/locale/az/LC_MESSAGES/django.po,sha256=tXdeAVGebIVd-K1c5ANtQaba5ll_ELIseJdpqC3UUCE,2163 +django/contrib/gis/locale/be/LC_MESSAGES/django.mo,sha256=ySlqE1WXTqM5DGsE_fEF5pipbyqj4A10SZgvQlFAyKc,2488 +django/contrib/gis/locale/be/LC_MESSAGES/django.po,sha256=HzR5MKPYfc-xeRnb0oPIi9OLa-iA86_IbbM3Poj8h_k,2651 +django/contrib/gis/locale/bg/LC_MESSAGES/django.mo,sha256=1A5wo7PLz0uWsNMHv_affxjNnBsY3UQNz7zHszu56do,2452 +django/contrib/gis/locale/bg/LC_MESSAGES/django.po,sha256=5Onup09U6w85AFWvjs2QKnYXoMhnnw9u4eUlIa5QoXU,2670 +django/contrib/gis/locale/bn/LC_MESSAGES/django.mo,sha256=7oNsr_vHQfsanyP-o1FG8jZTSBK8jB3eK2fA9AqNOx4,1070 +django/contrib/gis/locale/bn/LC_MESSAGES/django.po,sha256=PTa9EFZdqfznUH7si3Rq3zp1kNkTOnn2HRTEYXQSOdM,1929 +django/contrib/gis/locale/br/LC_MESSAGES/django.mo,sha256=xN8hOvJi_gDlpdC5_lghXuX6yCBYDPfD_SQLjcvq8gU,1614 +django/contrib/gis/locale/br/LC_MESSAGES/django.po,sha256=LQw3Tp_ymJ_x7mJ6g4SOr6aP00bejkjuaxfFFRZnmaQ,2220 +django/contrib/gis/locale/bs/LC_MESSAGES/django.mo,sha256=9EdKtZkY0FX2NlX_q0tIxXD-Di0SNQJZk3jo7cend0A,1308 +django/contrib/gis/locale/bs/LC_MESSAGES/django.po,sha256=eu_qF8dbmlDiRKGNIz80XtIunrF8QIOcy8O28X02GvQ,1905 +django/contrib/gis/locale/ca/LC_MESSAGES/django.mo,sha256=_ghgN_u_2yqPFt8oKksLPQeJxn1dz_o23Z-OAa3xKTQ,2043 +django/contrib/gis/locale/ca/LC_MESSAGES/django.po,sha256=o5dQ-gYO9WPYQf4EFhpl3GLHzu-KU3MDYAn3Y_YVpMs,2313 +django/contrib/gis/locale/cs/LC_MESSAGES/django.mo,sha256=hLXZzjME7I4GXmS0I_3uPZpOZJC8uhsotV8rqJvHDgg,2111 +django/contrib/gis/locale/cs/LC_MESSAGES/django.po,sha256=SEGzJ3E53hCPRKEwV1UM_PLwtn16n3myky88m_QUB2I,2315 +django/contrib/gis/locale/cy/LC_MESSAGES/django.mo,sha256=vUG_wzZaMumPwIlKwuN7GFcS9gnE5rpflxoA_MPM_po,1430 +django/contrib/gis/locale/cy/LC_MESSAGES/django.po,sha256=_QjXT6cySUXrjtHaJ3046z-5PoXkCqtOhvA7MCZsXxk,1900 +django/contrib/gis/locale/da/LC_MESSAGES/django.mo,sha256=qSfQxrORzIWKkcgjsCOOsTGhr8qU7DhqbWRxbQzkGXI,1934 +django/contrib/gis/locale/da/LC_MESSAGES/django.po,sha256=5vF_PjA29rtkd3WaIcwT4w0_69hqSN-1GFhKVtoAHh0,2176 +django/contrib/gis/locale/de/LC_MESSAGES/django.mo,sha256=mI3SuiIrcN27uvquzq7O9wtKIjaVQjHAesncCgBg8_g,1999 +django/contrib/gis/locale/de/LC_MESSAGES/django.po,sha256=4m3n1PEqvjKftQWz4s_ElJzZuCVzdWGbIKEHoBrhEy4,2151 +django/contrib/gis/locale/dsb/LC_MESSAGES/django.mo,sha256=69wcPviGvpI2TxiSEux2GnUo1tu0CeZgQKBjJZrEeRk,2109 +django/contrib/gis/locale/dsb/LC_MESSAGES/django.po,sha256=koNMmuvSPrHBxNsE0EH4zPcDZeFAyBHR_qQnp3HT80o,2226 +django/contrib/gis/locale/el/LC_MESSAGES/django.mo,sha256=8QAS4MCktYLFsCgcIVflPXePYAWwr6iEZ7K8_axi_5U,2519 +django/contrib/gis/locale/el/LC_MESSAGES/django.po,sha256=6JVoYCUCUznxgQYlOCWJw1Ad6SR3Fa9jlorSCYkiwLw,2886 +django/contrib/gis/locale/en/LC_MESSAGES/django.mo,sha256=U0OV81NfbuNL9ctF-gbGUG5al1StqN-daB-F-gFBFC8,356 +django/contrib/gis/locale/en/LC_MESSAGES/django.po,sha256=xQNCkGkE6LwUS33QmgHTaLg0TQNbO9IPElF6RkYrY9c,2223 +django/contrib/gis/locale/en_AU/LC_MESSAGES/django.mo,sha256=IPn5kRqOvv5S7jpbIUw8PEUkHlyjEL-4GuOANd1iAzI,486 +django/contrib/gis/locale/en_AU/LC_MESSAGES/django.po,sha256=x_58HmrHRia2LoYhmmN_NLb1J3f7oTDvwumgTo0LowI,1494 +django/contrib/gis/locale/en_GB/LC_MESSAGES/django.mo,sha256=WkORQDOsFuV2bI7hwVsJr_JTWnDQ8ZaK-VYugqnLv3w,1369 +django/contrib/gis/locale/en_GB/LC_MESSAGES/django.po,sha256=KWPMoX-X-gQhb47zoVsa79-16-SiCGpO0s4xkcGv9z0,1910 +django/contrib/gis/locale/eo/LC_MESSAGES/django.mo,sha256=qls9V1jybymGCdsutcjP6fT5oMaI-GXnt_oNfwq-Yhs,1960 +django/contrib/gis/locale/eo/LC_MESSAGES/django.po,sha256=WPSkCxwq3ZnR-_L-W-CnS0_Qne3ekX7ZAZVaubiWw5s,2155 +django/contrib/gis/locale/es/LC_MESSAGES/django.mo,sha256=l88snQomLTK7JQQ5MGdUWGf_6MqiyZWqnCuZPAMctoQ,2056 +django/contrib/gis/locale/es/LC_MESSAGES/django.po,sha256=e4YW5wz0R2oI8VmEZGgMsLVycbmv3ILDjetpjS8ZXl4,2423 +django/contrib/gis/locale/es_AR/LC_MESSAGES/django.mo,sha256=-SlY9HeeMlg87yZM-mtG-drnsT_jncUOeoY4PPHkjrk,2069 +django/contrib/gis/locale/es_AR/LC_MESSAGES/django.po,sha256=XfXzSvB-x2nMclRwxMDWhPqw8vQMRtWVr4SyvD1XFn8,2219 +django/contrib/gis/locale/es_CO/LC_MESSAGES/django.mo,sha256=P79E99bXjthakFYr1BMobTKqJN9S1aj3vfzMTbGRhCY,1865 +django/contrib/gis/locale/es_CO/LC_MESSAGES/django.po,sha256=tyu8_dFA9JKeQ2VCpCUy_6yX97SPJcDwVqqAuf_xgks,2347 +django/contrib/gis/locale/es_MX/LC_MESSAGES/django.mo,sha256=bC-uMgJXdbKHQ-w7ez-6vh9E_2YSgCF_LkOQlvb60BU,1441 +django/contrib/gis/locale/es_MX/LC_MESSAGES/django.po,sha256=MYO9fGclp_VvLG5tXDjXY3J_1FXI4lDv23rGElXAyjA,1928 +django/contrib/gis/locale/es_VE/LC_MESSAGES/django.mo,sha256=5YVIO9AOtmjky90DAXVyU0YltfQ4NLEpVYRTTk7SZ5o,486 +django/contrib/gis/locale/es_VE/LC_MESSAGES/django.po,sha256=R8suLsdDnSUEKNlXzow3O6WIT5NcboZoCjir9GfSTSQ,1494 +django/contrib/gis/locale/et/LC_MESSAGES/django.mo,sha256=RuQYV9MWvWzcX0lI4ot2cY2_49yJPOqeExNx05MpeFg,1961 +django/contrib/gis/locale/et/LC_MESSAGES/django.po,sha256=4yl0Zfmt0mOSJluCw97oJdiWmf3x84a3qtSQDsUZYv8,2239 +django/contrib/gis/locale/eu/LC_MESSAGES/django.mo,sha256=EChDnXv1Tgk0JvMp3RuDsk-0LkgZ2Xig8nckmikewLA,1973 +django/contrib/gis/locale/eu/LC_MESSAGES/django.po,sha256=sj_W9oCmbYENT-zGnTNtAT-ZsI3z7IOhgUxooQNFbpc,2191 +django/contrib/gis/locale/fa/LC_MESSAGES/django.mo,sha256=40t0F0vpKKPy9NW7OMuY-UnbkOI9ifM33A0CZG8i2dg,2281 +django/contrib/gis/locale/fa/LC_MESSAGES/django.po,sha256=cw9rOxFowluGpekFPAoaPvjAxwUOcXi4szNnCAvsBbI,2589 +django/contrib/gis/locale/fi/LC_MESSAGES/django.mo,sha256=L_1vFA-I0vQddIdLpNyATweN04E5cRw-4Xr81D67Q_c,1946 +django/contrib/gis/locale/fi/LC_MESSAGES/django.po,sha256=WSrldLannVh0Vnmm18X5FwHoieLQYXz0CoF2SY52w0M,2127 +django/contrib/gis/locale/fr/LC_MESSAGES/django.mo,sha256=asAhstLR7EmVyuijAii40LOtdcsapHaChkfIvhlsdrQ,2082 +django/contrib/gis/locale/fr/LC_MESSAGES/django.po,sha256=GvRJJNZL55BRARg2TozwQjRprLUNMQxtzfB94Qs0Ye8,2290 +django/contrib/gis/locale/fy/LC_MESSAGES/django.mo,sha256=2kCnWU_giddm3bAHMgDy0QqNwOb9qOiEyCEaYo1WdqQ,476 +django/contrib/gis/locale/fy/LC_MESSAGES/django.po,sha256=7ncWhxC5OLhXslQYv5unWurhyyu_vRsi4bGflZ6T2oQ,1484 +django/contrib/gis/locale/ga/LC_MESSAGES/django.mo,sha256=m6Owcr-5pln54TXcZFAkYEYDjYiAkT8bGFyw4nowNHA,1420 +django/contrib/gis/locale/ga/LC_MESSAGES/django.po,sha256=I0kyTnYBPSdYr8RontzhGPShJhylVAdRLBGWRQr2E7g,1968 +django/contrib/gis/locale/gd/LC_MESSAGES/django.mo,sha256=GR9860LI6qrGdaqUYG8GskC_EeGHBetVojk0TSTIIO8,2142 +django/contrib/gis/locale/gd/LC_MESSAGES/django.po,sha256=l9fNaI3A5mmULDsg-D-cc-hhlGOYlP4JrxJJn4YU4hM,2260 +django/contrib/gis/locale/gl/LC_MESSAGES/django.mo,sha256=4OUuNpkYRWjKz_EoY1zDzKOK8YptrwUutQqFvSKsLUs,1421 +django/contrib/gis/locale/gl/LC_MESSAGES/django.po,sha256=s9tiYQLnv1_uzyLpi3qqV_zwJNic1AGFsUGc3FhJbMo,2006 +django/contrib/gis/locale/he/LC_MESSAGES/django.mo,sha256=CxVl9Ny_dasVLNhXxJwBOxIVdmpR6m-MuIF6V_Si9RE,2236 +django/contrib/gis/locale/he/LC_MESSAGES/django.po,sha256=XyDF1lnHjUW6rId5dW0-zBt336rkXjR8-bUOzW2nJCM,2393 +django/contrib/gis/locale/hi/LC_MESSAGES/django.mo,sha256=3nsy5mxKTPtx0EpqBNA_TJXmLmVZ4BPUZG72ZEe8OPM,1818 +django/contrib/gis/locale/hi/LC_MESSAGES/django.po,sha256=jTFG2gqqYAQct9-to0xL2kUFQu-ebR4j7RGfxn4sBAg,2372 +django/contrib/gis/locale/hr/LC_MESSAGES/django.mo,sha256=0XrRj2oriNZxNhEwTryo2zdMf-85-4X7fy7OJhB5ub4,1549 +django/contrib/gis/locale/hr/LC_MESSAGES/django.po,sha256=iijzoBoD_EJ1n-a5ys5CKnjzZzG299zPoCN-REFkeqE,2132 +django/contrib/gis/locale/hsb/LC_MESSAGES/django.mo,sha256=W3LtmsG61dOj4oNOEDuZC4iOco8jbFkrBUhhW1rxXVE,2083 +django/contrib/gis/locale/hsb/LC_MESSAGES/django.po,sha256=WmUI-Hqp2yLFJNYKU7-ko7bJY25pcPqPblu0rkSDKVk,2203 +django/contrib/gis/locale/hu/LC_MESSAGES/django.mo,sha256=Gbu1WlCo21lsqVrfAJHD0SsrQ4RxQ5Wsqhp9sJuHmEA,1941 +django/contrib/gis/locale/hu/LC_MESSAGES/django.po,sha256=dJCoSLIugFyOoPuewWcquN_UCqJG3gYZzb1IiO_2r5Y,2173 +django/contrib/gis/locale/hy/LC_MESSAGES/django.mo,sha256=4D6em091yzO4s3U_DIdocdlvxtAbXdMt6Ig1ATxRGrQ,2535 +django/contrib/gis/locale/hy/LC_MESSAGES/django.po,sha256=0nkAba1H7qrC5JSakzJuAqsldWPG7lsjH7H8jVfG1SU,2603 +django/contrib/gis/locale/ia/LC_MESSAGES/django.mo,sha256=9MZnSXkQUIfbYB2f4XEtYo_FzuVi5OlsYcX9K_REz3c,1899 +django/contrib/gis/locale/ia/LC_MESSAGES/django.po,sha256=f7OuqSzGHQNldBHp62VIWjqP0BB0bvo8qEx9_wzH090,2116 +django/contrib/gis/locale/id/LC_MESSAGES/django.mo,sha256=vkdSqp0U3LhTfejwHLhnwjQ4OFFN0GVKrquxTWgLIh0,1983 +django/contrib/gis/locale/id/LC_MESSAGES/django.po,sha256=Zz3Yd6id4X3rfjqiYt_CmyPpLYnFY1fuTUKRnZnDMdA,2322 +django/contrib/gis/locale/io/LC_MESSAGES/django.mo,sha256=_yUgF2fBUxVAZAPNw2ROyWly5-Bq0niGdNEzo2qbp8k,464 +django/contrib/gis/locale/io/LC_MESSAGES/django.po,sha256=fgGJ1xzliMK0MlVoV9CQn_BuuS3Kl71Kh5YEybGFS0Y,1472 +django/contrib/gis/locale/is/LC_MESSAGES/django.mo,sha256=CBNZj4uA2niVY5uA7MKHu21Ou8d3wp_EJCWC8w3Y0JY,1317 +django/contrib/gis/locale/is/LC_MESSAGES/django.po,sha256=SUst5hGJO9veiC6SWB0oLEHzMXNqxMG8l8oLpoTQFt0,1865 +django/contrib/gis/locale/it/LC_MESSAGES/django.mo,sha256=px9x5hMusGf2LB2Vz9AijSpeppg3gUCI0dHfBb_F44A,2009 +django/contrib/gis/locale/it/LC_MESSAGES/django.po,sha256=RZRPvW8eAvd0-KnEQ0lPz0gSPmvq1um0rsEgmoIQMsU,2309 +django/contrib/gis/locale/ja/LC_MESSAGES/django.mo,sha256=knTOfVviVceaAEp9xeh4WUE-ro2lkUIUTtkA-9yk3Bs,2124 +django/contrib/gis/locale/ja/LC_MESSAGES/django.po,sha256=mqD9ZpqXvAL7adXVWyVlIyD7meIcyXI6RXqRQD5cRm8,2287 +django/contrib/gis/locale/ka/LC_MESSAGES/django.mo,sha256=iqWQ9j8yanPjDhwi9cNSktYgfLVnofIsdICnAg2Y_to,1991 +django/contrib/gis/locale/ka/LC_MESSAGES/django.po,sha256=tWoXkbWfNsZ2A28_JUvc1wtyVT6m7Hl9nJgfxXGqkgY,2566 +django/contrib/gis/locale/kk/LC_MESSAGES/django.mo,sha256=NtgQONp0UncUNvrh0W2R7u7Ja8H33R-a-tsQShWq-QI,1349 +django/contrib/gis/locale/kk/LC_MESSAGES/django.po,sha256=_wNvDk36C_UegH0Ex6ov8P--cKm-J7XtusXYsjVVZno,1974 +django/contrib/gis/locale/km/LC_MESSAGES/django.mo,sha256=T0aZIZ_gHqHpQyejnBeX40jdcfhrCOjgKjNm2hLrpNE,459 +django/contrib/gis/locale/km/LC_MESSAGES/django.po,sha256=7ARjFcuPQJG0OGLJu9pVfSiAwc2Q-1tT6xcLeKeom1c,1467 +django/contrib/gis/locale/kn/LC_MESSAGES/django.mo,sha256=EkJRlJJSHZJvNZJuOLpO4IIUEoyi_fpKwNWe0OGFcy4,461 +django/contrib/gis/locale/kn/LC_MESSAGES/django.po,sha256=NM3FRy48SSVsUIQc8xh0ZKAgTVAP8iK8elp7NQ6-IdE,1469 +django/contrib/gis/locale/ko/LC_MESSAGES/django.mo,sha256=7SSr6cP3b0vM5z224tJIqmwwWWHGoU0al4LNGbwxtQM,1975 +django/contrib/gis/locale/ko/LC_MESSAGES/django.po,sha256=aXVjYftxj1FONeotkCZkAoQxCCFs5cYb4ceGPSnUScA,2299 +django/contrib/gis/locale/lb/LC_MESSAGES/django.mo,sha256=XAyZQUi8jDr47VpSAHp_8nQb0KvSMJHo5THojsToFdk,474 +django/contrib/gis/locale/lb/LC_MESSAGES/django.po,sha256=5rfudPpH4snSq2iVm9E81EBwM0S2vbkY2WBGhpuga1Q,1482 +django/contrib/gis/locale/lt/LC_MESSAGES/django.mo,sha256=9I8bq0gbDGv7wBe60z3QtWZ5x_NgALjCTvR6rBtPPBY,2113 +django/contrib/gis/locale/lt/LC_MESSAGES/django.po,sha256=jD2vv47dySaH1nVzzf7mZYKM5vmofhmaKXFp4GvX1Iw,2350 +django/contrib/gis/locale/lv/LC_MESSAGES/django.mo,sha256=vE7Ygn4CAsS7tQkrPb8kGVEchTioQxtZTxatJZXVL5k,2057 +django/contrib/gis/locale/lv/LC_MESSAGES/django.po,sha256=6qKFeIFtMexJFuz3TSxGL9vkKYmz_lCr9pDfLPTLzYw,2200 +django/contrib/gis/locale/mk/LC_MESSAGES/django.mo,sha256=PVw73LWWNvaNd95zQbAIA7LA7JNmpf61YIoyuOca2_s,2620 +django/contrib/gis/locale/mk/LC_MESSAGES/django.po,sha256=eusHVHXHRfdw1_JyuBW7H7WPCHFR_z1NBqr79AVqAk0,2927 +django/contrib/gis/locale/ml/LC_MESSAGES/django.mo,sha256=Kl9okrE3AzTPa5WQ-IGxYVNSRo2y_VEdgDcOyJ_Je78,2049 +django/contrib/gis/locale/ml/LC_MESSAGES/django.po,sha256=PWg8atPKfOsnVxg_uro8zYO9KCE1UVhfy_zmCWG0Bdk,2603 +django/contrib/gis/locale/mn/LC_MESSAGES/django.mo,sha256=-Nn70s2On94C-jmSZwTppW2q7_W5xgMpzPXYmxZSKXs,2433 +django/contrib/gis/locale/mn/LC_MESSAGES/django.po,sha256=I0ZHocPlRYrogJtzEGVPsWWHpoVEa7e2KYP9Ystlj60,2770 +django/contrib/gis/locale/mr/LC_MESSAGES/django.mo,sha256=sO2E__g61S0p5I6aEwnoAsA3epxv7_Jn55TyF0PZCUA,468 +django/contrib/gis/locale/mr/LC_MESSAGES/django.po,sha256=McWaLXfWmYTDeeDbIOrV80gwnv07KCtNIt0OXW_v7vw,1476 +django/contrib/gis/locale/my/LC_MESSAGES/django.mo,sha256=e6G8VbCCthUjV6tV6PRCy_ZzsXyZ-1OYjbYZIEShbXI,525 +django/contrib/gis/locale/my/LC_MESSAGES/django.po,sha256=R3v1S-904f8FWSVGHe822sWrOJI6cNJIk93-K7_E_1c,1580 +django/contrib/gis/locale/nb/LC_MESSAGES/django.mo,sha256=AmVS8gbKlqYHpr-v2UdOuYt17wO2WMhVJzfDWX6Tl78,1930 +django/contrib/gis/locale/nb/LC_MESSAGES/django.po,sha256=psdNBDn8IvOyAChU7NqUKIOIssUocfQKSsXnt-89fd8,2146 +django/contrib/gis/locale/ne/LC_MESSAGES/django.mo,sha256=nB-Ta8w57S6hIAhAdWZjDT0Dg6JYGbAt5FofIhJT7k8,982 +django/contrib/gis/locale/ne/LC_MESSAGES/django.po,sha256=eMH6uKZZZYn-P3kmHumiO4z9M4923s9tWGhHuJ0eWuI,1825 +django/contrib/gis/locale/nl/LC_MESSAGES/django.mo,sha256=B7fMIikRS41Rc9CiPKDVZt63apUo2uB-myFDjAJinik,1985 +django/contrib/gis/locale/nl/LC_MESSAGES/django.po,sha256=Ugo-99yB6YImfVcfbvYTxtChNcC_bRtNbIrjAnnfxnU,2378 +django/contrib/gis/locale/nn/LC_MESSAGES/django.mo,sha256=32x5_V6o_BQBefFmyajOg3ssClw-DMEdvzXkY90fV3Q,1202 +django/contrib/gis/locale/nn/LC_MESSAGES/django.po,sha256=NWA3nD8ZwAZxG9EkE6TW0POJgB6HTeC4J6GOlTMD7j4,1796 +django/contrib/gis/locale/os/LC_MESSAGES/django.mo,sha256=02NpGC8WPjxmPqQkfv9Kj2JbtECdQCtgecf_Tjk1CZc,1594 +django/contrib/gis/locale/os/LC_MESSAGES/django.po,sha256=JBIsv5nJg3Wof7Xy7odCI_xKRBLN_Hlbb__kNqNW4Xw,2161 +django/contrib/gis/locale/pa/LC_MESSAGES/django.mo,sha256=JR1NxG5_h_dFE_7p6trBWWIx-QqWYIgfGomnjaCsWAA,1265 +django/contrib/gis/locale/pa/LC_MESSAGES/django.po,sha256=Ejd_8dq_M0E9XFijk0qj4oC-8_oe48GWWHXhvOrFlnY,1993 +django/contrib/gis/locale/pl/LC_MESSAGES/django.mo,sha256=aLv23YOFYR22AY3BLP5xcDHKTqc_GVjm_FZdTNr0-Jk,2138 +django/contrib/gis/locale/pl/LC_MESSAGES/django.po,sha256=uEQ59IxEJATHQOsZcvNRdR8kd-Iv7PRTHw3dR68GID8,2497 +django/contrib/gis/locale/pt/LC_MESSAGES/django.mo,sha256=sE5PPOHzfT8QQXuV5w0m2pnBTRhKYs_vFhk8p_A4Jg0,2036 +django/contrib/gis/locale/pt/LC_MESSAGES/django.po,sha256=TFt6Oj1NlCM3pgs2dIgFZR3S3y_g7oR7S-XRBlM4924,2443 +django/contrib/gis/locale/pt_BR/LC_MESSAGES/django.mo,sha256=hsj4npR8H05FKM0fiQf83kSip7a8871_AQUY5dyAqj8,2011 +django/contrib/gis/locale/pt_BR/LC_MESSAGES/django.po,sha256=NLnhgZjJxx0EUy4s_8sqQFSWOa0or0CiEjUoPlTH4pc,2311 +django/contrib/gis/locale/ro/LC_MESSAGES/django.mo,sha256=YSbX0Y_T44pBLpKmaVN7leNXBDwHZB4EWQaU9Go3szM,2047 +django/contrib/gis/locale/ro/LC_MESSAGES/django.po,sha256=QBwAO5P2FYzCSoXF52MSEtncAAimw9YQKO8HvCPbF5U,2260 +django/contrib/gis/locale/ru/LC_MESSAGES/django.mo,sha256=5uccCKKgLtin1jcp_1j4aiv5FEzX6LxRNEL3i11m7ts,2583 +django/contrib/gis/locale/ru/LC_MESSAGES/django.po,sha256=Pvs1ADP2MtalAHAZ04cpQeQPXsKBCVeggPW8GP-nsPQ,2862 +django/contrib/gis/locale/sk/LC_MESSAGES/django.mo,sha256=_LWDbFebq9jEa1YYsSMOruTk0oRaU9sxPGml1YPuink,2010 +django/contrib/gis/locale/sk/LC_MESSAGES/django.po,sha256=Iz_iHKaDzNhLM5vJd3bbzsCXzKhoEGeqECZxEgBIiGc,2244 +django/contrib/gis/locale/sl/LC_MESSAGES/django.mo,sha256=9-efMT2MoEMa5-SApGWTRiyfvI6vmZzLeMg7qGAr7_A,2067 +django/contrib/gis/locale/sl/LC_MESSAGES/django.po,sha256=foZY7N5QkuAQS7nc3CdnJerCPk-lhSb1xZqU11pNGNo,2303 +django/contrib/gis/locale/sq/LC_MESSAGES/django.mo,sha256=LVdXsubPRVA-1-VeEJEWoGoAWR9kK072boRKaqzyb28,1918 +django/contrib/gis/locale/sq/LC_MESSAGES/django.po,sha256=PFeGnVwfzGcFRm2SCV8-iB5z9TVwyN66qz5X9NClQkQ,2148 +django/contrib/gis/locale/sr/LC_MESSAGES/django.mo,sha256=J20yLH-sD2a2KGFqN3GDdJPISOS7YMe9K6UR9ZXlbl4,2442 +django/contrib/gis/locale/sr/LC_MESSAGES/django.po,sha256=cw89jyImmFqspzFVcnkncUNYAH_j3ozId-Ou2lc0L6U,2682 +django/contrib/gis/locale/sr_Latn/LC_MESSAGES/django.mo,sha256=f_vDMwcdrbaW6ZynN9QZNYB-4TNbZyp4y5UYKCJB7yM,1971 +django/contrib/gis/locale/sr_Latn/LC_MESSAGES/django.po,sha256=7HvQAUkA1RLQOUWab-NBSunUNde4V0_nHd_Z4UMMCZc,2225 +django/contrib/gis/locale/sv/LC_MESSAGES/django.mo,sha256=XVr0uSQnEIRNJoOpgFlxvYnpF4cGDP2K2oTjqVHhmuA,1987 +django/contrib/gis/locale/sv/LC_MESSAGES/django.po,sha256=fqUAyUbjamnqbdie8Ecek0v99uo-4uUfaSvtFffz8v4,2275 +django/contrib/gis/locale/sw/LC_MESSAGES/django.mo,sha256=uBhpGHluGwYpODTE-xhdJD2e6PHleN07wLE-kjrXr_M,1426 +django/contrib/gis/locale/sw/LC_MESSAGES/django.po,sha256=nHXQQMYYXT1ec3lIBxQIDIAwLtXucX47M4Cozy08kko,1889 +django/contrib/gis/locale/ta/LC_MESSAGES/django.mo,sha256=Rboo36cGKwTebe_MiW4bOiMsRO2isB0EAyJJcoy_F6s,466 +django/contrib/gis/locale/ta/LC_MESSAGES/django.po,sha256=sLYW8_5BSVoSLWUr13BbKRe0hNJ_cBMEtmjCPBdTlAk,1474 +django/contrib/gis/locale/te/LC_MESSAGES/django.mo,sha256=xDkaSztnzQ33Oc-GxHoSuutSIwK9A5Bg3qXEdEvo4h4,824 +django/contrib/gis/locale/te/LC_MESSAGES/django.po,sha256=nYryhktJumcwtZDGZ43xBxWljvdd-cUeBrAYFZOryVg,1772 +django/contrib/gis/locale/th/LC_MESSAGES/django.mo,sha256=0kekAr7eXc_papwPAxEZ3TxHOBg6EPzdR3q4hmAxOjg,1835 +django/contrib/gis/locale/th/LC_MESSAGES/django.po,sha256=WJPdoZjLfvepGGMhfBB1EHCpxtxxfv80lRjPG9kGErM,2433 +django/contrib/gis/locale/tr/LC_MESSAGES/django.mo,sha256=cWFAsuse0yQPdsVGAxFbPOBDxLapMnvMsa50-4-gGYk,2024 +django/contrib/gis/locale/tr/LC_MESSAGES/django.po,sha256=Vqsqw1yPPdZqd5unj76FQAbuQrxKKnxtpQS_33nBGRQ,2259 +django/contrib/gis/locale/tt/LC_MESSAGES/django.mo,sha256=cGVPrWCe4WquVV77CacaJwgLSnJN0oEAepTzNMD-OWk,1470 +django/contrib/gis/locale/tt/LC_MESSAGES/django.po,sha256=98yeRs-JcMGTyizOpEuQenlnWJMYTR1-rG3HGhKCykk,2072 +django/contrib/gis/locale/udm/LC_MESSAGES/django.mo,sha256=I6bfLvRfMn79DO6bVIGfYSVeZY54N6c8BNO7OyyOOsw,462 +django/contrib/gis/locale/udm/LC_MESSAGES/django.po,sha256=B1PCuPYtNOrrhu4fKKJgkqxUrcEyifS2Y3kw-iTmSIk,1470 +django/contrib/gis/locale/uk/LC_MESSAGES/django.mo,sha256=5uJgGDDQi8RTRNxbQToKE7FVLOK73w5Wgmf6zCa66Uk,2455 +django/contrib/gis/locale/uk/LC_MESSAGES/django.po,sha256=fsxwSb93uD59ms8jdO84qx8C5rKy74TDcH12yaKs8mY,2873 +django/contrib/gis/locale/ur/LC_MESSAGES/django.mo,sha256=tB5tz7EscuE9IksBofNuyFjk89-h5X7sJhCKlIho5SY,1410 +django/contrib/gis/locale/ur/LC_MESSAGES/django.po,sha256=16m0t10Syv76UcI7y-EXfQHETePmrWX4QMVfyeuX1fQ,2007 +django/contrib/gis/locale/vi/LC_MESSAGES/django.mo,sha256=NT5T0FRCC2XINdtaCFCVUxb5VRv8ta62nE8wwSHGTrc,1384 +django/contrib/gis/locale/vi/LC_MESSAGES/django.po,sha256=y77GtqH5bv1wR78xN5JLHusmQzoENTH9kLf9Y3xz5xk,1957 +django/contrib/gis/locale/zh_Hans/LC_MESSAGES/django.mo,sha256=Z5u0aytpFDh02hxQTLKyjiBjSd-_cF8DwPOIXvTsPiQ,1852 +django/contrib/gis/locale/zh_Hans/LC_MESSAGES/django.po,sha256=CaxyL1PxYEYyLBx3w2XOLYgLfeeL6R6Xv6qJ-x7LkAE,2246 +django/contrib/gis/locale/zh_Hant/LC_MESSAGES/django.mo,sha256=SRSpoSMtx8PDTpHroMUymZ_-Eu7zzjqPDBiAm3XSV2I,2012 +django/contrib/gis/locale/zh_Hant/LC_MESSAGES/django.po,sha256=b6NQK1--AC67NiUaOew_ajDIj5uSrPzW_rUpLU71yA8,2277 +django/contrib/gis/management/commands/inspectdb.py,sha256=Z2Do56mM2tBvnujnCk5C7JhI3z_LQWB4L0M626hmumk,750 +django/contrib/gis/management/commands/ogrinspect.py,sha256=s07ShXnLoDDhtvzgu1VeRzlxk_o6-RcFflzsbjKZCFk,5720 +django/contrib/gis/serializers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/gis/serializers/geojson.py,sha256=IWR-98IYQXvJSJ4y3d09kh3ZxuFZuEKg-T9eAig5GEA,2710 +django/contrib/gis/sitemaps/__init__.py,sha256=eVHUxfzw1VQn6bqH3D8bE471s8bNJSB3phuAI-zg9gA,138 +django/contrib/gis/sitemaps/kml.py,sha256=kbKyIt-_u7zZJB8uPG4Cfi7axA5ms2ltdonctm5zewA,2413 +django/contrib/gis/sitemaps/views.py,sha256=4xrd2NEQjsPx9582Pa0R2IEzx5NpP5unqCUsPjURgto,2313 +django/contrib/gis/static/gis/css/ol3.css,sha256=pJADzfx4_NL2C1onFpU-muconAA5NThN4sEqSNyY_So,657 +django/contrib/gis/static/gis/img/draw_line_off.svg,sha256=6XW83xsR5-Guh27UH3y5UFn9y9FB9T_Zc4kSPA-xSOI,918 +django/contrib/gis/static/gis/img/draw_line_on.svg,sha256=Hx-pXu4ped11esG6YjXP1GfZC5q84zrFQDPUo1C7FGA,892 +django/contrib/gis/static/gis/img/draw_point_off.svg,sha256=PICrywZPwuBkaQAKxR9nBJ0AlfTzPHtVn_up_rSiHH4,803 +django/contrib/gis/static/gis/img/draw_point_on.svg,sha256=raGk3oc8w87rJfLdtZ4nIXJyU3OChCcTd4oH-XAMmmM,803 +django/contrib/gis/static/gis/img/draw_polygon_off.svg,sha256=gnVmjeZE2jOvjfyx7mhazMDBXJ6KtSDrV9f0nSzkv3A,981 +django/contrib/gis/static/gis/img/draw_polygon_on.svg,sha256=ybJ9Ww7-bsojKQJtjErLd2cCOgrIzyqgIR9QNhH_ZfA,982 +django/contrib/gis/static/gis/js/OLMapWidget.js,sha256=MxTkvtZiu0Ea55FniH-0WyqoySKdrBNkZdmj8DFoeWY,8930 +django/contrib/gis/templates/gis/openlayers-osm.html,sha256=TeiUqCjt73W8Hgrp_6zAtk_ZMBxskNN6KHSmnJ1-GD4,378 +django/contrib/gis/templates/gis/openlayers.html,sha256=P_sBibtZ8ybiBG6dtYbVhRgDYJE-oKYPzl452xad5Ok,1912 +django/contrib/gis/templates/gis/admin/openlayers.html,sha256=GsjT4sNA-2iHRe7PJKsBIGDEAa29vGXwFNNACowj1lw,1867 +django/contrib/gis/templates/gis/admin/openlayers.js,sha256=KoT3VUMAez9-5QoT5U6OJXzt3MLxlTrJMMwINjQ_k7M,8975 +django/contrib/gis/templates/gis/admin/osm.html,sha256=yvYyZPmgP64r1JT3eZCDun5ENJaaN3d3wbTdCxIOvSo,111 +django/contrib/gis/templates/gis/admin/osm.js,sha256=0wFRJXKZ2plp7tb0F9fgkMzp4NrKZXcHiMkKDJeHMRw,128 +django/contrib/gis/templates/gis/kml/base.kml,sha256=VYnJaGgFVHRzDjiFjbcgI-jxlUos4B4Z1hx_JeI2ZXU,219 +django/contrib/gis/templates/gis/kml/placemarks.kml,sha256=TEC81sDL9RK2FVeH0aFJTwIzs6_YWcMeGnHkACJV1Uc,360 +django/contrib/gis/utils/__init__.py,sha256=OmngSNhywEjrNKGXysMlq_iFYvx7ycDWojpCqF6JYLo,579 +django/contrib/gis/utils/layermapping.py,sha256=8sZ9RlTKJCLbyJH8Wv1glqKQ2PIdqwG8lj-Xz02PNYI,27292 +django/contrib/gis/utils/ogrinfo.py,sha256=VmbxQ5Ri4zjtTxNymuxJp3t3cAntUC83YBMp9PuMMSU,1934 +django/contrib/gis/utils/ogrinspect.py,sha256=muqcvO6wII7A4z98feixlZaOuVTCUNQsFhISSb3z9ZU,8935 +django/contrib/gis/utils/srs.py,sha256=5D5lPZwFYgZiVaKD7eCkl9vj-pGRB11HEgeNlxUAjfo,2991 +django/contrib/humanize/__init__.py,sha256=88gkwJxqbRpmigRG0Gu3GNQkXGtTNpica4nf3go-_cI,67 +django/contrib/humanize/apps.py,sha256=ODfDrSH8m3y3xYlyIIwm7DZmrNcoYKG2K8l5mU64V7g,194 +django/contrib/humanize/locale/af/LC_MESSAGES/django.mo,sha256=bNLjjeZ3H-KD_pm-wa1_5eLCDOmG2FXgDHVOg5vgL7o,5097 +django/contrib/humanize/locale/af/LC_MESSAGES/django.po,sha256=p3OduzjtTGkwlgDJhPgSm9aXI2sWzORspsPf7_RnWjs,8923 +django/contrib/humanize/locale/ar/LC_MESSAGES/django.mo,sha256=YSyNaNTh2nILzWMH0F61fl7jX0yb4erZhQO1EBo2HiU,7691 +django/contrib/humanize/locale/ar/LC_MESSAGES/django.po,sha256=VAN7tVSYQZfZV5RfTe-wvQOVA9Q1ylLQRrFb9ihMpqs,11035 +django/contrib/humanize/locale/ast/LC_MESSAGES/django.mo,sha256=WvBk8V6g1vgzGqZ_rR-4p7SMh43PFnDnRhIS9HSwdoQ,3468 +django/contrib/humanize/locale/ast/LC_MESSAGES/django.po,sha256=S9lcUf2y5wR8Ufa-Rlz-M73Z3bMo7zji_63cXwtDK2I,5762 +django/contrib/humanize/locale/az/LC_MESSAGES/django.mo,sha256=0AyL47PqJZ63WlE6RjeWswa3vamKTORG4WBxtxkRG0Q,5216 +django/contrib/humanize/locale/az/LC_MESSAGES/django.po,sha256=0KOf2dLEhXbdGVFbghfdw_jNOXyG9SzAMztB0rj2pwg,9131 +django/contrib/humanize/locale/be/LC_MESSAGES/django.mo,sha256=HEtO6H9OxRn6ybMtRjkD6deu7sMA49GY988Nc5r2nNY,6681 +django/contrib/humanize/locale/be/LC_MESSAGES/django.po,sha256=GM21lBORfcLeQMaif6tuxrPd45srvSDvzaThGCdjs7o,9256 +django/contrib/humanize/locale/bg/LC_MESSAGES/django.mo,sha256=1mRaFPsm5ITFyfdFdqdeY-_Om2OYKua5YWSEP192WR8,4645 +django/contrib/humanize/locale/bg/LC_MESSAGES/django.po,sha256=kTyRblfWlBUMxd_czXTOe-39CcX68X6e4DTmYm3V2gc,6684 +django/contrib/humanize/locale/bn/LC_MESSAGES/django.mo,sha256=jbL4ucZxxtexI10jgldtgnDie3I23XR3u-PrMMMqP6U,4026 +django/contrib/humanize/locale/bn/LC_MESSAGES/django.po,sha256=0l4yyy7q3OIWyFk_PW0y883Vw2Pmu48UcnLM9OBxB68,6545 +django/contrib/humanize/locale/br/LC_MESSAGES/django.mo,sha256=V_tPVAyQzVdDwWPNlVGWmlVJjmVZfbh35alkwsFlCNU,5850 +django/contrib/humanize/locale/br/LC_MESSAGES/django.po,sha256=BcAqEV2JpF0hiCQDttIMblp9xbB7zoHsmj7fJFV632k,12245 +django/contrib/humanize/locale/bs/LC_MESSAGES/django.mo,sha256=1-RNRHPgZR_9UyiEn9Djp4mggP3fywKZho45E1nGMjM,1416 +django/contrib/humanize/locale/bs/LC_MESSAGES/django.po,sha256=M017Iu3hyXmINZkhCmn2he-FB8rQ7rXN0KRkWgrp7LI,5498 +django/contrib/humanize/locale/ca/LC_MESSAGES/django.mo,sha256=C_0r2Zqa-i4uGR7pIoPWvCKiCQTpvjtRTFytU9CScOk,3989 +django/contrib/humanize/locale/ca/LC_MESSAGES/django.po,sha256=hZLVccYcRZcagCHD7rzJHsvQ_vlrrjFaWeUH-wseHYE,8931 +django/contrib/humanize/locale/cs/LC_MESSAGES/django.mo,sha256=QdKlbOcOfSGv-TYg3KkYr1Ox4Ct2xXJskWVzPDm3ros,6846 +django/contrib/humanize/locale/cs/LC_MESSAGES/django.po,sha256=tm42tsSZYzY-a_7szHB9yuJYUffQXz4nfEgvEY9vY9w,11579 +django/contrib/humanize/locale/cy/LC_MESSAGES/django.mo,sha256=VjJiaUUhvX9tjOEe6x2Bdp7scvZirVcUsA4-iE2-ElQ,5241 +django/contrib/humanize/locale/cy/LC_MESSAGES/django.po,sha256=sylmceSq-NPvtr_FjklQXoBAfueKu7hrjEpMAsVbQC4,7813 +django/contrib/humanize/locale/da/LC_MESSAGES/django.mo,sha256=39MZAKMl4mfYYhOHWw02oWAF3n-XwPg1nNbOg7OQA38,5339 +django/contrib/humanize/locale/da/LC_MESSAGES/django.po,sha256=AnAvSgks2ph0MS2ZJlYKddKwQTbduEIpHK0kzsNphWM,9151 +django/contrib/humanize/locale/de/LC_MESSAGES/django.mo,sha256=7HZDGVn4FuGS2nNqHLg1RrnmQLB2Ansbri0ysHq-GfM,5418 +django/contrib/humanize/locale/de/LC_MESSAGES/django.po,sha256=wNFP1wO9hDhgyntigfVcHr7ZGao8a2PPgU24j4nl_O8,9184 +django/contrib/humanize/locale/dsb/LC_MESSAGES/django.mo,sha256=w2rgnclJnn1QQjqufly0NjUlP6kS6N8dcGwhbeBLq-w,7036 +django/contrib/humanize/locale/dsb/LC_MESSAGES/django.po,sha256=AAbtZ32HrIeB1SDn3xenPU8pFUL0Fy6D9eYlObt6EdU,11690 +django/contrib/humanize/locale/el/LC_MESSAGES/django.mo,sha256=o-yjhpzyGRbbdMzwUcG_dBP_FMEMZevm7Wz1p4Wd-pg,6740 +django/contrib/humanize/locale/el/LC_MESSAGES/django.po,sha256=UbD5QEw_-JNoNETaOyDfSReirkRsHnlHeSsZF5hOSkI,10658 +django/contrib/humanize/locale/en/LC_MESSAGES/django.mo,sha256=U0OV81NfbuNL9ctF-gbGUG5al1StqN-daB-F-gFBFC8,356 +django/contrib/humanize/locale/en/LC_MESSAGES/django.po,sha256=JJny3qazVIDtswuStyS6ZMV0UR0FUPWDqXVZ8PQRuU4,10689 +django/contrib/humanize/locale/en_AU/LC_MESSAGES/django.mo,sha256=dTndJxA-F1IE_nMUOtf1sRr7Kq2s_8yjgKk6mkWkVu4,486 +django/contrib/humanize/locale/en_AU/LC_MESSAGES/django.po,sha256=dVOlMtk3-d-KrNLM5Rji-Xrk6Y_n801ofjGQvxSu67M,4742 +django/contrib/humanize/locale/en_GB/LC_MESSAGES/django.mo,sha256=mkx192XQM3tt1xYG8EOacMfa-BvgzYCbSsJQsWZGeAo,3461 +django/contrib/humanize/locale/en_GB/LC_MESSAGES/django.po,sha256=MArKzXxY1104jxaq3kvDZs2WzOGYxicfJxFKsLzFavw,5801 +django/contrib/humanize/locale/eo/LC_MESSAGES/django.mo,sha256=b47HphXBi0cax_reCZiD3xIedavRHcH2iRG8pcwqb54,5386 +django/contrib/humanize/locale/eo/LC_MESSAGES/django.po,sha256=oN1YqOZgxKY3L1a1liluhM6X5YA5bawg91mHF_Vfqx8,9095 +django/contrib/humanize/locale/es/LC_MESSAGES/django.mo,sha256=SD1PQS13JgpM7jnvvtKVQYsV6m7IgYdw7cfQ_VW8nag,5440 +django/contrib/humanize/locale/es/LC_MESSAGES/django.po,sha256=MBPPR_43glxHTmNPHy7sdKp5UjeHqe7_GeXkxOy3QGo,9428 +django/contrib/humanize/locale/es_AR/LC_MESSAGES/django.mo,sha256=n6DaVdBRRopeMBZiOhPLCOIqmP5uq9Vq3aqxMXFZZPg,5502 +django/contrib/humanize/locale/es_AR/LC_MESSAGES/django.po,sha256=zk18690pQF6URZmvOISW6OsoRQNiiU5lt_q07929Rko,9360 +django/contrib/humanize/locale/es_CO/LC_MESSAGES/django.mo,sha256=2GhQNtNOjK5mTov5RvnuJFTYbdoGBkDGLxzvJ8Vsrfs,4203 +django/contrib/humanize/locale/es_CO/LC_MESSAGES/django.po,sha256=JBf2fHO8jWi6dFdgZhstKXwyot_qT3iJBixQZc3l330,6326 +django/contrib/humanize/locale/es_MX/LC_MESSAGES/django.mo,sha256=82DL2ztdq10X5RIceshK1nO99DW5628ZIjaN8Xzp9ok,3939 +django/contrib/humanize/locale/es_MX/LC_MESSAGES/django.po,sha256=-O7AQluA5Kce9-bd04GN4tfQKoCxb8Sa7EZR6TZBCdM,6032 +django/contrib/humanize/locale/es_VE/LC_MESSAGES/django.mo,sha256=cJECzKpD99RRIpVFKQW65x0Nvpzrm5Fuhfi-nxOWmkM,942 +django/contrib/humanize/locale/es_VE/LC_MESSAGES/django.po,sha256=tDdYtvRILgeDMgZqKHSebe7Z5ZgI1bZhDdvGVtj_anM,4832 +django/contrib/humanize/locale/et/LC_MESSAGES/django.mo,sha256=uq4MJ63oINTjeiW8dsd-h7F3Mm95Sccho6_JIHAXhrc,4402 +django/contrib/humanize/locale/et/LC_MESSAGES/django.po,sha256=encp47HDhO8aDbDmOMaI8oZPIc5He70l-fyPBDQlWlA,9069 +django/contrib/humanize/locale/eu/LC_MESSAGES/django.mo,sha256=w2TlBudWWTI1M7RYCl_n2UY7U1CBzxIuwXl-7DCVl8o,5287 +django/contrib/humanize/locale/eu/LC_MESSAGES/django.po,sha256=77QrRqIsMuu-6HxHvaifKsPA9OVZR7686WFp26dQFMg,9146 +django/contrib/humanize/locale/fa/LC_MESSAGES/django.mo,sha256=-EfCvMVkX5VqYlXxiX8fLQntzZx8pBjmjtjvIdsaPvU,5808 +django/contrib/humanize/locale/fa/LC_MESSAGES/django.po,sha256=Xxv-FVTrSjbx0JB33F6O1wBzodwkHJpmTEiNssNTeYQ,9775 +django/contrib/humanize/locale/fi/LC_MESSAGES/django.mo,sha256=qlx3w4Y0CNcC5rIrbig_sqCvKAwh_IS-YseoQX3zymc,4177 +django/contrib/humanize/locale/fi/LC_MESSAGES/django.po,sha256=6xTZvvC_VxAyAQpUibJUDu4V2Gdryy8vJc2OviaYNnw,6180 +django/contrib/humanize/locale/fr/LC_MESSAGES/django.mo,sha256=VsUhyAmxhMFWTBqij70UaY9I8qulli2QP_hyoKgNaxM,5502 +django/contrib/humanize/locale/fr/LC_MESSAGES/django.po,sha256=xyn-d8-_ozUhfr25hpuUU5IQhZvtNI0JVDoUYoRzO88,9311 +django/contrib/humanize/locale/fy/LC_MESSAGES/django.mo,sha256=YQQy7wpjBORD9Isd-p0lLzYrUgAqv770_56-vXa0EOc,476 +django/contrib/humanize/locale/fy/LC_MESSAGES/django.po,sha256=pPvcGgBWiZwQ5yh30OlYs-YZUd_XsFro71T9wErVv0M,4732 +django/contrib/humanize/locale/ga/LC_MESSAGES/django.mo,sha256=AOEiBNOak_KQkBeGyUpTNO12zyg3CiK66h4kMoS15_0,5112 +django/contrib/humanize/locale/ga/LC_MESSAGES/django.po,sha256=jTXihbd-ysAUs0TEKkOBmXJJj69V0cFNOHM6VbcPCWw,11639 +django/contrib/humanize/locale/gd/LC_MESSAGES/django.mo,sha256=XNSpJUu4DxtlXryfUVeBOrvl2-WRyj2nKjips_qGDOg,7232 +django/contrib/humanize/locale/gd/LC_MESSAGES/django.po,sha256=I7s86NJDzeMsCGgXja--fTZNFm9bM7Cd8M1bstxabSY,11874 +django/contrib/humanize/locale/gl/LC_MESSAGES/django.mo,sha256=ChoVHsJ_bVIaHtHxhxuUK99Zu1tvRu0iY5vhtB1LDMg,3474 +django/contrib/humanize/locale/gl/LC_MESSAGES/django.po,sha256=U5D505aBKEdg80BGWddcwWuzmYdoNHx1WEPzVHQfbTE,5903 +django/contrib/humanize/locale/he/LC_MESSAGES/django.mo,sha256=zV7tqLeq2al9nSDKcTGp7cDD2pEuHD-J_34roqIYvZc,7857 +django/contrib/humanize/locale/he/LC_MESSAGES/django.po,sha256=gvUe-8PJc6dn-6lLpEi_PCDgITgJ6UzZls9cUHSA4Ss,12605 +django/contrib/humanize/locale/hi/LC_MESSAGES/django.mo,sha256=qrzm-6vXIUsxA7nOxa-210-6iO-3BPBj67vKfhTOPrY,4131 +django/contrib/humanize/locale/hi/LC_MESSAGES/django.po,sha256=BrypbKaQGOyY_Gl1-aHXiBVlRqrbSjGfZ2OK8omj_9M,6527 +django/contrib/humanize/locale/hr/LC_MESSAGES/django.mo,sha256=29XTvFJHex31hbu2qsOfl5kOusz-zls9eqlxtvw_H0s,1274 +django/contrib/humanize/locale/hr/LC_MESSAGES/django.po,sha256=OuEH4fJE6Fk-s0BMqoxxdlUAtndvvKK7N8Iy-9BP3qA,5424 +django/contrib/humanize/locale/hsb/LC_MESSAGES/django.mo,sha256=4ZQDrpkEyLSRtVHEbP31ejNrR6y-LSNDfW1Hhi7VczI,7146 +django/contrib/humanize/locale/hsb/LC_MESSAGES/django.po,sha256=GtSTgK-cKHMYeOYFvHtcUtUnLyWPP05F0ZM3tEYfshs,11800 +django/contrib/humanize/locale/hu/LC_MESSAGES/django.mo,sha256=8tEqiZHEc6YmfWjf7hO0Fb3Xd-HSleKaR1gT_XFTQ8g,5307 +django/contrib/humanize/locale/hu/LC_MESSAGES/django.po,sha256=KDVYBAGSuMrtwqO98-oGOOAp7Unfm7ode1sv8lfe81c,9124 +django/contrib/humanize/locale/hy/LC_MESSAGES/django.mo,sha256=3eLljpKHSE0P2ZPaOiwE8lvctqp5s-ePqrw5Yw7kWYM,1529 +django/contrib/humanize/locale/hy/LC_MESSAGES/django.po,sha256=dJ1cE9AFwses7KX4Qm4PNqNhC9t5sgNQL5PB88cXqY4,7826 +django/contrib/humanize/locale/ia/LC_MESSAGES/django.mo,sha256=d0m-FddFnKp08fQYQSC9Wr6M4THVU7ibt3zkIpx_Y_A,4167 +django/contrib/humanize/locale/ia/LC_MESSAGES/django.po,sha256=qX6fAZyn54hmtTU62oJcHF8p4QcYnoO2ZNczVjvjOeE,6067 +django/contrib/humanize/locale/id/LC_MESSAGES/django.mo,sha256=T5pVIyFQtRdbBxZ5kW15NnsJQV2W0sgb9ltncyORJog,4665 +django/contrib/humanize/locale/id/LC_MESSAGES/django.po,sha256=fQSJprf0UF3FYGA7i_vWbZ7PX5bhH7pJaH1JAWvr9NI,8055 +django/contrib/humanize/locale/io/LC_MESSAGES/django.mo,sha256=nMu5JhIy8Fjie0g5bT8-h42YElCiS00b4h8ej_Ie-w0,464 +django/contrib/humanize/locale/io/LC_MESSAGES/django.po,sha256=RUs8JkpT0toKOLwdv1oCbcBP298EOk02dkdNSJiC-_A,4720 +django/contrib/humanize/locale/is/LC_MESSAGES/django.mo,sha256=D6ElUYj8rODRsZwlJlH0QyBSM44sVmuBCNoEkwPVxko,3805 +django/contrib/humanize/locale/is/LC_MESSAGES/django.po,sha256=1VddvtkhsK_5wmpYIqEFqFOo-NxIBnL9wwW74Tw9pbw,8863 +django/contrib/humanize/locale/it/LC_MESSAGES/django.mo,sha256=E-83rstHy_gscbdEHm_77HqH2IkIJA8ZcqWe_GD4Wco,5981 +django/contrib/humanize/locale/it/LC_MESSAGES/django.po,sha256=0dF-NRmW2fetk5DHkZEmpiZyLQ2JyvFlDs5EXxXMz9s,10049 +django/contrib/humanize/locale/ja/LC_MESSAGES/django.mo,sha256=XYV-llqoZAazu_idchujnUdGpfAa8mZDMUG1xo3CmE4,4840 +django/contrib/humanize/locale/ja/LC_MESSAGES/django.po,sha256=kjCkSQHFZ4jUDc6rxRvPM6OczUVCe1timYSyI0isujI,8144 +django/contrib/humanize/locale/ka/LC_MESSAGES/django.mo,sha256=UeUbonYTkv1d2ljC0Qj8ZHw-59zHu83fuMvnME9Fkmw,4878 +django/contrib/humanize/locale/ka/LC_MESSAGES/django.po,sha256=-eAMexwjm8nSB4ARJU3f811UZnuatHKIFf8FevpJEpo,9875 +django/contrib/humanize/locale/kk/LC_MESSAGES/django.mo,sha256=jujbUM0jOpt3Mw8zN4LSIIkxCJ0ihk_24vR0bXoux78,2113 +django/contrib/humanize/locale/kk/LC_MESSAGES/django.po,sha256=hjZg_NRE9xMA5uEa2mVSv1Hr4rv8inG9es1Yq7uy9Zc,8283 +django/contrib/humanize/locale/km/LC_MESSAGES/django.mo,sha256=mfXs9p8VokORs6JqIfaSSnQshZEhS90rRFhOIHjW7CI,459 +django/contrib/humanize/locale/km/LC_MESSAGES/django.po,sha256=JQBEHtcy-hrV_GVWIjvUJyOf3dZ5jUzzN8DUTAbHKUg,4351 +django/contrib/humanize/locale/kn/LC_MESSAGES/django.mo,sha256=Oq3DIPjgCqkn8VZMb6ael7T8fQ7LnWobPPAZKQSFHl4,461 +django/contrib/humanize/locale/kn/LC_MESSAGES/django.po,sha256=yrXx6TInsxjnyJfhl8sXTLmYedd2jaAku9L_38CKR5A,4353 +django/contrib/humanize/locale/ko/LC_MESSAGES/django.mo,sha256=hDb7IOB8PRflKkZ81yQbgHtvN4TO35o5kWTK3WpiL4A,4817 +django/contrib/humanize/locale/ko/LC_MESSAGES/django.po,sha256=dZpSVF3l5wGTwKOXn0looag7Q23jyLGlzs083kpnqFc,8217 +django/contrib/humanize/locale/lb/LC_MESSAGES/django.mo,sha256=xokesKl7h7k9dXFKIJwGETgwx1Ytq6mk2erBSxkgY-o,474 +django/contrib/humanize/locale/lb/LC_MESSAGES/django.po,sha256=_y0QFS5Kzx6uhwOnzmoHtCrbufMrhaTLsHD0LfMqtcM,4730 +django/contrib/humanize/locale/lt/LC_MESSAGES/django.mo,sha256=9S3Fx2Es10uMIVooheEH3HZaKqXju2gUE-uVLgCEwe8,7374 +django/contrib/humanize/locale/lt/LC_MESSAGES/django.po,sha256=ZnsyLaRbhaSk0zNl6qZkKKlDVWJ6M_a3cIuGqUNVS28,12089 +django/contrib/humanize/locale/lv/LC_MESSAGES/django.mo,sha256=dFrXeAiw976Zi2fWwdPigyo3rieo8yrhN54dYZChIQE,6252 +django/contrib/humanize/locale/lv/LC_MESSAGES/django.po,sha256=24-3dJTQeiqzf3wKAQggC7rZq3q67e9ltCyXhEYSJw4,10575 +django/contrib/humanize/locale/mk/LC_MESSAGES/django.mo,sha256=htUgd6rcaeRPDf6UrEb18onz-Ayltw9LTvWRgEkXm08,4761 +django/contrib/humanize/locale/mk/LC_MESSAGES/django.po,sha256=Wl9Rt8j8WA_0jyxKCswIovSiCQD-ZWFYXbhFsCUKIWo,6665 +django/contrib/humanize/locale/ml/LC_MESSAGES/django.mo,sha256=rJuNYIlbZI6kFOXOamF17prachKeteiFMwv9nfBlptA,4736 +django/contrib/humanize/locale/ml/LC_MESSAGES/django.po,sha256=cMDjSKjpV1faKhC1ozTqpYAlhM4yoKauSCbMfmX8jYw,10131 +django/contrib/humanize/locale/mn/LC_MESSAGES/django.mo,sha256=gi-b-GRPhg2s2O9wP2ENx4bVlgHBo0mSqoi58d_QpCw,6020 +django/contrib/humanize/locale/mn/LC_MESSAGES/django.po,sha256=0zV7fYPu6xs_DVOCUQ6li36JWOnpc-RQa0HXwo7FrWc,9797 +django/contrib/humanize/locale/mr/LC_MESSAGES/django.mo,sha256=2Z5jaGJzpiJTCnhCk8ulCDeAdj-WwR99scdHFPRoHoA,468 +django/contrib/humanize/locale/mr/LC_MESSAGES/django.po,sha256=M44sYiBJ7woVZZlDO8rPDQmS_Lz6pDTCajdheyxtdaI,4724 +django/contrib/humanize/locale/ms/LC_MESSAGES/django.mo,sha256=xSHIddCOU0bnfiyzQLaDaHAs1E4CaBlkyeXdLhJo1A8,842 +django/contrib/humanize/locale/ms/LC_MESSAGES/django.po,sha256=YhBKpxsTw9BleyaDIoDJAdwDleBFQdo1LckqLRmN8x4,7127 +django/contrib/humanize/locale/my/LC_MESSAGES/django.mo,sha256=55CWHz34sy9k6TfOeVI9GYvE9GRa3pjSRE6DSPk9uQ8,3479 +django/contrib/humanize/locale/my/LC_MESSAGES/django.po,sha256=jCiDhSqARfqKcMLEHJd-Xe6zo3Uc9QpiCh3BbAAA5UE,5433 +django/contrib/humanize/locale/nb/LC_MESSAGES/django.mo,sha256=5ia28xUNmXT5gsLVJ1A9v1UHZJnFTe7i7lwraUO2jvs,5358 +django/contrib/humanize/locale/nb/LC_MESSAGES/django.po,sha256=_FE2vx5v7eLXzNQ-4qvxA-ia8AJrilcJyQXZ38I9IUU,9137 +django/contrib/humanize/locale/ne/LC_MESSAGES/django.mo,sha256=OR0cBS_sNftLjHBLtQkRsA_SOxlc41G83vBGCvYaG2I,2285 +django/contrib/humanize/locale/ne/LC_MESSAGES/django.po,sha256=t9ukUPhAxkNlLlAMI2ftMUATPBS29UQ7q76WN2rjBWA,5544 +django/contrib/humanize/locale/nl/LC_MESSAGES/django.mo,sha256=lHZmifHfXh7Xvz1N7UtoboZupRo8S02axRPzWQfGB7k,5303 +django/contrib/humanize/locale/nl/LC_MESSAGES/django.po,sha256=s7LbdXpSQxkqSr666oTwTNlfdrJpLeYGoCe1xlAkGH8,9217 +django/contrib/humanize/locale/nn/LC_MESSAGES/django.mo,sha256=_Qbyf366ApSCU09Er6CvEf5WrA8s6ZzsyZXs44BoT10,3482 +django/contrib/humanize/locale/nn/LC_MESSAGES/django.po,sha256=qkEeQKQ8XwPKtTv2Y8RscAnE4QarinOze3Y3BTIEMCk,5818 +django/contrib/humanize/locale/os/LC_MESSAGES/django.mo,sha256=BwS3Mj7z_Fg5s7Qm-bGLVhzYLZ8nPgXoB0gXLnrMGWc,3902 +django/contrib/humanize/locale/os/LC_MESSAGES/django.po,sha256=CGrxyL5l-5HexruOc7QDyRbum7piADf-nY8zjDP9wVM,6212 +django/contrib/humanize/locale/pa/LC_MESSAGES/django.mo,sha256=TH1GkAhaVVLk2jrcqAmdxZprWyikAX6qMP0eIlr2tWM,1569 +django/contrib/humanize/locale/pa/LC_MESSAGES/django.po,sha256=_7oP0Hn-IU7IPLv_Qxg_wstLEdhgWNBBTCWYwSycMb0,5200 +django/contrib/humanize/locale/pl/LC_MESSAGES/django.mo,sha256=uz0OAv0VFNcf09x0nN2EBDiX248ZrtGSz_6jhBgY6H0,7018 +django/contrib/humanize/locale/pl/LC_MESSAGES/django.po,sha256=3y6Net6u3PvYyTsvliLG_2dEI-3utPW9UG6gFmf2DZ0,11936 +django/contrib/humanize/locale/pt/LC_MESSAGES/django.mo,sha256=El9Sdr3kXS-yTol_sCg1dquxf0ThDdWyrWGjjim9Dj4,5408 +django/contrib/humanize/locale/pt/LC_MESSAGES/django.po,sha256=XudOc67ybF_fminrTR2XOCKEKwqB5FX14pl3clCNXGE,9281 +django/contrib/humanize/locale/pt_BR/LC_MESSAGES/django.mo,sha256=5GqZStkWlU0gGvtk_ufR3ZdLRqLEkSF6KJtbTuJb3pc,5427 +django/contrib/humanize/locale/pt_BR/LC_MESSAGES/django.po,sha256=Hz2kgq9Nv4jjGCyL16iE9ctJElxcLoIracR7DuVY-BE,9339 +django/contrib/humanize/locale/ro/LC_MESSAGES/django.mo,sha256=NcQde9eakJYiI4R3wE2R4ek9iq0p9OmHVktiJGdfmXM,6229 +django/contrib/humanize/locale/ro/LC_MESSAGES/django.po,sha256=lYA7q6-qiISsf-SpH40QB92Fyr3QXd05sPHN4bzyubM,10578 +django/contrib/humanize/locale/ru/LC_MESSAGES/django.mo,sha256=tkKePMXIA1h_TXxXmB2m-QbelTteNKEc5-SEzs7u6FM,8569 +django/contrib/humanize/locale/ru/LC_MESSAGES/django.po,sha256=fXkT7XpiU2_wmnR1__QCxIdndI2M3ssNus8rMM-TSOw,13609 +django/contrib/humanize/locale/sk/LC_MESSAGES/django.mo,sha256=uUeDN0iYDq_3vT3NcTOTpKCGcv2ner5WtkIk6GVIsu0,6931 +django/contrib/humanize/locale/sk/LC_MESSAGES/django.po,sha256=cwmpA5EbD4ZE8aK0I1enRE_4RVbtfp1HQy0g1n_IYAE,11708 +django/contrib/humanize/locale/sl/LC_MESSAGES/django.mo,sha256=f_07etc_G4OdYiUBKPkPqKm2iINqXoNsHUi3alUBgeo,5430 +django/contrib/humanize/locale/sl/LC_MESSAGES/django.po,sha256=mleF0fvn0oEfszhGLoaQkWofTwZJurKrJlIH8o-6kAI,8166 +django/contrib/humanize/locale/sq/LC_MESSAGES/django.mo,sha256=E2dqixG143nNeVxaXxaibF83OE2hRHvj_BXGS3zf9w0,5321 +django/contrib/humanize/locale/sq/LC_MESSAGES/django.po,sha256=BS-5o3aG8Im9dWTkx4E_IbbeTRFcjjohinz1823ZepI,9127 +django/contrib/humanize/locale/sr/LC_MESSAGES/django.mo,sha256=_YudgsUlnmAqspuuHFh2pMZ8H7SCEqm6UZ7-U7-kCnI,7246 +django/contrib/humanize/locale/sr/LC_MESSAGES/django.po,sha256=8AvdR2SIuIPbqndDWZrB0DHaWGAEGtgSCy3HG2J1AXQ,11423 +django/contrib/humanize/locale/sr_Latn/LC_MESSAGES/django.mo,sha256=PaGxGtTZSzguwipvTdOhO7bvM8WlzCWb1RCEaIupRUQ,562 +django/contrib/humanize/locale/sr_Latn/LC_MESSAGES/django.po,sha256=FrPnMu6xX0NypoRYRAOBhdICGSv8geuHXQKKn3Gd9ck,5185 +django/contrib/humanize/locale/sv/LC_MESSAGES/django.mo,sha256=9BCahKoSjzfgXKCkubKvfyXAcrGAzaHvTtp-gSZzL84,5359 +django/contrib/humanize/locale/sv/LC_MESSAGES/django.po,sha256=-Agt-sWKqksZ_DCK1lRm4wzMnen4X28Gg1-hVfzI9FY,9224 +django/contrib/humanize/locale/sw/LC_MESSAGES/django.mo,sha256=cxjSUqegq1JX08xIAUgqq9ByP-HuqaXuxWM8Y2gHdB4,4146 +django/contrib/humanize/locale/sw/LC_MESSAGES/django.po,sha256=bPYrLJ2yY_lZ3y1K-RguNi-qrxq2r-GLlsz1gZcm2A8,6031 +django/contrib/humanize/locale/ta/LC_MESSAGES/django.mo,sha256=1X2vH0iZOwM0uYX9BccJUXqK-rOuhcu5isRzMpnjh2o,466 +django/contrib/humanize/locale/ta/LC_MESSAGES/django.po,sha256=8x1lMzq2KOJveX92ADSuqNmXGIEYf7fZ1JfIJPysS04,4722 +django/contrib/humanize/locale/te/LC_MESSAGES/django.mo,sha256=iKd4dW9tan8xPxgaSoenIGp1qQpvSHHXUw45Tj2ATKQ,1327 +django/contrib/humanize/locale/te/LC_MESSAGES/django.po,sha256=FQdjWKMsiv-qehYZ4AtN9iKRf8Rifzcm5TZzMkQVfQI,5103 +django/contrib/humanize/locale/th/LC_MESSAGES/django.mo,sha256=jT7wGhYWP9HHwOvtr2rNPStiOgZW-rGMcO36w1U8Y4c,3709 +django/contrib/humanize/locale/th/LC_MESSAGES/django.po,sha256=ZO3_wU7z0VASS5E8RSLEtmTveMDjJ0O8QTynb2-jjt0,8318 +django/contrib/humanize/locale/tr/LC_MESSAGES/django.mo,sha256=IpHLnlAZ-gp6WUFSu_LJLMZqmqZqTXRtBRPcnaU_3fQ,5304 +django/contrib/humanize/locale/tr/LC_MESSAGES/django.po,sha256=FroATMApIsS1UfhjQl7NPG0QgmXXkHZU7JjOd4jaEhM,9163 +django/contrib/humanize/locale/tt/LC_MESSAGES/django.mo,sha256=z8VgtMhlfyDo7bERDfrDmcYV5aqOeBY7LDgqa5DRxDM,3243 +django/contrib/humanize/locale/tt/LC_MESSAGES/django.po,sha256=j_tRbg1hzLBFAmPQt0HoN-_WzWFtA07PloCkqhvNkcY,5201 +django/contrib/humanize/locale/udm/LC_MESSAGES/django.mo,sha256=CNmoKj9Uc0qEInnV5t0Nt4ZnKSZCRdIG5fyfSsqwky4,462 +django/contrib/humanize/locale/udm/LC_MESSAGES/django.po,sha256=AR55jQHmMrbA6RyHGOtqdvUtTFlxWnqvfMy8vZK25Bo,4354 +django/contrib/humanize/locale/uk/LC_MESSAGES/django.mo,sha256=zfZYq_oejaTyWHQms01zT7jZc_1NX6WTxWlR3IjlJm4,8854 +django/contrib/humanize/locale/uk/LC_MESSAGES/django.po,sha256=BzEfymhdA2kJojtHX7RAvyrjYGOv5BqfOsfwqH1maeI,13765 +django/contrib/humanize/locale/ur/LC_MESSAGES/django.mo,sha256=MF9uX26-4FFIz-QpDUbUHUNLQ1APaMLQmISMIaPsOBE,1347 +django/contrib/humanize/locale/ur/LC_MESSAGES/django.po,sha256=D5UhcPEcQ16fsBEdkk_zmpjIF6f0gEv0P86z_pK_1eA,5015 +django/contrib/humanize/locale/vi/LC_MESSAGES/django.mo,sha256=ZUK_Na0vnfdhjo0MgnBWnGFU34sxcMf_h0MeyuysKG8,3646 +django/contrib/humanize/locale/vi/LC_MESSAGES/django.po,sha256=DzRpXObt9yP5RK_slWruaIhnVI0-JXux2hn_uGsVZiE,5235 +django/contrib/humanize/locale/zh_Hans/LC_MESSAGES/django.mo,sha256=JcMWgxYXOPXTCR6t8szkuDHSQ6p0RJX7Tggq84gJhwQ,4709 +django/contrib/humanize/locale/zh_Hans/LC_MESSAGES/django.po,sha256=L7SmGldceykiGHJe42Hxx_qyJa9rBuAnJdYgIY-L-6o,8242 +django/contrib/humanize/locale/zh_Hant/LC_MESSAGES/django.mo,sha256=xnSOYPtXlGmZ8KmxwI1j_di_SETzDX2YzEOm5bP6u7U,3185 +django/contrib/humanize/locale/zh_Hant/LC_MESSAGES/django.po,sha256=6XCW7c9LEgvOrSM8ekCDt4Z1o4qFnOce4jggox4hd7o,7760 +django/contrib/humanize/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/humanize/templatetags/humanize.py,sha256=jWaEmELSKaVBkSxYMik19sg5ZBmPdvRy-19x8s0p26I,12467 +django/contrib/messages/__init__.py,sha256=Sjt2mgia8vqSpISrs67N27rAXgvqR-MPq37VB-nmSvE,174 +django/contrib/messages/api.py,sha256=sWP2DP-n8ZWOTM-BLFDGrH_l-voGwrSxC0OgEyJt1F4,3071 +django/contrib/messages/apps.py,sha256=yGXBKfV5WF_ElcPbX4wJjXq6jzp39ttnO7sp8N_IzOQ,194 +django/contrib/messages/constants.py,sha256=WZxjzvEoKI7mgChSFp_g9e-zUH8r6JLhu9sFsftTGNA,312 +django/contrib/messages/context_processors.py,sha256=0LniZjxZ7Fx2BxYdJ0tcruhG4kkBEEhsc7Urcf31NnE,354 +django/contrib/messages/middleware.py,sha256=4L-bzgSjTw-Kgh8Wg8MOqkJPyilaxyXi_jH1UpP1h-U,986 +django/contrib/messages/utils.py,sha256=6PzAryJ0e6oOwtSAMrjAIsYGu_nWIpgMG0p8f_rzOrg,256 +django/contrib/messages/views.py,sha256=R5xD2DLmAO0x6EGpE8TX5bku4zioOiYkQnAtf6r-VAE,523 +django/contrib/messages/storage/__init__.py,sha256=gXDHbQ9KgQdfhYOla9Qj59_SlE9WURQiKzIA0cFH0DQ,392 +django/contrib/messages/storage/base.py,sha256=SyLyVQeRdmPvVt9SO4srCdIb0m2oBu1H_iOx40M48BM,5643 +django/contrib/messages/storage/cookie.py,sha256=vAvUYBznSRY2ztfeZe5a38yuq1a11LGkDchs3c3AwME,6532 +django/contrib/messages/storage/fallback.py,sha256=IbyyZg8cTU-19ZeRg6LndLfRK0SoevDwqKtrqzhVp6c,2095 +django/contrib/messages/storage/session.py,sha256=KTAqur1KMJUc-liD-I0mVDYbafMS23zxZfnFz4XPiiU,1729 +django/contrib/postgres/__init__.py,sha256=jtn9-mwOISc5D_YUoQ5z_3sN4bEPNxBOCDzbGNag_mc,67 +django/contrib/postgres/apps.py,sha256=Yj8hOP1HhMWjiI0i6DrTxl-AfDpCLb-p8QCaiOsvZOU,3002 +django/contrib/postgres/functions.py,sha256=zHeAyKR5MhnsIGI5qbtmRdxPm8OtycEBE5OmCNyynD8,252 +django/contrib/postgres/indexes.py,sha256=TKogHydJIUrhIxfDmDTEKhxIby916-JIKsJAtJgZXtE,6446 +django/contrib/postgres/lookups.py,sha256=CIzOtQhabWI5_GERU95REYVA5wzhimdz9hpGXtKpW08,1901 +django/contrib/postgres/operations.py,sha256=R8jm7u9K5dPvdbmsSvCO95x8oI7LSat01CeXtPUzL5c,2010 +django/contrib/postgres/search.py,sha256=PgYrl42XxKKCl6Af94poZC_FYz8ChGVsc-wDrXevtdU,9014 +django/contrib/postgres/serializers.py,sha256=EPW4-JtgMV_x4_AosG4C-HLX3K4O9ls9Ezw9f07iHd8,435 +django/contrib/postgres/signals.py,sha256=MmUklgaTW1-UBMGQTxNO_1fsO7mZugGs9ScovuCIyJo,2245 +django/contrib/postgres/utils.py,sha256=gBGBmAYMKLkB6nyaRgx5Yz_00bXaOA6BDK9koiE-_co,1187 +django/contrib/postgres/validators.py,sha256=CA_iygE2q3o8tXlQ9JfMYxoO6HDJk3D0PIcmGrahwdI,2675 +django/contrib/postgres/aggregates/__init__.py,sha256=QCznqMKqPbpraxSi1Y8-B7_MYlL42F1kEWZ1HeLgTKs,65 +django/contrib/postgres/aggregates/general.py,sha256=w6Gixqh_ZtGJwkpD1TtYLOAKESplztLlI6brAt_FCco,1521 +django/contrib/postgres/aggregates/mixins.py,sha256=SBJjxbcpFCGRaWZDck21ts-Q98uVfPExgE1U5JI1Eqg,2433 +django/contrib/postgres/aggregates/statistics.py,sha256=NWyxMgDsfQ3f5yvqAcxJ13LayjGkRPj90wVJa4k7QdM,1691 +django/contrib/postgres/fields/__init__.py,sha256=Xo8wuWPwVNOkKY-EwV9U1zusQ2DjMXXtL7_8R_xAi5s,148 +django/contrib/postgres/fields/array.py,sha256=B8EKnT1HqpRveKQvfWwZ_O9aJ0CXy-DM1O_4_uQvE78,10366 +django/contrib/postgres/fields/citext.py,sha256=G40UZv4zop8Zrq2vMhluZ-MT7yPLEc8IEDi3hZ27gGw,439 +django/contrib/postgres/fields/hstore.py,sha256=OWAljan0faRYss3Imq0T66NhnYxEHWNmUmstJpvpZ88,3217 +django/contrib/postgres/fields/jsonb.py,sha256=IZ4lqu4nNuqMqTB_iEZ3CLM5xkpBODiFPEhOEb0prSw,5692 +django/contrib/postgres/fields/mixins.py,sha256=eYtXzR2ec8J8564b-eaUsE17UO_AIkqrlKD-p0GlTGo,986 +django/contrib/postgres/fields/ranges.py,sha256=_qwGh3oBnItCMPTMhLIfCfXQ43ylkZvCakQr4vQg0pY,8221 +django/contrib/postgres/fields/utils.py,sha256=TV-Aj9VpBb13I2iuziSDURttZtz355XakxXnFwvtGio,95 +django/contrib/postgres/forms/__init__.py,sha256=GSqucR50I9jrZUYZUFVmb8nV_FSlXu1BcCpFck2pVXI,118 +django/contrib/postgres/forms/array.py,sha256=3Hp4Q9JSziuaie2c0KLH-Z7RHs3t0MgbicsjnLIxV2k,7413 +django/contrib/postgres/forms/hstore.py,sha256=f7PJ41fsd8D7cvyJG-_ugslM-hXL7qnZPdx08UZQNXY,1766 +django/contrib/postgres/forms/jsonb.py,sha256=1tRmaNUvH8ITxGSAtg0bIUwPzgLW-8o1sRgsbCIV1ek,1729 +django/contrib/postgres/forms/ranges.py,sha256=Dc3runraU_Bdp8upK8RAwTo8KXsUI5oSLel8ng4ZHvk,3482 +django/contrib/postgres/jinja2/postgres/widgets/split_array.html,sha256=AzaPLlNLg91qkVQwwtAJxwOqDemrtt_btSkWLpboJDs,54 +django/contrib/postgres/locale/af/LC_MESSAGES/django.mo,sha256=VaToTp7rFp8wAEJGucEHgAp1W3ThisCWYyKy7q4Rsy0,3135 +django/contrib/postgres/locale/af/LC_MESSAGES/django.po,sha256=sGAyoCHl28BJYQBolUBjdn7CeclnunrBURSciuj7ApE,3474 +django/contrib/postgres/locale/ar/LC_MESSAGES/django.mo,sha256=AFcSJOhEOAWVIXw9q7FoyyT9G1ufw530IG2GwOYNOJw,4416 +django/contrib/postgres/locale/ar/LC_MESSAGES/django.po,sha256=ZEYrujwMpePljEsEjgJrRgHvQWn6zP9zYVkan83TyuU,5017 +django/contrib/postgres/locale/az/LC_MESSAGES/django.mo,sha256=kUYiVWbIYkyUI8U1XZxTwWdW4yK0uymZLOmdxsfcxeQ,3132 +django/contrib/postgres/locale/az/LC_MESSAGES/django.po,sha256=92N_-hq2ONqo5Dgl2o2dNyAivzzHKRiQrpjTQHfGceE,3464 +django/contrib/postgres/locale/be/LC_MESSAGES/django.mo,sha256=nDK0-dYUAORaNB--uNHLQfvSnZZfe0yGdQwAe0AMFkU,4490 +django/contrib/postgres/locale/be/LC_MESSAGES/django.po,sha256=MoFwiR6pvjrN0YhFrhmAcQ4IQ6TRkFiVXf7TB8zjcQo,4964 +django/contrib/postgres/locale/bg/LC_MESSAGES/django.mo,sha256=7VaGqc8TO0NVL-eZbxVuGb8J6atQ_aC3C3Nh3G9zcJQ,3439 +django/contrib/postgres/locale/bg/LC_MESSAGES/django.po,sha256=9S2pgIZFOv3qp0QunLFUfPiNk40RZjHIiVA39Uj3zFs,4010 +django/contrib/postgres/locale/ca/LC_MESSAGES/django.mo,sha256=jX8PuYFVnEpyUEajyGbNXayTL-Tr4xGbEwtGOaUWIsY,3191 +django/contrib/postgres/locale/ca/LC_MESSAGES/django.po,sha256=TN6xBUf_xn-K2_ARNiVn612ZWrPmozJQ-LBYeaeYrH4,3651 +django/contrib/postgres/locale/cs/LC_MESSAGES/django.mo,sha256=SGSzVScCYcVeQPQYsKKLv_k9hmxt_nZGwpebGqa_e5g,3686 +django/contrib/postgres/locale/cs/LC_MESSAGES/django.po,sha256=SgmCLIHUXIUl8zkonXynj_MyHXsOmqpYGbE3N5YQ80M,4158 +django/contrib/postgres/locale/da/LC_MESSAGES/django.mo,sha256=JHKBvq-wN9YvR3GF5TWjdzRYDJCENRrdld_bfoMf_L0,3167 +django/contrib/postgres/locale/da/LC_MESSAGES/django.po,sha256=fUR3Edxifn3OeeccpxyycqgSRwOQgbLFkqEtZQBQMjo,3558 +django/contrib/postgres/locale/de/LC_MESSAGES/django.mo,sha256=78QMyqVVBH0_HdT1IEfoZbKFvIFAiG0S96dJzfx_GR4,3282 +django/contrib/postgres/locale/de/LC_MESSAGES/django.po,sha256=rICLyLxIuA_WWMcq0u6MfnUbYZlM_Vs4n-ETi55LTro,3728 +django/contrib/postgres/locale/dsb/LC_MESSAGES/django.mo,sha256=1fVpsCGFtvcOtjM7nkTq3mPAHeFKUt7iafEbeU126NY,3853 +django/contrib/postgres/locale/dsb/LC_MESSAGES/django.po,sha256=czUFqMMzMa6ie50w6mVekNaFLNoY4wPsyIt3zRHQ3Z0,4286 +django/contrib/postgres/locale/el/LC_MESSAGES/django.mo,sha256=PKQX9koDltdpPB_2sz_cCMj46CU6f6UKrQhkniPp5V0,3917 +django/contrib/postgres/locale/el/LC_MESSAGES/django.po,sha256=C4bWUZaxJCXkVUWlvaW4zo6C_fZAI7V1qBPOJHbZfdY,4411 +django/contrib/postgres/locale/en/LC_MESSAGES/django.mo,sha256=U0OV81NfbuNL9ctF-gbGUG5al1StqN-daB-F-gFBFC8,356 +django/contrib/postgres/locale/en/LC_MESSAGES/django.po,sha256=V559m1IltKecaNYnowZ3e1iIFNFKeO949YVUPjOwvUw,3130 +django/contrib/postgres/locale/eo/LC_MESSAGES/django.mo,sha256=6DVCsh5l93gP7mZm3B-cX7mCR2JZmkncQhcKnTCi2qE,3155 +django/contrib/postgres/locale/eo/LC_MESSAGES/django.po,sha256=RIfsz1ohsRlBTb9QPdyI-1iKV8CU9pjrVqc4_3AhizU,3539 +django/contrib/postgres/locale/es/LC_MESSAGES/django.mo,sha256=WnSqn-4gREdsGohEhTJybt5E2Vg_mR6QMr_tt2Ek-uQ,3195 +django/contrib/postgres/locale/es/LC_MESSAGES/django.po,sha256=ijuEmSYMQX6Tl-dBW7yzVu94dm5SlQMxd7zA4NGi3U0,3762 +django/contrib/postgres/locale/es_AR/LC_MESSAGES/django.mo,sha256=7VC-8uU5uphnQOpwhpHUxvE74RQTTsgbByg8MOB27uo,3178 +django/contrib/postgres/locale/es_AR/LC_MESSAGES/django.po,sha256=SfTGSajrsJi2t3mYQif4eN2yP5ifYQVQvKzplgPpfRk,3516 +django/contrib/postgres/locale/es_CO/LC_MESSAGES/django.mo,sha256=wmkoFFXblYw1ufz4gcSntO79yq20mHl8hlbj4Hhmcug,2903 +django/contrib/postgres/locale/es_CO/LC_MESSAGES/django.po,sha256=Br2Lo11i-EeryGFsRmUWr_PD6_xk8kavVzdwqtR7AuU,3579 +django/contrib/postgres/locale/es_MX/LC_MESSAGES/django.mo,sha256=4-c48HNLkDnIIPIBOaIhxoOf4muYRRelX0rR0dVrpAE,882 +django/contrib/postgres/locale/es_MX/LC_MESSAGES/django.po,sha256=5HmM8uVQkt869MyzuQIk5C6czFe4MTRz5CBmgeN_V14,2496 +django/contrib/postgres/locale/et/LC_MESSAGES/django.mo,sha256=_BZuR25C1mzMVR2LTXE4u4QaP5ht7C7q8PjsnAEEQO8,3081 +django/contrib/postgres/locale/et/LC_MESSAGES/django.po,sha256=BF6hMf4uD6sFFXBJoudgimwKCj25jlzt7rjK3lg-BFA,3592 +django/contrib/postgres/locale/eu/LC_MESSAGES/django.mo,sha256=e1i7Y8OyrDBzRTDViMBFliQxGa-wYBaBBWrr6V7MIVw,3133 +django/contrib/postgres/locale/eu/LC_MESSAGES/django.po,sha256=uLRlYrtifsM_BmHtxLUMnL-nNxJ9S3X-Py7W_6rRvqA,3544 +django/contrib/postgres/locale/fa/LC_MESSAGES/django.mo,sha256=0E8pqNUlKTUXSY1o8A1TmMbAE49QZpa5yxqqECJbZ04,3614 +django/contrib/postgres/locale/fa/LC_MESSAGES/django.po,sha256=Zdcp_d3unZ4JnRQdcMIPQVsV9ysal7W1zu_vJsMqJx4,4083 +django/contrib/postgres/locale/fi/LC_MESSAGES/django.mo,sha256=eVu4C_rIzT2fQGNbJDEkrQb4pjF00lOPAixxqpYvbhs,3212 +django/contrib/postgres/locale/fi/LC_MESSAGES/django.po,sha256=zILj96C-jR-bjBRVVLScZngm7MRA-BtUM4j4IUMNJ48,3555 +django/contrib/postgres/locale/fr/LC_MESSAGES/django.mo,sha256=9QUsR8xzL04X48DNJXijH1h0yc7Lw9-rK73-rJKXM5s,3393 +django/contrib/postgres/locale/fr/LC_MESSAGES/django.po,sha256=6iGiT_QRTcMTg9V2pyQsrfHr4pW-GnDirS4N8KJIDAQ,3751 +django/contrib/postgres/locale/gd/LC_MESSAGES/django.mo,sha256=0c_5bWFtIPFkBJ_CbXUt-2BIDxZbjM_tuJ-EqdKGMXc,3828 +django/contrib/postgres/locale/gd/LC_MESSAGES/django.po,sha256=ox1CJI5BZgCNIXHmZMyzXKyE49LoJ54FRCiG6AWp29s,4276 +django/contrib/postgres/locale/gl/LC_MESSAGES/django.mo,sha256=YlBrsev1RIUA4Zxbnl_ufkTANki4VM9O42Ge07u5QPc,722 +django/contrib/postgres/locale/gl/LC_MESSAGES/django.po,sha256=h4Z-Fdi9o1MG33vCWGMHqSj6dklYy653vGkq81lYeKA,2433 +django/contrib/postgres/locale/he/LC_MESSAGES/django.mo,sha256=-YQ8LqCoiqzkjfKifILLTqQVIGY1yb1VNl4or6n77cc,4017 +django/contrib/postgres/locale/he/LC_MESSAGES/django.po,sha256=bV17gzx9-OxTkrx-ElmZfb3yZc9A-Rl943nd5yYWGtY,4421 +django/contrib/postgres/locale/hr/LC_MESSAGES/django.mo,sha256=oIY9TCvkVmv-fGbGs-N2acx5VC3PNzZxWW4FRjWbTUQ,1217 +django/contrib/postgres/locale/hr/LC_MESSAGES/django.po,sha256=EnvgxKmz6qBe6cH05CAm0bO5zuXkAOYFnRF5c4LmIRo,2762 +django/contrib/postgres/locale/hsb/LC_MESSAGES/django.mo,sha256=Pmzqoa3ajEjxxw8SgGg1MBpnoZm9twhlNPSxgnvMYKQ,3767 +django/contrib/postgres/locale/hsb/LC_MESSAGES/django.po,sha256=-ETxl8oh999zt4VzHAwN4fK7z3BS15k9qIKKOxITu6s,4194 +django/contrib/postgres/locale/hu/LC_MESSAGES/django.mo,sha256=f-PDNBR8UFtXqgLEQ-w1kAUgMwiP8MsQ_m1PosrSKts,3185 +django/contrib/postgres/locale/hu/LC_MESSAGES/django.po,sha256=SUMBKfJPRzlTPXGSkC1iKfL4DNFi_16YW3vkFCDCl5c,3644 +django/contrib/postgres/locale/hy/LC_MESSAGES/django.mo,sha256=wybr0GxcDRdCnz9qeoE7wkTtqqWYByX59bnkf60TYdA,3593 +django/contrib/postgres/locale/hy/LC_MESSAGES/django.po,sha256=9IO_50Tke30BbBpU83otWMjaySKPDL7apvwzYPEToS0,4140 +django/contrib/postgres/locale/ia/LC_MESSAGES/django.mo,sha256=dnyXX0ii0CFMrI02mZhkCzY66KTFdWXBOlXjo6gP_Ps,758 +django/contrib/postgres/locale/ia/LC_MESSAGES/django.po,sha256=jNRfADlv6JldyeezHt_3LXpudpmA-cXr73GIe3aPd6E,2475 +django/contrib/postgres/locale/id/LC_MESSAGES/django.mo,sha256=e6Ef9FtgoZl2LQmyfMrjvIV5_qpjwkkCYCvwV1dlRrI,3035 +django/contrib/postgres/locale/id/LC_MESSAGES/django.po,sha256=_ndR6AO13JntyL3beVBEwvfrKzCQB3xRCFamUUxBAPM,3553 +django/contrib/postgres/locale/is/LC_MESSAGES/django.mo,sha256=tpeJt6pALKWF4g_dN_c-rAG3hdRi4S68-XJw2l7tDQY,3212 +django/contrib/postgres/locale/is/LC_MESSAGES/django.po,sha256=F06l1CoYwMydHPiT92MjMPW9FqwhkxLgs4ZQ7y2etGI,3570 +django/contrib/postgres/locale/it/LC_MESSAGES/django.mo,sha256=_qHttDX3mqYgsavBhsSzFLxkljTBAnfjO9UybUsY9iY,3243 +django/contrib/postgres/locale/it/LC_MESSAGES/django.po,sha256=tGG27pe5w9y5ReeHOnlO1BPGmTf_VmY45t_yWuKlKmI,3855 +django/contrib/postgres/locale/ja/LC_MESSAGES/django.mo,sha256=Ffenxw4bewdZBTQqIjRri4KwWmSeUZm8M6ExvX-vT68,3349 +django/contrib/postgres/locale/ja/LC_MESSAGES/django.po,sha256=qVAKneCc7YbVv6eNeP1LptgKKVXNzFnel8Hoyak-KUg,3664 +django/contrib/postgres/locale/ka/LC_MESSAGES/django.mo,sha256=E-ol6-skFX-xPJs3jsGMZaJTuqF_Riu2DXnWa8AqmM0,731 +django/contrib/postgres/locale/ka/LC_MESSAGES/django.po,sha256=MFPEF3-kjkeqLDUMjolV4d6yj1TDnH-vh11vFgnwODA,2524 +django/contrib/postgres/locale/kk/LC_MESSAGES/django.mo,sha256=AdGfrugnkBOmvFZRKrc2KIpKZTZ8ez_k-4vG3SyrzzU,683 +django/contrib/postgres/locale/kk/LC_MESSAGES/django.po,sha256=MmZ0UiTLs2nnVURE3DlkmXuK0IcFkan9ymWhC9CdK7c,2495 +django/contrib/postgres/locale/ko/LC_MESSAGES/django.mo,sha256=FYGWlcUihtq8BLX2qSyOHKATm03oF47x6k5P6HeOON4,3196 +django/contrib/postgres/locale/ko/LC_MESSAGES/django.po,sha256=_6nMfnr2uOV1lqVJ3lCXmgoLoSTrhbZVfDxPkVFg2EU,3680 +django/contrib/postgres/locale/lt/LC_MESSAGES/django.mo,sha256=RjZ0I6Dut3iDur2LwMwkiCbFYScfBlHBjPXPnKGwdDc,3853 +django/contrib/postgres/locale/lt/LC_MESSAGES/django.po,sha256=xrAuourVTpfB3aRn8EN5yDkYQ4xuWjXiLQF33OOhq_k,4282 +django/contrib/postgres/locale/lv/LC_MESSAGES/django.mo,sha256=fROgwHN9x9IibDl4-PGk_N0q2ghXnaOaB2qMk2dxcN0,3382 +django/contrib/postgres/locale/lv/LC_MESSAGES/django.po,sha256=2lE-Sy4xyScfl8bPmd-LOh__LLXS6eOO0PozOydnysI,3844 +django/contrib/postgres/locale/mk/LC_MESSAGES/django.mo,sha256=UFofPo5u8GZFQeJUXpXv9WkzN8-L3RYB4QtpWSPZucw,3717 +django/contrib/postgres/locale/mk/LC_MESSAGES/django.po,sha256=p6bHPCPH1XuUJ_62EXW3fXnaKCtAvuDLAvS3H1JcX9s,4284 +django/contrib/postgres/locale/mn/LC_MESSAGES/django.mo,sha256=Gk1EKEHiKepj9744QwX0ArC5pNoi0yZg4E18YN5qXqY,3732 +django/contrib/postgres/locale/mn/LC_MESSAGES/django.po,sha256=NdW4WOJZnETLMGuZ_UrIMvUBO8yDkCvY4K1eWjV14d8,4198 +django/contrib/postgres/locale/nb/LC_MESSAGES/django.mo,sha256=SY_EMMXIT-WXai7ubBt7SdR05hfRoxRPxDKWhB3iiWo,3112 +django/contrib/postgres/locale/nb/LC_MESSAGES/django.po,sha256=pyDi1-0Mfk67bRvu9lGLRdluyRgmzaasR9P_-q46o8c,3486 +django/contrib/postgres/locale/ne/LC_MESSAGES/django.mo,sha256=wZ0UYJI4qUpPjLvsPCqRCuHbEKpBz9uOh6qncgXh59g,934 +django/contrib/postgres/locale/ne/LC_MESSAGES/django.po,sha256=ndvFMUw2XzBukzedzXUiPQfnnOitrOlJtz2TZgv0TX4,2590 +django/contrib/postgres/locale/nl/LC_MESSAGES/django.mo,sha256=hZvrA_fw13fv9uSLiF0kIrjFSCZr5HBU-qvPsT1KLME,3223 +django/contrib/postgres/locale/nl/LC_MESSAGES/django.po,sha256=X-OOSCDVDXCUW4ZHrEkUr5jZxb2Fr4B8ayL71W0L4uk,3730 +django/contrib/postgres/locale/pl/LC_MESSAGES/django.mo,sha256=vNKDjQ3702FrLnS3qN68oXR0WUl0HW_CEkcWcF4Vbaw,3694 +django/contrib/postgres/locale/pl/LC_MESSAGES/django.po,sha256=15v1ZdRbnnoZ_6ncPwQJPj5SSgFCBUpnokvt_qrOrvE,4417 +django/contrib/postgres/locale/pt/LC_MESSAGES/django.mo,sha256=ajCZcwyubfnqn-X-rhPdfidkLRBM9HdHzrPezmGmZCw,3135 +django/contrib/postgres/locale/pt/LC_MESSAGES/django.po,sha256=Oo78Px9ZXGWC0aiuc-1cJFvyT0yEjJNuge9gzWqOdF0,3580 +django/contrib/postgres/locale/pt_BR/LC_MESSAGES/django.mo,sha256=JxFj-dnRDEwjJuaSVJu__NkqRF30GMASZNfOZpQfC2w,3190 +django/contrib/postgres/locale/pt_BR/LC_MESSAGES/django.po,sha256=fJ6nfXMCnBDGbu2TfAvqv4abcGUVbxjlULrUyuLdHOE,3905 +django/contrib/postgres/locale/ro/LC_MESSAGES/django.mo,sha256=wIyzI-mQ_wTDpsU5QhIVek_Wf6RfUUWzRsOEu7fdtIY,3454 +django/contrib/postgres/locale/ro/LC_MESSAGES/django.po,sha256=4MyOnJbBSza7grnCQ2-_-knfs5w6oBdlMFHrS9DbYXQ,3897 +django/contrib/postgres/locale/ru/LC_MESSAGES/django.mo,sha256=tJm0QXyOt7USDeVXRE9ZoE5EDA0Xman6JooYEO3odNQ,5119 +django/contrib/postgres/locale/ru/LC_MESSAGES/django.po,sha256=G3Fsbh2qjnPNDeufzCs7SwITCaWsHEX30ltPJSpySQ4,5831 +django/contrib/postgres/locale/sk/LC_MESSAGES/django.mo,sha256=jgpnLYmOCNlj-BH605ybhVx0rG4yXKIIUCf696DwAVU,3630 +django/contrib/postgres/locale/sk/LC_MESSAGES/django.po,sha256=kv4raaUoWuOeOuTThku1_SiKsf7nYEBDaa-R5yGtg7U,4051 +django/contrib/postgres/locale/sl/LC_MESSAGES/django.mo,sha256=BT1LywwWuDO9iENJm-pqBksEisuETBlh0r4ILn4wgx0,3524 +django/contrib/postgres/locale/sl/LC_MESSAGES/django.po,sha256=YmFNHoKR5av9ychiCloy5OXeL_v-rDzA0vYqUy84umc,3988 +django/contrib/postgres/locale/sq/LC_MESSAGES/django.mo,sha256=kee7WbANs3H4qgSme6ERtCgsgvvTusVX92bpl3nR7oQ,3192 +django/contrib/postgres/locale/sq/LC_MESSAGES/django.po,sha256=3t0SaZ4hOGga9e2vRjmluinajxJERXaEr5IDpgfUPb4,3546 +django/contrib/postgres/locale/sr/LC_MESSAGES/django.mo,sha256=6gW7KQoByAgFBZkJcQ1jKZjqEb1F4jIOiG_MdShwkPI,4106 +django/contrib/postgres/locale/sr/LC_MESSAGES/django.po,sha256=GrxjCPa0hhfDPPf6QoSbMrKuxb_3w5IQ9KK6fOkYtRo,4497 +django/contrib/postgres/locale/sr_Latn/LC_MESSAGES/django.mo,sha256=neXGMvkPwx3Kujk8JG_X8T6r5qQkI-br5R5__UZsXzw,3098 +django/contrib/postgres/locale/sr_Latn/LC_MESSAGES/django.po,sha256=RyUcNHzNBqADVud2paoK-EPegcv_3eFRyjVaJARDpJQ,3626 +django/contrib/postgres/locale/sv/LC_MESSAGES/django.mo,sha256=cAc33SL4bBPVT5hVW22uJyr2EKPtHwglgXQrSR6SffE,3196 +django/contrib/postgres/locale/sv/LC_MESSAGES/django.po,sha256=rIueQEIpQmN6zpZeM36wqGCAdUWP7C2PWoSTfxgZzGY,3660 +django/contrib/postgres/locale/tr/LC_MESSAGES/django.mo,sha256=2pcddOVCVFzHvw19Oa9xpEu46mjkzJTnykunyDvDYZ4,3162 +django/contrib/postgres/locale/tr/LC_MESSAGES/django.po,sha256=Hrw_xRYpMWTVqj-xpNADRenPDXlicdictu12Nx1JJvY,3509 +django/contrib/postgres/locale/uk/LC_MESSAGES/django.mo,sha256=2kT-GcG490kWS9V-NTjS3nKxxA8xm4euTo0Dhqd4Yb4,4758 +django/contrib/postgres/locale/uk/LC_MESSAGES/django.po,sha256=AdBiSfMyt10qIxfTcquptNVyKxwI9k_9ZjuskaEM5JQ,5402 +django/contrib/postgres/locale/zh_Hans/LC_MESSAGES/django.mo,sha256=8QhVzkVySV8HW0bi44DOQHmX7PrTnqOvP7xflgL3fAA,2849 +django/contrib/postgres/locale/zh_Hans/LC_MESSAGES/django.po,sha256=K9FON5cG2bxUwXM5r6735FAO4bRV-JJa28WdMQdySxs,3274 +django/contrib/postgres/locale/zh_Hant/LC_MESSAGES/django.mo,sha256=65JDiksp4dDMlCPrCbbSZ-DDEXSD3rnPKF8o-RpdptA,2864 +django/contrib/postgres/locale/zh_Hant/LC_MESSAGES/django.po,sha256=MMLZpVZw1SdxWoscLSO9k2YTO5YX2GXFhSag99zNpoI,3211 +django/contrib/postgres/templates/postgres/widgets/split_array.html,sha256=AzaPLlNLg91qkVQwwtAJxwOqDemrtt_btSkWLpboJDs,54 +django/contrib/redirects/__init__.py,sha256=9vdTkDvH0443yn0qXx59j4dXPn3P-Pf9lB8AWrSp_Bk,69 +django/contrib/redirects/admin.py,sha256=P9wp8yIvDjJSfIXpWYM2ftDlVhKvte_0AM9Ky_j1JIs,314 +django/contrib/redirects/apps.py,sha256=BvTvN3IXCv7yEKqhxwCDiSCZ3695YXNttEvmONHNxC4,197 +django/contrib/redirects/middleware.py,sha256=kJfTIj8G2loRgiEJkqiYEredzt4xhNAfDaTZkk9Coyo,1926 +django/contrib/redirects/models.py,sha256=x9f9oGGbUDsn1If6zLwDpkwW3M2Anl-Zj845WA121fg,985 +django/contrib/redirects/locale/af/LC_MESSAGES/django.mo,sha256=UqXzx3fQxw4n7RGNgnp4lzLJ93DPRAgIAg6bwPs5GFY,1119 +django/contrib/redirects/locale/af/LC_MESSAGES/django.po,sha256=JvDnHyWH_-IyOTSR36hwSBmd_fXa3trpUAgEThdtDvM,1260 +django/contrib/redirects/locale/ar/LC_MESSAGES/django.mo,sha256=BX8CzqhOiPIE2dZ1J-bomSuudCMDs8MKbZ1aCzFUrXk,1342 +django/contrib/redirects/locale/ar/LC_MESSAGES/django.po,sha256=v4WQ_5jy6a_JupP7YLLxVIOB82UjIDZJ09uuFCaJCIc,1533 +django/contrib/redirects/locale/ast/LC_MESSAGES/django.mo,sha256=a1ixBQQIdBZ7o-ADnF2r74CBtPLsuatG7txjc05_GXI,1071 +django/contrib/redirects/locale/ast/LC_MESSAGES/django.po,sha256=PguAqeIUeTMWsADOYLTxoC6AuKrCloi8HN18hbm3pZ0,1266 +django/contrib/redirects/locale/az/LC_MESSAGES/django.mo,sha256=gxyTtthfuZik5KWZbsKzhsCa27pnDA7OdBkZt2Jnxn0,1157 +django/contrib/redirects/locale/az/LC_MESSAGES/django.po,sha256=5uyUelawIxgtoK4zA5w8VkSuoJPdjSBrJRud1zm1JjU,1341 +django/contrib/redirects/locale/be/LC_MESSAGES/django.mo,sha256=JBUJpaQqNT_SW5cYMKfb3b3s-DL5MDkLapmukI3-49M,1437 +django/contrib/redirects/locale/be/LC_MESSAGES/django.po,sha256=nqxsr8UCgQUhsUnvuQCMYiX4PbCQw9q5MGKDCUi3XaI,1622 +django/contrib/redirects/locale/bg/LC_MESSAGES/django.mo,sha256=fEXrzyixSGCWaWu5XxVsjRKMlPwYkORpFtAiwNNShvM,1268 +django/contrib/redirects/locale/bg/LC_MESSAGES/django.po,sha256=_Xha-uOePDqOqOVmYgcR8auVgNT3CS-Z_V_vwyTlwfk,1493 +django/contrib/redirects/locale/bn/LC_MESSAGES/django.mo,sha256=SbQh_pgxNCogvUFud7xW9T6NTAvpaQb2jngXCtpjICM,1319 +django/contrib/redirects/locale/bn/LC_MESSAGES/django.po,sha256=LgUuiPryDLSXxo_4KMCdjM5XC3BiRfINuEk0s5PUQYQ,1511 +django/contrib/redirects/locale/br/LC_MESSAGES/django.mo,sha256=Yt8xo5B5LJ9HB8IChCkj5mljFQAAKlaW_gurtF8q8Yw,1429 +django/contrib/redirects/locale/br/LC_MESSAGES/django.po,sha256=L2qPx6mZEVUNay1yYEweKBLr_fXVURCnACfsezfP_pI,1623 +django/contrib/redirects/locale/bs/LC_MESSAGES/django.mo,sha256=0Yak4rXHjRRXLu3oYYzvS8qxvk2v4IFvUiDPA68a5YI,1115 +django/contrib/redirects/locale/bs/LC_MESSAGES/django.po,sha256=s9Nhx3H4074hlSqo1zgQRJbozakdJTwA1aTuMSqEJWw,1316 +django/contrib/redirects/locale/ca/LC_MESSAGES/django.mo,sha256=sqFznyD9vEvzgzVCTHrzsDmv6ZJy5UCzV15pLacScjc,1137 +django/contrib/redirects/locale/ca/LC_MESSAGES/django.po,sha256=GQhL6KJW4kwv-xta5DcPUlPOMXf5hgs8emZgSUGjbmk,1366 +django/contrib/redirects/locale/cs/LC_MESSAGES/django.mo,sha256=s7dsB2LPmW6QjaBORdOClb7-HbJdjt927l8PL0ej-9k,1156 +django/contrib/redirects/locale/cs/LC_MESSAGES/django.po,sha256=Q94mVP6Q8sBz7NyEzkiXX43hSqHA8CrIv0_u2EHdgS8,1377 +django/contrib/redirects/locale/cy/LC_MESSAGES/django.mo,sha256=NSGoK12A7gbtuAuzQEVFPNSZMqqmhHyRvTEn9PUm9So,1132 +django/contrib/redirects/locale/cy/LC_MESSAGES/django.po,sha256=jDmC64z5exPnO9zwRkBmpa9v3DBlaeHRhqZYPoWqiIY,1360 +django/contrib/redirects/locale/da/LC_MESSAGES/django.mo,sha256=fMxR__ME05FmYKVrcs77ggfqe03Nuvx_Iz2X0Fz89JM,1114 +django/contrib/redirects/locale/da/LC_MESSAGES/django.po,sha256=dpFo8F_pITvs9VafhSfJkS57__5I7Y9HAKjBa1kPrQo,1294 +django/contrib/redirects/locale/de/LC_MESSAGES/django.mo,sha256=iPnuOSbyoQESXyU3arhhm0ESlXrP3OxOkKL9ZpHy_6Q,1136 +django/contrib/redirects/locale/de/LC_MESSAGES/django.po,sha256=_7aysk610BBjdYBuF4NgVFW_sMVLY3xBfVfHtSEFNls,1308 +django/contrib/redirects/locale/dsb/LC_MESSAGES/django.mo,sha256=wAFETbVpnUkTChU3d58C2qUdh0_klrwZ5X0yqSavBeY,1242 +django/contrib/redirects/locale/dsb/LC_MESSAGES/django.po,sha256=b1CcYJx9s6swmeXvcI6VE2b_FU_i2_xsHyB4IyAYMoQ,1386 +django/contrib/redirects/locale/el/LC_MESSAGES/django.mo,sha256=kzCurtbtzdZsJOzqLbTtn3kjltOnBq6Nd8p8EFTllF0,1384 +django/contrib/redirects/locale/el/LC_MESSAGES/django.po,sha256=-lFhtPYSaYaS81Zh1CX9vxx0lvQDpAUsTBRNT48ne94,1611 +django/contrib/redirects/locale/en/LC_MESSAGES/django.mo,sha256=U0OV81NfbuNL9ctF-gbGUG5al1StqN-daB-F-gFBFC8,356 +django/contrib/redirects/locale/en/LC_MESSAGES/django.po,sha256=dKYdOJRafKUDXGsaRIoLCLt2PhwziQgp9SHMEhhfrD8,1098 +django/contrib/redirects/locale/en_AU/LC_MESSAGES/django.mo,sha256=dTndJxA-F1IE_nMUOtf1sRr7Kq2s_8yjgKk6mkWkVu4,486 +django/contrib/redirects/locale/en_AU/LC_MESSAGES/django.po,sha256=CcP5GVZaImhRgohA5zy5K3rCscOlBtn81DB-V26-Wxg,958 +django/contrib/redirects/locale/en_GB/LC_MESSAGES/django.mo,sha256=VscL30uJnV-eiQZITpBCy0xk_FfKdnMh4O9Hk4HGxww,1053 +django/contrib/redirects/locale/en_GB/LC_MESSAGES/django.po,sha256=loe8xIVjZ7eyteQNLPoa-QceBZdgky22dR6deK5ubmA,1246 +django/contrib/redirects/locale/eo/LC_MESSAGES/django.mo,sha256=pZo0DSbfGGTHi-jgaTGp29kJK-iplaai-WXJoOPluMA,1138 +django/contrib/redirects/locale/eo/LC_MESSAGES/django.po,sha256=3AxFPHffYw3svHe-MR3zuVGLMtkJPL_SX_vB_ztx98c,1414 +django/contrib/redirects/locale/es/LC_MESSAGES/django.mo,sha256=RfNvdDrQeIfIw9I0dpnRjs10QzAFx-h-NRqYIfHx5gQ,1143 +django/contrib/redirects/locale/es/LC_MESSAGES/django.po,sha256=FePzvVGRJi6SmLm988JAbM3PADj1Bjn_XjGa7SFykkU,1392 +django/contrib/redirects/locale/es_AR/LC_MESSAGES/django.mo,sha256=-e7vnpqOe9kFR63URFVovUR6-7HCLK7etTOBGVfPCSE,1127 +django/contrib/redirects/locale/es_AR/LC_MESSAGES/django.po,sha256=IaqYpNmhkP2xb9kcCGy6k4S12pVHKbOQSEFVgWFMIZU,1296 +django/contrib/redirects/locale/es_CO/LC_MESSAGES/django.mo,sha256=wcAMOiqsgz2KEpRwirRH9FNoto6vmo_hxthrQJi0IHU,1147 +django/contrib/redirects/locale/es_CO/LC_MESSAGES/django.po,sha256=n8DM14vHekZRayH0B6Pm3L5XnSo4lto4ZAdu4OhcOmc,1291 +django/contrib/redirects/locale/es_MX/LC_MESSAGES/django.mo,sha256=aU__Eh-OzuEO7sRI45r-7Jnpz9QQpEKtqAZuWpfwQyQ,1136 +django/contrib/redirects/locale/es_MX/LC_MESSAGES/django.po,sha256=KyfWRFCA5kcBpi1uVK_rosEfYFs5mzpBvTsK5rdK4j0,1331 +django/contrib/redirects/locale/es_VE/LC_MESSAGES/django.mo,sha256=59fZBDut-htCj38ZUoqPjhXJPjZBz-xpU9__QFr3kLs,486 +django/contrib/redirects/locale/es_VE/LC_MESSAGES/django.po,sha256=f4XZW8OHjRJoztMJtSDCxd2_Mfy-XK44hLtigjGSsZY,958 +django/contrib/redirects/locale/et/LC_MESSAGES/django.mo,sha256=1KWgSYZUyo6JbwlQHdCg9IRwI4-llys7MfkFRCN10C8,1122 +django/contrib/redirects/locale/et/LC_MESSAGES/django.po,sha256=j0-f8wRSbi6oM8fwRmG1LptZrgUYCyoHzNE3sGuDmoU,1346 +django/contrib/redirects/locale/eu/LC_MESSAGES/django.mo,sha256=c0en4U_IaOUGF0Tt8lMwCm2Fmv3bAiT-D8BO9pNVFIM,1119 +django/contrib/redirects/locale/eu/LC_MESSAGES/django.po,sha256=W-tZOxWXSOzUgZSKRG_CoOf7XjxYuQEMZp0D59EZK9A,1304 +django/contrib/redirects/locale/fa/LC_MESSAGES/django.mo,sha256=WEtbdwPLTpiEZqTb6hJZMeLjL1snmGDWbzoYwa3BQnI,1241 +django/contrib/redirects/locale/fa/LC_MESSAGES/django.po,sha256=-XfgGc8mlwIWIk0NvtWZlwBrcDG3Mrj9k7FLDJMKQl4,1463 +django/contrib/redirects/locale/fi/LC_MESSAGES/django.mo,sha256=mCSVYBr0r3ieZPuORu4t1bsxHVnXg5_4cV8C59RC-vk,1158 +django/contrib/redirects/locale/fi/LC_MESSAGES/django.po,sha256=5hNG5JNitRLU1YrFwSOnyiMRTlRw4rXgyTjRImXEy-g,1368 +django/contrib/redirects/locale/fr/LC_MESSAGES/django.mo,sha256=8lXEASsnoQMclcQ8itMj93Zkitfu1IFUwWuPaZJRa8o,1141 +django/contrib/redirects/locale/fr/LC_MESSAGES/django.po,sha256=uJ9ql71ntuAmpmbs2-Rq2jXcblGuPWfXUu0twdjflIg,1326 +django/contrib/redirects/locale/fy/LC_MESSAGES/django.mo,sha256=YQQy7wpjBORD9Isd-p0lLzYrUgAqv770_56-vXa0EOc,476 +django/contrib/redirects/locale/fy/LC_MESSAGES/django.po,sha256=D7xverCbf3kTCcFM8h7EKWM5DcxZRqeOSKDB1irbKeE,948 +django/contrib/redirects/locale/ga/LC_MESSAGES/django.mo,sha256=blwOMshClFZKvOZXVvqENK_E_OkdS1ydbjQCDXcHXd4,1075 +django/contrib/redirects/locale/ga/LC_MESSAGES/django.po,sha256=76rdrG4GVbcKwgUQN4bB-B0t6hpivCA_ehf4uzGM_mY,1341 +django/contrib/redirects/locale/gd/LC_MESSAGES/django.mo,sha256=fcIwOFja3uSj8spusyE3ECkiugkvGk9pa5DLsGSkSMQ,1252 +django/contrib/redirects/locale/gd/LC_MESSAGES/django.po,sha256=CkNt_Ra3yA9uKDy4BeK6in2lc63VSqqlK2JPQ6s4S-Q,1371 +django/contrib/redirects/locale/gl/LC_MESSAGES/django.mo,sha256=LoMrpBThJSmWzZ1wT66xGndnNCVCOq2eCEyo88qKwkA,1127 +django/contrib/redirects/locale/gl/LC_MESSAGES/django.po,sha256=d8qXhC2wI45yXtFJuMBgibzHsCkZSxAD3I6pVdpxlSU,1313 +django/contrib/redirects/locale/he/LC_MESSAGES/django.mo,sha256=cVPF03bdLcUiZt52toHoPXMqE5rEYPU0vEb5uIZwH_4,1128 +django/contrib/redirects/locale/he/LC_MESSAGES/django.po,sha256=Ycu8QAgIhJm-zN3_dlJelXKK87YQZV8Ahc5i7AUtkVk,1302 +django/contrib/redirects/locale/hi/LC_MESSAGES/django.mo,sha256=onR8L7Kvkx6HgFLK7jT-wA_zjarBN8pyltG6BbKFIWU,1409 +django/contrib/redirects/locale/hi/LC_MESSAGES/django.po,sha256=fNv9_qwR9iS-pjWNXnrUFIqvc10lwg3bfj5lgdQOy1U,1649 +django/contrib/redirects/locale/hr/LC_MESSAGES/django.mo,sha256=7wHi6Uu0czZhI6v0ndJJ1wSkalTRfn7D5ovyw8tr4U4,1207 +django/contrib/redirects/locale/hr/LC_MESSAGES/django.po,sha256=HtxZwZ-ymmf-XID0z5s7nGYg-4gJL8i6FDGWt9i4Wns,1406 +django/contrib/redirects/locale/hsb/LC_MESSAGES/django.mo,sha256=l_NcBALI4Tsc0cM_PtEXzWWM5AQsf-OEcULlf4TZv8E,1236 +django/contrib/redirects/locale/hsb/LC_MESSAGES/django.po,sha256=xoWJStp4xkPdJHjk39BhlSC0Nh0qSSLe4dXiYa3IEBU,1380 +django/contrib/redirects/locale/hu/LC_MESSAGES/django.mo,sha256=4rxfQPYRySmOlKWO7LIGzNuYyNlP-EsuK7IRpgIkdQY,1152 +django/contrib/redirects/locale/hu/LC_MESSAGES/django.po,sha256=8OaJ7UgFJXbpxEtnLu9UuOwOjAoE9MFVEU5cXT0ThUU,1329 +django/contrib/redirects/locale/hy/LC_MESSAGES/django.mo,sha256=gT5x1TZXMNyBwfmQ-C_cOB60JGYdKIM7tVb3-J5d6nw,1261 +django/contrib/redirects/locale/hy/LC_MESSAGES/django.po,sha256=40QTpth2AVeoy9P36rMJC2C82YsBh_KYup19WL6zM6w,1359 +django/contrib/redirects/locale/ia/LC_MESSAGES/django.mo,sha256=PDB5ZQP6iH31xN6N2YmPZYjt6zzc88TRmh9_gAWH2U0,1152 +django/contrib/redirects/locale/ia/LC_MESSAGES/django.po,sha256=GXjbzY-cQz2QLx_iuqgijT7VUMcoNKL7prbP6yIbj8E,1297 +django/contrib/redirects/locale/id/LC_MESSAGES/django.mo,sha256=ef2SKKOPZ3wDl-z-kZ3q6UVAjvgIGuioHi9U3PR_knE,1098 +django/contrib/redirects/locale/id/LC_MESSAGES/django.po,sha256=5axvDDh3Yg5NzMC4Ayr0noUOr7tOgU-BJ9S8j_sv-yY,1319 +django/contrib/redirects/locale/io/LC_MESSAGES/django.mo,sha256=vz7TWRML-DFDFapbEXTByb9-pRQwoeJ0ApSdh6nOzXY,1019 +django/contrib/redirects/locale/io/LC_MESSAGES/django.po,sha256=obStuMYYSQ7x2utkGS3gekdPfnsNAwp3DcNwlwdg1sI,1228 +django/contrib/redirects/locale/is/LC_MESSAGES/django.mo,sha256=OnT5N5YqvG6Vto1GM4vK9hu_gn19_Icfj-d55Exds_E,1065 +django/contrib/redirects/locale/is/LC_MESSAGES/django.po,sha256=qsstQGFLj6Tkzfzak2UjIRh5sZQLSeD9YN6kYBLKJnc,1278 +django/contrib/redirects/locale/it/LC_MESSAGES/django.mo,sha256=nFyQf8zpMFSgbDT85GHnOxQQbuss2Dp_DlwhgLvPVAQ,1105 +django/contrib/redirects/locale/it/LC_MESSAGES/django.po,sha256=_mI90dLhi--cxkJWjtTT9_JLesqyMOPKYrfGhzwVDQs,1307 +django/contrib/redirects/locale/ja/LC_MESSAGES/django.mo,sha256=98oXXZ0raebFOFB23-p5VaAhbW46kwC9jxM8I2FAV_U,1148 +django/contrib/redirects/locale/ja/LC_MESSAGES/django.po,sha256=XJQiqtbTrwDIBQCWfYJcHuXYDh7gr0HvCTiuGXcZtIQ,1324 +django/contrib/redirects/locale/ka/LC_MESSAGES/django.mo,sha256=0aOLKrhUX6YAIMNyt6KES9q2iFk2GupEr76WeGlJMkk,1511 +django/contrib/redirects/locale/ka/LC_MESSAGES/django.po,sha256=bK3ULAIG00Nszoz74r-W3W8CihaoijYkWlc6sUqJXrg,1720 +django/contrib/redirects/locale/kab/LC_MESSAGES/django.mo,sha256=Ogx9NXK1Nfw4ctZfp-slIL81ziDX3f4DZ01OkVNY5Tw,699 +django/contrib/redirects/locale/kab/LC_MESSAGES/django.po,sha256=gI6aUPkXH-XzKrStDsMCMNfQKDEc-D1ffqE-Z-ItQuI,1001 +django/contrib/redirects/locale/kk/LC_MESSAGES/django.mo,sha256=KVLc6PKL1MP_Px0LmpoW2lIvgLiSzlvoJ9062F-s3Zw,1261 +django/contrib/redirects/locale/kk/LC_MESSAGES/django.po,sha256=k3TtiYJ7x50M19DCu2eLcsCroKusJ3paiC2RvZ-920A,1473 +django/contrib/redirects/locale/km/LC_MESSAGES/django.mo,sha256=tcW1s7jvTG0cagtdRNT0jSNkhX-B903LKl7bK31ZvJU,1248 +django/contrib/redirects/locale/km/LC_MESSAGES/django.po,sha256=KJ4h1umpfFLdsWZtsfXoeOl6cUPUD97U4ISWt80UZ2U,1437 +django/contrib/redirects/locale/kn/LC_MESSAGES/django.mo,sha256=-gqNBZVFvxqOiPWUb9jH4myXufHHfdyr_yROTfpk2jU,1396 +django/contrib/redirects/locale/kn/LC_MESSAGES/django.po,sha256=qFM2v3ys7E5u-WJE7CR-2IMrDTqFjNq96OQ1syMDWoI,1588 +django/contrib/redirects/locale/ko/LC_MESSAGES/django.mo,sha256=gXKWhQ8zEU7D1DwkUmXXaeqgXjiVuGSFVm8S7P4dNVs,1112 +django/contrib/redirects/locale/ko/LC_MESSAGES/django.po,sha256=q8A446VIdu6xIbjzmZxw4X0z3SfJL5Jffi_1C_IfKWM,1343 +django/contrib/redirects/locale/lb/LC_MESSAGES/django.mo,sha256=xokesKl7h7k9dXFKIJwGETgwx1Ytq6mk2erBSxkgY-o,474 +django/contrib/redirects/locale/lb/LC_MESSAGES/django.po,sha256=Hv1CF9CC78YuVVNpklDtPJDU5-iIUeuXcljewmc9akg,946 +django/contrib/redirects/locale/lt/LC_MESSAGES/django.mo,sha256=reiFMXJnvE4XUosbKjyvUFzl4IKjlJoFK1gVJE9Tbnc,1191 +django/contrib/redirects/locale/lt/LC_MESSAGES/django.po,sha256=3D3sSO1D9XyRpiT57l-0emy7V11uKCWJYqpEzmmpUzE,1377 +django/contrib/redirects/locale/lv/LC_MESSAGES/django.mo,sha256=gH-QSWtlMTIuvz0HkCQwCUKPsaGH6ffjS8DIlJK-D38,1179 +django/contrib/redirects/locale/lv/LC_MESSAGES/django.po,sha256=EHJnRXo3G9mhYYySGHC-6pF1CRB2RHJaLGzcscYh9fY,1355 +django/contrib/redirects/locale/mk/LC_MESSAGES/django.mo,sha256=3XGgf2K60LclScPKcgw07TId6x535AW5jtGVJ9lC01A,1353 +django/contrib/redirects/locale/mk/LC_MESSAGES/django.po,sha256=Smsdpid5VByoxvnfzju_XOlp6aTPl8qshFptot3cRYM,1596 +django/contrib/redirects/locale/ml/LC_MESSAGES/django.mo,sha256=IhSkvbgX9xfE4GypOQ7W7SDM-wOOqx1xgSTW7L1JofU,1573 +django/contrib/redirects/locale/ml/LC_MESSAGES/django.po,sha256=9KpXf88GRUB5I51Rj3q9qhvhjHFINuiJ9ig0SZdYE6k,1755 +django/contrib/redirects/locale/mn/LC_MESSAGES/django.mo,sha256=14fdHC_hZrRaA0EAFzBJy8BHj4jMMX6l2e6rLLBtJ8E,1274 +django/contrib/redirects/locale/mn/LC_MESSAGES/django.po,sha256=7_QzUWf5l0P-7gM35p9UW7bOj33NabQq_zSrekUeZsY,1502 +django/contrib/redirects/locale/mr/LC_MESSAGES/django.mo,sha256=2Z5jaGJzpiJTCnhCk8ulCDeAdj-WwR99scdHFPRoHoA,468 +django/contrib/redirects/locale/mr/LC_MESSAGES/django.po,sha256=0aGKTlriCJoP-Tirl-qCl7tjjpjURhgCjRGmurHVO3c,940 +django/contrib/redirects/locale/my/LC_MESSAGES/django.mo,sha256=H5-y9A3_1yIXJzC4sSuHqhURxhOlnYEL8Nvc0IF4zUE,549 +django/contrib/redirects/locale/my/LC_MESSAGES/django.po,sha256=MZGNt0jMQA6aHA6OmjvaC_ajvRWfUfDiKkV0j3_E480,1052 +django/contrib/redirects/locale/nb/LC_MESSAGES/django.mo,sha256=flh3A8h-hu_Ed0dGUAPH7ZxF1WC9sYB2NqCPkNPfMLQ,1147 +django/contrib/redirects/locale/nb/LC_MESSAGES/django.po,sha256=9v20yzVkeilgDRfoXetQNytBShYEsgOLVctsZpzOfBI,1405 +django/contrib/redirects/locale/ne/LC_MESSAGES/django.mo,sha256=TxTnBGIi5k0PKAjADeCuOAJQV5dtzLrsFRXBXtfszWI,1420 +django/contrib/redirects/locale/ne/LC_MESSAGES/django.po,sha256=5b5R-6AlSIQrDyTtcmquoW5xrQRGZwlxZpBpZfVo5t4,1607 +django/contrib/redirects/locale/nl/LC_MESSAGES/django.mo,sha256=u-B4KXev_OLcnejazr3bYtlMLM-uDXsYzdoObi0hZzY,1105 +django/contrib/redirects/locale/nl/LC_MESSAGES/django.po,sha256=1Dygreha6L7sO8Rhk8gKUX-t6pmn92ae_nNQjOv_7RI,1384 +django/contrib/redirects/locale/nn/LC_MESSAGES/django.mo,sha256=oiw7wSgqGUrHIdec6sIa7OlHXGME5iWA9h1UUlhl6Mw,1072 +django/contrib/redirects/locale/nn/LC_MESSAGES/django.po,sha256=pfu1XKvB-9DS_5dAbvjGzZCKAYxBEtnStJlBJxRSEXk,1267 +django/contrib/redirects/locale/os/LC_MESSAGES/django.mo,sha256=joQ-ibV9_6ctGMNPLZQLCx5fUamRQngs6_LDd_s9sMQ,1150 +django/contrib/redirects/locale/os/LC_MESSAGES/django.po,sha256=ZwFWiuGS9comy7r2kMnKuqaPOvVehVdAAuFvXM5ldxM,1358 +django/contrib/redirects/locale/pa/LC_MESSAGES/django.mo,sha256=MY-OIDNXlZth-ZRoOJ52nlUPg_51_F5k0NBIpc7GZEw,748 +django/contrib/redirects/locale/pa/LC_MESSAGES/django.po,sha256=TPDTK2ZvDyvO1ob8Qfr64QDbHVWAREfEeBO5w9jf63E,1199 +django/contrib/redirects/locale/pl/LC_MESSAGES/django.mo,sha256=DrsiZaeqMKkydQS2QyGCePj39Jh7aWR6DCMxBhZdaOU,1279 +django/contrib/redirects/locale/pl/LC_MESSAGES/django.po,sha256=0Dp53dQhxQyt_NDNuRYs2vcsQzPkbyo5RzewEY35CEc,1512 +django/contrib/redirects/locale/pt/LC_MESSAGES/django.mo,sha256=WocPaVk3fQEz_MLmGVtFBGwsThD-gNU7GDocqEbeaBA,1129 +django/contrib/redirects/locale/pt/LC_MESSAGES/django.po,sha256=ptCzoE41c9uFAbgSjb6VHSFYPEUv_51YyBdoThXN3XA,1350 +django/contrib/redirects/locale/pt_BR/LC_MESSAGES/django.mo,sha256=VN3i7dnTRkGwPmOfTXnQW3GNDpBpbc9gvBed2Mz0gQw,1162 +django/contrib/redirects/locale/pt_BR/LC_MESSAGES/django.po,sha256=DXFcxZ75Jz0l5uQV2skTW3y6WJVpjor7lr6vg2eADfA,1408 +django/contrib/redirects/locale/ro/LC_MESSAGES/django.mo,sha256=HSQTOHGdyzkHlm6Ti1FBLU7Oj896At-xJJnwQF4Orgw,1222 +django/contrib/redirects/locale/ro/LC_MESSAGES/django.po,sha256=OYNV39_gWPt8ZgHDs6Bkv5_o4rveTnnlhcZLXhbwPXw,1453 +django/contrib/redirects/locale/ru/LC_MESSAGES/django.mo,sha256=pV_IGa3dFWwIymZyWyVdmQHdJO2dpMTm0ut3W1qBz0I,1456 +django/contrib/redirects/locale/ru/LC_MESSAGES/django.po,sha256=Mz9QdfJfRwOGxvZ4VmvXgBDImvp0uHZMCg4Z6-Yvf3I,1669 +django/contrib/redirects/locale/sk/LC_MESSAGES/django.mo,sha256=4U3JX_UnnYmBNtKseSUobgTslILeZWfn37Dg7q52svY,1160 +django/contrib/redirects/locale/sk/LC_MESSAGES/django.po,sha256=8tDwfdkGAXo4eAR66nfkIdegbyjc3-qBfrMZgrf_cF4,1376 +django/contrib/redirects/locale/sl/LC_MESSAGES/django.mo,sha256=GAZtOFSUxsOHdXs3AzT40D-3JFWIlNDZU_Z-cMvdaHo,1173 +django/contrib/redirects/locale/sl/LC_MESSAGES/django.po,sha256=gkZTyxNh8L2gNxyLVzm-M1HTiK8KDvughTa2MK9NzWo,1351 +django/contrib/redirects/locale/sq/LC_MESSAGES/django.mo,sha256=Js-5m2a1qd32OUxH-iPrgdUGfmMMaAjAXEZHpmQxr-0,1125 +django/contrib/redirects/locale/sq/LC_MESSAGES/django.po,sha256=WpenX8X1zZ6vAM7xi0kAmEXtPX-hz-m1QS4V7UzBeBQ,1307 +django/contrib/redirects/locale/sr/LC_MESSAGES/django.mo,sha256=98eGFHvaFIE3E9wHJZASamCveVAq3QIpbomp-v98PP0,1350 +django/contrib/redirects/locale/sr/LC_MESSAGES/django.po,sha256=oBVQHiz2S5tyx7oLxYSj_iPObbrQb_fdoh9YRXm7mno,1542 +django/contrib/redirects/locale/sr_Latn/LC_MESSAGES/django.mo,sha256=NtYbs9CByLODdJjIZl9tww4H0lYTkzlQyxQPH3zDFiI,1145 +django/contrib/redirects/locale/sr_Latn/LC_MESSAGES/django.po,sha256=QaY-2djs6TVf7eGtExSP_68ZLMlBO-rOj1HgvlIJ5Sw,1354 +django/contrib/redirects/locale/sv/LC_MESSAGES/django.mo,sha256=y1KpTjzF2FWY_x373UyaEFTTNYPT6hroB6zvA1ev010,1147 +django/contrib/redirects/locale/sv/LC_MESSAGES/django.po,sha256=7Us64PRHRyIZ8D7lY6HCef9xXnoSfwWI3YYtlNEaFSo,1362 +django/contrib/redirects/locale/sw/LC_MESSAGES/django.mo,sha256=oJnTp9CTgNsg5TSOV_aPZIUXdr6-l65hAZbaARZCO2w,1078 +django/contrib/redirects/locale/sw/LC_MESSAGES/django.po,sha256=CTVwA3O7GUQb7l1WpbmT8kOfqr7DpqnIyQt3HWJ6YTQ,1245 +django/contrib/redirects/locale/ta/LC_MESSAGES/django.mo,sha256=AE6Py2_CV2gQKjKQAa_UgkLT9i61x3i1hegQpRGuZZM,1502 +django/contrib/redirects/locale/ta/LC_MESSAGES/django.po,sha256=ojdq8p4HnwtK0n6By2I6_xuucOpJIobJEGRMGc_TrS8,1700 +django/contrib/redirects/locale/te/LC_MESSAGES/django.mo,sha256=Gtcs4cbgrD7-bSkPKiPbM5DcjONS2fSdHhvWdbs_E1M,467 +django/contrib/redirects/locale/te/LC_MESSAGES/django.po,sha256=RT-t3TjcOLyNQQWljVrIcPWErKssh_HQMyGujloy-EI,939 +django/contrib/redirects/locale/th/LC_MESSAGES/django.mo,sha256=1l6eO0k1KjcmuRJKUS4ZdtJGhAUmUDMAMIeNwEobQqY,1331 +django/contrib/redirects/locale/th/LC_MESSAGES/django.po,sha256=DVVqpGC6zL8Hy8e6P8ZkhKbvcMJmXV5euLxmfoTCtms,1513 +django/contrib/redirects/locale/tr/LC_MESSAGES/django.mo,sha256=RiZJ_Acsxwz0d4q1JTZWPnbCpW8uiedE_X8PRJdZB0E,1124 +django/contrib/redirects/locale/tr/LC_MESSAGES/django.po,sha256=Gr6fwZ2nLkbosrikKpSgODsRf40GKXBc3RL9pOffCGM,1348 +django/contrib/redirects/locale/tt/LC_MESSAGES/django.mo,sha256=Hf1JXcCGNwedxy1nVRM_pQ0yUebC-tvOXr7P0h86JyI,1178 +django/contrib/redirects/locale/tt/LC_MESSAGES/django.po,sha256=2WCyBQtqZk-8GXgtu-x94JYSNrryy2QoMnirhiBrgV0,1376 +django/contrib/redirects/locale/udm/LC_MESSAGES/django.mo,sha256=CNmoKj9Uc0qEInnV5t0Nt4ZnKSZCRdIG5fyfSsqwky4,462 +django/contrib/redirects/locale/udm/LC_MESSAGES/django.po,sha256=xsxlm4itpyLlLdPQRIHLuvTYRvruhM3Ezc9jtp3XSm4,934 +django/contrib/redirects/locale/uk/LC_MESSAGES/django.mo,sha256=nCpHZGF8aYaw3UDrSXugypDHEIkWYHXncmyC_YHzxw0,1414 +django/contrib/redirects/locale/uk/LC_MESSAGES/django.po,sha256=-UDqtKOxcTA4C4O0QW7GnjtnXtEmwDfvfLmNQFMI1No,1700 +django/contrib/redirects/locale/ur/LC_MESSAGES/django.mo,sha256=CQkt-yxyAaTd_Aj1ZZC8s5-4fI2TRyTEZ-SYJZgpRrQ,1138 +django/contrib/redirects/locale/ur/LC_MESSAGES/django.po,sha256=CkhmN49PvYTccvlSRu8qGpcbx2C-1aY7K3Lq1VC2fuM,1330 +django/contrib/redirects/locale/uz/LC_MESSAGES/django.mo,sha256=Q5r3tSAy6M2wsn59n68a9bwAgi5oakrtqKLv4f1fSRs,592 +django/contrib/redirects/locale/uz/LC_MESSAGES/django.po,sha256=8A3YApKQjbEDhEMrI-2yR8XNNiXUScXAfDbyP7epS-0,1058 +django/contrib/redirects/locale/vi/LC_MESSAGES/django.mo,sha256=BquXycJKh-7-D9p-rGUNnjqzs1d6S1YhEJjFW8_ARFA,1106 +django/contrib/redirects/locale/vi/LC_MESSAGES/django.po,sha256=xsCASrGZNbQk4d1mhsTZBcCpPJ0KO6Jr4Zz1wfnL67s,1301 +django/contrib/redirects/locale/zh_Hans/LC_MESSAGES/django.mo,sha256=6BYNDezC7sivl2kFYJRZf2lphYze8z4PVhdRG9XU0xY,1093 +django/contrib/redirects/locale/zh_Hans/LC_MESSAGES/django.po,sha256=m0lZpC3XCfE-H9-PFK5-v9gD9zgXIn_VMqsnO36CiZw,1359 +django/contrib/redirects/locale/zh_Hant/LC_MESSAGES/django.mo,sha256=35HyQ7p6_pB1xNNbNzjNX8JhMa5HOzAmkF5YUgC70N0,1096 +django/contrib/redirects/locale/zh_Hant/LC_MESSAGES/django.po,sha256=bbDd7Y0E1xAv7EmqAQI3am7VhDo3NxBgjRP8WvolS1s,1313 +django/contrib/redirects/migrations/0001_initial.py,sha256=jl-W40P9AY3VHUP69TmXS3lKVFlwGVIHJ04lEFBkgEY,1491 +django/contrib/redirects/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/sessions/__init__.py,sha256=W7kKt-gCROzrUA6UpIRAit3SHa-coN4_A4fphGikCEk,67 +django/contrib/sessions/apps.py,sha256=q_fkp7a7_1GT14XHkHgNIET0sItgfBeFT7B137_KeZM,194 +django/contrib/sessions/base_session.py,sha256=5FofwClB_ukwCsXPfJbzUvKoYaMQ78B_lWXU0fqSg1k,1490 +django/contrib/sessions/exceptions.py,sha256=epvfG9haHc8p34Ic6IqUSC-Yj06Ruh2TSm9G6HQMdno,256 +django/contrib/sessions/middleware.py,sha256=3fVSQXjKOPhVLEiLvgkpF-PxdBQO5a6EX0ugryjzSl8,3490 +django/contrib/sessions/models.py,sha256=vmROoszsXHnPHoSbFca8k-U9Z8Wg6EAHYeEK87VHHk8,1257 +django/contrib/sessions/serializers.py,sha256=clq2ENNQ3ujEuuc5gHSDvaz30kWWHelnQPY6tzUu0qs,424 +django/contrib/sessions/backends/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/sessions/backends/base.py,sha256=2jiGIB_SXYAz-1uk99FIPUf4oNgDyIWm1ZQp3FWGw88,11887 +django/contrib/sessions/backends/cache.py,sha256=-qeSz07gUidiY_xq7imMJ3SP17J_rLsIO50KxOhq_8E,2713 +django/contrib/sessions/backends/cached_db.py,sha256=c9JtGXxyJYRT7MMVrqwo0jw1v3JCpaBNXeL8d1tAfBE,2011 +django/contrib/sessions/backends/db.py,sha256=zzhv0nQ4OIFeyM2QXrIUG26l_IJosagKaGOI2NcZnz4,3770 +django/contrib/sessions/backends/file.py,sha256=rDpqOwgFsS79EGE4L3TlKBWE0e7TbdHS77wcLoQ-Jkw,7758 +django/contrib/sessions/backends/signed_cookies.py,sha256=jcBrD3gUHrdETWf6JvwDVCFe4eAiRbH8i2oMJjwpXPs,2696 +django/contrib/sessions/locale/af/LC_MESSAGES/django.mo,sha256=0DS0pgVrMN-bUimDfesgHs8Lgr0loz2c6nJdz58RxyQ,717 +django/contrib/sessions/locale/af/LC_MESSAGES/django.po,sha256=ZJRLBshQCAiTTAUycdB3MZIadLeHR5LxbSlDvSWLnEo,838 +django/contrib/sessions/locale/ar/LC_MESSAGES/django.mo,sha256=yoepqaR68PTGLx--cAOzP94Sqyl5xIYpeQ0IFWgY380,846 +django/contrib/sessions/locale/ar/LC_MESSAGES/django.po,sha256=ZgwtBYIdtnqp_8nKHXF1NVJFzQU81-3yv9b7STrQHMc,995 +django/contrib/sessions/locale/ast/LC_MESSAGES/django.mo,sha256=hz2m-PkrHby2CKfIOARj6kCzisT-Vs0syfDSTx_iVVw,702 +django/contrib/sessions/locale/ast/LC_MESSAGES/django.po,sha256=M90j1Nx6oDJ16hguUkfKYlyb5OymUeZ5xzPixWxSC7I,846 +django/contrib/sessions/locale/az/LC_MESSAGES/django.mo,sha256=_4XcYdtRasbCjRoaWGoULsXX2cEa--KdRdqbnGoaRuM,731 +django/contrib/sessions/locale/az/LC_MESSAGES/django.po,sha256=qYd7vz6A-hHQNwewzI6wEsxRVLdoc2xLGm1RPW0Hxc4,891 +django/contrib/sessions/locale/be/LC_MESSAGES/django.mo,sha256=8b7MeFDTL6VStOnVHtkb_o4Iiy0gTHoCwTUbT1vRr9Q,895 +django/contrib/sessions/locale/be/LC_MESSAGES/django.po,sha256=tHsYVn3XNTcukB0SrHUWP1iV763rrQHCimOyJHRPiek,1023 +django/contrib/sessions/locale/bg/LC_MESSAGES/django.mo,sha256=DGp3j3E0-5bBjFCKx9c6Jcz9ZaXysd2DgVPuxROWDmU,783 +django/contrib/sessions/locale/bg/LC_MESSAGES/django.po,sha256=AEgnW2F8S85JZOh4JVJ6nLynsmHRZOBBoOluVxHosVo,942 +django/contrib/sessions/locale/bn/LC_MESSAGES/django.mo,sha256=0BdFN7ou9tmoVG00fCA-frb1Tri3iKz43W7SWal398s,762 +django/contrib/sessions/locale/bn/LC_MESSAGES/django.po,sha256=LycmTel6LXV2HGGN6qzlAfID-cVEQCNnW1Nv_hbWXJk,909 +django/contrib/sessions/locale/br/LC_MESSAGES/django.mo,sha256=6ubPQUyXX08KUssyVZBMMkTlD94mlA6wzsteAMiZ8C8,1027 +django/contrib/sessions/locale/br/LC_MESSAGES/django.po,sha256=LKxGGHOQejKpUp18rCU2FXW8D_H3WuP_P6dPlEluwcE,1201 +django/contrib/sessions/locale/bs/LC_MESSAGES/django.mo,sha256=M7TvlJMrSUAFhp7oUSpUKejnbTuIK-19yiGBBECl9Sc,759 +django/contrib/sessions/locale/bs/LC_MESSAGES/django.po,sha256=Ur0AeRjXUsLgDJhcGiw75hRk4Qe98DzPBOocD7GFDRQ,909 +django/contrib/sessions/locale/ca/LC_MESSAGES/django.mo,sha256=tbaZ48PaihGGD9-2oTKiMFY3kbXjU59nNciCRINOBNk,738 +django/contrib/sessions/locale/ca/LC_MESSAGES/django.po,sha256=tJuJdehKuD9aXOauWOkE5idQhsVsLbeg1Usmc6N_SP0,906 +django/contrib/sessions/locale/cs/LC_MESSAGES/django.mo,sha256=4ZL8ECaHYx2PdPoQlpQ1YiNVVyQRH1TR5NblBRmmxB8,747 +django/contrib/sessions/locale/cs/LC_MESSAGES/django.po,sha256=-Y7fL3Ge6Cfiet1UZtA6xejOnpD0FPj37ruqImKxKn4,906 +django/contrib/sessions/locale/cy/LC_MESSAGES/django.mo,sha256=GeWVeV2PvgLQV8ecVUA2g3-VvdzMsedgIDUSpn8DByk,774 +django/contrib/sessions/locale/cy/LC_MESSAGES/django.po,sha256=zo18MXtkEdO1L0Q6ewFurx3lsEWTCdh0JpQJTmvw5bY,952 +django/contrib/sessions/locale/da/LC_MESSAGES/django.mo,sha256=cR9YutBJxPiisDQ-C14H2J7TiNOVmna3094Vuq0txqs,722 +django/contrib/sessions/locale/da/LC_MESSAGES/django.po,sha256=qX_Oo7niVo57bazlIYFA6bnVmPBclUUTWvZFYNLaG04,880 +django/contrib/sessions/locale/de/LC_MESSAGES/django.mo,sha256=N3kTal0YK9z7Te3zYGLbJmoSB6oWaviWDLGdPlsPa9g,721 +django/contrib/sessions/locale/de/LC_MESSAGES/django.po,sha256=0qnfDeCUQN2buKn6R0MvwhQP05XWxSu-xgvfxvnJe3k,844 +django/contrib/sessions/locale/dsb/LC_MESSAGES/django.mo,sha256=RABl3WZmY6gLh4IqmTUhoBEXygDzjp_5lLF1MU9U5fA,810 +django/contrib/sessions/locale/dsb/LC_MESSAGES/django.po,sha256=cItKs5tASYHzDxfTg0A_dgBQounpzoGyOEFn18E_W_g,934 +django/contrib/sessions/locale/el/LC_MESSAGES/django.mo,sha256=QbTbmcfgc8_4r5hFrIghDhk2XQ4f8_emKmqupMG2ah0,809 +django/contrib/sessions/locale/el/LC_MESSAGES/django.po,sha256=HeaEbpVmFhhrZt2NsZteYaYoeo8FYKZF0IoNJwtzZkc,971 +django/contrib/sessions/locale/en/LC_MESSAGES/django.mo,sha256=U0OV81NfbuNL9ctF-gbGUG5al1StqN-daB-F-gFBFC8,356 +django/contrib/sessions/locale/en/LC_MESSAGES/django.po,sha256=afaM-IIUZtcRZduojUTS8tT0w7C4Ya9lXgReOvq_iF0,804 +django/contrib/sessions/locale/en_AU/LC_MESSAGES/django.mo,sha256=dTndJxA-F1IE_nMUOtf1sRr7Kq2s_8yjgKk6mkWkVu4,486 +django/contrib/sessions/locale/en_AU/LC_MESSAGES/django.po,sha256=gvnvUpim1l7oImnzPXqBww-Uz0TgGjzCLaaszpdkQ10,761 +django/contrib/sessions/locale/en_GB/LC_MESSAGES/django.mo,sha256=T5NQCTYkpERfP9yKbUvixT0VdBt1zGmGB8ITlkVc420,707 +django/contrib/sessions/locale/en_GB/LC_MESSAGES/django.po,sha256=1ks_VE1qpEfPcyKg0HybkTG0-DTttTHTfUPhQCR53sw,849 +django/contrib/sessions/locale/eo/LC_MESSAGES/django.mo,sha256=eBvYQbZS_WxVV3QCSZAOyHNIljC2ZXxVc4mktUuXVjI,727 +django/contrib/sessions/locale/eo/LC_MESSAGES/django.po,sha256=Ru9xicyTgHWVHh26hO2nQNFRQmwBnYKEagsS8TZRv3E,917 +django/contrib/sessions/locale/es/LC_MESSAGES/django.mo,sha256=jbHSvHjO2OCLlBD66LefocKOEbefWbPhj-l3NugiWuc,734 +django/contrib/sessions/locale/es/LC_MESSAGES/django.po,sha256=fY5WXeONEXHeuBlH0LkvzdZ2CSgbvLZ8BJc429aIbhI,909 +django/contrib/sessions/locale/es_AR/LC_MESSAGES/django.mo,sha256=ACc53N0nFsdhIhvuinICI6XhGhHwxMeZjA--46TAXso,735 +django/contrib/sessions/locale/es_AR/LC_MESSAGES/django.po,sha256=AnmvjeOA7EBTJ6wMOkCl8JRLVYRU8KS0egPijcKutns,879 +django/contrib/sessions/locale/es_CO/LC_MESSAGES/django.mo,sha256=UP7ia0gV9W-l0Qq5AS4ZPadJtml8iuzzlS5C9guMgh8,754 +django/contrib/sessions/locale/es_CO/LC_MESSAGES/django.po,sha256=_XeiiRWvDaGjofamsRHr5up_EQvcw0w-GLLeWK27Af8,878 +django/contrib/sessions/locale/es_MX/LC_MESSAGES/django.mo,sha256=MDM0K3xMvyf8ymvAurHYuacpxfG_YfJFyNnp1uuc6yY,756 +django/contrib/sessions/locale/es_MX/LC_MESSAGES/django.po,sha256=Y7VNa16F_yyK7_XJvF36rR2XNW8aBJK4UDweufyXpxE,892 +django/contrib/sessions/locale/es_VE/LC_MESSAGES/django.mo,sha256=59fZBDut-htCj38ZUoqPjhXJPjZBz-xpU9__QFr3kLs,486 +django/contrib/sessions/locale/es_VE/LC_MESSAGES/django.po,sha256=zWjgB0AmsmhX2tjk1PgldttqY56Czz8epOVCaYWXTLU,761 +django/contrib/sessions/locale/et/LC_MESSAGES/django.mo,sha256=aL1jZWourEC7jtjsuBZHD-Gw9lpL6L1SoqjTtzguxD0,737 +django/contrib/sessions/locale/et/LC_MESSAGES/django.po,sha256=VNBYohAOs59jYWkjVMY-v2zwVy5AKrtBbFRJZLwdCFg,899 +django/contrib/sessions/locale/eu/LC_MESSAGES/django.mo,sha256=M9piOB_t-ZnfN6pX-jeY0yWh2S_5cCuo1oGiy7X65A4,728 +django/contrib/sessions/locale/eu/LC_MESSAGES/django.po,sha256=bHdSoknoH0_dy26e93tWVdO4TT7rnCPXlSLPsYAhwyw,893 +django/contrib/sessions/locale/fa/LC_MESSAGES/django.mo,sha256=6DdJcqaYuBnhpFFHR42w-RqML0eQPFMAUEEDY0Redy8,755 +django/contrib/sessions/locale/fa/LC_MESSAGES/django.po,sha256=NgJlLPsS9FXjRzKqGgUTkNG9puYrBRf0KQK-QqXMIxQ,916 +django/contrib/sessions/locale/fi/LC_MESSAGES/django.mo,sha256=oAugvlTEvJmG8KsZw09WcfnifYY5oHnGo4lxcxqKeaY,721 +django/contrib/sessions/locale/fi/LC_MESSAGES/django.po,sha256=BVVrjbZZtLGAuZ9HK63p769CbjZFZMlS4BewSMfNMKU,889 +django/contrib/sessions/locale/fr/LC_MESSAGES/django.mo,sha256=HQ3DEjxHQeHRYmu7SYVSDl1ZQHhamnw-mJ5vci5io1g,733 +django/contrib/sessions/locale/fr/LC_MESSAGES/django.po,sha256=hARxGdtBOzEZ_iVyzkNvcKlgyM8fOkdXTH3upj2XFYM,893 +django/contrib/sessions/locale/fy/LC_MESSAGES/django.mo,sha256=YQQy7wpjBORD9Isd-p0lLzYrUgAqv770_56-vXa0EOc,476 +django/contrib/sessions/locale/fy/LC_MESSAGES/django.po,sha256=U-VEY4WbmIkmrnPK4Mv-B-pbdtDzusBCVmE8iHyvzFU,751 +django/contrib/sessions/locale/ga/LC_MESSAGES/django.mo,sha256=zTrydRCRDiUQwF4tQ3cN1-5w36i6KptagsdA5_SaGy0,747 +django/contrib/sessions/locale/ga/LC_MESSAGES/django.po,sha256=Qpk1JaUWiHSEPdgBk-O_KfvGzwlZ4IAA6c6-nsJe400,958 +django/contrib/sessions/locale/gd/LC_MESSAGES/django.mo,sha256=Yi8blY_fUD5YTlnUD6YXZvv1qjm4QDriO6CJIUe1wIk,791 +django/contrib/sessions/locale/gd/LC_MESSAGES/django.po,sha256=fEa40AUqA5vh743Zqv0FO2WxSFXGYk4IzUR4BoaP-C4,890 +django/contrib/sessions/locale/gl/LC_MESSAGES/django.mo,sha256=uQ2ZmtUNoVCB2mSlMGSy-j4a_hu9PBfJDo796d8beFA,701 +django/contrib/sessions/locale/gl/LC_MESSAGES/django.po,sha256=FovTLHdVK15N9FI9lFFAOP4zt7GsvO0kKdocgeVDkNk,902 +django/contrib/sessions/locale/he/LC_MESSAGES/django.mo,sha256=qhgjSWfGAOgl-i7iwzSrJttx88xcj1pB0iLkEK64mJU,809 +django/contrib/sessions/locale/he/LC_MESSAGES/django.po,sha256=gtBgkC2bpVyWm8B5pjV3-9tBo0xqUsJuJz2neN79isg,969 +django/contrib/sessions/locale/hi/LC_MESSAGES/django.mo,sha256=naqxOjfAnNKy3qqnUG-4LGf9arLRJpjyWWmSj5tEfao,759 +django/contrib/sessions/locale/hi/LC_MESSAGES/django.po,sha256=WnTGvOz9YINMcUJg2BYCaHceZLKaTfsba_0AZtRNP38,951 +django/contrib/sessions/locale/hr/LC_MESSAGES/django.mo,sha256=axyJAmXmadpFxIhu8rroVD8NsGGadQemh9-_ZDo7L1U,819 +django/contrib/sessions/locale/hr/LC_MESSAGES/django.po,sha256=3G-qOYXBO-eMWWsa5LwTCW9M1oF0hlWgEz7hAK8hJqI,998 +django/contrib/sessions/locale/hsb/LC_MESSAGES/django.mo,sha256=_OXpOlCt4KU0i65Iw4LMjSsyn__E9wH20l9vDNBSEzw,805 +django/contrib/sessions/locale/hsb/LC_MESSAGES/django.po,sha256=yv3vX_UCDrdl07GQ79Mnytwgz2oTvySYOG9enzMpFJA,929 +django/contrib/sessions/locale/hu/LC_MESSAGES/django.mo,sha256=ik40LnsWkKYEUioJB9e11EX9XZ-qWMa-S7haxGhM-iI,727 +django/contrib/sessions/locale/hu/LC_MESSAGES/django.po,sha256=1-UWEEsFxRwmshP2x4pJbitWIGZ1YMeDDxnAX-XGNxc,884 +django/contrib/sessions/locale/hy/LC_MESSAGES/django.mo,sha256=x6VQWGdidRJFUJme-6jf1pcitktcQHQ7fhmw2UBej1Q,815 +django/contrib/sessions/locale/hy/LC_MESSAGES/django.po,sha256=eRMa3_A2Vx195mx2lvza1v-wcEcEeMrU63f0bgPPFjc,893 +django/contrib/sessions/locale/ia/LC_MESSAGES/django.mo,sha256=-o4aQPNJeqSDRSLqcKuYvJuKNBbFqDJDe3IzHgSgZeQ,744 +django/contrib/sessions/locale/ia/LC_MESSAGES/django.po,sha256=PULLDd3QOIU03kgradgQzT6IicoPhLPlUvFgRl-tGbA,869 +django/contrib/sessions/locale/id/LC_MESSAGES/django.mo,sha256=mOaIF0NGOO0-dt-nhHL-i3cfvt9-JKTbyUkFWPqDS9Y,705 +django/contrib/sessions/locale/id/LC_MESSAGES/django.po,sha256=EA6AJno3CaFOO-dEU9VQ_GEI-RAXS0v0uFqn1RJGjEs,914 +django/contrib/sessions/locale/io/LC_MESSAGES/django.mo,sha256=_rqAY6reegqmxmWc-pW8_kDaG9zflZuD-PGOVFsjRHo,683 +django/contrib/sessions/locale/io/LC_MESSAGES/django.po,sha256=tbKMxGuB6mh_m0ex9rO9KkTy6qyuRW2ERrQsGwmPiaw,840 +django/contrib/sessions/locale/is/LC_MESSAGES/django.mo,sha256=3QeMl-MCnBie9Sc_aQ1I7BrBhkbuArpoSJP95UEs4lg,706 +django/contrib/sessions/locale/is/LC_MESSAGES/django.po,sha256=LADIFJv8L5vgDJxiQUmKPSN64zzzrIKImh8wpLBEVWQ,853 +django/contrib/sessions/locale/it/LC_MESSAGES/django.mo,sha256=qTY3O-0FbbpZ5-BR5xOJWP0rlnIkBZf-oSawW_YJWlk,726 +django/contrib/sessions/locale/it/LC_MESSAGES/django.po,sha256=hEv0iTGLuUvEBk-lF-w7a9P3ifC0-eiodNtuSc7cXhg,869 +django/contrib/sessions/locale/ja/LC_MESSAGES/django.mo,sha256=hbv9FzWzXRIGRh_Kf_FLQB34xfmPU_9RQKn9u1kJqGU,757 +django/contrib/sessions/locale/ja/LC_MESSAGES/django.po,sha256=ppGx5ekOWGgDF3vzyrWsqnFUZ-sVZZhiOhvAzl_8v54,920 +django/contrib/sessions/locale/ka/LC_MESSAGES/django.mo,sha256=VZ-ysrDbea_-tMV-1xtlTeW62IAy2RWR94V3Y1iSh4U,803 +django/contrib/sessions/locale/ka/LC_MESSAGES/django.po,sha256=MDOG7BAO8Ez75CfgERCq1zA3syJbvQKpc4wBVlryfqQ,950 +django/contrib/sessions/locale/kab/LC_MESSAGES/django.mo,sha256=W_yE0NDPJrVznA2Qb89VuprJNwyxSg59ovvjkQe6mAs,743 +django/contrib/sessions/locale/kab/LC_MESSAGES/django.po,sha256=FJeEuv4P3NT_PpWHEUsQVSWXu65nYkJ6Z2AlbSKb0ZA,821 +django/contrib/sessions/locale/kk/LC_MESSAGES/django.mo,sha256=FROGz_MuIhsIU5_-EYV38cHnRZrc3-OxxkBeK0ax9Rk,810 +django/contrib/sessions/locale/kk/LC_MESSAGES/django.po,sha256=l5gu1XfvRMNhCHBl-NTGoUHWa0nRSxqSDt0zljpr7Kg,1024 +django/contrib/sessions/locale/km/LC_MESSAGES/django.mo,sha256=VOuKsIG2DEeCA5JdheuMIeJlpmAhKrI6lD4KWYqIIPk,929 +django/contrib/sessions/locale/km/LC_MESSAGES/django.po,sha256=09i6Nd_rUK7UqFpJ70LMXTR6xS0NuGETRLe0CopMVBk,1073 +django/contrib/sessions/locale/kn/LC_MESSAGES/django.mo,sha256=X5svX5_r3xZUy4OjUuo2gItc5PIOSjZOvE5IZwnM6Io,814 +django/contrib/sessions/locale/kn/LC_MESSAGES/django.po,sha256=Rq-I2veQe5l7Q7HG9pRY_mKeNcxhSRDgqphKbuNpoNc,961 +django/contrib/sessions/locale/ko/LC_MESSAGES/django.mo,sha256=EUyVQYGtiFJg01mP30a0iOqBYHvpzHAcGTZM28Ubs5Q,700 +django/contrib/sessions/locale/ko/LC_MESSAGES/django.po,sha256=PjntvSzRz_Aekj9VFhGsP5yO6rAsxTMzwFj58JqToIU,855 +django/contrib/sessions/locale/lb/LC_MESSAGES/django.mo,sha256=xokesKl7h7k9dXFKIJwGETgwx1Ytq6mk2erBSxkgY-o,474 +django/contrib/sessions/locale/lb/LC_MESSAGES/django.po,sha256=3igeAnQjDg6D7ItBkQQhyBoFJOZlBxT7NoZiExwD-Fo,749 +django/contrib/sessions/locale/lt/LC_MESSAGES/django.mo,sha256=L9w8-qxlDlCqR_2P0PZegfhok_I61n0mJ1koJxzufy4,786 +django/contrib/sessions/locale/lt/LC_MESSAGES/django.po,sha256=7e5BmXuaHHgGX5W1eC6wIH2QyMTNOg4JZjkZM0i-jTc,952 +django/contrib/sessions/locale/lv/LC_MESSAGES/django.mo,sha256=exEzDUNwNS0GLsUkKPu_SfqBxU7T6VRA_T2schIQZ88,753 +django/contrib/sessions/locale/lv/LC_MESSAGES/django.po,sha256=fBgQEbsGg1ECVm1PFDrS2sfKs2eqmsqrSYzx9ELotNQ,909 +django/contrib/sessions/locale/mk/LC_MESSAGES/django.mo,sha256=4oTWp8-qzUQBiqG32hNieABgT3O17q2C4iEhcFtAxLA,816 +django/contrib/sessions/locale/mk/LC_MESSAGES/django.po,sha256=afApb5YRhPXUWR8yF_TTym73u0ov7lWiwRda1-uNiLY,988 +django/contrib/sessions/locale/ml/LC_MESSAGES/django.mo,sha256=tff5TsHILSV1kAAB3bzHQZDB9fgMglZJTofzCunGBzc,854 +django/contrib/sessions/locale/ml/LC_MESSAGES/django.po,sha256=eRkeupt42kUey_9vJmlH8USshnXPZ8M7aYHq88u-5iY,1016 +django/contrib/sessions/locale/mn/LC_MESSAGES/django.mo,sha256=CcCH2ggVYrD29Q11ZMthcscBno2ePkQDbZfoYquTRPM,784 +django/contrib/sessions/locale/mn/LC_MESSAGES/django.po,sha256=nvcjbJzXiDvWFXrM5CxgOQIq8XucsZEUVdYkY8LnCRE,992 +django/contrib/sessions/locale/mr/LC_MESSAGES/django.mo,sha256=2Z5jaGJzpiJTCnhCk8ulCDeAdj-WwR99scdHFPRoHoA,468 +django/contrib/sessions/locale/mr/LC_MESSAGES/django.po,sha256=FQRdZ-qIDuvTCrwbnWfxoxNi8rywLSebcNbxGvr-hb0,743 +django/contrib/sessions/locale/my/LC_MESSAGES/django.mo,sha256=8zzzyfJYok969YuAwDUaa6YhxaSi3wcXy3HRNXDb_70,872 +django/contrib/sessions/locale/my/LC_MESSAGES/django.po,sha256=mfs0zRBI0tugyyEfXBZzZ_FMIohydq6EYPZGra678pw,997 +django/contrib/sessions/locale/nb/LC_MESSAGES/django.mo,sha256=hfJ1NCFgcAAtUvNEpaZ9b31PyidHxDGicifUWANIbM8,717 +django/contrib/sessions/locale/nb/LC_MESSAGES/django.po,sha256=yXr6oYuiu01oELdQKuztQFWz8x5C2zS5OzEfU9MHJsU,908 +django/contrib/sessions/locale/ne/LC_MESSAGES/django.mo,sha256=slFgMrqGVtLRHdGorLGPpB09SM92_WnbnRR0rlpNlPQ,802 +django/contrib/sessions/locale/ne/LC_MESSAGES/django.po,sha256=1vyoiGnnaB8f9SFz8PGfzpw6V_NoL78DQwjjnB6fS98,978 +django/contrib/sessions/locale/nl/LC_MESSAGES/django.mo,sha256=X-ZuB8Zn9c5saUvUf8gj9R8gyrQuKUyUDVfs_0IvCY0,733 +django/contrib/sessions/locale/nl/LC_MESSAGES/django.po,sha256=smRr-QPGm6h6hdXxghggWES8b2NnL7yDQ07coUypa8g,909 +django/contrib/sessions/locale/nn/LC_MESSAGES/django.mo,sha256=042gOyJuXb51nG7gxI_rYst9QWuB3thtAeevKpDLFVQ,695 +django/contrib/sessions/locale/nn/LC_MESSAGES/django.po,sha256=j2kDL1vDsHoBX_ky6_S0tWxaqFst6v7OLqqlt6N2ECI,842 +django/contrib/sessions/locale/os/LC_MESSAGES/django.mo,sha256=xVux1Ag45Jo9HQBbkrRzcWrNjqP09nMQl16jIh0YVlo,732 +django/contrib/sessions/locale/os/LC_MESSAGES/django.po,sha256=1hG5Vsz2a2yW05_Z9cTNrBKtK9VRPZuQdx4KJ_0n98o,892 +django/contrib/sessions/locale/pa/LC_MESSAGES/django.mo,sha256=qEx4r_ONwXK1-qYD5uxxXEQPqK5I6rf38QZoUSm7UVA,771 +django/contrib/sessions/locale/pa/LC_MESSAGES/django.po,sha256=M7fmVGP8DtZGEuTV3iJhuWWqILVUTDZvUey_mrP4_fM,918 +django/contrib/sessions/locale/pl/LC_MESSAGES/django.mo,sha256=55aWzhu56-g9b84xx-zfBDIDd_pH82iLu7Nx87HcCRU,869 +django/contrib/sessions/locale/pl/LC_MESSAGES/django.po,sha256=C_MJBB-vwTZbx-t4-mzun-RxHhdOVv04b6xrWdnTv8E,1084 +django/contrib/sessions/locale/pt/LC_MESSAGES/django.mo,sha256=dlJF7hF4GjLmQPdAJhtf-FCKX26XsOmZlChOcxxIqPk,738 +django/contrib/sessions/locale/pt/LC_MESSAGES/django.po,sha256=cOycrw3HCHjSYBadpalyrg5LdRTlqZCTyMh93GOQ8O0,896 +django/contrib/sessions/locale/pt_BR/LC_MESSAGES/django.mo,sha256=XHNF5D8oXIia3e3LYwxd46a2JOgDc_ykvc8yuo21fT0,757 +django/contrib/sessions/locale/pt_BR/LC_MESSAGES/django.po,sha256=K_zxKaUKngWPFpvHgXOcymJEsiONSw-OrVrroRXmUUk,924 +django/contrib/sessions/locale/ro/LC_MESSAGES/django.mo,sha256=WR9I9Gum_pq7Qg2Gzhf-zAv43OwR_uDtsbhtx4Ta5gE,776 +django/contrib/sessions/locale/ro/LC_MESSAGES/django.po,sha256=fEgVxL_0Llnjspu9EsXBf8AVL0DGdfF7NgV88G7WN1E,987 +django/contrib/sessions/locale/ru/LC_MESSAGES/django.mo,sha256=n-8vXR5spEbdfyeWOYWC_6kBbAppNoRrWYgqKFY6gJA,913 +django/contrib/sessions/locale/ru/LC_MESSAGES/django.po,sha256=sNqNGdoof6eXzFlh4YIp1O54MdDOAFDjD3GvAFsNP8k,1101 +django/contrib/sessions/locale/sk/LC_MESSAGES/django.mo,sha256=Yntm624Wt410RwuNPU1c-WwQoyrRrBs69VlKMlNUHeQ,766 +django/contrib/sessions/locale/sk/LC_MESSAGES/django.po,sha256=JIvzoKw_r4jZXWEaHvIYAZDAzrEkfpr0WM9dNfUlzBE,924 +django/contrib/sessions/locale/sl/LC_MESSAGES/django.mo,sha256=EE6mB8BiYRyAxK6qzurRWcaYVs96FO_4rERYQdtIt3k,770 +django/contrib/sessions/locale/sl/LC_MESSAGES/django.po,sha256=KTjBWyvaNCHbpV9K6vbnavwxxXqf2DlIqVPv7MVFcO8,928 +django/contrib/sessions/locale/sq/LC_MESSAGES/django.mo,sha256=3mGqKLgno-t7B3jyQpSaIJfDVAxbfOSDr5G9OUE7fqc,724 +django/contrib/sessions/locale/sq/LC_MESSAGES/django.po,sha256=9pzp7834LQKafe5fJzC4OKsAd6XfgtEQl6K6hVLaBQM,844 +django/contrib/sessions/locale/sr/LC_MESSAGES/django.mo,sha256=ZDBOYmWIoSyDeT0nYIIFeMtW5jwpr257CbdTZlkVeRQ,855 +django/contrib/sessions/locale/sr/LC_MESSAGES/django.po,sha256=OXQOYeac0ghuzLrwaErJGr1FczuORTu2yroFX5hvRnk,1027 +django/contrib/sessions/locale/sr_Latn/LC_MESSAGES/django.mo,sha256=f3x9f9hTOsJltghjzJMdd8ueDwzxJex6zTXsU-_Hf_Y,757 +django/contrib/sessions/locale/sr_Latn/LC_MESSAGES/django.po,sha256=HKjo7hjSAvgrIvlI0SkgF3zxz8TtKWyBT51UGNhDwek,946 +django/contrib/sessions/locale/sv/LC_MESSAGES/django.mo,sha256=SGbr0K_5iAMA22MfseAldMDgLSEBrI56pCtyV8tMAPc,707 +django/contrib/sessions/locale/sv/LC_MESSAGES/django.po,sha256=vraY3915wBYGeYu9Ro0-TlBeLWqGZP1fbckLv8y47Ys,853 +django/contrib/sessions/locale/sw/LC_MESSAGES/django.mo,sha256=Edhqp8yuBnrGtJqPO7jxobeXN4uU5wKSLrOsFO1F23k,743 +django/contrib/sessions/locale/sw/LC_MESSAGES/django.po,sha256=iY4rN4T-AA2FBQA7DiWWFvrclqKiDYQefqwwVw61-f8,858 +django/contrib/sessions/locale/ta/LC_MESSAGES/django.mo,sha256=qLIThhFQbJKc1_UVr7wVIm1rJfK2rO5m84BCB_oKq7s,801 +django/contrib/sessions/locale/ta/LC_MESSAGES/django.po,sha256=bYqtYf9XgP9IKKFJXh0u64JhRhDvPPUliI1J-NeRpKE,945 +django/contrib/sessions/locale/te/LC_MESSAGES/django.mo,sha256=kteZeivEckt4AmAeKgmgouMQo1qqSQrI8M42B16gMnQ,786 +django/contrib/sessions/locale/te/LC_MESSAGES/django.po,sha256=dQgiNS52RHrL6bV9CEO7Jk9lk3YUQrUBDCg_bP2OSZc,980 +django/contrib/sessions/locale/th/LC_MESSAGES/django.mo,sha256=D41vbkoYMdYPj3587p-c5yytLVi9pE5xvRZEYhZrxPs,814 +django/contrib/sessions/locale/th/LC_MESSAGES/django.po,sha256=43704TUv4ysKhL8T5MowZwlyv1JZrPyVGrpdIyb3r40,988 +django/contrib/sessions/locale/tr/LC_MESSAGES/django.mo,sha256=H-DMP3N3AHZj1Q9aYeBOMA10nN1CIuJkUEY7QAy1b3g,726 +django/contrib/sessions/locale/tr/LC_MESSAGES/django.po,sha256=XYKo0_P5xitYehvjMzEw2MTp_Nza-cIXEECV3dA6BmY,863 +django/contrib/sessions/locale/tt/LC_MESSAGES/django.mo,sha256=Q-FGu_ljTsxXO_EWu7zCzGwoqFXkeoTzWSlvx85VLGc,806 +django/contrib/sessions/locale/tt/LC_MESSAGES/django.po,sha256=UC85dFs_1836noZTuZEzPqAjQMFfSvj7oGmEWOGcfCA,962 +django/contrib/sessions/locale/udm/LC_MESSAGES/django.mo,sha256=CNmoKj9Uc0qEInnV5t0Nt4ZnKSZCRdIG5fyfSsqwky4,462 +django/contrib/sessions/locale/udm/LC_MESSAGES/django.po,sha256=CPml2Fn9Ax_qO5brCFDLPBoTiNdvsvJb1btQ0COwUfY,737 +django/contrib/sessions/locale/uk/LC_MESSAGES/django.mo,sha256=jzNrLuFghQMCHNRQ0ihnKMCicgear0yWiTOLnvdPszw,841 +django/contrib/sessions/locale/uk/LC_MESSAGES/django.po,sha256=GM9kNL1VoFSRfbHB5KiivIbp-nJl1aZ69wL2xszNqlM,1017 +django/contrib/sessions/locale/ur/LC_MESSAGES/django.mo,sha256=FkGIiHegr8HR8zjVyJ9TTW1T9WYtAL5Mg77nRKnKqWk,729 +django/contrib/sessions/locale/ur/LC_MESSAGES/django.po,sha256=qR4QEBTP6CH09XFCzsPSPg2Dv0LqzbRV_I67HO2OUwk,879 +django/contrib/sessions/locale/uz/LC_MESSAGES/django.mo,sha256=asPu0RhMB_Ui1li-OTVL4qIXnM9XpjsYyx5yJldDYBY,744 +django/contrib/sessions/locale/uz/LC_MESSAGES/django.po,sha256=KsHuLgGJt-KDH0h6ND7JLP2dDJAdLVHSlau4DkkfqA8,880 +django/contrib/sessions/locale/vi/LC_MESSAGES/django.mo,sha256=KriTpT-Hgr10DMnY5Bmbd4isxmSFLmav8vg2tuL2Bb8,679 +django/contrib/sessions/locale/vi/LC_MESSAGES/django.po,sha256=M7S46Q0Q961ykz_5FCAN8SXQ54w8tp4rZeZpy6bPtXs,909 +django/contrib/sessions/locale/zh_Hans/LC_MESSAGES/django.mo,sha256=zsbhIMocgB8Yn1XEBxbIIbBh8tLifvvYNlhe5U61ch8,722 +django/contrib/sessions/locale/zh_Hans/LC_MESSAGES/django.po,sha256=tPshgXjEv6pME4N082ztamJhd5whHB2_IV_egdP-LlQ,889 +django/contrib/sessions/locale/zh_Hant/LC_MESSAGES/django.mo,sha256=WZzfpFKZ41Pu8Q9SuhGu3hXwp4eiq8Dt8vdiQfxvF9M,733 +django/contrib/sessions/locale/zh_Hant/LC_MESSAGES/django.po,sha256=6IRDQu6-PAYh6SyEIcKdhuR172lX0buY8qqsU0QXlYU,898 +django/contrib/sessions/management/commands/clearsessions.py,sha256=yDcSmK65l5H1-2hiHhDlN0zivQrxm_ihNKLKt6MmRiQ,650 +django/contrib/sessions/migrations/0001_initial.py,sha256=F7fzk2d9hDPjUwx2w-lXdZcFG1h4HyHnkfcJ6aK7C-0,955 +django/contrib/sessions/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/sitemaps/__init__.py,sha256=FI4QoFGgY4j9UVt4Z3-W4M8HDBdQHzq109y7gG2Nu5s,5764 +django/contrib/sitemaps/apps.py,sha256=ktY9PcWsmv5TOlvEdG6IL8ZBbGMtZRpO24j5g7DGilU,195 +django/contrib/sitemaps/views.py,sha256=KP-cCkD4VGFbd4ZavWK79gAkZa83APeRgTx-eouny4M,3516 +django/contrib/sitemaps/management/commands/ping_google.py,sha256=gqfCpod-Wp3nFBc8mpWhbP2QSWsWE74IJ-hlcm8_7SY,558 +django/contrib/sitemaps/templates/sitemap.xml,sha256=KTiksPVpo22dkRjjavoJtckzo-Rin7aZ_QgbC42Y8O0,479 +django/contrib/sitemaps/templates/sitemap_index.xml,sha256=VqDmRlWMx9kC6taiBoi1h9JVspV54ou3nFjE8Nfofl8,209 +django/contrib/sites/__init__.py,sha256=qIj6PsbyT_DVkvjrASve-9F8GeoCKv6sO0-jlEhRJv4,61 +django/contrib/sites/admin.py,sha256=ClzCRn4fUPWO1dNlEWEPjSDInnK87XbNRmadvjYs1go,214 +django/contrib/sites/apps.py,sha256=xRYkn8bbxOK7rSsDiLHPkxUqAN4iscVMvwKIjiwdj94,365 +django/contrib/sites/management.py,sha256=K6cgSOdN4ins_TiWjUIkGFwuibJmshTlFonqYT2QKrw,1597 +django/contrib/sites/managers.py,sha256=OJfKicEOuqcD0B7NuH4scszrknQZ-X1Nf1PL0XgWqLM,1929 +django/contrib/sites/middleware.py,sha256=qYcVHsHOg0VxQNS4saoLHkdF503nJR-D7Z01vE0SvUM,309 +django/contrib/sites/models.py,sha256=nXbWDsKuokp2-bwxnrDhw2yA221wByMOsGaTxwwX4B8,3697 +django/contrib/sites/requests.py,sha256=74RhONzbRqEGoNXLu4T7ZjAFKYvCLmY_XQWnGRz6jdw,640 +django/contrib/sites/shortcuts.py,sha256=RZr1iT8zY_z8o52PIWEBFCQL03pE28pp6708LveS240,581 +django/contrib/sites/locale/af/LC_MESSAGES/django.mo,sha256=A10bZFMs-wUetVfF5UrFwmuiKnN4ZnlrR4Rx8U4Ut1A,786 +django/contrib/sites/locale/af/LC_MESSAGES/django.po,sha256=O0-ZRvmXvV_34kONuqakuXV5OmYbQ569K1Puj3qQNac,907 +django/contrib/sites/locale/ar/LC_MESSAGES/django.mo,sha256=kLoytp2jvhWn6p1c8kNVua2sYAMnrpS4xnbluHD22Vs,947 +django/contrib/sites/locale/ar/LC_MESSAGES/django.po,sha256=HYA3pA29GktzXBP-soUEn9VP2vkZuhVIXVA8TNPCHCs,1135 +django/contrib/sites/locale/ast/LC_MESSAGES/django.mo,sha256=eEvaeiGnZFBPGzKLlRz4M9AHemgJVAb-yNpbpxRqtd0,774 +django/contrib/sites/locale/ast/LC_MESSAGES/django.po,sha256=huBohKzLpdaJRFMFXXSDhDCUOqVqyWXfxb8_lLOkUd0,915 +django/contrib/sites/locale/az/LC_MESSAGES/django.mo,sha256=CjAGI4qGoXN95q4LpCLXLKvaNB33Ocf5SfXdurFBkas,773 +django/contrib/sites/locale/az/LC_MESSAGES/django.po,sha256=E84kNPFhgHmIfYT0uzCnTPGwPkAqKzqwFvJB7pETbVo,933 +django/contrib/sites/locale/be/LC_MESSAGES/django.mo,sha256=b-0febeZF-EX53E--W-G3lkpiozt7En6yfDIJYnNrQw,1024 +django/contrib/sites/locale/be/LC_MESSAGES/django.po,sha256=W5FhVJKcmd3WHl2Lpd5NJUsc7_sE_1Pipk3CVPoGPa4,1152 +django/contrib/sites/locale/bg/LC_MESSAGES/django.mo,sha256=a2R52umIQIhnzFaFYSRhQ6nBlywE8RGMj2FUOFmyb0A,904 +django/contrib/sites/locale/bg/LC_MESSAGES/django.po,sha256=awB8RMS-qByhNB6eH2f0Oyxb3SH8waLhrZ--rokGfaI,1118 +django/contrib/sites/locale/bn/LC_MESSAGES/django.mo,sha256=cI3a9_L-OC7gtdyRNaGX7A5w0Za0M4ERnYB7rSNkuRU,925 +django/contrib/sites/locale/bn/LC_MESSAGES/django.po,sha256=8ZxYF16bgtTZSZRZFok6IJxUV02vIztoVx2qXqwO8NM,1090 +django/contrib/sites/locale/br/LC_MESSAGES/django.mo,sha256=rI_dIznbwnadZbxOPtQxZ1pGYePNwcNNXt05iiPkchU,1107 +django/contrib/sites/locale/br/LC_MESSAGES/django.po,sha256=7Ein5Xw73DNGGtdd595Bx6ixfSD-dBXZNBUU44pSLuQ,1281 +django/contrib/sites/locale/bs/LC_MESSAGES/django.mo,sha256=bDeqQNme586LnQRQdvOWaLGZssjOoECef3vMq_OCXno,692 +django/contrib/sites/locale/bs/LC_MESSAGES/django.po,sha256=xRTWInDNiLxikjwsjgW_pYjhy24zOro90-909ns9fig,923 +django/contrib/sites/locale/ca/LC_MESSAGES/django.mo,sha256=lEUuQEpgDY3bVWzRONrPzYlojRoNduT16_oYDkkbdfk,791 +django/contrib/sites/locale/ca/LC_MESSAGES/django.po,sha256=aORAoVn69iG1ynmEfnkBzBO-UZOzzbkPVOU-ZvfMtZg,996 +django/contrib/sites/locale/cs/LC_MESSAGES/django.mo,sha256=1T_5VDHXNjFLGDhvUFYEx6LNM-7jENMvSjUzcA8njeQ,815 +django/contrib/sites/locale/cs/LC_MESSAGES/django.po,sha256=UCoVCD6JhUxB2IgegTnFQqd3_yPBkZ-5HJhif4v5Awg,979 +django/contrib/sites/locale/cy/LC_MESSAGES/django.mo,sha256=70pOie0K__hkmM9oBUaQfVwHjK8Cl48E26kRQL2mtew,835 +django/contrib/sites/locale/cy/LC_MESSAGES/django.po,sha256=FAZrVc72x-4R1A-1qYOBwADoXngC_F6FO8nRjr5-Z6g,1013 +django/contrib/sites/locale/da/LC_MESSAGES/django.mo,sha256=_vLc8KTeuNCWqBAAajbYl9KSnn5tbrBC8unB0gwdsCw,794 +django/contrib/sites/locale/da/LC_MESSAGES/django.po,sha256=Po1Z6u52CFCyz9hLfK009pMbZzZgHrBse0ViX8wCYm8,957 +django/contrib/sites/locale/de/LC_MESSAGES/django.mo,sha256=5Q6X0_bDQ1ZRpkTy7UpPNzrhmQsB9Q0P1agB7koRyzs,792 +django/contrib/sites/locale/de/LC_MESSAGES/django.po,sha256=aD0wBinqtDUPvBbwtHrLEhFdoVRx1nOh17cJFuWhN3U,980 +django/contrib/sites/locale/dsb/LC_MESSAGES/django.mo,sha256=pPpWYsYp81MTrqCsGF0QnGktZNIll70bdBwSkuVE8go,868 +django/contrib/sites/locale/dsb/LC_MESSAGES/django.po,sha256=IA3G8AKJls20gzfxnrfPzivMNpL8A0zBQBg7OyzrP6g,992 +django/contrib/sites/locale/el/LC_MESSAGES/django.mo,sha256=G9o1zLGysUePGzZRicQ2aIIrc2UXMLTQmdpbrUMfWBU,878 +django/contrib/sites/locale/el/LC_MESSAGES/django.po,sha256=RBi_D-_znYuV6LXfTlSOf1Mvuyl96fIyEoiZ-lgeyWs,1133 +django/contrib/sites/locale/en/LC_MESSAGES/django.mo,sha256=U0OV81NfbuNL9ctF-gbGUG5al1StqN-daB-F-gFBFC8,356 +django/contrib/sites/locale/en/LC_MESSAGES/django.po,sha256=tSjfrNZ_FqLHsXjm5NuTyo5-JpdlPLsPZjFqF2APhy8,817 +django/contrib/sites/locale/en_AU/LC_MESSAGES/django.mo,sha256=dTndJxA-F1IE_nMUOtf1sRr7Kq2s_8yjgKk6mkWkVu4,486 +django/contrib/sites/locale/en_AU/LC_MESSAGES/django.po,sha256=7V9dBdbfHa9aGAfs9nw6ivSxX30CqaYc1ptfplTAPJc,791 +django/contrib/sites/locale/en_GB/LC_MESSAGES/django.mo,sha256=FbSh7msJdrHsXr0EtDMuODFzSANG_HJ3iBlW8ePpqFs,639 +django/contrib/sites/locale/en_GB/LC_MESSAGES/django.po,sha256=Ib-DIuTWlrN3kg99kLCuqWJVtt1NWaFD4UbDFK6d4KY,862 +django/contrib/sites/locale/eo/LC_MESSAGES/django.mo,sha256=N4KkH12OHxic3pp1okeBhpfDx8XxxpULk3UC219vjWU,792 +django/contrib/sites/locale/eo/LC_MESSAGES/django.po,sha256=ymXSJaFJWGBO903ObqR-ows-p4T3KyUplc_p_3r1uk8,1043 +django/contrib/sites/locale/es/LC_MESSAGES/django.mo,sha256=qLN1uoCdslxdYWgdjgSBi7szllP-mQZtHbuZnNOthsQ,804 +django/contrib/sites/locale/es/LC_MESSAGES/django.po,sha256=QClia2zY39269VSQzkQsLwwukthN6u2JBsjbLNxA1VQ,1066 +django/contrib/sites/locale/es_AR/LC_MESSAGES/django.mo,sha256=sMZ_BBcxMK440lFG-dT6ekbGMIfLDvNHGL-sV6bUycU,817 +django/contrib/sites/locale/es_AR/LC_MESSAGES/django.po,sha256=RwyNylXbyxdSXn6qRDXd99-GaEPlmr6TicHTUW0boaQ,969 +django/contrib/sites/locale/es_CO/LC_MESSAGES/django.mo,sha256=a4Xje2M26wyIx6Wlg6puHo_OXjiDEy7b0FquT9gbThA,825 +django/contrib/sites/locale/es_CO/LC_MESSAGES/django.po,sha256=9bnRhVD099JzkheO80l65dufjuawsj9aSFgFu5A-lnM,949 +django/contrib/sites/locale/es_MX/LC_MESSAGES/django.mo,sha256=AtGta5jBL9XNBvfSpsCcnDtDhvcb89ALl4hNjSPxibM,809 +django/contrib/sites/locale/es_MX/LC_MESSAGES/django.po,sha256=TnkpQp-7swH-x9cytUJe-QJRd2n_pYMVo0ltDw9Pu8o,991 +django/contrib/sites/locale/es_VE/LC_MESSAGES/django.mo,sha256=59fZBDut-htCj38ZUoqPjhXJPjZBz-xpU9__QFr3kLs,486 +django/contrib/sites/locale/es_VE/LC_MESSAGES/django.po,sha256=8PWXy2L1l67wDIi98Q45j7OpVITr0Lt4zwitAnB-d_o,791 +django/contrib/sites/locale/et/LC_MESSAGES/django.mo,sha256=I2E-49UQsG-F26OeAfnKlfUdA3YCkUSV8ffA-GMSkE0,788 +django/contrib/sites/locale/et/LC_MESSAGES/django.po,sha256=mEfD6EyQ15PPivb5FTlkabt3Lo_XGtomI9XzHrrh34Y,992 +django/contrib/sites/locale/eu/LC_MESSAGES/django.mo,sha256=1HTAFI3DvTAflLJsN7NVtSd4XOTlfoeLGFyYCOX69Ec,807 +django/contrib/sites/locale/eu/LC_MESSAGES/django.po,sha256=NWxdE5-mF6Ak4nPRpCFEgAMIsVDe9YBEZl81v9kEuX8,1023 +django/contrib/sites/locale/fa/LC_MESSAGES/django.mo,sha256=odtsOpZ6noNqwDb18HDc2e6nz3NMsa-wrTN-9dk7d9w,872 +django/contrib/sites/locale/fa/LC_MESSAGES/django.po,sha256=uL2I9XjqIxqTUKf6buewtm9rwflM23pxspFMs7w4SPM,1088 +django/contrib/sites/locale/fi/LC_MESSAGES/django.mo,sha256=I5DUeLk1ChUC32q5uzriABCLLJpJKNbEK4BfqylPQzg,786 +django/contrib/sites/locale/fi/LC_MESSAGES/django.po,sha256=LH2sFIKM3YHPoz9zIu10z1DFv1svXphBdOhXNy4a17s,929 +django/contrib/sites/locale/fr/LC_MESSAGES/django.mo,sha256=lQe7mHXWDoQGSEZyK0TsPOwvnR-rjAzt8-FeLTCeXyU,797 +django/contrib/sites/locale/fr/LC_MESSAGES/django.po,sha256=u24rHDJ47AoBgcmBwI1tIescAgbjFxov6y906H_uhK0,999 +django/contrib/sites/locale/fy/LC_MESSAGES/django.mo,sha256=YQQy7wpjBORD9Isd-p0lLzYrUgAqv770_56-vXa0EOc,476 +django/contrib/sites/locale/fy/LC_MESSAGES/django.po,sha256=Yh6Lw0QI2Me0zCtlyXraFLjERKqklB6-IJLDTjH_jTs,781 +django/contrib/sites/locale/ga/LC_MESSAGES/django.mo,sha256=g5popLirHXWn6ZWJHESQaG5MmKWZL_JNI_5Vgn5FTqU,683 +django/contrib/sites/locale/ga/LC_MESSAGES/django.po,sha256=34hj3ELt7GQ7CaHL246uBDmvsVUaaN5kTrzt8j7eETM,962 +django/contrib/sites/locale/gd/LC_MESSAGES/django.mo,sha256=df4XIGGD6FIyMUXsb-SoSqNfBFAsRXf4qYtolh_C964,858 +django/contrib/sites/locale/gd/LC_MESSAGES/django.po,sha256=NPKp7A5-y-MR7r8r4WqtcVQJEHCIOP5mLTd0cIfUsug,957 +django/contrib/sites/locale/gl/LC_MESSAGES/django.mo,sha256=QUJdJV71VT-4iVQ5mUAeyszTVhD2LlmmPQv0WpPWttU,742 +django/contrib/sites/locale/gl/LC_MESSAGES/django.po,sha256=cLcejsFyoFk0fRX9fAcl9owHoxiD593QZZeZTfObBVw,940 +django/contrib/sites/locale/he/LC_MESSAGES/django.mo,sha256=L3bganfG4gHqp2WXGh4rfWmmbaIxHaGc7-ypAqjSL_E,820 +django/contrib/sites/locale/he/LC_MESSAGES/django.po,sha256=nT0Gu0iWpFV7ZJ6SAdcogZccCz3CV-R5rgqwEl5NA6c,985 +django/contrib/sites/locale/hi/LC_MESSAGES/django.mo,sha256=J4oIS1vJnCvdCCUD4tlTUVyTe4Xn0gKcWedfhH4C0t0,665 +django/contrib/sites/locale/hi/LC_MESSAGES/django.po,sha256=INBrm37jL3okBHuzX8MSN1vMptj77a-4kwQkAyt8w_8,890 +django/contrib/sites/locale/hr/LC_MESSAGES/django.mo,sha256=KjDUhEaOuYSMexcURu2UgfkatN2rrUcAbCUbcpVSInk,876 +django/contrib/sites/locale/hr/LC_MESSAGES/django.po,sha256=-nFMFkVuDoKYDFV_zdNULOqQlnqtiCG57aakN5hqlmg,1055 +django/contrib/sites/locale/hsb/LC_MESSAGES/django.mo,sha256=RyHVb7u9aRn5BXmWzR1gApbZlOioPDJ59ufR1Oo3e8Y,863 +django/contrib/sites/locale/hsb/LC_MESSAGES/django.po,sha256=Aq54y5Gb14bIt28oDDrFltnSOk31Z2YalwaJMDMXfWc,987 +django/contrib/sites/locale/hu/LC_MESSAGES/django.mo,sha256=P--LN84U2BeZAvRVR-OiWl4R02cTTBi2o8XR2yHIwIU,796 +django/contrib/sites/locale/hu/LC_MESSAGES/django.po,sha256=b0VhyFdNaZZR5MH1vFsLL69FmICN8Dz-sTRk0PdK49E,953 +django/contrib/sites/locale/hy/LC_MESSAGES/django.mo,sha256=Hs9XwRHRkHicLWt_NvWvr7nMocmY-Kc8XphhVSAMQRc,906 +django/contrib/sites/locale/hy/LC_MESSAGES/django.po,sha256=MU4hXXGfjXKfYcjxDYzFfsEUIelz5ZzyQLkeSrUQKa0,1049 +django/contrib/sites/locale/ia/LC_MESSAGES/django.mo,sha256=gRMs-W5EiY26gqzwnDXEMbeb1vs0bYZ2DC2a9VCciew,809 +django/contrib/sites/locale/ia/LC_MESSAGES/django.po,sha256=HXZzn9ACIqfR2YoyvpK2FjZ7QuEq_RVZ1kSC4nxMgeg,934 +django/contrib/sites/locale/id/LC_MESSAGES/django.mo,sha256=__2E_2TmVUcbf1ygxtS1lHvkhv8L0mdTAtJpBsdH24Y,791 +django/contrib/sites/locale/id/LC_MESSAGES/django.po,sha256=e5teAHiMjLR8RDlg8q99qtW-K81ltcIiBIdb1MZw2sE,1000 +django/contrib/sites/locale/io/LC_MESSAGES/django.mo,sha256=W-NP0b-zR1oWUZnHZ6fPu5AC2Q6o7nUNoxssgeguUBo,760 +django/contrib/sites/locale/io/LC_MESSAGES/django.po,sha256=G4GUUz3rxoBjWTs-j5RFCvv52AEHiwrCBwom5hYeBSE,914 +django/contrib/sites/locale/is/LC_MESSAGES/django.mo,sha256=lkJgTzDjh5PNfIJpOS2DxKmwVUs9Sl5XwFHv4YdCB30,812 +django/contrib/sites/locale/is/LC_MESSAGES/django.po,sha256=1DVgAcHSZVyDd5xn483oqICIG4ooyZY8ko7A3aDogKM,976 +django/contrib/sites/locale/it/LC_MESSAGES/django.mo,sha256=6NQjjtDMudnAgnDCkemOXinzX0J-eAE5gSq1F8kjusY,795 +django/contrib/sites/locale/it/LC_MESSAGES/django.po,sha256=zxavlLMmp1t1rCDsgrw12kVgxiK5EyR_mOalSu8-ws8,984 +django/contrib/sites/locale/ja/LC_MESSAGES/django.mo,sha256=RNuCS6wv8uK5TmXkSH_7SjsbUFkf24spZfTsvfoTKro,814 +django/contrib/sites/locale/ja/LC_MESSAGES/django.po,sha256=e-cj92VOVc5ycIY6NwyFh5bO7Q9q5vp5CG4dOzd_eWQ,982 +django/contrib/sites/locale/ka/LC_MESSAGES/django.mo,sha256=m8GTqr9j0ijn0YJhvnsYwlk5oYcASKbHg_5hLqZ91TI,993 +django/contrib/sites/locale/ka/LC_MESSAGES/django.po,sha256=BCsMvNq-3Pi9-VnUvpUQaGx6pbCgI8rCcIHUA8VL4as,1155 +django/contrib/sites/locale/kab/LC_MESSAGES/django.mo,sha256=Utdj5gH5YPeaYMjeMzF-vjqYvYTCipre2qCBkEJSc-Y,808 +django/contrib/sites/locale/kab/LC_MESSAGES/django.po,sha256=d78Z-YanYZkyP5tpasj8oAa5RimVEmce6dlq5vDSscA,886 +django/contrib/sites/locale/kk/LC_MESSAGES/django.mo,sha256=T2dTZ83vBRfQb2dRaKOrhvO00BHQu_2bu0O0k7RsvGA,895 +django/contrib/sites/locale/kk/LC_MESSAGES/django.po,sha256=9ixNnoE3BxfBj4Xza0FM5qInd0uiNnAlXgDb_KaICn4,1057 +django/contrib/sites/locale/km/LC_MESSAGES/django.mo,sha256=Q7pn5E4qN957j20-iCHgrfI-p8sm3Tc8O2DWeuH0By8,701 +django/contrib/sites/locale/km/LC_MESSAGES/django.po,sha256=TOs76vlCMYOZrdHgXPWZhQH1kTBQTpzsDJ8N4kbJQ7E,926 +django/contrib/sites/locale/kn/LC_MESSAGES/django.mo,sha256=fikclDn-FKU_t9lZeBtQciisS3Kqv4tJHtu923OXLJI,676 +django/contrib/sites/locale/kn/LC_MESSAGES/django.po,sha256=p_P7L0KAUoKNLH8vuHV4_2mTWK1m1tjep5XgRqbWd2k,904 +django/contrib/sites/locale/ko/LC_MESSAGES/django.mo,sha256=wlfoWG-vmMSCipUJVVC0Y_W7QbGNNE-oEnVwl_6-AmY,807 +django/contrib/sites/locale/ko/LC_MESSAGES/django.po,sha256=TENAk9obGUxFwMnJQj_V9sZxEKJj4DyWMuGpx3Ft_pM,1049 +django/contrib/sites/locale/lb/LC_MESSAGES/django.mo,sha256=xokesKl7h7k9dXFKIJwGETgwx1Ytq6mk2erBSxkgY-o,474 +django/contrib/sites/locale/lb/LC_MESSAGES/django.po,sha256=1yRdK9Zyh7kcWG7wUexuF9-zxEaKLS2gG3ggVOHbRJ8,779 +django/contrib/sites/locale/lt/LC_MESSAGES/django.mo,sha256=bK6PJtd7DaOgDukkzuqos5ktgdjSF_ffL9IJTQY839s,869 +django/contrib/sites/locale/lt/LC_MESSAGES/django.po,sha256=9q7QfFf_IR2A1Cr_9aLVIWf-McR0LivtRC284w2_bo0,1124 +django/contrib/sites/locale/lv/LC_MESSAGES/django.mo,sha256=t9bQiVqpAmXrq8QijN4Lh0n6EGUGQjnuH7hDcu21z4c,823 +django/contrib/sites/locale/lv/LC_MESSAGES/django.po,sha256=vMaEtXGosD3AcTomiuctbOpjLes8TRBnumLe8DC4yq4,1023 +django/contrib/sites/locale/mk/LC_MESSAGES/django.mo,sha256=_YXasRJRWjYmmiEWCrAoqnrKuHHPBG_v_EYTUe16Nfo,885 +django/contrib/sites/locale/mk/LC_MESSAGES/django.po,sha256=AgdIjiSpN0P5o5rr5Ie4sFhnmS5d4doB1ffk91lmOvY,1062 +django/contrib/sites/locale/ml/LC_MESSAGES/django.mo,sha256=axNQVBY0nbR7hYa5bzNtdxB17AUOs2WXhu0Rg--FA3Q,1007 +django/contrib/sites/locale/ml/LC_MESSAGES/django.po,sha256=Sg7hHfK8OMs05ebtTv8gxS6_2kZv-OODwf7okP95Jtk,1169 +django/contrib/sites/locale/mn/LC_MESSAGES/django.mo,sha256=w2sqJRAe0wyz_IuCZ_Ocubs_VHL6wV1BcutWPz0dseQ,867 +django/contrib/sites/locale/mn/LC_MESSAGES/django.po,sha256=Zh_Eao0kLZsrQ8wkL1f-pRrsAtNJOspu45uStq5t8Mo,1127 +django/contrib/sites/locale/mr/LC_MESSAGES/django.mo,sha256=2Z5jaGJzpiJTCnhCk8ulCDeAdj-WwR99scdHFPRoHoA,468 +django/contrib/sites/locale/mr/LC_MESSAGES/django.po,sha256=pqnjF5oxvpMyjijy6JfI8qJbbbowZzE5tZF0DMYiCBs,773 +django/contrib/sites/locale/my/LC_MESSAGES/django.mo,sha256=jN59e9wRheZYx1A4t_BKc7Hx11J5LJg2wQRd21aQv08,961 +django/contrib/sites/locale/my/LC_MESSAGES/django.po,sha256=EhqYIW5-rX33YjsDsBwfiFb3BK6fZKVc3CRYeJpZX1E,1086 +django/contrib/sites/locale/nb/LC_MESSAGES/django.mo,sha256=AaiHGcmcciy5IMBPVAShcc1OQOETJvBCv7GYHMcIQMA,793 +django/contrib/sites/locale/nb/LC_MESSAGES/django.po,sha256=936zoN1sPSiiq7GuH01umrw8W6BtymYEU3bCfOQyfWE,1000 +django/contrib/sites/locale/ne/LC_MESSAGES/django.mo,sha256=wM13WrA4uMhfpU1GKFMcbVBh5LRB4v-v-t7t4AHqaU4,899 +django/contrib/sites/locale/ne/LC_MESSAGES/django.po,sha256=9_78nN66h6ioTnd0OO6YM8MHbqw8uoiaSAyn69aT8Ag,1021 +django/contrib/sites/locale/nl/LC_MESSAGES/django.mo,sha256=aIF7pcJ4uB6YqvOhN-3W-WXA645APTnk8WFIgf-ZzFw,776 +django/contrib/sites/locale/nl/LC_MESSAGES/django.po,sha256=1DCQNzMRhy4vW-KkmlPGy58UR27Np5ilmYhmjaq-8_k,1030 +django/contrib/sites/locale/nn/LC_MESSAGES/django.mo,sha256=m1SUw5bhDUemD8yMGDxcWdhbUMtzZ9WXWXtV2AHIzBs,633 +django/contrib/sites/locale/nn/LC_MESSAGES/django.po,sha256=i8BQyewiU2ymkAkj12M2MJBVbCJPp8PB8_NcQiScaD4,861 +django/contrib/sites/locale/os/LC_MESSAGES/django.mo,sha256=Su06FkWMOPzBxoung3bEju_EnyAEAXROoe33imO65uQ,806 +django/contrib/sites/locale/os/LC_MESSAGES/django.po,sha256=4i4rX6aXDUKjq64T02iStqV2V2erUsSVnTivh2XtQeY,963 +django/contrib/sites/locale/pa/LC_MESSAGES/django.mo,sha256=tOHiisOtZrTyIFoo4Ipn_XFH9hhu-ubJLMdOML5ZUgk,684 +django/contrib/sites/locale/pa/LC_MESSAGES/django.po,sha256=ztGyuqvzxRfNjqDG0rMLCu_oQ8V3Dxdsx0WZoYUyNv8,912 +django/contrib/sites/locale/pl/LC_MESSAGES/django.mo,sha256=TbH30lyyQ2QpAxc5XJKWCBNV3WUl7wOL4a-BKkeyUdM,944 +django/contrib/sites/locale/pl/LC_MESSAGES/django.po,sha256=-kQ49UvXITMy1vjJoN_emuazV_EjNDQnZDERXWNoKvw,1181 +django/contrib/sites/locale/pt/LC_MESSAGES/django.mo,sha256=PrcFQ04lFJ7mIYThXbW6acmDigEFIoLAC0PYk5hfaJs,797 +django/contrib/sites/locale/pt/LC_MESSAGES/django.po,sha256=Aj8hYI9W5nk5uxKHj1oE-b9bxmmuoeXLKaJDPfI2x2o,993 +django/contrib/sites/locale/pt_BR/LC_MESSAGES/django.mo,sha256=BsFfarOR6Qk67fB-tTWgGhuOReJSgjwJBkIzZsv28vo,824 +django/contrib/sites/locale/pt_BR/LC_MESSAGES/django.po,sha256=jfvgelpWn2VQqYe2_CE39SLTsscCckvjuZo6dWII28c,1023 +django/contrib/sites/locale/ro/LC_MESSAGES/django.mo,sha256=oGsZw4_uYpaH6adMxnAuifJgHeZ_ytRZ4rFhiNfRQkQ,857 +django/contrib/sites/locale/ro/LC_MESSAGES/django.po,sha256=tWbWVbjFFELNzSXX4_5ltmzEeEJsY3pKwgEOjgV_W_8,1112 +django/contrib/sites/locale/ru/LC_MESSAGES/django.mo,sha256=bIZJWMpm2O5S6RC_2cfkrp5NXaTU2GWSsMr0wHVEmcw,1016 +django/contrib/sites/locale/ru/LC_MESSAGES/django.po,sha256=jHy5GR05ZSjLmAwaVNq3m0WdhO9GYxge3rDBziqesA8,1300 +django/contrib/sites/locale/sk/LC_MESSAGES/django.mo,sha256=-EYdm14ZjoR8bd7Rv2b5G7UJVSKmZa1ItLsdATR3-Cg,822 +django/contrib/sites/locale/sk/LC_MESSAGES/django.po,sha256=L2YRNq26DdT3OUFhw25ncZBgs232v6kSsAUTc0beIC8,1019 +django/contrib/sites/locale/sl/LC_MESSAGES/django.mo,sha256=JmkpTKJGWgnBM3CqOUriGvrDnvg2YWabIU2kbYAOM4s,845 +django/contrib/sites/locale/sl/LC_MESSAGES/django.po,sha256=qWrWrSz5r3UOVraX08ILt3TTmfyTDGKbJKbTlN9YImU,1059 +django/contrib/sites/locale/sq/LC_MESSAGES/django.mo,sha256=gVY4vWlvDvWI9mSlFfIWqHP4a_NNFt-0CFzStPRXuoQ,810 +django/contrib/sites/locale/sq/LC_MESSAGES/django.po,sha256=zg3ALcMNZErAS_xFxmtv6TmXZ0vxobX5AzCwOSRSwc8,930 +django/contrib/sites/locale/sr/LC_MESSAGES/django.mo,sha256=8kfi9IPdB2reF8C_eC2phaP6qonboHPwes_w3UgNtzw,935 +django/contrib/sites/locale/sr/LC_MESSAGES/django.po,sha256=A7xaen8H1W4uMBRAqCXT_0KQMoA2-45AUNDfGo9FydI,1107 +django/contrib/sites/locale/sr_Latn/LC_MESSAGES/django.mo,sha256=jMXiq18efq0wErJAQfJR1fCnkYcEb7OYXg8sv6kzP0s,815 +django/contrib/sites/locale/sr_Latn/LC_MESSAGES/django.po,sha256=9jkWYcZCTfQr2UZtyvhWDAmEHBrzunJUZcx7FlrFOis,1004 +django/contrib/sites/locale/sv/LC_MESSAGES/django.mo,sha256=qmhdn3N2C_DR_FYrUaFSacVjghgfb0CuWKanVRJSTq8,792 +django/contrib/sites/locale/sv/LC_MESSAGES/django.po,sha256=dDVuuuHGpZIoT6dU48aT2j4nEuGrd6zZ3FiZEs3TCeE,987 +django/contrib/sites/locale/sw/LC_MESSAGES/django.mo,sha256=cWjjDdFXBGmpUm03UDtgdDrREa2r75oMsXiEPT_Bx3g,781 +django/contrib/sites/locale/sw/LC_MESSAGES/django.po,sha256=oOKNdztQQU0sd6XmLI-n3ONmTL7jx3Q0z1YD8673Wi8,901 +django/contrib/sites/locale/ta/LC_MESSAGES/django.mo,sha256=CLO41KsSKqBrgtrHi6fmXaBk-_Y2l4KBLDJctZuZyWY,714 +django/contrib/sites/locale/ta/LC_MESSAGES/django.po,sha256=YsTITHg7ikkNcsP29tDgkZrUdtO0s9PrV1XPu4mgqCw,939 +django/contrib/sites/locale/te/LC_MESSAGES/django.mo,sha256=GmIWuVyIOcoQoAmr2HxCwBDE9JUYEktzYig93H_4v50,687 +django/contrib/sites/locale/te/LC_MESSAGES/django.po,sha256=jbncxU9H3EjXxWPsEoCKJhKi392XXTGvWyuenqLDxps,912 +django/contrib/sites/locale/th/LC_MESSAGES/django.mo,sha256=dQOp4JoP3gvfsxqEQ73L6F8FgH1YtAA9hYY-Uz5sv6Y,898 +django/contrib/sites/locale/th/LC_MESSAGES/django.po,sha256=auZBoKKKCHZbbh0PaUr9YKiWB1TEYZoj4bE7efAonV8,1077 +django/contrib/sites/locale/tr/LC_MESSAGES/django.mo,sha256=NxEKAJFmns0tWftlgyKXHJcBKBxo6ImR4SjIw8-zbgk,799 +django/contrib/sites/locale/tr/LC_MESSAGES/django.po,sha256=L9tsnwxw1BEJD-Nm3m1RAS7ekgdmyC0ETs_mr7tQw1E,1043 +django/contrib/sites/locale/tt/LC_MESSAGES/django.mo,sha256=gmmjXeEQUlBpfDmouhxE-qpEtv-iWdQSobYL5MWprZc,706 +django/contrib/sites/locale/tt/LC_MESSAGES/django.po,sha256=yj49TjwcZ4YrGqnJrKh3neKydlTgwYduto9KsmxI_eI,930 +django/contrib/sites/locale/udm/LC_MESSAGES/django.mo,sha256=CNmoKj9Uc0qEInnV5t0Nt4ZnKSZCRdIG5fyfSsqwky4,462 +django/contrib/sites/locale/udm/LC_MESSAGES/django.po,sha256=vrLZ0XJF63CO3IucbQpd12lxuoM9S8tTUv6cpu3g81c,767 +django/contrib/sites/locale/uk/LC_MESSAGES/django.mo,sha256=H4806mPqOoHJFm549F7drzsfkvAXWKmn1w_WVwQx9rk,960 +django/contrib/sites/locale/uk/LC_MESSAGES/django.po,sha256=jmJKTuGLhfP4rg8M_d86XR4X8qYB-JAtEf6jRKuzi3w,1187 +django/contrib/sites/locale/ur/LC_MESSAGES/django.mo,sha256=s6QL8AB_Mp9haXS4n1r9b0YhEUECPxUyPrHTMI3agts,654 +django/contrib/sites/locale/ur/LC_MESSAGES/django.po,sha256=R9tv3qtett8CUGackoHrc5XADeygVKAE0Fz8YzK2PZ4,885 +django/contrib/sites/locale/uz/LC_MESSAGES/django.mo,sha256=OsuqnLEDl9gUAwsmM2s1KH7VD74ID-k7JXcjGhjFlEY,799 +django/contrib/sites/locale/uz/LC_MESSAGES/django.po,sha256=RoaOwLDjkqqIJTuxpuY7eMLo42n6FoYAYutCfMaDk4I,935 +django/contrib/sites/locale/vi/LC_MESSAGES/django.mo,sha256=YOaKcdrN1238Zdm81jUkc2cpxjInAbdnhsSqHP_jQsI,762 +django/contrib/sites/locale/vi/LC_MESSAGES/django.po,sha256=AHcqR2p0fdscLvzbJO_a-CzMzaeRL4LOw4HB9K3noVQ,989 +django/contrib/sites/locale/zh_Hans/LC_MESSAGES/django.mo,sha256=7D9_pDY5lBRpo1kfzIQL-PNvIg-ofCm7cBHE1-JWlMk,779 +django/contrib/sites/locale/zh_Hans/LC_MESSAGES/django.po,sha256=xI_N00xhV8dWDp4fg5Mmj9ivOBBdHP79T3-JYXPyc5M,946 +django/contrib/sites/locale/zh_Hant/LC_MESSAGES/django.mo,sha256=0F6Qmh1smIXlOUNDaDwDajyyGecc1azfwh8BhXrpETo,790 +django/contrib/sites/locale/zh_Hant/LC_MESSAGES/django.po,sha256=ixbXNBNKNfrpI_B0O_zktTfo63sRFMOk1B1uIh4DGGg,1046 +django/contrib/sites/migrations/0001_initial.py,sha256=CkzQ6PgORwSokrpq6Dj6u-WCEtcuSf4Pau6UyiBpSlA,1069 +django/contrib/sites/migrations/0002_alter_domain_unique.py,sha256=HECWqP0R0hp77p_ubI5bI9DqEXIiGOTTszAr4EpgtVE,517 +django/contrib/sites/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/staticfiles/__init__.py,sha256=eGxMURIKxiv-dE7rP1hwNgUhfzUN36-Bc58jCpHgmCE,73 +django/contrib/staticfiles/apps.py,sha256=q0Tfga23RfN9gCRPhopgChqOFqbtGfkc3-VeH1CRClg,413 +django/contrib/staticfiles/checks.py,sha256=rH9A8NIYtEkA_PRYXQJxndm243O6Mz6GwyqWSUe3f24,391 +django/contrib/staticfiles/finders.py,sha256=fQeOtH6BnJGTvwtknbC8dJHLWuj5IQMP3Wriyp_1C5E,10451 +django/contrib/staticfiles/handlers.py,sha256=6Cmy7KVA7ngivB40ptamR02vGfP-Re6Kxles-8ylWFQ,2299 +django/contrib/staticfiles/storage.py,sha256=L3XSTnfVsJpwXmw_XRaK6OgFN1P6vTLX9PzvNuN9QCo,19391 +django/contrib/staticfiles/testing.py,sha256=4X-EtOfXnwkJAyFT8qe4H4sbVTKgM65klLUtY81KHiE,463 +django/contrib/staticfiles/urls.py,sha256=owDM_hdyPeRmxYxZisSMoplwnzWrptI_W8-3K2f7ITA,498 +django/contrib/staticfiles/utils.py,sha256=KLa19JS3KGJxwQXn6EDRhdhOU-l8nzkkaF1SiO4Lmjc,2289 +django/contrib/staticfiles/views.py,sha256=CaWZq4AHEbOGW7mg_0mbkGUP8KJTlVNnofDBNIhRUo4,1264 +django/contrib/staticfiles/management/commands/collectstatic.py,sha256=sQKml_HiU0A5PG2oHKj3m2PlXv82vHQ4l5lxg0AlKr0,15021 +django/contrib/staticfiles/management/commands/findstatic.py,sha256=R5CN75jGnvsV16MQ23eWake_EBE7NG94ExKL-54NqYQ,1539 +django/contrib/staticfiles/management/commands/runserver.py,sha256=uv-h6a8AOs0c92ILT_3Mu0UTBoCiQzThpUEmR-blj70,1318 +django/contrib/staticfiles/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/contrib/staticfiles/templatetags/staticfiles.py,sha256=7rzKqqThXO9CrLOP5kq3uzS80dzksC9cRENc86G9-Qo,720 +django/contrib/syndication/__init__.py,sha256=b5C6iIdbIOHf5wvcm1QJYsspErH3TyWJnCDYS9NjFY4,73 +django/contrib/syndication/apps.py,sha256=hXquFH_3BL6NNR2cxLU-vHlBJZ3OCjbcl8jkzCNvE64,203 +django/contrib/syndication/views.py,sha256=kXBT4kGjWBqmYVU0BFrMxMyqkdPeUjgIr-TGp5HvCS0,8617 +django/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/core/exceptions.py,sha256=V61tsXhjxUnLxfNVAQBUUhvSgvdDhLL3ajIS5TCGlyI,5275 +django/core/paginator.py,sha256=rBbj7G0wDTPHuLLxvWAHIvJ6lj95OacRGeRKxtyVKog,6204 +django/core/signals.py,sha256=uGRybHCJZ74by2HV-9JEWvfmnw_scuhcxaRP3UmZDjE,247 +django/core/signing.py,sha256=5ABHjzgBzFyGmomEx9R2Y83HA0zhDd0A0B2JYqsnZj4,6676 +django/core/validators.py,sha256=025VMZ2gZjyKOgrFZYiikG8iNsvw3_s1me6BsEM0U7k,18854 +django/core/wsgi.py,sha256=2sYMSe3IBrENeQT7rys-04CRmf8hW2Q2CjlkBUIyjHk,388 +django/core/cache/__init__.py,sha256=GxbLBzFT3_6rqW-E26u30__BYkqhaCh6pzhM1KykZE8,3694 +django/core/cache/utils.py,sha256=fdSTmMvnVTM7dhwf-qbHRnhLJAV1XIJe_Ut5H-EGKBw,381 +django/core/cache/backends/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/core/cache/backends/base.py,sha256=vrMhKrAAo0vbSDOfsQVMX8OFfROJZFoebofntlFpPMg,10102 +django/core/cache/backends/db.py,sha256=rQAh5B7NGKMFYnrNs-P7fVPD8bbtwPSIlk-pbsowvWo,11371 +django/core/cache/backends/dummy.py,sha256=zJiIXLVJ9Tucb__RoYQFuZJeSvhpCG7NvpLJgOp8bfk,1116 +django/core/cache/backends/filebased.py,sha256=JckfmtM11yi7H5L1YxUoeltqPT8OqSComqBhmbciKDI,5667 +django/core/cache/backends/locmem.py,sha256=0nvukuE5UPuuYaGNlTh1xbtxxF9U74yc0jvcCGtaL1g,4095 +django/core/cache/backends/memcached.py,sha256=R8m-Yl5AVyLwSw9QhGWbYn_2cnTwBeXWw-hX29wsNBo,7244 +django/core/checks/__init__.py,sha256=V84NUpItdggGTGW06qO_VhQ7dxzYBPbtsrN1CzLIjB0,936 +django/core/checks/caches.py,sha256=jhyfX_m6TepTYRBa-j3qh1owD1W-3jmceu8b8dIFqVk,415 +django/core/checks/database.py,sha256=IpXyIS-TDTH4p037aG2l0qWnAVFtp8ozJEsXMvaoIu8,261 +django/core/checks/messages.py,sha256=ZbasGH7L_MeIGIwb_nYiO9Z_MXF0-aXO1ru2xFACj6Y,2161 +django/core/checks/model_checks.py,sha256=SWQkyklSxGtg-2QiEdOt5kdef6tbuQXPQnBakKMKAHI,7287 +django/core/checks/registry.py,sha256=Nzt4fNaK9PhwHiJ8h2BxQd0MWSEXCH9bfPKEQtNVHwk,3099 +django/core/checks/templates.py,sha256=9_qZn_MWX94i209MVu2uS66NPRgbKWtk_XxetKczyfU,1092 +django/core/checks/translation.py,sha256=4ShatZ9pmMIUjrkELnnuT-xRAdGK1ZG6fSdznvg-4lA,497 +django/core/checks/urls.py,sha256=lA8wbw2WDC-e4ZAr-9ooEWtGvrNyMh1G-MZbojGq9W8,3246 +django/core/checks/compatibility/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/core/checks/security/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/core/checks/security/base.py,sha256=fEcse-Eg8W-NrLPkIhKx6DCToL46-7BeJtMrFd7Tgzw,6743 +django/core/checks/security/csrf.py,sha256=CH09reOHXQEdCMqhlejyh0IsGwDQkFeHRYO25glZTYE,1259 +django/core/checks/security/sessions.py,sha256=vvsxKEwb3qHgnCG0R5KUkfUpMHuZMfxjo9-X-2BTp-4,2558 +django/core/files/__init__.py,sha256=OjalFLvs-vPaTE3vP0eYZWyNwMj9pLJZNgG4AcGn2_Y,60 +django/core/files/base.py,sha256=jsYsE3bNpAgaQcUvTE8m1UTj6HVXkHd4bh-Y38JmF84,4812 +django/core/files/images.py,sha256=jmF29FQ1RHZ1Sio6hNjJ6FYVAiz5JQTkAyqX7qWSAFA,2569 +django/core/files/locks.py,sha256=Y5FN6iaVNeFW4HOK1Q424BPTxBpro9l-lxLsE9rUa3E,3514 +django/core/files/move.py,sha256=1R3xTJKI9Plo0xRknz-Uv2_QQRw_vmr-rUEcrTJloMA,2956 +django/core/files/storage.py,sha256=w3WTyN5CVcNwYMlHA4ib-4KBf123cfFAmPiSFcZgIWE,14592 +django/core/files/temp.py,sha256=RHPxZQx1xv5jxhstX_7-upJf6ovTtSjlPH8wcY-PjJE,2502 +django/core/files/uploadedfile.py,sha256=dzZcC1OWFMK52Wp6jzVGIo-MYbkkhSHOhRR4JZgaoQE,3890 +django/core/files/uploadhandler.py,sha256=DtlUF2T0WkDCrf6fUmmriffX_8aZLzwJvRZn7CCsvqg,6470 +django/core/files/utils.py,sha256=5Ady6JuzCYb_VAtSwc9Dr-iTmpuMIVuJ3RKck1-sYzk,1752 +django/core/handlers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/core/handlers/base.py,sha256=sNM1um7hLmyJjbeAAnmk0vbEPuqIZ1vpAFUhifdc-M0,6523 +django/core/handlers/exception.py,sha256=ewEsuAuHED3sV1G4dYR7G6btKJJaGIz57FbkTRzOtYQ,4773 +django/core/handlers/wsgi.py,sha256=M7ItpAH-a5mQSmBvfAFTEWYvTS_5CsPO5zcrWcHGYZk,7745 +django/core/mail/__init__.py,sha256=LBC94qDGLULxasR97XAb0xGssr29-EbNUTDpbtnQ6iE,4484 +django/core/mail/message.py,sha256=232jQiFQq8NR8yjSNRPYO88UgnCIAZylqrl8x1oQUhY,17366 +django/core/mail/utils.py,sha256=nUQWqzPAZfqWY2J7SsYfVlihYMYz6i_A8H5D0pSkBvo,452 +django/core/mail/backends/__init__.py,sha256=VJ_9dBWKA48MXBZXVUaTy9NhgfRonapA6UAjVFEPKD8,37 +django/core/mail/backends/base.py,sha256=f9Oeaw1RAiPHmsTdQakeYzEabfOtULz0UvldP4Cydpk,1660 +django/core/mail/backends/console.py,sha256=l1XFESBbk1Ney5bUgjCYVPoSDzjobzIK3GMQyxQX1Qk,1402 +django/core/mail/backends/dummy.py,sha256=sI7tAa3MfG43UHARduttBvEAYYfiLasgF39jzaZPu9E,234 +django/core/mail/backends/filebased.py,sha256=OPRc5lDsB9Gble251fwXp0oq1qKeZM9T2JTcZwL_5js,2715 +django/core/mail/backends/locmem.py,sha256=OgTK_4QGhsBdqtDKY6bwYNKw2MXudc0PSF5GNVqS7gk,884 +django/core/mail/backends/smtp.py,sha256=B-COkTSGIj7DvfiJ4r4g5QgU8WVfEIri-5vCytRv9oE,5306 +django/core/management/__init__.py,sha256=N3eTJ4gk2S-m8Q39RlI7Te9jHeLMw3IOsPkFPbkzt7E,15857 +django/core/management/base.py,sha256=aD-29_cJv6UzeyuiTRI3YvrvzhkZExhfVHwujyiY92s,21276 +django/core/management/color.py,sha256=3m8gYaiYGpthRU2PFPkuKxZFvfk3-A8pRj4Lq7ejHTw,1817 +django/core/management/sql.py,sha256=bnxEUUIJScj6A67s0txpq4RT8sh0n-RS5ZxcNqySaAU,1921 +django/core/management/templates.py,sha256=jI9KLV8wALb_Qc4ZRk-jc3AxNr1CvEvG15FKKZTQ0uk,13468 +django/core/management/utils.py,sha256=vt925zdsFIe_ZnD06dItMjPSDFFJCix_jcjqlJuLZds,3934 +django/core/management/commands/check.py,sha256=z7K7s5QtpMKT84mbwVPH0c_qSvGgoa2bgbSaFEeoOAc,2248 +django/core/management/commands/compilemessages.py,sha256=tS8KFirmhwTdOYbcWJtU04hfwrmv1WU8BLoH3GIqQxk,5719 +django/core/management/commands/createcachetable.py,sha256=xRU5-icXi05yXI1fqDDAYQwlskgmWDBnXFWJoouZkBw,4322 +django/core/management/commands/dbshell.py,sha256=ZfbM6Wewc07gzU6kS4pq5_WSEVyE9_8QhGZkAJhrY2I,1207 +django/core/management/commands/diffsettings.py,sha256=5EnX2aERD8OpKOzvvvBAQWs3mfOwhmdBKbPF6yvImcw,3373 +django/core/management/commands/dumpdata.py,sha256=AK762M9-FPPd40-Tx5IR6esHN2GIX5cPpG-Ix5bMFjk,8479 +django/core/management/commands/flush.py,sha256=IYUA8yXZs68f8zNYeSIA_VFsVfuTBB-p-2Fgdpd1lI0,3557 +django/core/management/commands/inspectdb.py,sha256=aeuDuRiejHrx2hCyZ8SP_YH6XZpWsPuXqUhsojr3JfY,13763 +django/core/management/commands/loaddata.py,sha256=MTTGLAi5J7FfdJ2PRz9W2ra-Zr4CbOG_p57hO9_1Gxc,14542 +django/core/management/commands/makemessages.py,sha256=nt7c7nmytkuOx81UdJYrJhsb9RdiDr_fl0DuoBBbXJQ,27189 +django/core/management/commands/makemigrations.py,sha256=aH0wQnjA-HGQ6OYdltRwrJrjVKexhSubifLB2xctAaM,14587 +django/core/management/commands/migrate.py,sha256=XOESESXCkXvuqVivvJNHskgdFkPtTYS1ODc7MuJyREI,16363 +django/core/management/commands/runserver.py,sha256=vIra3zUFTYVAXb1RSJGk59HI92-XOTWHcbXv_dCT6EY,6283 +django/core/management/commands/sendtestemail.py,sha256=LsiP5Xg4AWLtc0vS0JinaaAAKjBbLUnfCq0pa0r4FFw,1456 +django/core/management/commands/shell.py,sha256=tW6wSIq_TxGreSNBEnB1ZAqKAG_i6xSnOYAymeqIOsk,4029 +django/core/management/commands/showmigrations.py,sha256=oLsN7XHkJEXwqMp7LM_mcXYY-t8Q2dSgLfpDzk1Yfpc,5428 +django/core/management/commands/sqlflush.py,sha256=mNxqSBp-fF36h3JMtEsDvYzCysxDA5R0IjhyiYyDMiI,795 +django/core/management/commands/sqlmigrate.py,sha256=R_RuBTL7Zx2MDE1qAL3yVERZq-NpLur2tNfb1mTGUJQ,2914 +django/core/management/commands/sqlsequencereset.py,sha256=hCyc6og7K4cDbVflf85lusgoQz0fWiOylo6Jtlold8U,872 +django/core/management/commands/squashmigrations.py,sha256=V5elYLfX2AW156eCupw4c54_QaluV5zv5B3AT41z4hk,9741 +django/core/management/commands/startapp.py,sha256=rvXApmLdP3gBinKaOMJtT1g3YrgVTlHteqNqFioNu8Y,503 +django/core/management/commands/startproject.py,sha256=ygP95ZEldotgEVmxDYBPUyAedNQTTwJulKLinGUxZtg,688 +django/core/management/commands/test.py,sha256=MZ8KXfCDUuq-ynHxURrHk5aJOmGg0Ue7bZw1G0v9nWg,2050 +django/core/management/commands/testserver.py,sha256=Veo-U69NUEyFuM_O9tG7GjRZ3aR2vWzcaVWahAIdS_M,2117 +django/core/serializers/__init__.py,sha256=TEJTEGHsW5vUAJWqQz7FdlD_NEGNaGlBN4zJAe21yeo,8073 +django/core/serializers/base.py,sha256=0K-a17-xJvqUM4VWVn1LmfNfXOzmzVkXyF2Bzn5ZHLs,11610 +django/core/serializers/json.py,sha256=sKfzArRjK2zNaRUxYRBbUWmoQfDUKzyKdIKu1gBeKnc,3352 +django/core/serializers/python.py,sha256=JH9PQCJC5JH7c0ERnmGSmhc1aQwtpYUTBWAIRWmYD74,6028 +django/core/serializers/pyyaml.py,sha256=qtYQyp2BXz9AffNLzPpCZBNIxkYR4myf9Oylb9fl6M4,2675 +django/core/serializers/xml_serializer.py,sha256=qZ5oDy_AV16iY7f1UgqcJ7ga8woA1lb9SVc9sr06bFU,16643 +django/core/servers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/core/servers/basehttp.py,sha256=VM29yPPrpEwFdXGWdelvxqd23CRKCLAGWBmUnu2rjCo,7735 +django/db/__init__.py,sha256=T8s-HTPRYj1ezRtUqzam8wQup01EhaQQXHQYVkAH8jY,1900 +django/db/transaction.py,sha256=xXN-GTrKG5ensCVhcPz8aZPt5YMbJ1xRHePFRz8H4UI,12100 +django/db/utils.py,sha256=2hiOB3FF-r2WnB0w0opov-WS_x75j9QGtL8iaBH3reA,9793 +django/db/backends/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/db/backends/ddl_references.py,sha256=byT3kdAxOMy7uqIh_D2CgxyABBb2aNoPKcGJfM8gOEo,6494 +django/db/backends/signals.py,sha256=rAFB5bUdnk5jckIT4PwVwEuE6aj4dbtasRHcRnIyH6Y,95 +django/db/backends/utils.py,sha256=nTaXwqJtSfSjNeZLYoDoGE0KaRQBMHRZYIDZXbbfXFg,8496 +django/db/backends/base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/db/backends/base/base.py,sha256=7dv0o7s5PChROKRxAhumUit3ucPJk7PdTOGkQMpfVkk,24312 +django/db/backends/base/client.py,sha256=r6dcRhY5tPx9lzDZhbcDC1z9LDdXxRe_vtkgYQSmuEI,513 +django/db/backends/base/creation.py,sha256=6_8IIKdYuI3wI-zUtBbTHUa6pwOJyYivjV72VEiew28,11919 +django/db/backends/base/features.py,sha256=LfQUvxrjk2OMU_EhCOM95Yf7R5Uzdzhe8l06rzwRiDI,11483 +django/db/backends/base/introspection.py,sha256=x-x32jBMSGSvBnGb_9EFgKWk0STYbOis9YoF4czEm0k,7277 +django/db/backends/base/operations.py,sha256=LD948w1x22t7aACqNMIlolK3Fvagtro-QNKKH4j__XM,26004 +django/db/backends/base/schema.py,sha256=sqdafk0plBi72YWfCBCeEbYSuPGhWUaxGNLgZQcxD18,54177 +django/db/backends/base/validation.py,sha256=4zIAVsePyETiRtK7CAw78y4ZiCPISs0Pv17mFWy2Tr4,1040 +django/db/backends/dummy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/db/backends/dummy/base.py,sha256=ZsB_hKOW9tuaNbZt64fGY6tk0_FqMiF72rp8TE3NrDA,2244 +django/db/backends/dummy/features.py,sha256=Pg8_jND-aoJomTaBBXU3hJEjzpB-rLs6VwpoKkOYuQg,181 +django/db/backends/mysql/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/db/backends/mysql/base.py,sha256=YqPhjaiuPX3huZxLk9oE7XxmlQRyOoUtEr_tXBBeN6E,13779 +django/db/backends/mysql/client.py,sha256=vvt1-wevYeQR4JmklrmZ_nrUrXdMaAXQOV7j42XZx4M,1834 +django/db/backends/mysql/compiler.py,sha256=J30bWgLviaWfUktegN7YnXmp6CaEZ6u8VeuiN4DUk4E,704 +django/db/backends/mysql/creation.py,sha256=pn3utQHFhPX93T8g1Z8k8_U3TDUss6fDIeUgaINtobc,3058 +django/db/backends/mysql/features.py,sha256=0XwOby_HzgbOkrBo3zha1q9iEtn9baqzkRuqrHzqWac,4548 +django/db/backends/mysql/introspection.py,sha256=rmiTkcCIw5-3tC7ajmMy82zHpkk0naQipiS1VLU9VwA,8779 +django/db/backends/mysql/operations.py,sha256=s5YtCw3dsnWFaIOAfdrl0KjIbU0bNYQcVRVb_1B3mnI,12911 +django/db/backends/mysql/schema.py,sha256=YqRlXZem9jIXilH9eKGwjfoTZ4g018UN-dDjZQ69AJU,4598 +django/db/backends/mysql/validation.py,sha256=C0MLttf0KGEU9i0N1jrXwprRgSV0uT7qL4Eu9yllpRQ,2565 +django/db/backends/oracle/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/db/backends/oracle/base.py,sha256=arIVWHqHwZgS1OJxWoARg67g21FLh7kVwQzJZHlOLy4,22668 +django/db/backends/oracle/client.py,sha256=JYYBOZAr814iEi2WOEOT7tcCfJclk8gMgPxzZu4SB8c,494 +django/db/backends/oracle/compiler.py,sha256=24yd7jxHln4QEcDypMi8bl2ywMIpjbxbH_mlUUBbYxE,2387 +django/db/backends/oracle/creation.py,sha256=FgNUj3kMaK5m3h_Wjcw7pEAMqxM6tt87H_dt82OgmME,19643 +django/db/backends/oracle/features.py,sha256=Y1JP0LVRmtJIbycv_W49dOizAy9_8GzAiM3wKOmCm10,2539 +django/db/backends/oracle/functions.py,sha256=PHMO9cApG1EhZPD4E0Vd6dzPmE_Dzouf9GIWbF1X7kc,768 +django/db/backends/oracle/introspection.py,sha256=U5Hoo6GFKKlCXZtR128a8SXykbZrjFs2tFyNhoT46OE,11358 +django/db/backends/oracle/operations.py,sha256=FVGoXfXHGY6eLJehcd8LX_tsyCfCKrkmsKncckeTLYY,25377 +django/db/backends/oracle/schema.py,sha256=h4pzJW5WJt3wv-A60o6_Pv8eKbWciQB-4ecBPtRfkus,7682 +django/db/backends/oracle/utils.py,sha256=mYTe-6R--xoYizlJd26O-5H_lCtfFkZ4aVXaLlsqS4Y,1489 +django/db/backends/oracle/validation.py,sha256=O1Vx5ljfyEVo9W-o4OVsu_OTfZ5V5P9HX3kNMtdE75o,860 +django/db/backends/postgresql/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/db/backends/postgresql/base.py,sha256=DNpNimYc1wEz-Gk0YMb0URhwCKjM8NJWkJZeEqTZ5Sg,11118 +django/db/backends/postgresql/client.py,sha256=0uzZPVsjsH28p0eBn6hWS3u2heVQfBJWzm0sQB49hZk,2383 +django/db/backends/postgresql/creation.py,sha256=a10p-xMnIVyy1y0vAFk9M6CxLqUihcdsXNTAJGdRevM,3357 +django/db/backends/postgresql/features.py,sha256=DRM_sjayMGWyUpel-LhhHUwgqdNGLj5oqJi6OiCzE-s,2940 +django/db/backends/postgresql/introspection.py,sha256=24RMKYDKu_p3jv7f0EosK9HXHUBR9o1waYWlc6dddkg,10497 +django/db/backends/postgresql/operations.py,sha256=ff8e0vG4TPNbrKU_F3yLmX3PnkQvqW7XJXw2h_SSI0I,12000 +django/db/backends/postgresql/schema.py,sha256=MG6qliMsIN2s6Z23EO2wfuNtyrgbOeQz-pNtOvctUnw,6661 +django/db/backends/postgresql/utils.py,sha256=3GXuTEoyPNqfUcXOCVnC-gw7xdAV17ZvZYb4Qu6f7Mc,176 +django/db/backends/postgresql_psycopg2/__init__.py,sha256=5v4iwk9d_ENPQMdjDfQxvPKTlOXxfaWsnaR-qgCPMcM,261 +django/db/backends/postgresql_psycopg2/base.py,sha256=g2aAztfMtAL93F8tGmO1W2YQbmr-w5sm_Obopi4JHX4,40 +django/db/backends/postgresql_psycopg2/client.py,sha256=IRCmGthBTRhO2RVGdyuxWLJowAc5H1_-1azwzrvJ-Ag,42 +django/db/backends/postgresql_psycopg2/creation.py,sha256=K2mX3uKrYKPu6snParWOUpdPE7njMl7d5F_9rWTEMy4,44 +django/db/backends/postgresql_psycopg2/features.py,sha256=5wEMe_Zj-SGxQ5AF06SH7ghMuamD_y7ddvJ9LBqZxhA,44 +django/db/backends/postgresql_psycopg2/introspection.py,sha256=uhjKJBighkTzV0JeFYJsYedni4w5I_N9LpIwDaPmOsE,49 +django/db/backends/postgresql_psycopg2/operations.py,sha256=xkIOUX-rLI6YjTKtEHYEK89whe2J1T-FKNVRBW2Jbh4,46 +django/db/backends/postgresql_psycopg2/schema.py,sha256=R-3T1eOq2-yD66L2--ICntPF2ZsLZ-Ok4TV4FGxyG5c,42 +django/db/backends/postgresql_psycopg2/utils.py,sha256=eneNs5az6_Q07x0q991G7ZABYgE-YgMg9-Xk35LT7PM,41 +django/db/backends/sqlite3/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/db/backends/sqlite3/base.py,sha256=xk4drYPzVQbuNXDh_QhGC02mkWd9VWE1fNcfqOCN4O4,22958 +django/db/backends/sqlite3/client.py,sha256=wiSj2r4sCG-n3SwFKJV2mVEw9GFXiyFbHgD_Ic_DjxA,311 +django/db/backends/sqlite3/creation.py,sha256=iepxncH5Ln-OPtigZOcnbTiK9lLVsoASIOC2IWuzhAs,4224 +django/db/backends/sqlite3/features.py,sha256=L4_HFC3YKPKIzwIF9BgZo6vj28cZ697gIkiEkot-uKk,1900 +django/db/backends/sqlite3/introspection.py,sha256=LcvxQCSutdY_saEsq6338kUvFv4vwg8HowudBV-GwVc,18775 +django/db/backends/sqlite3/operations.py,sha256=D7wIvmOY31538j-9nQEAUWPrBw-nKhEcagiDmWbS_TA,13910 +django/db/backends/sqlite3/schema.py,sha256=i8F4Nawr8huJK_SQNr8lA3bwnP9rmOmgRsczsOu1_iE,19584 +django/db/migrations/__init__.py,sha256=Oa4RvfEa6hITCqdcqwXYC66YknFKyluuy7vtNbSc-L4,97 +django/db/migrations/autodetector.py,sha256=1Y6476Yy31CdguPhGf7onKHVMoQ4r23DmTEXsq9BWYA,63909 +django/db/migrations/exceptions.py,sha256=cfa6q9WVRsTmwIucNjq8W2MbvSA-CNChenY3vFie4xg,1204 +django/db/migrations/executor.py,sha256=MTwq6bjjAYLIrRGhUtYGc_wqrGfzP0iFK-H_r8g9QEI,17772 +django/db/migrations/graph.py,sha256=qho3dqkbm8QyaRebGQUBQWFv1TQ-70AS8aWtOmw3Ius,12841 +django/db/migrations/loader.py,sha256=BtIdk7Ao1Iw170AnJ5obikZxU38b-NScr8I_7n170Lw,15167 +django/db/migrations/migration.py,sha256=qK9faUXqRpPrZ8vnQ8t3beBLVHzqX5QgFyobiWNRkqI,8242 +django/db/migrations/optimizer.py,sha256=_SmLipGoJ4naKcFYPfMVbzWDV9dsMKIpU4Rz2IN74Mk,3283 +django/db/migrations/questioner.py,sha256=9wje3vaocR4jMKTLLVRwXECMD7FZSdJbh-o4--SKvA0,9918 +django/db/migrations/recorder.py,sha256=4e2dmcQRXaGhtUO0H266E3hEDwghy8r2VcaMBwUhOI8,3338 +django/db/migrations/serializer.py,sha256=Gxp6UcEhQEkukIqBO4ukq31TmM7iKJU5P0x81gQ8gSQ,12278 +django/db/migrations/state.py,sha256=Hoeuq2IAWsDG3M3ph96vmun6fzXSifuFmUV0R1GMKkM,25660 +django/db/migrations/utils.py,sha256=ApIIVhNrnnZ79yzrbPeREFsk5kxLCuOd1rwh3dDaNLI,388 +django/db/migrations/writer.py,sha256=pk1HbwGx0YKTHXmB_M3lwqJ96U4iuB_Csu4UVy_9qZQ,11322 +django/db/migrations/operations/__init__.py,sha256=48VoWNmXeVdSqnMql-wdWVGmv8BWpfFLz2pH3I5RDCY,778 +django/db/migrations/operations/base.py,sha256=EwaG6KgnhjlvIrFXlFF-WBUaQn8yXzfpW0VEnJY38AQ,5231 +django/db/migrations/operations/fields.py,sha256=y83OFWuTrFgYLxAy73zNcJY7VEXJjkJBkz5LUHEWym0,16515 +django/db/migrations/operations/models.py,sha256=eN6zvV0rSSAhYl0hnYyeV0UglhSTLQtn6s033NTMevc,34167 +django/db/migrations/operations/special.py,sha256=6vO2RRgaUPnxEjbkTX3QwAN-LaadZFHYpFHouAaMmig,7792 +django/db/migrations/operations/utils.py,sha256=E0SdwjQBJRlx_IydA47Iho7r31erLusI1n11EHxWjnw,2257 +django/db/models/__init__.py,sha256=4XCPD0FfiCtfEBQBMaGDLlxhfTgg5KChArLEU-A2lE0,2226 +django/db/models/aggregates.py,sha256=-Uy46N8EjChw8p2Apb63IhcIH6OiZMwNAnqvyUhDgek,5869 +django/db/models/base.py,sha256=bA-oDZjHUXfY-XroK86nz7QSaMRw7DGljfJX7Oqtb9I,75360 +django/db/models/constants.py,sha256=BstFLrG_rKBHL-IZ7iqXY9uSKLL6IOKOjheXBetCan0,117 +django/db/models/constraints.py,sha256=JD66ugB1U957CYcrGLxKMq73XlUTC1Yy9NaSZRTZAdY,4739 +django/db/models/deletion.py,sha256=Rf1QRcdiAjpvtbna6_iiN3-o1nPAphTorjIhvIdOK_w,14098 +django/db/models/expressions.py,sha256=LfrhbSp5Ch7Y7pKDCwxRLzN2OAFJPiIIDNugyxq2KTQ,48796 +django/db/models/indexes.py,sha256=qTsieRkqaBMfatuF6eZeHq2Pb2Z-o6gCc1xYWdwGSuw,5877 +django/db/models/lookups.py,sha256=16tOS72_G7amTT52f5zDIxnlblqruxLMJ50WqAU7YTc,19957 +django/db/models/manager.py,sha256=UCeTO9N4jXuY_BbyDxRdeDROW2y0gxSDSjZ3bb-q1mY,6767 +django/db/models/options.py,sha256=UwZwOAnLkI17eB_kYph-1h0KyDbNKXPy5TGdJVOJ-Gc,34378 +django/db/models/query.py,sha256=qLOE2GKhKqcNYuZtIf_9VN7C14Hml541L7VFq46Dc8g,79905 +django/db/models/query_utils.py,sha256=z69GrkJoMDOneYJ96q8QniJsfeRpPi6OeW5JfP8pFAA,12173 +django/db/models/signals.py,sha256=KWJCYuMFWrZPsLDPiM2TfkzC_Hq8gbEYWkvw-qXAA9w,2160 +django/db/models/utils.py,sha256=1mQ_zPVpHleO_BFdEU714a09NMvSmR65-T3P31hhMEk,852 +django/db/models/fields/__init__.py,sha256=hHi074NYTlLBBjwycOlYwamtrYAeP8vpw934gQM7fHw,84338 +django/db/models/fields/files.py,sha256=oRkgEqtvxQZa0GbgpaKJua83RKzHmNWSdkJ27oJlaU0,17776 +django/db/models/fields/mixins.py,sha256=5Ckq4d1cZODHfViLGcUyuJwvVPyV-Kfd2aZJzY4ckxc,816 +django/db/models/fields/proxy.py,sha256=fcJ2d1ZiY0sEouSq9SV7W1fm5eE3C_nMGky3Ma347dk,515 +django/db/models/fields/related.py,sha256=tnPp9R6Sp0HNc2-OiQr1EWB77DDiyhMPUg-avSxM6g4,68214 +django/db/models/fields/related_descriptors.py,sha256=FhA3z_BJKYAPjDkjO14bCzVLu9P1HwOdOVKEfIAyqcc,51000 +django/db/models/fields/related_lookups.py,sha256=-T9rIa4aOgy3Uy8Q0QkTj8Npux0E8P4ZSVAf9jsMf6I,7023 +django/db/models/fields/reverse_related.py,sha256=XZEOAsZmnqhap-q99hZCHftivqVHpHb7l_dfbJ9pGNU,10135 +django/db/models/functions/__init__.py,sha256=z1GkLKTRA2nmGhNiY4MmScBUGZAgm8q9TI4bWh7Ep1A,1910 +django/db/models/functions/comparison.py,sha256=ouR8XAAGOAsHkcUwIh6RrScNcCry8_6SR_9hO3FCLoM,4831 +django/db/models/functions/datetime.py,sha256=XcL_IdUBJW1qPImFnwThIql_J-Do-byn0wtW3AxBLDM,10947 +django/db/models/functions/math.py,sha256=iyRt0xZ1vBvJ7QtMnuOdVEGWqqQZd6IawGD7cnVH8IU,4607 +django/db/models/functions/mixins.py,sha256=LsnLHHFrIv5_hZEBN7iTQMFua_gQlG4nDORB8DnVeSw,2078 +django/db/models/functions/text.py,sha256=X5XqQYjKWJ4dvGnp8AtdfLaaXT_m1V8lEcigXTC9s_o,9039 +django/db/models/functions/window.py,sha256=yL07Blhu1WudxHMbIfRA2bBIXuwZec8wLPbW6N5eOyc,2761 +django/db/models/sql/__init__.py,sha256=zuetuU9AGj1MdjWYMtzErxZH2VlY9dGp-RQGdCXd6uM,297 +django/db/models/sql/compiler.py,sha256=bZzzWKkAVFwkVyUm4syfv9n5hZg-jBhKtw1EhDrZyLU,69585 +django/db/models/sql/constants.py,sha256=gMg0n_j0fsfmqV5XFiywZXgSvuPq_WPV50ZSFlWYaCE,591 +django/db/models/sql/datastructures.py,sha256=1IXmOSSaqnu_d3Ab2iyp97nrVw0l_wpFLEosaAfLiHM,6701 +django/db/models/sql/query.py,sha256=4KAJprOcaxk7CtyXZvuJg4qzPaKmp7QHsAh4Frb2e-I,100717 +django/db/models/sql/subqueries.py,sha256=mGv0szYV_L3MQ62d_sABqpUOsQU3vQZgxCUCkVov4M4,7280 +django/db/models/sql/where.py,sha256=2o2kVQ8hXK0UuPlQeELDv9EQajKgVW9rxNT1MHXmTac,7991 +django/dispatch/__init__.py,sha256=qP203zNwjaolUFnXLNZHnuBn7HNzyw9_JkODECRKZbc,286 +django/dispatch/dispatcher.py,sha256=sos1Caqi0aUeddtC_kQ6vxQ3Sau2j02Yej1OHVxJSOQ,10707 +django/dispatch/license.txt,sha256=VABMS2BpZOvBY68W0EYHwW5Cj4p4oCb-y1P3DAn0qU8,1743 +django/forms/__init__.py,sha256=S6ckOMmvUX-vVST6AC-M8BzsfVQwuEUAdHWabMN-OGI,368 +django/forms/boundfield.py,sha256=X7zpRwQNc6QQOPnrXA9t4eLiGJlFY209do7N4bSFzPc,9978 +django/forms/fields.py,sha256=8z1bCzmkyW6Oik6QNAcbwuPJmCd2-FPYm297nAYSrOE,44659 +django/forms/forms.py,sha256=FFv07TkZhPV6_lvDBwQphE2fkOYMUSKL4X9p67IQI9M,20256 +django/forms/formsets.py,sha256=R9w0MoQitKwCfXylbAU2O4JxzEj6MKAt_adxBYDfyfQ,18199 +django/forms/models.py,sha256=OEDKgzXTixAqBJi8Q-JHomIMRY4TFRQSmef8A0JF8-s,56146 +django/forms/renderers.py,sha256=URxnFGbWNa5Mco2LNxQDrWWHmsXh4WY1QPLJ9rlTDpk,1975 +django/forms/utils.py,sha256=1EkxKX6-y-kj0Xzdwv-eJjL3zvbqjx0-Saw4EAOQAgg,5659 +django/forms/widgets.py,sha256=cazUSZ0Xnx1pLdTxszUY7vYqPInPCdboBMxB3zErsF0,37084 +django/forms/jinja2/django/forms/widgets/attrs.html,sha256=_J2P-AOpHFhIwaqCNcrJFxEY4s-KPdy0Wcq0KlarIG0,172 +django/forms/jinja2/django/forms/widgets/checkbox.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48 +django/forms/jinja2/django/forms/widgets/checkbox_option.html,sha256=U2dFtAXvOn_eK4ok0oO6BwKE-3-jozJboGah_PQFLVM,55 +django/forms/jinja2/django/forms/widgets/checkbox_select.html,sha256=-ob26uqmvrEUMZPQq6kAqK4KBk2YZHTCWWCM6BnaL0w,57 +django/forms/jinja2/django/forms/widgets/clearable_file_input.html,sha256=f3TWFr6fXxgVfpKPM2QQgQzPXm9RsPtDs6lQfhnaUVU,461 +django/forms/jinja2/django/forms/widgets/date.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48 +django/forms/jinja2/django/forms/widgets/datetime.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48 +django/forms/jinja2/django/forms/widgets/email.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48 +django/forms/jinja2/django/forms/widgets/file.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48 +django/forms/jinja2/django/forms/widgets/hidden.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48 +django/forms/jinja2/django/forms/widgets/input.html,sha256=u12fZde-ugkEAAkPAtAfSxwGQmYBkXkssWohOUs-xoE,172 +django/forms/jinja2/django/forms/widgets/input_option.html,sha256=PyRNn9lmE9Da0-RK37zW4yJZUSiJWgIPCU9ou5oUC28,219 +django/forms/jinja2/django/forms/widgets/multiple_hidden.html,sha256=T54-n1ZeUlTd-svM3C4tLF42umKM0R5A7fdfsdthwkA,54 +django/forms/jinja2/django/forms/widgets/multiple_input.html,sha256=O9W9tLA_gdxNqN_No2Tesd8_2GhOTyKEkCOnp_rUBn4,431 +django/forms/jinja2/django/forms/widgets/multiwidget.html,sha256=pr-MxRyucRxn_HvBGZvbc3JbFyrAolbroxvA4zmPz2Y,86 +django/forms/jinja2/django/forms/widgets/number.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48 +django/forms/jinja2/django/forms/widgets/password.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48 +django/forms/jinja2/django/forms/widgets/radio.html,sha256=-ob26uqmvrEUMZPQq6kAqK4KBk2YZHTCWWCM6BnaL0w,57 +django/forms/jinja2/django/forms/widgets/radio_option.html,sha256=U2dFtAXvOn_eK4ok0oO6BwKE-3-jozJboGah_PQFLVM,55 +django/forms/jinja2/django/forms/widgets/select.html,sha256=ESyDzbLTtM7-OG34EuSUnvxCtyP5IrQsZh0jGFrIdEA,365 +django/forms/jinja2/django/forms/widgets/select_date.html,sha256=AzaPLlNLg91qkVQwwtAJxwOqDemrtt_btSkWLpboJDs,54 +django/forms/jinja2/django/forms/widgets/select_option.html,sha256=tNa1D3G8iy2ZcWeKyI-mijjDjRmMaqSo-jnAR_VS3Qc,110 +django/forms/jinja2/django/forms/widgets/splitdatetime.html,sha256=AzaPLlNLg91qkVQwwtAJxwOqDemrtt_btSkWLpboJDs,54 +django/forms/jinja2/django/forms/widgets/splithiddendatetime.html,sha256=AzaPLlNLg91qkVQwwtAJxwOqDemrtt_btSkWLpboJDs,54 +django/forms/jinja2/django/forms/widgets/text.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48 +django/forms/jinja2/django/forms/widgets/textarea.html,sha256=Av1Y-hpXUU2AjrhnUivgZFKNBLdwCSZSeuSmCqmCkDA,145 +django/forms/jinja2/django/forms/widgets/time.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48 +django/forms/jinja2/django/forms/widgets/url.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48 +django/forms/templates/django/forms/widgets/attrs.html,sha256=9ylIPv5EZg-rx2qPLgobRkw6Zq_WJSM8kt106PpSYa0,172 +django/forms/templates/django/forms/widgets/checkbox.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48 +django/forms/templates/django/forms/widgets/checkbox_option.html,sha256=U2dFtAXvOn_eK4ok0oO6BwKE-3-jozJboGah_PQFLVM,55 +django/forms/templates/django/forms/widgets/checkbox_select.html,sha256=-ob26uqmvrEUMZPQq6kAqK4KBk2YZHTCWWCM6BnaL0w,57 +django/forms/templates/django/forms/widgets/clearable_file_input.html,sha256=f3TWFr6fXxgVfpKPM2QQgQzPXm9RsPtDs6lQfhnaUVU,461 +django/forms/templates/django/forms/widgets/date.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48 +django/forms/templates/django/forms/widgets/datetime.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48 +django/forms/templates/django/forms/widgets/email.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48 +django/forms/templates/django/forms/widgets/file.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48 +django/forms/templates/django/forms/widgets/hidden.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48 +django/forms/templates/django/forms/widgets/input.html,sha256=dwzzrLocGLZQIaGe-_X8k7z87jV6AFtn28LilnUnUH0,189 +django/forms/templates/django/forms/widgets/input_option.html,sha256=PyRNn9lmE9Da0-RK37zW4yJZUSiJWgIPCU9ou5oUC28,219 +django/forms/templates/django/forms/widgets/multiple_hidden.html,sha256=T54-n1ZeUlTd-svM3C4tLF42umKM0R5A7fdfsdthwkA,54 +django/forms/templates/django/forms/widgets/multiple_input.html,sha256=HwEaZLEiZYdPJ6brC9QWRGaIKzcX5UA2Tj5Rsq_NvOk,462 +django/forms/templates/django/forms/widgets/multiwidget.html,sha256=slk4AgCdXnVmFvavhjVcsza0quTOP2LG50D8wna0dw0,117 +django/forms/templates/django/forms/widgets/number.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48 +django/forms/templates/django/forms/widgets/password.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48 +django/forms/templates/django/forms/widgets/radio.html,sha256=-ob26uqmvrEUMZPQq6kAqK4KBk2YZHTCWWCM6BnaL0w,57 +django/forms/templates/django/forms/widgets/radio_option.html,sha256=U2dFtAXvOn_eK4ok0oO6BwKE-3-jozJboGah_PQFLVM,55 +django/forms/templates/django/forms/widgets/select.html,sha256=7U0RzjeESG87ENzQjPRUF71gvKvGjVVvXcpsW2-BTR4,384 +django/forms/templates/django/forms/widgets/select_date.html,sha256=AzaPLlNLg91qkVQwwtAJxwOqDemrtt_btSkWLpboJDs,54 +django/forms/templates/django/forms/widgets/select_option.html,sha256=N_psd0JYCqNhx2eh2oyvkF2KU2dv7M9mtMw_4BLYq8A,127 +django/forms/templates/django/forms/widgets/splitdatetime.html,sha256=AzaPLlNLg91qkVQwwtAJxwOqDemrtt_btSkWLpboJDs,54 +django/forms/templates/django/forms/widgets/splithiddendatetime.html,sha256=AzaPLlNLg91qkVQwwtAJxwOqDemrtt_btSkWLpboJDs,54 +django/forms/templates/django/forms/widgets/text.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48 +django/forms/templates/django/forms/widgets/textarea.html,sha256=Av1Y-hpXUU2AjrhnUivgZFKNBLdwCSZSeuSmCqmCkDA,145 +django/forms/templates/django/forms/widgets/time.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48 +django/forms/templates/django/forms/widgets/url.html,sha256=fXpbxMzAdbv_avfWC5464gD2jFng931Eq7vzbzy1-yA,48 +django/http/__init__.py,sha256=5JImoB1BZNuZBOt5qyDX7t51McYbkDLX45eKmNN_Fes,1010 +django/http/cookie.py,sha256=Zpg6OEW9-dGvr5ByQhlHyGjLJzvNNrnGL1WzolnsM6U,818 +django/http/multipartparser.py,sha256=nVsO_ltddU2WwGHpmx33-a2LPBvLCvhsSKJCrXMGYRs,24849 +django/http/request.py,sha256=L9Hm9EncumIimwhDNJsYwkBDE4H5QCZ58jiQgIA9urY,22018 +django/http/response.py,sha256=Jb6UKYq38gz-bmvQ_-_Clmxu23ndOCLrokMkGOg2vYI,19822 +django/middleware/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/middleware/cache.py,sha256=O2o_oy_WqqOdIT8ncgTOFv--WQDZxslVPgKeV0ZGWc8,7721 +django/middleware/clickjacking.py,sha256=4rzsG5m_Z2VabN7J_5ZVeFj14X3FAbs0iU5LKoBb9js,1733 +django/middleware/common.py,sha256=j8uL14Du1FaiY-tK87YEQRb1MsYSREqpLjWxkQzaVVM,7337 +django/middleware/csrf.py,sha256=AmhsvvJcwcZi6WDvffsJyM5Cr7Po_S0By82HfVN2qkU,13695 +django/middleware/gzip.py,sha256=oq6J0L_1NLZuvV1F1MxuFPzdUS71301py0GWHBAmk2k,2060 +django/middleware/http.py,sha256=JiRGXvtfmXxYTomy7gde5pcG45GX7R0qpXiI5Fk06dE,1624 +django/middleware/locale.py,sha256=MLUCXirb6za_o2T4mKokGvow8Z-jTrUhfGBJ82y0Mz4,3017 +django/middleware/security.py,sha256=E0R1W9k8qFIfPZ72GjRXg9YE4Cn0P8mzFdIh5vnlhNo,1952 +django/template/__init__.py,sha256=t5onT26DOSny4Qi7iz_a82M5WJydvPpkb6hFjE010CE,1871 +django/template/base.py,sha256=gH4PtPPv2koQxF6z5DPIA1RSLpn074G8RkXAece6owM,38162 +django/template/context.py,sha256=FkH-98jR88v26qIKKEJA8ZQxXIFliZZsfX-v7CNQ6AY,8974 +django/template/context_processors.py,sha256=drfyVYugSe1lg9VIbsC3oRLUG64Gw94Oq77FLfk2ZNI,2407 +django/template/defaultfilters.py,sha256=dZ8fmd9aHgk3plHhyef_bVVJQovJVXqzeaUdmyzqf-M,25959 +django/template/defaulttags.py,sha256=6O2VusUshB-vsqR3zFiHyZ1mSv2MSDc9OjJx3ijx_XY,49592 +django/template/engine.py,sha256=PJBXkDmv3AIh6WugbyFcUKu01XKNDxk43BKURTLhI7g,6854 +django/template/exceptions.py,sha256=awd7B80xhFB574Lt2IdIyHCpD6KGGyuKGkIoalr9deo,1340 +django/template/library.py,sha256=g2gi5FfSug-Wak2P4Weg7qGcwHrwIy47vse35YYkLbk,12812 +django/template/loader.py,sha256=-t5cTnWJrxtS2vyg9cguz4rXxlTBni4XoJUuqJNglPI,2054 +django/template/loader_tags.py,sha256=beGFoV5luVMZj6zaUaY1lUFv5gWzQqmDybHsnTOG8Jo,12306 +django/template/response.py,sha256=dBq9wQvYEvCtHqpeK6Diw-yYkcQpbVDIeL22nckII3Q,5425 +django/template/smartif.py,sha256=QBvsTtD4YiyGoU4hXrW8vqR0CBAFOZGuDoRP3aGEgOs,6408 +django/template/utils.py,sha256=e30XcUAZkeMk2kp4kYZg-7wx2PQlBMqWOxCJoj8fEco,3589 +django/template/backends/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/template/backends/base.py,sha256=P8dvOmQppJ8YMZ5_XyOJGDzspbQMNGV82GxL5IwrMFM,2751 +django/template/backends/django.py,sha256=_w350tmHAMSLOw-b2o9rR0Wn6YX3QMkpHkkpvbo_EwI,4186 +django/template/backends/dummy.py,sha256=Nl313SxX1rxE1F-5AHCljgejrYpYCx-QXJpNUkQWXR4,1767 +django/template/backends/jinja2.py,sha256=bx8DcA2PqqzDmcgegY11pm5EhmD_gWTTLauGo91imL4,3504 +django/template/backends/utils.py,sha256=5Ixx08oifnjpIFod1t9IRJJ_S-UCGk_-CH6oTuIZqXE,414 +django/template/loaders/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/template/loaders/app_directories.py,sha256=w3a84EAXWX12w7F1CyxIQ_lFiTwxFS7xf3rCEcnUqyc,313 +django/template/loaders/base.py,sha256=kvjmN-UHxdd6Pwgkexw7IHL0YeJQgXXbuz_tdj5ciKc,1558 +django/template/loaders/cached.py,sha256=tbkSEaMOyX9Ys29opTpI8Wui59beO25FJOHHm2MP6Vo,3619 +django/template/loaders/filesystem.py,sha256=OWTnIwWbVj-Td5VrOkKw1G_6pIuz1Vnh5CedZN5glyU,1507 +django/template/loaders/locmem.py,sha256=8cBYI8wPOOnIx_3v7fC5jezA_6pJLqgqObeLwHXQJKo,673 +django/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/templatetags/cache.py,sha256=otY3c4Ti9YLxFfOuIX5TZ7w12aGDPkyGfQNsaPVZ_M0,3401 +django/templatetags/i18n.py,sha256=59uC1SiRTPW0R3E5ML_svVdhRLHj8WYxVxYOmwrg1Ro,18830 +django/templatetags/l10n.py,sha256=I6jRSBLvL34H-_rwGuHfU22VBhO2IHNRue78KWb8pTc,1723 +django/templatetags/static.py,sha256=om3cu4NVaH4MVUq-XPLxPVNlLUCxTbbp0qAVVSaClj4,4502 +django/templatetags/tz.py,sha256=HFzJsvh-x9yjoju4kiIpKAI0U_4crtoftqiT8llM_u8,5400 +django/test/__init__.py,sha256=5FrmvgBrxzZo5UVLW9HZ1iHBMMhcnXcNL5Y2xnaqVPA,682 +django/test/client.py,sha256=iCDiaiNLKJB_fcZLDk4s7qlFg0d58SSj62OGXN-F0W8,28732 +django/test/html.py,sha256=xAGIOb_w045KfPLsABOvcQPNZbYXZfKaGl7C4thSJwQ,7486 +django/test/runner.py,sha256=HKY8sUY9uMcmgg9fpafCXu5QT16qSU5ZR2-MkSdvHrc,26443 +django/test/selenium.py,sha256=HphIIQixsP3uUWqEXbU-wgkQSeLE2379s0bWOpleSbg,4580 +django/test/signals.py,sha256=BQlO0pXZTOdcbhgW1gJLc16WW2Q75wx_2wheG5kCh9U,6729 +django/test/testcases.py,sha256=6OIglcO4loIEcZbrXLht43ciW_d28_hTz5ESLM_dlyM,61365 +django/test/utils.py,sha256=0327cjxpw1oKe9H5d8Xf7cdtXE4dl9XrpDL54xldr2k,29769 +django/urls/__init__.py,sha256=FdHfNv5NwWEIt1EqEpRY7xJ-i4tD-SCLj0tq3qT6X1E,959 +django/urls/base.py,sha256=FyzHdMGoWj9chy8m4pxuEQggbrtbixY1VAvsWr6Pw4Q,5652 +django/urls/conf.py,sha256=8Xug9NhJXDEysRXWrY2iHf0snfJMUmQkYZAomPltWMY,2946 +django/urls/converters.py,sha256=_eluhZBczkfMwCZJEQtM7s7KJQYbwoO4lygFQvtWSHA,1216 +django/urls/exceptions.py,sha256=alLNjkORtAxneC00g4qnRpG5wouOHvJvGbymdpKtG_I,115 +django/urls/resolvers.py,sha256=z7tGl3Gk_-M6iHCUmMOkzTHmn7XjuAWr58U6qVb-hdU,27298 +django/urls/utils.py,sha256=VHDcmggNRHSbPJAql5KJhe7wX4pSjrKb64Fu-p14D9Q,2152 +django/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/utils/_os.py,sha256=O8TdR7f0VZUJLtEJ8wRuAU4O30aDt7jRBJPe0uJx6FU,2319 +django/utils/archive.py,sha256=vfnm15A6vgrLvgzhKRE9oJvHhd1JvKtDKc1RibEfCug,7459 +django/utils/autoreload.py,sha256=prf3bdR3Obt6zMoByNadQApxYfD8qfL8s1EOiQprDLk,22389 +django/utils/baseconv.py,sha256=xYReIqcF2FFD85BqDrl48xo4UijII9D6YyC-FHsUPbw,2989 +django/utils/cache.py,sha256=zmLMJyoUXn1WMs8HwN4hER1841iV6BCEQp7A9APKTL8,15236 +django/utils/crypto.py,sha256=IIqgXjuPnXLufCY-nX61pSnAutVrr_cQXnSq6jrctNw,3079 +django/utils/datastructures.py,sha256=WQNC_3HeOUXV4KLEDzMAdA5KxBC2BqLnU40i2ziVODc,10194 +django/utils/dateformat.py,sha256=YyUXezYqG_R-hMqSh4Q50qyTfvReD_4TTHVD2c1zH4U,11508 +django/utils/dateparse.py,sha256=1KNeTgoBPnZYFMrj60P0TqlXFKURG5Tk9ypvEZokLVg,4708 +django/utils/dates.py,sha256=hl7plurNHC7tj_9Olb7H7-LCtOhOV71oWg-xx5PBFh4,2021 +django/utils/datetime_safe.py,sha256=9svjsJ9NVgOuSmgoecmBj2OlAk6kbZBlPLnPTxjxyfc,2811 +django/utils/deconstruct.py,sha256=hcO_7qassSI5dTfQ5CPttA8s3f9yaF8UnqKKma3bI6M,1975 +django/utils/decorators.py,sha256=shbm4hl9EZnkGSarU8kCNCfvi3fRz-y4IpMn3cLn_j0,6839 +django/utils/deprecation.py,sha256=WT5IBFUCZZEQRXBE3oEFS9Owm-jFPufjGzmNzpxXkh4,3335 +django/utils/duration.py,sha256=VtDUAQKIPFuv6XkwG6gIjLQYtcs8vgGMcS4OQpSFx-E,1234 +django/utils/encoding.py,sha256=E8Cv6BhVcQb9qXlXAJyyrJRxVSoWplw3Z7k0RU1TeV0,9034 +django/utils/feedgenerator.py,sha256=rI74OiJ8cWgt9AhA0RnYdKTVi7IXUM6FCLpFUQjDRmc,15109 +django/utils/formats.py,sha256=vuB-IV1PlQH3qWQRtwFG6HqTeZinOc-iOXiZbioMpFs,8973 +django/utils/functional.py,sha256=SV8B49LKJWYMTLPSTudqm4QdRNZc2yosfKHACLfvzhg,14934 +django/utils/hashable.py,sha256=oKA7b4KMSFYou8278uoKN8OhIr1v_4HvqpnFuWX6CcY,541 +django/utils/html.py,sha256=anX8pynFCghrdbrm5eNBxwR0c5aPFPyumUC4R2e-d3o,13625 +django/utils/http.py,sha256=N71gtpRFHI6RPFtuvZTIjLeF9V1XK4L75Xi_bH64MWY,15869 +django/utils/inspect.py,sha256=6UgUGkYM4O6tgD2xLf4-_SwccNsYyCj-qm-eV-UuQsU,1789 +django/utils/ipv6.py,sha256=WBkmZXdtbIHgcaWDKm4ElRvzyu_wKLCW2aA18g1RCJo,1350 +django/utils/itercompat.py,sha256=lacIDjczhxbwG4ON_KfG1H6VNPOGOpbRhnVhbedo2CY,184 +django/utils/jslex.py,sha256=jOes0kfZoIIPxPMNWkXMJ6D3x3f95B5cZWKXo38Rhcc,7707 +django/utils/log.py,sha256=EgHENXlsZvbOrGeCwhFM89cZmJe6FMsgG3DE5Zf3m1U,7617 +django/utils/lorem_ipsum.py,sha256=P_BSLsITDP2ZW9EJPy6ciFneib0iz9ezBz2LD7CViRE,4775 +django/utils/lru_cache.py,sha256=4g-svLUmsvn2wlS-rPEJbFr_ODqoar5qxwIjGxrLlxA,256 +django/utils/module_loading.py,sha256=7axS-Noau0eW1yvFe4teC5cs774eUqrcSSWjf-1tml4,3650 +django/utils/numberformat.py,sha256=waacNvqlzLly_0y50tLhVg8WAGooX6VKhxkSWgE9ryA,3142 +django/utils/regex_helper.py,sha256=4aWtTpg-WxCBF3VdjE0z1Q9m-0vEjUs4hBf0wQ2seNk,12225 +django/utils/safestring.py,sha256=PeuXouObw-6U6PZaqQscCpUIAAszA1qrgdMM4tGkTOo,2393 +django/utils/six.py,sha256=ecocr7GKytCmp9FbyOLDUR4_0vngcOjMJItxTGnTRV8,30502 +django/utils/termcolors.py,sha256=JrysYBjC72oq0WBL6EJ44A8ZEij_S7QsivoRQugxPEk,7362 +django/utils/text.py,sha256=EE8x4eoUUNNU_Waq3jybptiIIRbDSAnS8DbHIxiDPT8,13761 +django/utils/timesince.py,sha256=QlkajdzXVftZlf9VIF-vlOK9M_UpErK2DH-6cCTJmLQ,3177 +django/utils/timezone.py,sha256=2i1ZvOBmUxxuff6nQ-Q1go7VZ4jSlBIxreIkurD89Q0,8369 +django/utils/topological_sort.py,sha256=AwF4mvJw4CXhFgLyA7HCgSZY68sh8aQZxDaL9NeyIZA,1198 +django/utils/tree.py,sha256=HKi-DFkh6PCmWxwQhKRvMPDP5AufD_BY3DpZM1ivnNo,4886 +django/utils/version.py,sha256=6iP04QtIAc3QyEEWsvLArFi74NmqtIGX0vYtHbTJyDk,3214 +django/utils/xmlutils.py,sha256=74FlMIKhIkMsZb9RL9RZ4EpteGhVoxDespUEqgfDPaw,1185 +django/utils/translation/__init__.py,sha256=djQ2D2tj9_QCrHWUdqNFd_FayfWMMrymoT5c3b6QWtc,8738 +django/utils/translation/reloader.py,sha256=AblCuViaqJBgA19B95hMnjGRhjk3c9sSPRc8f_4_4yQ,968 +django/utils/translation/template.py,sha256=YB4F--bYjTZgo7MFYhEFxXQIxLlZHEtGd16xWwDVit0,9958 +django/utils/translation/trans_null.py,sha256=yp82bHt5oqqL95Z5PFoYCZeENOulxzp-IqMmkWz0l9Y,1257 +django/utils/translation/trans_real.py,sha256=L2u0qwbnBE3Jq4jPm4r9zADmWdWOXgo5b6qVkEu1lMI,17932 +django/views/__init__.py,sha256=DGdAuGC0t1bMju9i-B9p_gqPgRIFHtLXTdIxNKWFGsw,63 +django/views/csrf.py,sha256=TOnXES5w0BmUvyq7whGB6Z6Ds4-RotIVammFGN88UKY,6252 +django/views/debug.py,sha256=culMfkCBmUFYwG8PszvU7cyUQeJL9bxhwzoYWEKZu2Y,20351 +django/views/defaults.py,sha256=Guifqw0keMcwBSqpYlhxxO6LxA6usW9QLrr5h7O2iNw,4468 +django/views/i18n.py,sha256=gJLS6spFc8RSu9ntlVKc2Mb0XwcHxHrPxKu96cDURRU,11000 +django/views/static.py,sha256=R1tS45T8r5P6Xa8umzH6RcO4dnhIzHnlSKFEpIobpHw,4548 +django/views/decorators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +django/views/decorators/cache.py,sha256=uSLzb61mCuFKIm8tR3Gs_NP1H7U-BOEU_QOc3IhBC_4,1705 +django/views/decorators/clickjacking.py,sha256=EW-DRe2dR8yg4Rf8HRHl8c4-C8mL3HKGa6PxZRKmFtU,1565 +django/views/decorators/csrf.py,sha256=xPWVVNw_DBidvX_ZVYvN7CePt1HpxpUxsb6wMr0Oe4Y,2073 +django/views/decorators/debug.py,sha256=Q_ul_n8M89WoPL87mDYomZ74mv_djuudZZ-b-uB1I6s,2569 +django/views/decorators/gzip.py,sha256=PtpSGd8BePa1utGqvKMFzpLtZJxpV2_Jej8llw5bCJY,253 +django/views/decorators/http.py,sha256=NgZFNkaX0DwDJWUNNgj-FRbBOQEyW4KwbrWDZOa_9Go,4713 +django/views/decorators/vary.py,sha256=6wEXI5yBFZYDVednNPc0bYbXGG-QzkIUQ-50ErDrA_k,1084 +django/views/generic/__init__.py,sha256=WTnzEXnKyJqzHlLu_VsXInYg-GokDNBCUYNV_U6U-ok,822 +django/views/generic/base.py,sha256=lAS2D3uaDd3KgWsPjenp6OSNG3DLbse_K1v6ijcu5ao,7805 +django/views/generic/dates.py,sha256=p9PKscdpueKRZ4n5jpiqsTZM8IS1w6ITd9xO4kagA44,25423 +django/views/generic/detail.py,sha256=m8otoffJXPW9ml-vAtXeM4asTT5I4pvuoR4BhjpWB6A,6507 +django/views/generic/edit.py,sha256=zPO3D8rFrSDjJG1OnRYn0frGqVq8VMKAEUihZU2NrIk,8332 +django/views/generic/list.py,sha256=GS6wVgiFz4MHsZXi7jfKjlSiHrrmZw8agJl26fVZwjM,7674 +django/views/templates/default_urlconf.html,sha256=Fsbawa-zQhrvcfjfBPVoHgOxSFS0orqEyPudrXT5DmU,16595 +django/views/templates/technical_404.html,sha256=nZT2gkPAYc7G8VNJXst-dEyim0t83xjX-TtCGtxJZwc,2453 +django/views/templates/technical_500.html,sha256=4bFi98TJHN56C3ZnQmDP4uN1yhn2QJXQcmqsaWsEG2w,17182 +django/views/templates/technical_500.txt,sha256=7VWOipQg2poVyusbM8dQHRyRR-iUB_dOehAoF0HBHNM,3367 +Django-2.2.6.dist-info/LICENSE,sha256=uEZBXRtRTpwd_xSiLeuQbXlLxUbKYSn5UKGM0JHipmk,1552 +Django-2.2.6.dist-info/METADATA,sha256=jPcKFWjLtRfKCaie58SkxXe6G4pyrNNt-y-w0nnjKxE,3511 +Django-2.2.6.dist-info/WHEEL,sha256=S8S5VL-stOTSZDYxHyf0KP7eds0J72qrK0Evu3TfyAY,92 +Django-2.2.6.dist-info/entry_points.txt,sha256=daYW_s0r8Z5eiRi_bNU6vodHqVUXQWzm-DHFOQHTV2Q,83 +Django-2.2.6.dist-info/top_level.txt,sha256=V_goijg9tfO20ox_7os6CcnPvmBavbxu46LpJiNLwjA,7 +Django-2.2.6.dist-info/RECORD,, +../../../bin/django-admin,sha256=FuzhoUFORGVSn0cfbVFrUSieYa6JWLNdLRBuY7X2blg,317 +Django-2.2.6.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +django/templatetags/__pycache__/tz.cpython-37.pyc,, +django/templatetags/__pycache__/l10n.cpython-37.pyc,, +django/templatetags/__pycache__/i18n.cpython-37.pyc,, +django/templatetags/__pycache__/cache.cpython-37.pyc,, +django/templatetags/__pycache__/static.cpython-37.pyc,, +django/templatetags/__pycache__/__init__.cpython-37.pyc,, +django/middleware/__pycache__/clickjacking.cpython-37.pyc,, +django/middleware/__pycache__/csrf.cpython-37.pyc,, +django/middleware/__pycache__/common.cpython-37.pyc,, +django/middleware/__pycache__/gzip.cpython-37.pyc,, +django/middleware/__pycache__/locale.cpython-37.pyc,, +django/middleware/__pycache__/security.cpython-37.pyc,, +django/middleware/__pycache__/cache.cpython-37.pyc,, +django/middleware/__pycache__/http.cpython-37.pyc,, +django/middleware/__pycache__/__init__.cpython-37.pyc,, +django/forms/__pycache__/renderers.cpython-37.pyc,, +django/forms/__pycache__/boundfield.cpython-37.pyc,, +django/forms/__pycache__/widgets.cpython-37.pyc,, +django/forms/__pycache__/forms.cpython-37.pyc,, +django/forms/__pycache__/models.cpython-37.pyc,, +django/forms/__pycache__/formsets.cpython-37.pyc,, +django/forms/__pycache__/utils.cpython-37.pyc,, +django/forms/__pycache__/fields.cpython-37.pyc,, +django/forms/__pycache__/__init__.cpython-37.pyc,, +django/core/cache/backends/__pycache__/locmem.cpython-37.pyc,, +django/core/cache/backends/__pycache__/db.cpython-37.pyc,, +django/core/cache/backends/__pycache__/base.cpython-37.pyc,, +django/core/cache/backends/__pycache__/dummy.cpython-37.pyc,, +django/core/cache/backends/__pycache__/memcached.cpython-37.pyc,, +django/core/cache/backends/__pycache__/filebased.cpython-37.pyc,, +django/core/cache/backends/__pycache__/__init__.cpython-37.pyc,, +django/core/cache/__pycache__/utils.cpython-37.pyc,, +django/core/cache/__pycache__/__init__.cpython-37.pyc,, +django/core/mail/backends/__pycache__/smtp.cpython-37.pyc,, +django/core/mail/backends/__pycache__/console.cpython-37.pyc,, +django/core/mail/backends/__pycache__/locmem.cpython-37.pyc,, +django/core/mail/backends/__pycache__/base.cpython-37.pyc,, +django/core/mail/backends/__pycache__/dummy.cpython-37.pyc,, +django/core/mail/backends/__pycache__/filebased.cpython-37.pyc,, +django/core/mail/backends/__pycache__/__init__.cpython-37.pyc,, +django/core/mail/__pycache__/message.cpython-37.pyc,, +django/core/mail/__pycache__/utils.cpython-37.pyc,, +django/core/mail/__pycache__/__init__.cpython-37.pyc,, +django/core/checks/compatibility/__pycache__/__init__.cpython-37.pyc,, +django/core/checks/security/__pycache__/csrf.cpython-37.pyc,, +django/core/checks/security/__pycache__/sessions.cpython-37.pyc,, +django/core/checks/security/__pycache__/base.cpython-37.pyc,, +django/core/checks/security/__pycache__/__init__.cpython-37.pyc,, +django/core/checks/__pycache__/model_checks.cpython-37.pyc,, +django/core/checks/__pycache__/database.cpython-37.pyc,, +django/core/checks/__pycache__/translation.cpython-37.pyc,, +django/core/checks/__pycache__/messages.cpython-37.pyc,, +django/core/checks/__pycache__/templates.cpython-37.pyc,, +django/core/checks/__pycache__/caches.cpython-37.pyc,, +django/core/checks/__pycache__/registry.cpython-37.pyc,, +django/core/checks/__pycache__/urls.cpython-37.pyc,, +django/core/checks/__pycache__/__init__.cpython-37.pyc,, +django/core/management/__pycache__/sql.cpython-37.pyc,, +django/core/management/__pycache__/templates.cpython-37.pyc,, +django/core/management/__pycache__/base.cpython-37.pyc,, +django/core/management/__pycache__/color.cpython-37.pyc,, +django/core/management/__pycache__/utils.cpython-37.pyc,, +django/core/management/__pycache__/__init__.cpython-37.pyc,, +django/core/management/commands/__pycache__/dumpdata.cpython-37.pyc,, +django/core/management/commands/__pycache__/startproject.cpython-37.pyc,, +django/core/management/commands/__pycache__/sqlmigrate.cpython-37.pyc,, +django/core/management/commands/__pycache__/sqlflush.cpython-37.pyc,, +django/core/management/commands/__pycache__/showmigrations.cpython-37.pyc,, +django/core/management/commands/__pycache__/dbshell.cpython-37.pyc,, +django/core/management/commands/__pycache__/startapp.cpython-37.pyc,, +django/core/management/commands/__pycache__/compilemessages.cpython-37.pyc,, +django/core/management/commands/__pycache__/squashmigrations.cpython-37.pyc,, +django/core/management/commands/__pycache__/loaddata.cpython-37.pyc,, +django/core/management/commands/__pycache__/sqlsequencereset.cpython-37.pyc,, +django/core/management/commands/__pycache__/makemessages.cpython-37.pyc,, +django/core/management/commands/__pycache__/makemigrations.cpython-37.pyc,, +django/core/management/commands/__pycache__/check.cpython-37.pyc,, +django/core/management/commands/__pycache__/migrate.cpython-37.pyc,, +django/core/management/commands/__pycache__/inspectdb.cpython-37.pyc,, +django/core/management/commands/__pycache__/sendtestemail.cpython-37.pyc,, +django/core/management/commands/__pycache__/testserver.cpython-37.pyc,, +django/core/management/commands/__pycache__/diffsettings.cpython-37.pyc,, +django/core/management/commands/__pycache__/flush.cpython-37.pyc,, +django/core/management/commands/__pycache__/runserver.cpython-37.pyc,, +django/core/management/commands/__pycache__/shell.cpython-37.pyc,, +django/core/management/commands/__pycache__/test.cpython-37.pyc,, +django/core/management/commands/__pycache__/createcachetable.cpython-37.pyc,, +django/core/__pycache__/exceptions.cpython-37.pyc,, +django/core/__pycache__/signals.cpython-37.pyc,, +django/core/__pycache__/paginator.cpython-37.pyc,, +django/core/__pycache__/validators.cpython-37.pyc,, +django/core/__pycache__/wsgi.cpython-37.pyc,, +django/core/__pycache__/signing.cpython-37.pyc,, +django/core/__pycache__/__init__.cpython-37.pyc,, +django/core/serializers/__pycache__/xml_serializer.cpython-37.pyc,, +django/core/serializers/__pycache__/pyyaml.cpython-37.pyc,, +django/core/serializers/__pycache__/python.cpython-37.pyc,, +django/core/serializers/__pycache__/base.cpython-37.pyc,, +django/core/serializers/__pycache__/json.cpython-37.pyc,, +django/core/serializers/__pycache__/__init__.cpython-37.pyc,, +django/core/files/__pycache__/uploadedfile.cpython-37.pyc,, +django/core/files/__pycache__/storage.cpython-37.pyc,, +django/core/files/__pycache__/temp.cpython-37.pyc,, +django/core/files/__pycache__/uploadhandler.cpython-37.pyc,, +django/core/files/__pycache__/images.cpython-37.pyc,, +django/core/files/__pycache__/move.cpython-37.pyc,, +django/core/files/__pycache__/base.cpython-37.pyc,, +django/core/files/__pycache__/utils.cpython-37.pyc,, +django/core/files/__pycache__/__init__.cpython-37.pyc,, +django/core/files/__pycache__/locks.cpython-37.pyc,, +django/core/handlers/__pycache__/base.cpython-37.pyc,, +django/core/handlers/__pycache__/wsgi.cpython-37.pyc,, +django/core/handlers/__pycache__/exception.cpython-37.pyc,, +django/core/handlers/__pycache__/__init__.cpython-37.pyc,, +django/core/servers/__pycache__/basehttp.cpython-37.pyc,, +django/core/servers/__pycache__/__init__.cpython-37.pyc,, +django/test/__pycache__/client.cpython-37.pyc,, +django/test/__pycache__/signals.cpython-37.pyc,, +django/test/__pycache__/testcases.cpython-37.pyc,, +django/test/__pycache__/selenium.cpython-37.pyc,, +django/test/__pycache__/utils.cpython-37.pyc,, +django/test/__pycache__/__init__.cpython-37.pyc,, +django/test/__pycache__/runner.cpython-37.pyc,, +django/test/__pycache__/html.cpython-37.pyc,, +django/bin/__pycache__/django-admin.cpython-37.pyc,, +django/dispatch/__pycache__/dispatcher.cpython-37.pyc,, +django/dispatch/__pycache__/__init__.cpython-37.pyc,, +django/template/backends/__pycache__/django.cpython-37.pyc,, +django/template/backends/__pycache__/jinja2.cpython-37.pyc,, +django/template/backends/__pycache__/base.cpython-37.pyc,, +django/template/backends/__pycache__/utils.cpython-37.pyc,, +django/template/backends/__pycache__/dummy.cpython-37.pyc,, +django/template/backends/__pycache__/__init__.cpython-37.pyc,, +django/template/__pycache__/response.cpython-37.pyc,, +django/template/__pycache__/defaulttags.cpython-37.pyc,, +django/template/__pycache__/engine.cpython-37.pyc,, +django/template/__pycache__/context_processors.cpython-37.pyc,, +django/template/__pycache__/smartif.cpython-37.pyc,, +django/template/__pycache__/exceptions.cpython-37.pyc,, +django/template/__pycache__/defaultfilters.cpython-37.pyc,, +django/template/__pycache__/loader.cpython-37.pyc,, +django/template/__pycache__/base.cpython-37.pyc,, +django/template/__pycache__/utils.cpython-37.pyc,, +django/template/__pycache__/loader_tags.cpython-37.pyc,, +django/template/__pycache__/context.cpython-37.pyc,, +django/template/__pycache__/library.cpython-37.pyc,, +django/template/__pycache__/__init__.cpython-37.pyc,, +django/template/loaders/__pycache__/cached.cpython-37.pyc,, +django/template/loaders/__pycache__/locmem.cpython-37.pyc,, +django/template/loaders/__pycache__/app_directories.cpython-37.pyc,, +django/template/loaders/__pycache__/filesystem.cpython-37.pyc,, +django/template/loaders/__pycache__/base.cpython-37.pyc,, +django/template/loaders/__pycache__/__init__.cpython-37.pyc,, +django/utils/translation/__pycache__/trans_real.cpython-37.pyc,, +django/utils/translation/__pycache__/template.cpython-37.pyc,, +django/utils/translation/__pycache__/reloader.cpython-37.pyc,, +django/utils/translation/__pycache__/__init__.cpython-37.pyc,, +django/utils/translation/__pycache__/trans_null.cpython-37.pyc,, +django/utils/__pycache__/tree.cpython-37.pyc,, +django/utils/__pycache__/dateformat.cpython-37.pyc,, +django/utils/__pycache__/duration.cpython-37.pyc,, +django/utils/__pycache__/feedgenerator.cpython-37.pyc,, +django/utils/__pycache__/inspect.cpython-37.pyc,, +django/utils/__pycache__/datastructures.cpython-37.pyc,, +django/utils/__pycache__/version.cpython-37.pyc,, +django/utils/__pycache__/timesince.cpython-37.pyc,, +django/utils/__pycache__/xmlutils.cpython-37.pyc,, +django/utils/__pycache__/deprecation.cpython-37.pyc,, +django/utils/__pycache__/_os.cpython-37.pyc,, +django/utils/__pycache__/itercompat.cpython-37.pyc,, +django/utils/__pycache__/ipv6.cpython-37.pyc,, +django/utils/__pycache__/functional.cpython-37.pyc,, +django/utils/__pycache__/archive.cpython-37.pyc,, +django/utils/__pycache__/safestring.cpython-37.pyc,, +django/utils/__pycache__/formats.cpython-37.pyc,, +django/utils/__pycache__/six.cpython-37.pyc,, +django/utils/__pycache__/datetime_safe.cpython-37.pyc,, +django/utils/__pycache__/text.cpython-37.pyc,, +django/utils/__pycache__/baseconv.cpython-37.pyc,, +django/utils/__pycache__/encoding.cpython-37.pyc,, +django/utils/__pycache__/lru_cache.cpython-37.pyc,, +django/utils/__pycache__/log.cpython-37.pyc,, +django/utils/__pycache__/crypto.cpython-37.pyc,, +django/utils/__pycache__/hashable.cpython-37.pyc,, +django/utils/__pycache__/topological_sort.cpython-37.pyc,, +django/utils/__pycache__/deconstruct.cpython-37.pyc,, +django/utils/__pycache__/cache.cpython-37.pyc,, +django/utils/__pycache__/autoreload.cpython-37.pyc,, +django/utils/__pycache__/termcolors.cpython-37.pyc,, +django/utils/__pycache__/numberformat.cpython-37.pyc,, +django/utils/__pycache__/http.cpython-37.pyc,, +django/utils/__pycache__/dates.cpython-37.pyc,, +django/utils/__pycache__/lorem_ipsum.cpython-37.pyc,, +django/utils/__pycache__/jslex.cpython-37.pyc,, +django/utils/__pycache__/dateparse.cpython-37.pyc,, +django/utils/__pycache__/decorators.cpython-37.pyc,, +django/utils/__pycache__/__init__.cpython-37.pyc,, +django/utils/__pycache__/timezone.cpython-37.pyc,, +django/utils/__pycache__/module_loading.cpython-37.pyc,, +django/utils/__pycache__/regex_helper.cpython-37.pyc,, +django/utils/__pycache__/html.cpython-37.pyc,, +django/__pycache__/shortcuts.cpython-37.pyc,, +django/__pycache__/__main__.cpython-37.pyc,, +django/__pycache__/__init__.cpython-37.pyc,, +django/contrib/syndication/__pycache__/views.cpython-37.pyc,, +django/contrib/syndication/__pycache__/apps.cpython-37.pyc,, +django/contrib/syndication/__pycache__/__init__.cpython-37.pyc,, +django/contrib/messages/__pycache__/context_processors.cpython-37.pyc,, +django/contrib/messages/__pycache__/constants.cpython-37.pyc,, +django/contrib/messages/__pycache__/views.cpython-37.pyc,, +django/contrib/messages/__pycache__/middleware.cpython-37.pyc,, +django/contrib/messages/__pycache__/apps.cpython-37.pyc,, +django/contrib/messages/__pycache__/utils.cpython-37.pyc,, +django/contrib/messages/__pycache__/api.cpython-37.pyc,, +django/contrib/messages/__pycache__/__init__.cpython-37.pyc,, +django/contrib/messages/storage/__pycache__/base.cpython-37.pyc,, +django/contrib/messages/storage/__pycache__/cookie.cpython-37.pyc,, +django/contrib/messages/storage/__pycache__/fallback.cpython-37.pyc,, +django/contrib/messages/storage/__pycache__/session.cpython-37.pyc,, +django/contrib/messages/storage/__pycache__/__init__.cpython-37.pyc,, +django/contrib/auth/migrations/__pycache__/0001_initial.cpython-37.pyc,, +django/contrib/auth/migrations/__pycache__/0008_alter_user_username_max_length.cpython-37.pyc,, +django/contrib/auth/migrations/__pycache__/0006_require_contenttypes_0002.cpython-37.pyc,, +django/contrib/auth/migrations/__pycache__/0003_alter_user_email_max_length.cpython-37.pyc,, +django/contrib/auth/migrations/__pycache__/0011_update_proxy_permissions.cpython-37.pyc,, +django/contrib/auth/migrations/__pycache__/0007_alter_validators_add_error_messages.cpython-37.pyc,, +django/contrib/auth/migrations/__pycache__/0002_alter_permission_name_max_length.cpython-37.pyc,, +django/contrib/auth/migrations/__pycache__/0010_alter_group_name_max_length.cpython-37.pyc,, +django/contrib/auth/migrations/__pycache__/0009_alter_user_last_name_max_length.cpython-37.pyc,, +django/contrib/auth/migrations/__pycache__/0005_alter_user_last_login_null.cpython-37.pyc,, +django/contrib/auth/migrations/__pycache__/0004_alter_user_username_opts.cpython-37.pyc,, +django/contrib/auth/migrations/__pycache__/__init__.cpython-37.pyc,, +django/contrib/auth/management/__pycache__/__init__.cpython-37.pyc,, +django/contrib/auth/management/commands/__pycache__/createsuperuser.cpython-37.pyc,, +django/contrib/auth/management/commands/__pycache__/changepassword.cpython-37.pyc,, +django/contrib/auth/__pycache__/context_processors.cpython-37.pyc,, +django/contrib/auth/__pycache__/admin.cpython-37.pyc,, +django/contrib/auth/__pycache__/checks.cpython-37.pyc,, +django/contrib/auth/__pycache__/signals.cpython-37.pyc,, +django/contrib/auth/__pycache__/forms.cpython-37.pyc,, +django/contrib/auth/__pycache__/password_validation.cpython-37.pyc,, +django/contrib/auth/__pycache__/views.cpython-37.pyc,, +django/contrib/auth/__pycache__/mixins.cpython-37.pyc,, +django/contrib/auth/__pycache__/models.cpython-37.pyc,, +django/contrib/auth/__pycache__/tokens.cpython-37.pyc,, +django/contrib/auth/__pycache__/middleware.cpython-37.pyc,, +django/contrib/auth/__pycache__/validators.cpython-37.pyc,, +django/contrib/auth/__pycache__/apps.cpython-37.pyc,, +django/contrib/auth/__pycache__/base_user.cpython-37.pyc,, +django/contrib/auth/__pycache__/hashers.cpython-37.pyc,, +django/contrib/auth/__pycache__/urls.cpython-37.pyc,, +django/contrib/auth/__pycache__/decorators.cpython-37.pyc,, +django/contrib/auth/__pycache__/__init__.cpython-37.pyc,, +django/contrib/auth/__pycache__/backends.cpython-37.pyc,, +django/contrib/auth/handlers/__pycache__/modwsgi.cpython-37.pyc,, +django/contrib/auth/handlers/__pycache__/__init__.cpython-37.pyc,, +django/contrib/admin/templatetags/__pycache__/admin_list.cpython-37.pyc,, +django/contrib/admin/templatetags/__pycache__/admin_static.cpython-37.pyc,, +django/contrib/admin/templatetags/__pycache__/log.cpython-37.pyc,, +django/contrib/admin/templatetags/__pycache__/base.cpython-37.pyc,, +django/contrib/admin/templatetags/__pycache__/admin_modify.cpython-37.pyc,, +django/contrib/admin/templatetags/__pycache__/admin_urls.cpython-37.pyc,, +django/contrib/admin/templatetags/__pycache__/__init__.cpython-37.pyc,, +django/contrib/admin/migrations/__pycache__/0002_logentry_remove_auto_add.cpython-37.pyc,, +django/contrib/admin/migrations/__pycache__/0001_initial.cpython-37.pyc,, +django/contrib/admin/migrations/__pycache__/0003_logentry_add_action_flag_choices.cpython-37.pyc,, +django/contrib/admin/migrations/__pycache__/__init__.cpython-37.pyc,, +django/contrib/admin/__pycache__/checks.cpython-37.pyc,, +django/contrib/admin/__pycache__/exceptions.cpython-37.pyc,, +django/contrib/admin/__pycache__/widgets.cpython-37.pyc,, +django/contrib/admin/__pycache__/forms.cpython-37.pyc,, +django/contrib/admin/__pycache__/tests.cpython-37.pyc,, +django/contrib/admin/__pycache__/sites.cpython-37.pyc,, +django/contrib/admin/__pycache__/models.cpython-37.pyc,, +django/contrib/admin/__pycache__/actions.cpython-37.pyc,, +django/contrib/admin/__pycache__/apps.cpython-37.pyc,, +django/contrib/admin/__pycache__/utils.cpython-37.pyc,, +django/contrib/admin/__pycache__/filters.cpython-37.pyc,, +django/contrib/admin/__pycache__/helpers.cpython-37.pyc,, +django/contrib/admin/__pycache__/options.cpython-37.pyc,, +django/contrib/admin/__pycache__/decorators.cpython-37.pyc,, +django/contrib/admin/__pycache__/__init__.cpython-37.pyc,, +django/contrib/admin/views/__pycache__/autocomplete.cpython-37.pyc,, +django/contrib/admin/views/__pycache__/main.cpython-37.pyc,, +django/contrib/admin/views/__pycache__/decorators.cpython-37.pyc,, +django/contrib/admin/views/__pycache__/__init__.cpython-37.pyc,, +django/contrib/staticfiles/templatetags/__pycache__/staticfiles.cpython-37.pyc,, +django/contrib/staticfiles/templatetags/__pycache__/__init__.cpython-37.pyc,, +django/contrib/staticfiles/management/commands/__pycache__/findstatic.cpython-37.pyc,, +django/contrib/staticfiles/management/commands/__pycache__/collectstatic.cpython-37.pyc,, +django/contrib/staticfiles/management/commands/__pycache__/runserver.cpython-37.pyc,, +django/contrib/staticfiles/__pycache__/checks.cpython-37.pyc,, +django/contrib/staticfiles/__pycache__/handlers.cpython-37.pyc,, +django/contrib/staticfiles/__pycache__/storage.cpython-37.pyc,, +django/contrib/staticfiles/__pycache__/views.cpython-37.pyc,, +django/contrib/staticfiles/__pycache__/testing.cpython-37.pyc,, +django/contrib/staticfiles/__pycache__/apps.cpython-37.pyc,, +django/contrib/staticfiles/__pycache__/utils.cpython-37.pyc,, +django/contrib/staticfiles/__pycache__/finders.cpython-37.pyc,, +django/contrib/staticfiles/__pycache__/urls.cpython-37.pyc,, +django/contrib/staticfiles/__pycache__/__init__.cpython-37.pyc,, +django/contrib/__pycache__/__init__.cpython-37.pyc,, +django/contrib/flatpages/templatetags/__pycache__/flatpages.cpython-37.pyc,, +django/contrib/flatpages/templatetags/__pycache__/__init__.cpython-37.pyc,, +django/contrib/flatpages/migrations/__pycache__/0001_initial.cpython-37.pyc,, +django/contrib/flatpages/migrations/__pycache__/__init__.cpython-37.pyc,, +django/contrib/flatpages/__pycache__/admin.cpython-37.pyc,, +django/contrib/flatpages/__pycache__/forms.cpython-37.pyc,, +django/contrib/flatpages/__pycache__/views.cpython-37.pyc,, +django/contrib/flatpages/__pycache__/models.cpython-37.pyc,, +django/contrib/flatpages/__pycache__/middleware.cpython-37.pyc,, +django/contrib/flatpages/__pycache__/apps.cpython-37.pyc,, +django/contrib/flatpages/__pycache__/sitemaps.cpython-37.pyc,, +django/contrib/flatpages/__pycache__/urls.cpython-37.pyc,, +django/contrib/flatpages/__pycache__/__init__.cpython-37.pyc,, +django/contrib/sites/migrations/__pycache__/0001_initial.cpython-37.pyc,, +django/contrib/sites/migrations/__pycache__/0002_alter_domain_unique.cpython-37.pyc,, +django/contrib/sites/migrations/__pycache__/__init__.cpython-37.pyc,, +django/contrib/sites/__pycache__/managers.cpython-37.pyc,, +django/contrib/sites/__pycache__/admin.cpython-37.pyc,, +django/contrib/sites/__pycache__/shortcuts.cpython-37.pyc,, +django/contrib/sites/__pycache__/management.cpython-37.pyc,, +django/contrib/sites/__pycache__/models.cpython-37.pyc,, +django/contrib/sites/__pycache__/middleware.cpython-37.pyc,, +django/contrib/sites/__pycache__/apps.cpython-37.pyc,, +django/contrib/sites/__pycache__/__init__.cpython-37.pyc,, +django/contrib/sites/__pycache__/requests.cpython-37.pyc,, +django/contrib/postgres/forms/__pycache__/jsonb.cpython-37.pyc,, +django/contrib/postgres/forms/__pycache__/ranges.cpython-37.pyc,, +django/contrib/postgres/forms/__pycache__/array.cpython-37.pyc,, +django/contrib/postgres/forms/__pycache__/hstore.cpython-37.pyc,, +django/contrib/postgres/forms/__pycache__/__init__.cpython-37.pyc,, +django/contrib/postgres/aggregates/__pycache__/mixins.cpython-37.pyc,, +django/contrib/postgres/aggregates/__pycache__/general.cpython-37.pyc,, +django/contrib/postgres/aggregates/__pycache__/statistics.cpython-37.pyc,, +django/contrib/postgres/aggregates/__pycache__/__init__.cpython-37.pyc,, +django/contrib/postgres/__pycache__/lookups.cpython-37.pyc,, +django/contrib/postgres/__pycache__/serializers.cpython-37.pyc,, +django/contrib/postgres/__pycache__/signals.cpython-37.pyc,, +django/contrib/postgres/__pycache__/operations.cpython-37.pyc,, +django/contrib/postgres/__pycache__/indexes.cpython-37.pyc,, +django/contrib/postgres/__pycache__/functions.cpython-37.pyc,, +django/contrib/postgres/__pycache__/validators.cpython-37.pyc,, +django/contrib/postgres/__pycache__/search.cpython-37.pyc,, +django/contrib/postgres/__pycache__/apps.cpython-37.pyc,, +django/contrib/postgres/__pycache__/utils.cpython-37.pyc,, +django/contrib/postgres/__pycache__/__init__.cpython-37.pyc,, +django/contrib/postgres/fields/__pycache__/jsonb.cpython-37.pyc,, +django/contrib/postgres/fields/__pycache__/mixins.cpython-37.pyc,, +django/contrib/postgres/fields/__pycache__/ranges.cpython-37.pyc,, +django/contrib/postgres/fields/__pycache__/array.cpython-37.pyc,, +django/contrib/postgres/fields/__pycache__/citext.cpython-37.pyc,, +django/contrib/postgres/fields/__pycache__/utils.cpython-37.pyc,, +django/contrib/postgres/fields/__pycache__/hstore.cpython-37.pyc,, +django/contrib/postgres/fields/__pycache__/__init__.cpython-37.pyc,, +django/contrib/redirects/migrations/__pycache__/0001_initial.cpython-37.pyc,, +django/contrib/redirects/migrations/__pycache__/__init__.cpython-37.pyc,, +django/contrib/redirects/__pycache__/admin.cpython-37.pyc,, +django/contrib/redirects/__pycache__/models.cpython-37.pyc,, +django/contrib/redirects/__pycache__/middleware.cpython-37.pyc,, +django/contrib/redirects/__pycache__/apps.cpython-37.pyc,, +django/contrib/redirects/__pycache__/__init__.cpython-37.pyc,, +django/contrib/sessions/migrations/__pycache__/0001_initial.cpython-37.pyc,, +django/contrib/sessions/migrations/__pycache__/__init__.cpython-37.pyc,, +django/contrib/sessions/backends/__pycache__/signed_cookies.cpython-37.pyc,, +django/contrib/sessions/backends/__pycache__/cached_db.cpython-37.pyc,, +django/contrib/sessions/backends/__pycache__/db.cpython-37.pyc,, +django/contrib/sessions/backends/__pycache__/file.cpython-37.pyc,, +django/contrib/sessions/backends/__pycache__/base.cpython-37.pyc,, +django/contrib/sessions/backends/__pycache__/cache.cpython-37.pyc,, +django/contrib/sessions/backends/__pycache__/__init__.cpython-37.pyc,, +django/contrib/sessions/management/commands/__pycache__/clearsessions.cpython-37.pyc,, +django/contrib/sessions/__pycache__/serializers.cpython-37.pyc,, +django/contrib/sessions/__pycache__/base_session.cpython-37.pyc,, +django/contrib/sessions/__pycache__/exceptions.cpython-37.pyc,, +django/contrib/sessions/__pycache__/models.cpython-37.pyc,, +django/contrib/sessions/__pycache__/middleware.cpython-37.pyc,, +django/contrib/sessions/__pycache__/apps.cpython-37.pyc,, +django/contrib/sessions/__pycache__/__init__.cpython-37.pyc,, +django/contrib/sitemaps/management/commands/__pycache__/ping_google.cpython-37.pyc,, +django/contrib/sitemaps/__pycache__/views.cpython-37.pyc,, +django/contrib/sitemaps/__pycache__/apps.cpython-37.pyc,, +django/contrib/sitemaps/__pycache__/__init__.cpython-37.pyc,, +django/contrib/humanize/templatetags/__pycache__/humanize.cpython-37.pyc,, +django/contrib/humanize/templatetags/__pycache__/__init__.cpython-37.pyc,, +django/contrib/humanize/__pycache__/apps.cpython-37.pyc,, +django/contrib/humanize/__pycache__/__init__.cpython-37.pyc,, +django/contrib/contenttypes/migrations/__pycache__/0001_initial.cpython-37.pyc,, +django/contrib/contenttypes/migrations/__pycache__/0002_remove_content_type_name.cpython-37.pyc,, +django/contrib/contenttypes/migrations/__pycache__/__init__.cpython-37.pyc,, +django/contrib/contenttypes/management/__pycache__/__init__.cpython-37.pyc,, +django/contrib/contenttypes/management/commands/__pycache__/remove_stale_contenttypes.cpython-37.pyc,, +django/contrib/contenttypes/__pycache__/admin.cpython-37.pyc,, +django/contrib/contenttypes/__pycache__/checks.cpython-37.pyc,, +django/contrib/contenttypes/__pycache__/forms.cpython-37.pyc,, +django/contrib/contenttypes/__pycache__/views.cpython-37.pyc,, +django/contrib/contenttypes/__pycache__/models.cpython-37.pyc,, +django/contrib/contenttypes/__pycache__/apps.cpython-37.pyc,, +django/contrib/contenttypes/__pycache__/fields.cpython-37.pyc,, +django/contrib/contenttypes/__pycache__/__init__.cpython-37.pyc,, +django/contrib/gis/geos/__pycache__/libgeos.cpython-37.pyc,, +django/contrib/gis/geos/__pycache__/point.cpython-37.pyc,, +django/contrib/gis/geos/__pycache__/prepared.cpython-37.pyc,, +django/contrib/gis/geos/__pycache__/factory.cpython-37.pyc,, +django/contrib/gis/geos/__pycache__/base.cpython-37.pyc,, +django/contrib/gis/geos/__pycache__/collections.cpython-37.pyc,, +django/contrib/gis/geos/__pycache__/linestring.cpython-37.pyc,, +django/contrib/gis/geos/__pycache__/mutable_list.cpython-37.pyc,, +django/contrib/gis/geos/__pycache__/polygon.cpython-37.pyc,, +django/contrib/gis/geos/__pycache__/io.cpython-37.pyc,, +django/contrib/gis/geos/__pycache__/coordseq.cpython-37.pyc,, +django/contrib/gis/geos/__pycache__/geometry.cpython-37.pyc,, +django/contrib/gis/geos/__pycache__/error.cpython-37.pyc,, +django/contrib/gis/geos/__pycache__/__init__.cpython-37.pyc,, +django/contrib/gis/geos/prototypes/__pycache__/predicates.cpython-37.pyc,, +django/contrib/gis/geos/prototypes/__pycache__/prepared.cpython-37.pyc,, +django/contrib/gis/geos/prototypes/__pycache__/topology.cpython-37.pyc,, +django/contrib/gis/geos/prototypes/__pycache__/errcheck.cpython-37.pyc,, +django/contrib/gis/geos/prototypes/__pycache__/threadsafe.cpython-37.pyc,, +django/contrib/gis/geos/prototypes/__pycache__/io.cpython-37.pyc,, +django/contrib/gis/geos/prototypes/__pycache__/coordseq.cpython-37.pyc,, +django/contrib/gis/geos/prototypes/__pycache__/__init__.cpython-37.pyc,, +django/contrib/gis/geos/prototypes/__pycache__/misc.cpython-37.pyc,, +django/contrib/gis/geos/prototypes/__pycache__/geom.cpython-37.pyc,, +django/contrib/gis/forms/__pycache__/widgets.cpython-37.pyc,, +django/contrib/gis/forms/__pycache__/fields.cpython-37.pyc,, +django/contrib/gis/forms/__pycache__/__init__.cpython-37.pyc,, +django/contrib/gis/gdal/__pycache__/feature.cpython-37.pyc,, +django/contrib/gis/gdal/__pycache__/field.cpython-37.pyc,, +django/contrib/gis/gdal/__pycache__/envelope.cpython-37.pyc,, +django/contrib/gis/gdal/__pycache__/srs.cpython-37.pyc,, +django/contrib/gis/gdal/__pycache__/datasource.cpython-37.pyc,, +django/contrib/gis/gdal/__pycache__/layer.cpython-37.pyc,, +django/contrib/gis/gdal/__pycache__/geometries.cpython-37.pyc,, +django/contrib/gis/gdal/__pycache__/libgdal.cpython-37.pyc,, +django/contrib/gis/gdal/__pycache__/base.cpython-37.pyc,, +django/contrib/gis/gdal/__pycache__/geomtype.cpython-37.pyc,, +django/contrib/gis/gdal/__pycache__/error.cpython-37.pyc,, +django/contrib/gis/gdal/__pycache__/__init__.cpython-37.pyc,, +django/contrib/gis/gdal/__pycache__/driver.cpython-37.pyc,, +django/contrib/gis/gdal/prototypes/__pycache__/generation.cpython-37.pyc,, +django/contrib/gis/gdal/prototypes/__pycache__/srs.cpython-37.pyc,, +django/contrib/gis/gdal/prototypes/__pycache__/errcheck.cpython-37.pyc,, +django/contrib/gis/gdal/prototypes/__pycache__/raster.cpython-37.pyc,, +django/contrib/gis/gdal/prototypes/__pycache__/__init__.cpython-37.pyc,, +django/contrib/gis/gdal/prototypes/__pycache__/geom.cpython-37.pyc,, +django/contrib/gis/gdal/prototypes/__pycache__/ds.cpython-37.pyc,, +django/contrib/gis/gdal/raster/__pycache__/const.cpython-37.pyc,, +django/contrib/gis/gdal/raster/__pycache__/band.cpython-37.pyc,, +django/contrib/gis/gdal/raster/__pycache__/base.cpython-37.pyc,, +django/contrib/gis/gdal/raster/__pycache__/source.cpython-37.pyc,, +django/contrib/gis/gdal/raster/__pycache__/__init__.cpython-37.pyc,, +django/contrib/gis/admin/__pycache__/widgets.cpython-37.pyc,, +django/contrib/gis/admin/__pycache__/options.cpython-37.pyc,, +django/contrib/gis/admin/__pycache__/__init__.cpython-37.pyc,, +django/contrib/gis/management/commands/__pycache__/inspectdb.cpython-37.pyc,, +django/contrib/gis/management/commands/__pycache__/ogrinspect.cpython-37.pyc,, +django/contrib/gis/utils/__pycache__/ogrinfo.cpython-37.pyc,, +django/contrib/gis/utils/__pycache__/srs.cpython-37.pyc,, +django/contrib/gis/utils/__pycache__/ogrinspect.cpython-37.pyc,, +django/contrib/gis/utils/__pycache__/layermapping.cpython-37.pyc,, +django/contrib/gis/utils/__pycache__/__init__.cpython-37.pyc,, +django/contrib/gis/__pycache__/measure.cpython-37.pyc,, +django/contrib/gis/__pycache__/feeds.cpython-37.pyc,, +django/contrib/gis/__pycache__/shortcuts.cpython-37.pyc,, +django/contrib/gis/__pycache__/views.cpython-37.pyc,, +django/contrib/gis/__pycache__/apps.cpython-37.pyc,, +django/contrib/gis/__pycache__/geometry.cpython-37.pyc,, +django/contrib/gis/__pycache__/ptr.cpython-37.pyc,, +django/contrib/gis/__pycache__/__init__.cpython-37.pyc,, +django/contrib/gis/serializers/__pycache__/geojson.cpython-37.pyc,, +django/contrib/gis/serializers/__pycache__/__init__.cpython-37.pyc,, +django/contrib/gis/sitemaps/__pycache__/views.cpython-37.pyc,, +django/contrib/gis/sitemaps/__pycache__/__init__.cpython-37.pyc,, +django/contrib/gis/sitemaps/__pycache__/kml.cpython-37.pyc,, +django/contrib/gis/db/backends/oracle/__pycache__/introspection.cpython-37.pyc,, +django/contrib/gis/db/backends/oracle/__pycache__/operations.cpython-37.pyc,, +django/contrib/gis/db/backends/oracle/__pycache__/models.cpython-37.pyc,, +django/contrib/gis/db/backends/oracle/__pycache__/base.cpython-37.pyc,, +django/contrib/gis/db/backends/oracle/__pycache__/adapter.cpython-37.pyc,, +django/contrib/gis/db/backends/oracle/__pycache__/features.cpython-37.pyc,, +django/contrib/gis/db/backends/oracle/__pycache__/schema.cpython-37.pyc,, +django/contrib/gis/db/backends/oracle/__pycache__/__init__.cpython-37.pyc,, +django/contrib/gis/db/backends/__pycache__/utils.cpython-37.pyc,, +django/contrib/gis/db/backends/__pycache__/__init__.cpython-37.pyc,, +django/contrib/gis/db/backends/postgis/__pycache__/introspection.cpython-37.pyc,, +django/contrib/gis/db/backends/postgis/__pycache__/const.cpython-37.pyc,, +django/contrib/gis/db/backends/postgis/__pycache__/operations.cpython-37.pyc,, +django/contrib/gis/db/backends/postgis/__pycache__/models.cpython-37.pyc,, +django/contrib/gis/db/backends/postgis/__pycache__/base.cpython-37.pyc,, +django/contrib/gis/db/backends/postgis/__pycache__/adapter.cpython-37.pyc,, +django/contrib/gis/db/backends/postgis/__pycache__/features.cpython-37.pyc,, +django/contrib/gis/db/backends/postgis/__pycache__/schema.cpython-37.pyc,, +django/contrib/gis/db/backends/postgis/__pycache__/pgraster.cpython-37.pyc,, +django/contrib/gis/db/backends/postgis/__pycache__/__init__.cpython-37.pyc,, +django/contrib/gis/db/backends/mysql/__pycache__/introspection.cpython-37.pyc,, +django/contrib/gis/db/backends/mysql/__pycache__/operations.cpython-37.pyc,, +django/contrib/gis/db/backends/mysql/__pycache__/base.cpython-37.pyc,, +django/contrib/gis/db/backends/mysql/__pycache__/features.cpython-37.pyc,, +django/contrib/gis/db/backends/mysql/__pycache__/schema.cpython-37.pyc,, +django/contrib/gis/db/backends/mysql/__pycache__/__init__.cpython-37.pyc,, +django/contrib/gis/db/backends/spatialite/__pycache__/client.cpython-37.pyc,, +django/contrib/gis/db/backends/spatialite/__pycache__/introspection.cpython-37.pyc,, +django/contrib/gis/db/backends/spatialite/__pycache__/operations.cpython-37.pyc,, +django/contrib/gis/db/backends/spatialite/__pycache__/models.cpython-37.pyc,, +django/contrib/gis/db/backends/spatialite/__pycache__/base.cpython-37.pyc,, +django/contrib/gis/db/backends/spatialite/__pycache__/adapter.cpython-37.pyc,, +django/contrib/gis/db/backends/spatialite/__pycache__/features.cpython-37.pyc,, +django/contrib/gis/db/backends/spatialite/__pycache__/schema.cpython-37.pyc,, +django/contrib/gis/db/backends/spatialite/__pycache__/__init__.cpython-37.pyc,, +django/contrib/gis/db/backends/base/__pycache__/operations.cpython-37.pyc,, +django/contrib/gis/db/backends/base/__pycache__/models.cpython-37.pyc,, +django/contrib/gis/db/backends/base/__pycache__/adapter.cpython-37.pyc,, +django/contrib/gis/db/backends/base/__pycache__/features.cpython-37.pyc,, +django/contrib/gis/db/backends/base/__pycache__/__init__.cpython-37.pyc,, +django/contrib/gis/db/models/__pycache__/lookups.cpython-37.pyc,, +django/contrib/gis/db/models/__pycache__/proxy.cpython-37.pyc,, +django/contrib/gis/db/models/__pycache__/functions.cpython-37.pyc,, +django/contrib/gis/db/models/__pycache__/aggregates.cpython-37.pyc,, +django/contrib/gis/db/models/__pycache__/fields.cpython-37.pyc,, +django/contrib/gis/db/models/__pycache__/__init__.cpython-37.pyc,, +django/contrib/gis/db/models/sql/__pycache__/conversion.cpython-37.pyc,, +django/contrib/gis/db/models/sql/__pycache__/__init__.cpython-37.pyc,, +django/contrib/gis/db/__pycache__/__init__.cpython-37.pyc,, +django/contrib/gis/geoip2/__pycache__/resources.cpython-37.pyc,, +django/contrib/gis/geoip2/__pycache__/base.cpython-37.pyc,, +django/contrib/gis/geoip2/__pycache__/__init__.cpython-37.pyc,, +django/contrib/admindocs/__pycache__/views.cpython-37.pyc,, +django/contrib/admindocs/__pycache__/middleware.cpython-37.pyc,, +django/contrib/admindocs/__pycache__/apps.cpython-37.pyc,, +django/contrib/admindocs/__pycache__/utils.cpython-37.pyc,, +django/contrib/admindocs/__pycache__/urls.cpython-37.pyc,, +django/contrib/admindocs/__pycache__/__init__.cpython-37.pyc,, +django/http/__pycache__/response.cpython-37.pyc,, +django/http/__pycache__/request.cpython-37.pyc,, +django/http/__pycache__/multipartparser.cpython-37.pyc,, +django/http/__pycache__/cookie.cpython-37.pyc,, +django/http/__pycache__/__init__.cpython-37.pyc,, +django/urls/__pycache__/resolvers.cpython-37.pyc,, +django/urls/__pycache__/exceptions.cpython-37.pyc,, +django/urls/__pycache__/converters.cpython-37.pyc,, +django/urls/__pycache__/base.cpython-37.pyc,, +django/urls/__pycache__/conf.cpython-37.pyc,, +django/urls/__pycache__/utils.cpython-37.pyc,, +django/urls/__pycache__/__init__.cpython-37.pyc,, +django/db/migrations/__pycache__/serializer.cpython-37.pyc,, +django/db/migrations/__pycache__/exceptions.cpython-37.pyc,, +django/db/migrations/__pycache__/loader.cpython-37.pyc,, +django/db/migrations/__pycache__/state.cpython-37.pyc,, +django/db/migrations/__pycache__/recorder.cpython-37.pyc,, +django/db/migrations/__pycache__/autodetector.cpython-37.pyc,, +django/db/migrations/__pycache__/writer.cpython-37.pyc,, +django/db/migrations/__pycache__/optimizer.cpython-37.pyc,, +django/db/migrations/__pycache__/questioner.cpython-37.pyc,, +django/db/migrations/__pycache__/executor.cpython-37.pyc,, +django/db/migrations/__pycache__/migration.cpython-37.pyc,, +django/db/migrations/__pycache__/utils.cpython-37.pyc,, +django/db/migrations/__pycache__/graph.cpython-37.pyc,, +django/db/migrations/__pycache__/__init__.cpython-37.pyc,, +django/db/migrations/operations/__pycache__/models.cpython-37.pyc,, +django/db/migrations/operations/__pycache__/base.cpython-37.pyc,, +django/db/migrations/operations/__pycache__/special.cpython-37.pyc,, +django/db/migrations/operations/__pycache__/utils.cpython-37.pyc,, +django/db/migrations/operations/__pycache__/fields.cpython-37.pyc,, +django/db/migrations/operations/__pycache__/__init__.cpython-37.pyc,, +django/db/backends/postgresql/__pycache__/client.cpython-37.pyc,, +django/db/backends/postgresql/__pycache__/introspection.cpython-37.pyc,, +django/db/backends/postgresql/__pycache__/operations.cpython-37.pyc,, +django/db/backends/postgresql/__pycache__/creation.cpython-37.pyc,, +django/db/backends/postgresql/__pycache__/base.cpython-37.pyc,, +django/db/backends/postgresql/__pycache__/features.cpython-37.pyc,, +django/db/backends/postgresql/__pycache__/utils.cpython-37.pyc,, +django/db/backends/postgresql/__pycache__/schema.cpython-37.pyc,, +django/db/backends/postgresql/__pycache__/__init__.cpython-37.pyc,, +django/db/backends/dummy/__pycache__/base.cpython-37.pyc,, +django/db/backends/dummy/__pycache__/features.cpython-37.pyc,, +django/db/backends/dummy/__pycache__/__init__.cpython-37.pyc,, +django/db/backends/oracle/__pycache__/client.cpython-37.pyc,, +django/db/backends/oracle/__pycache__/introspection.cpython-37.pyc,, +django/db/backends/oracle/__pycache__/operations.cpython-37.pyc,, +django/db/backends/oracle/__pycache__/functions.cpython-37.pyc,, +django/db/backends/oracle/__pycache__/creation.cpython-37.pyc,, +django/db/backends/oracle/__pycache__/compiler.cpython-37.pyc,, +django/db/backends/oracle/__pycache__/base.cpython-37.pyc,, +django/db/backends/oracle/__pycache__/features.cpython-37.pyc,, +django/db/backends/oracle/__pycache__/utils.cpython-37.pyc,, +django/db/backends/oracle/__pycache__/schema.cpython-37.pyc,, +django/db/backends/oracle/__pycache__/validation.cpython-37.pyc,, +django/db/backends/oracle/__pycache__/__init__.cpython-37.pyc,, +django/db/backends/__pycache__/ddl_references.cpython-37.pyc,, +django/db/backends/__pycache__/signals.cpython-37.pyc,, +django/db/backends/__pycache__/utils.cpython-37.pyc,, +django/db/backends/__pycache__/__init__.cpython-37.pyc,, +django/db/backends/postgresql_psycopg2/__pycache__/client.cpython-37.pyc,, +django/db/backends/postgresql_psycopg2/__pycache__/introspection.cpython-37.pyc,, +django/db/backends/postgresql_psycopg2/__pycache__/operations.cpython-37.pyc,, +django/db/backends/postgresql_psycopg2/__pycache__/creation.cpython-37.pyc,, +django/db/backends/postgresql_psycopg2/__pycache__/base.cpython-37.pyc,, +django/db/backends/postgresql_psycopg2/__pycache__/features.cpython-37.pyc,, +django/db/backends/postgresql_psycopg2/__pycache__/utils.cpython-37.pyc,, +django/db/backends/postgresql_psycopg2/__pycache__/schema.cpython-37.pyc,, +django/db/backends/postgresql_psycopg2/__pycache__/__init__.cpython-37.pyc,, +django/db/backends/sqlite3/__pycache__/client.cpython-37.pyc,, +django/db/backends/sqlite3/__pycache__/introspection.cpython-37.pyc,, +django/db/backends/sqlite3/__pycache__/operations.cpython-37.pyc,, +django/db/backends/sqlite3/__pycache__/creation.cpython-37.pyc,, +django/db/backends/sqlite3/__pycache__/base.cpython-37.pyc,, +django/db/backends/sqlite3/__pycache__/features.cpython-37.pyc,, +django/db/backends/sqlite3/__pycache__/schema.cpython-37.pyc,, +django/db/backends/sqlite3/__pycache__/__init__.cpython-37.pyc,, +django/db/backends/mysql/__pycache__/client.cpython-37.pyc,, +django/db/backends/mysql/__pycache__/introspection.cpython-37.pyc,, +django/db/backends/mysql/__pycache__/operations.cpython-37.pyc,, +django/db/backends/mysql/__pycache__/creation.cpython-37.pyc,, +django/db/backends/mysql/__pycache__/compiler.cpython-37.pyc,, +django/db/backends/mysql/__pycache__/base.cpython-37.pyc,, +django/db/backends/mysql/__pycache__/features.cpython-37.pyc,, +django/db/backends/mysql/__pycache__/schema.cpython-37.pyc,, +django/db/backends/mysql/__pycache__/validation.cpython-37.pyc,, +django/db/backends/mysql/__pycache__/__init__.cpython-37.pyc,, +django/db/backends/base/__pycache__/client.cpython-37.pyc,, +django/db/backends/base/__pycache__/introspection.cpython-37.pyc,, +django/db/backends/base/__pycache__/operations.cpython-37.pyc,, +django/db/backends/base/__pycache__/creation.cpython-37.pyc,, +django/db/backends/base/__pycache__/base.cpython-37.pyc,, +django/db/backends/base/__pycache__/features.cpython-37.pyc,, +django/db/backends/base/__pycache__/schema.cpython-37.pyc,, +django/db/backends/base/__pycache__/validation.cpython-37.pyc,, +django/db/backends/base/__pycache__/__init__.cpython-37.pyc,, +django/db/models/__pycache__/lookups.cpython-37.pyc,, +django/db/models/__pycache__/query_utils.cpython-37.pyc,, +django/db/models/__pycache__/constants.cpython-37.pyc,, +django/db/models/__pycache__/expressions.cpython-37.pyc,, +django/db/models/__pycache__/constraints.cpython-37.pyc,, +django/db/models/__pycache__/query.cpython-37.pyc,, +django/db/models/__pycache__/signals.cpython-37.pyc,, +django/db/models/__pycache__/indexes.cpython-37.pyc,, +django/db/models/__pycache__/base.cpython-37.pyc,, +django/db/models/__pycache__/deletion.cpython-37.pyc,, +django/db/models/__pycache__/aggregates.cpython-37.pyc,, +django/db/models/__pycache__/utils.cpython-37.pyc,, +django/db/models/__pycache__/options.cpython-37.pyc,, +django/db/models/__pycache__/manager.cpython-37.pyc,, +django/db/models/__pycache__/__init__.cpython-37.pyc,, +django/db/models/functions/__pycache__/datetime.cpython-37.pyc,, +django/db/models/functions/__pycache__/math.cpython-37.pyc,, +django/db/models/functions/__pycache__/comparison.cpython-37.pyc,, +django/db/models/functions/__pycache__/mixins.cpython-37.pyc,, +django/db/models/functions/__pycache__/text.cpython-37.pyc,, +django/db/models/functions/__pycache__/window.cpython-37.pyc,, +django/db/models/functions/__pycache__/__init__.cpython-37.pyc,, +django/db/models/fields/__pycache__/related.cpython-37.pyc,, +django/db/models/fields/__pycache__/proxy.cpython-37.pyc,, +django/db/models/fields/__pycache__/files.cpython-37.pyc,, +django/db/models/fields/__pycache__/mixins.cpython-37.pyc,, +django/db/models/fields/__pycache__/related_descriptors.cpython-37.pyc,, +django/db/models/fields/__pycache__/related_lookups.cpython-37.pyc,, +django/db/models/fields/__pycache__/reverse_related.cpython-37.pyc,, +django/db/models/fields/__pycache__/__init__.cpython-37.pyc,, +django/db/models/sql/__pycache__/constants.cpython-37.pyc,, +django/db/models/sql/__pycache__/datastructures.cpython-37.pyc,, +django/db/models/sql/__pycache__/query.cpython-37.pyc,, +django/db/models/sql/__pycache__/compiler.cpython-37.pyc,, +django/db/models/sql/__pycache__/subqueries.cpython-37.pyc,, +django/db/models/sql/__pycache__/where.cpython-37.pyc,, +django/db/models/sql/__pycache__/__init__.cpython-37.pyc,, +django/db/__pycache__/transaction.cpython-37.pyc,, +django/db/__pycache__/utils.cpython-37.pyc,, +django/db/__pycache__/__init__.cpython-37.pyc,, +django/views/decorators/__pycache__/debug.cpython-37.pyc,, +django/views/decorators/__pycache__/clickjacking.cpython-37.pyc,, +django/views/decorators/__pycache__/csrf.cpython-37.pyc,, +django/views/decorators/__pycache__/gzip.cpython-37.pyc,, +django/views/decorators/__pycache__/vary.cpython-37.pyc,, +django/views/decorators/__pycache__/cache.cpython-37.pyc,, +django/views/decorators/__pycache__/http.cpython-37.pyc,, +django/views/decorators/__pycache__/__init__.cpython-37.pyc,, +django/views/__pycache__/debug.cpython-37.pyc,, +django/views/__pycache__/csrf.cpython-37.pyc,, +django/views/__pycache__/i18n.cpython-37.pyc,, +django/views/__pycache__/defaults.cpython-37.pyc,, +django/views/__pycache__/static.cpython-37.pyc,, +django/views/__pycache__/__init__.cpython-37.pyc,, +django/views/generic/__pycache__/edit.cpython-37.pyc,, +django/views/generic/__pycache__/list.cpython-37.pyc,, +django/views/generic/__pycache__/detail.cpython-37.pyc,, +django/views/generic/__pycache__/base.cpython-37.pyc,, +django/views/generic/__pycache__/dates.cpython-37.pyc,, +django/views/generic/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/sl/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/sl/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/sk/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/sk/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/pl/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/pl/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/vi/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/vi/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/sq/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/sq/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/de_CH/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/de_CH/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/sv/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/sv/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/ga/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/ga/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/he/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/he/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/km/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/km/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/nn/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/nn/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/da/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/da/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/es_NI/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/es_NI/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/mn/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/mn/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/pt_BR/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/pt_BR/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/es_CO/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/es_CO/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/ja/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/ja/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/el/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/el/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/lv/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/lv/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/fy/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/fy/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/it/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/it/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/ca/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/ca/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/is/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/is/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/cs/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/cs/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/te/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/te/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/zh_Hans/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/zh_Hans/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/ru/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/ru/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/zh_Hant/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/zh_Hant/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/ro/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/ro/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/pt/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/pt/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/uk/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/uk/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/sr/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/sr/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/en_AU/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/en_AU/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/en_GB/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/en_GB/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/es_PR/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/es_PR/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/ml/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/ml/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/es_MX/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/es_MX/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/mk/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/mk/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/kn/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/kn/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/bs/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/bs/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/ar/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/ar/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/gl/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/gl/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/hr/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/hr/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/hu/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/hu/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/nl/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/nl/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/bg/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/bg/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/bn/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/bn/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/es_AR/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/es_AR/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/nb/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/nb/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/hi/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/hi/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/ka/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/ka/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/de/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/de/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/az/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/az/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/gd/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/gd/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/ko/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/ko/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/fi/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/fi/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/sr_Latn/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/sr_Latn/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/eo/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/eo/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/id/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/id/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/fr/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/fr/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/es/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/es/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/et/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/et/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/en/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/en/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/fa/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/fa/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/lt/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/lt/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/cy/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/cy/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/eu/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/eu/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/ta/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/ta/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/th/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/th/__pycache__/__init__.cpython-37.pyc,, +django/conf/locale/tr/__pycache__/formats.cpython-37.pyc,, +django/conf/locale/tr/__pycache__/__init__.cpython-37.pyc,, +django/conf/__pycache__/global_settings.cpython-37.pyc,, +django/conf/__pycache__/__init__.cpython-37.pyc,, +django/conf/urls/__pycache__/i18n.cpython-37.pyc,, +django/conf/urls/__pycache__/static.cpython-37.pyc,, +django/conf/urls/__pycache__/__init__.cpython-37.pyc,, +django/apps/__pycache__/config.cpython-37.pyc,, +django/apps/__pycache__/registry.cpython-37.pyc,, +django/apps/__pycache__/__init__.cpython-37.pyc,, +../../../bin/__pycache__/django-admin.cpython-37.pyc,, diff --git a/venv/lib/python3.7/site-packages/Django-2.2.6.dist-info/entry_points.txt b/venv/lib/python3.7/site-packages/Django-2.2.6.dist-info/entry_points.txt new file mode 100644 index 0000000..22df67e --- /dev/null +++ b/venv/lib/python3.7/site-packages/Django-2.2.6.dist-info/entry_points.txt @@ -0,0 +1,3 @@ +[console_scripts] +django-admin = django.core.management:execute_from_command_line + diff --git a/venv/lib/python3.7/site-packages/OpenSSL/__init__.py b/venv/lib/python3.7/site-packages/OpenSSL/__init__.py new file mode 100644 index 0000000..810d00d --- /dev/null +++ b/venv/lib/python3.7/site-packages/OpenSSL/__init__.py @@ -0,0 +1,20 @@ +# Copyright (C) AB Strakt +# See LICENSE for details. + +""" +pyOpenSSL - A simple wrapper around the OpenSSL library +""" + +from OpenSSL import crypto, SSL +from OpenSSL.version import ( + __author__, __copyright__, __email__, __license__, __summary__, __title__, + __uri__, __version__, +) + + +__all__ = [ + "SSL", "crypto", + + "__author__", "__copyright__", "__email__", "__license__", "__summary__", + "__title__", "__uri__", "__version__", +] diff --git a/venv/lib/python3.7/site-packages/OpenSSL/debug.py b/venv/lib/python3.7/site-packages/OpenSSL/debug.py new file mode 100644 index 0000000..0d37bf5 --- /dev/null +++ b/venv/lib/python3.7/site-packages/OpenSSL/debug.py @@ -0,0 +1,42 @@ +from __future__ import print_function + +import ssl +import sys + +import OpenSSL.SSL +import cffi +import cryptography + +from . import version + + +_env_info = u"""\ +pyOpenSSL: {pyopenssl} +cryptography: {cryptography} +cffi: {cffi} +cryptography's compiled against OpenSSL: {crypto_openssl_compile} +cryptography's linked OpenSSL: {crypto_openssl_link} +Pythons's OpenSSL: {python_openssl} +Python executable: {python} +Python version: {python_version} +Platform: {platform} +sys.path: {sys_path}""".format( + pyopenssl=version.__version__, + crypto_openssl_compile=OpenSSL._util.ffi.string( + OpenSSL._util.lib.OPENSSL_VERSION_TEXT, + ).decode("ascii"), + crypto_openssl_link=OpenSSL.SSL.SSLeay_version( + OpenSSL.SSL.SSLEAY_VERSION + ).decode("ascii"), + python_openssl=getattr(ssl, "OPENSSL_VERSION", "n/a"), + cryptography=cryptography.__version__, + cffi=cffi.__version__, + python=sys.executable, + python_version=sys.version, + platform=sys.platform, + sys_path=sys.path, +) + + +if __name__ == "__main__": + print(_env_info) diff --git a/venv/lib/python3.7/site-packages/OpenSSL/version.py b/venv/lib/python3.7/site-packages/OpenSSL/version.py new file mode 100644 index 0000000..1e9696b --- /dev/null +++ b/venv/lib/python3.7/site-packages/OpenSSL/version.py @@ -0,0 +1,22 @@ +# Copyright (C) AB Strakt +# Copyright (C) Jean-Paul Calderone +# See LICENSE for details. + +""" +pyOpenSSL - A simple wrapper around the OpenSSL library +""" + +__all__ = [ + "__author__", "__copyright__", "__email__", "__license__", "__summary__", + "__title__", "__uri__", "__version__", +] + +__version__ = "19.1.0" + +__title__ = "pyOpenSSL" +__uri__ = "https://pyopenssl.org/" +__summary__ = "Python wrapper module around the OpenSSL library" +__author__ = "The pyOpenSSL developers" +__email__ = "cryptography-dev@python.org" +__license__ = "Apache License, Version 2.0" +__copyright__ = "Copyright 2001-2017 {0}".format(__author__) diff --git a/venv/lib/python3.7/site-packages/PyHamcrest-1.9.0.dist-info/DESCRIPTION.rst b/venv/lib/python3.7/site-packages/PyHamcrest-1.9.0.dist-info/DESCRIPTION.rst new file mode 100644 index 0000000..f9838c2 --- /dev/null +++ b/venv/lib/python3.7/site-packages/PyHamcrest-1.9.0.dist-info/DESCRIPTION.rst @@ -0,0 +1,322 @@ +PyHamcrest +========== + +| |docs| |travis| |coveralls| |landscape| |scrutinizer| |codeclimate| +| |version| |downloads| |wheel| |supported-versions| |supported-implementations| + +.. |docs| image:: https://readthedocs.org/projects/pyhamcrest/badge/?style=flat + :target: https://pyhamcrest.readthedocs.org/ + :alt: Documentation Status + +.. |travis| image:: http://img.shields.io/travis/hamcrest/PyHamcrest/master.png?style=flat + :alt: Travis-CI Build Status + :target: https://travis-ci.org/hamcrest/PyHamcrest + +.. |appveyor| image:: https://ci.appveyor.com/api/projects/status/github/hamcrest/PyHamcrest?branch=master + :alt: AppVeyor Build Status + :target: https://ci.appveyor.com/project/hamcrest/PyHamcrest + +.. |coveralls| image:: http://img.shields.io/coveralls/hamcrest/PyHamcrest/master.png?style=flat + :alt: Coverage Status + :target: https://coveralls.io/r/hamcrest/PyHamcrest + +.. |landscape| image:: https://landscape.io/github/hamcrest/PyHamcrest/master/landscape.svg?style=flat + :target: https://landscape.io/github/hamcrest/PyHamcrest/master + :alt: Code Quality Status + +.. |codeclimate| image:: https://codeclimate.com/github/hamcrest/PyHamcrest/badges/gpa.svg + :target: https://codeclimate.com/github/hamcrest/PyHamcrest + :alt: Code Climate + +.. |version| image:: http://img.shields.io/pypi/v/PyHamcrest.png?style=flat + :alt: PyPI Package latest release + :target: https://pypi.python.org/pypi/PyHamcrest + +.. |downloads| image:: http://img.shields.io/pypi/dm/PyHamcrest.png?style=flat + :alt: PyPI Package monthly downloads + :target: https://pypi.python.org/pypi/PyHamcrest + +.. |wheel| image:: https://pypip.in/wheel/PyHamcrest/badge.png?style=flat + :alt: PyPI Wheel + :target: https://pypi.python.org/pypi/PyHamcrest + +.. |supported-versions| image:: https://pypip.in/py_versions/PyHamcrest/badge.png?style=flat + :alt: Supported versions + :target: https://pypi.python.org/pypi/PyHamcrest + +.. |supported-implementations| image:: https://pypip.in/implementation/PyHamcrest/badge.png?style=flat + :alt: Supported imlementations + :target: https://pypi.python.org/pypi/PyHamcrest + +.. |scrutinizer| image:: https://img.shields.io/scrutinizer/g/hamcrest/PyHamcrest/master.png?style=flat + :alt: Scrtinizer Status + :target: https://scrutinizer-ci.com/g/hamcrest/PyHamcrest/ + + +Introduction +============ + +PyHamcrest is a framework for writing matcher objects, allowing you to +declaratively define "match" rules. There are a number of situations where +matchers are invaluable, such as UI validation, or data filtering, but it is in +the area of writing flexible tests that matchers are most commonly used. This +tutorial shows you how to use PyHamcrest for unit testing. + +When writing tests it is sometimes difficult to get the balance right between +overspecifying the test (and making it brittle to changes), and not specifying +enough (making the test less valuable since it continues to pass even when the +thing being tested is broken). Having a tool that allows you to pick out +precisely the aspect under test and describe the values it should have, to a +controlled level of precision, helps greatly in writing tests that are "just +right." Such tests fail when the behavior of the aspect under test deviates +from the expected behavior, yet continue to pass when minor, unrelated changes +to the behaviour are made. + +Installation +============ + +Hamcrest can be installed using the usual Python packaging tools. It depends on +distribute, but as long as you have a network connection when you install, the +installation process will take care of that for you. + +My first PyHamcrest test +======================== + +We'll start by writing a very simple PyUnit test, but instead of using PyUnit's +``assertEqual`` method, we'll use PyHamcrest's ``assert_that`` construct and +the standard set of matchers: + +.. code:: python + + from hamcrest import * + import unittest + + class BiscuitTest(unittest.TestCase): + def testEquals(self): + theBiscuit = Biscuit('Ginger') + myBiscuit = Biscuit('Ginger') + assert_that(theBiscuit, equal_to(myBiscuit)) + + if __name__ == '__main__': + unittest.main() + +The ``assert_that`` function is a stylized sentence for making a test +assertion. In this example, the subject of the assertion is the object +``theBiscuit``, which is the first method parameter. The second method +parameter is a matcher for ``Biscuit`` objects, here a matcher that checks one +object is equal to another using the Python ``==`` operator. The test passes +since the ``Biscuit`` class defines an ``__eq__`` method. + +If you have more than one assertion in your test you can include an identifier +for the tested value in the assertion: + +.. code:: python + + assert_that(theBiscuit.getChocolateChipCount(), equal_to(10), 'chocolate chips') + assert_that(theBiscuit.getHazelnutCount(), equal_to(3), 'hazelnuts') + +As a convenience, assert_that can also be used to verify a boolean condition: + +.. code:: python + + assert_that(theBiscuit.isCooked(), 'cooked') + +This is equivalent to the ``assert_`` method of unittest.TestCase, but because +it's a standalone function, it offers greater flexibility in test writing. + + +Predefined matchers +=================== + +PyHamcrest comes with a library of useful matchers: + +* Object + + * ``equal_to`` - match equal object + * ``has_length`` - match ``len()`` + * ``has_property`` - match value of property with given name + * ``has_properties`` - match an object that has all of the given properties. + * ``has_string`` - match ``str()`` + * ``instance_of`` - match object type + * ``none``, ``not_none`` - match ``None``, or not ``None`` + * ``same_instance`` - match same object + * ``calling, raises`` - wrap a method call and assert that it raises an exception + +* Number + + * ``close_to`` - match number close to a given value + * ``greater_than``, ``greater_than_or_equal_to``, ``less_than``, + ``less_than_or_equal_to`` - match numeric ordering + +* Text + + * ``contains_string`` - match part of a string + * ``ends_with`` - match the end of a string + * ``equal_to_ignoring_case`` - match the complete string but ignore case + * ``equal_to_ignoring_whitespace`` - match the complete string but ignore extra whitespace + * ``matches_regexp`` - match a regular expression in a string + * ``starts_with`` - match the beginning of a string + * ``string_contains_in_order`` - match parts of a string, in relative order + +* Logical + + * ``all_of`` - ``and`` together all matchers + * ``any_of`` - ``or`` together all matchers + * ``anything`` - match anything, useful in composite matchers when you don't care about a particular value + * ``is_not`` - negate the matcher + +* Sequence + + * ``contains`` - exactly match the entire sequence + * ``contains_inanyorder`` - match the entire sequence, but in any order + * ``has_item`` - match if given item appears in the sequence + * ``has_items`` - match if all given items appear in the sequence, in any order + * ``is_in`` - match if item appears in the given sequence + * ``only_contains`` - match if sequence's items appear in given list + * ``empty`` - match if the sequence is empty + +* Dictionary + + * ``has_entries`` - match dictionary with list of key-value pairs + * ``has_entry`` - match dictionary containing a key-value pair + * ``has_key`` - match dictionary with a key + * ``has_value`` - match dictionary with a value + +* Decorator + + * ``calling`` - wrap a callable in a deffered object, for subsequent matching on calling behaviour + * ``raises`` - Ensure that a deferred callable raises as expected + * ``described_as`` - give the matcher a custom failure description + * ``is_`` - decorator to improve readability - see `Syntactic sugar` below + +The arguments for many of these matchers accept not just a matching value, but +another matcher, so matchers can be composed for greater flexibility. For +example, ``only_contains(less_than(5))`` will match any sequence where every +item is less than 5. + + +Syntactic sugar +=============== + +PyHamcrest strives to make your tests as readable as possible. For example, the +``is_`` matcher is a wrapper that doesn't add any extra behavior to the +underlying matcher. The following assertions are all equivalent: + +.. code:: python + + assert_that(theBiscuit, equal_to(myBiscuit)) + assert_that(theBiscuit, is_(equal_to(myBiscuit))) + assert_that(theBiscuit, is_(myBiscuit)) + +The last form is allowed since ``is_(value)`` wraps most non-matcher arguments +with ``equal_to``. But if the argument is a type, it is wrapped with +``instance_of``, so the following are also equivalent: + +.. code:: python + + assert_that(theBiscuit, instance_of(Biscuit)) + assert_that(theBiscuit, is_(instance_of(Biscuit))) + assert_that(theBiscuit, is_(Biscuit)) + +*Note that PyHamcrest's ``is_`` matcher is unrelated to Python's ``is`` +operator. The matcher for object identity is ``same_instance``.* + + +Writing custom matchers +======================= + +PyHamcrest comes bundled with lots of useful matchers, but you'll probably find +that you need to create your own from time to time to fit your testing needs. +This commonly occurs when you find a fragment of code that tests the same set +of properties over and over again (and in different tests), and you want to +bundle the fragment into a single assertion. By writing your own matcher you'll +eliminate code duplication and make your tests more readable! + +Let's write our own matcher for testing if a calendar date falls on a Saturday. +This is the test we want to write: + +.. code:: python + + def testDateIsOnASaturday(self): + d = datetime.date(2008, 04, 26) + assert_that(d, is_(on_a_saturday())) + +And here's the implementation: + +.. code:: python + + from hamcrest.core.base_matcher import BaseMatcher + from hamcrest.core.helpers.hasmethod import hasmethod + + class IsGivenDayOfWeek(BaseMatcher): + + def __init__(self, day): + self.day = day # Monday is 0, Sunday is 6 + + def _matches(self, item): + if not hasmethod(item, 'weekday'): + return False + return item.weekday() == self.day + + def describe_to(self, description): + day_as_string = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', + 'Friday', 'Saturday', 'Sunday'] + description.append_text('calendar date falling on ') \ + .append_text(day_as_string[self.day]) + + def on_a_saturday(): + return IsGivenDayOfWeek(5) + +For our Matcher implementation we implement the ``_matches`` method - which +calls the ``weekday`` method after confirming that the argument (which may not +be a date) has such a method - and the ``describe_to`` method - which is used +to produce a failure message when a test fails. Here's an example of how the +failure message looks: + +.. code:: python + + assert_that(datetime.date(2008, 04, 06), is_(on_a_saturday())) + +fails with the message:: + + AssertionError: + Expected: is calendar date falling on Saturday + got: <2008-04-06> + +Let's say this matcher is saved in a module named ``isgivendayofweek``. We +could use it in our test by importing the factory function ``on_a_saturday``: + +.. code:: python + + from hamcrest import * + import unittest + from isgivendayofweek import on_a_saturday + + class DateTest(unittest.TestCase): + def testDateIsOnASaturday(self): + d = datetime.date(2008, 04, 26) + assert_that(d, is_(on_a_saturday())) + + if __name__ == '__main__': + unittest.main() + +Even though the ``on_a_saturday`` function creates a new matcher each time it +is called, you should not assume this is the only usage pattern for your +matcher. Therefore you should make sure your matcher is stateless, so a single +instance can be reused between matches. + + +More resources +============== + +* Documentation_ +* Package_ +* Sources_ +* Hamcrest_ + +.. _Documentation: http://readthedocs.org/docs/pyhamcrest/en/V1.8.2/ +.. _Package: http://pypi.python.org/pypi/PyHamcrest +.. _Sources: https://github.com/hamcrest/PyHamcrest +.. _Hamcrest: http://hamcrest.org + + diff --git a/venv/lib/python3.7/site-packages/PyHamcrest-1.9.0.dist-info/METADATA b/venv/lib/python3.7/site-packages/PyHamcrest-1.9.0.dist-info/METADATA new file mode 100644 index 0000000..e8ca1e0 --- /dev/null +++ b/venv/lib/python3.7/site-packages/PyHamcrest-1.9.0.dist-info/METADATA @@ -0,0 +1,353 @@ +Metadata-Version: 2.0 +Name: PyHamcrest +Version: 1.9.0 +Summary: Hamcrest framework for matcher objects +Home-page: https://github.com/hamcrest/PyHamcrest +Author: Chris Rose +Author-email: offline@offby1.net +License: New BSD +Download-URL: http://pypi.python.org/packages/source/P/PyHamcrest/PyHamcrest-1.9.0.tar.gz +Keywords: hamcrest matchers pyunit unit test testing unittest unittesting +Platform: All +Classifier: Development Status :: 5 - Production/Stable +Classifier: Environment :: Console +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Natural Language :: English +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.4 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: Jython +Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: Topic :: Software Development +Classifier: Topic :: Software Development :: Quality Assurance +Classifier: Topic :: Software Development :: Testing +Provides: hamcrest +Requires-Dist: setuptools +Requires-Dist: six + +PyHamcrest +========== + +| |docs| |travis| |coveralls| |landscape| |scrutinizer| |codeclimate| +| |version| |downloads| |wheel| |supported-versions| |supported-implementations| + +.. |docs| image:: https://readthedocs.org/projects/pyhamcrest/badge/?style=flat + :target: https://pyhamcrest.readthedocs.org/ + :alt: Documentation Status + +.. |travis| image:: http://img.shields.io/travis/hamcrest/PyHamcrest/master.png?style=flat + :alt: Travis-CI Build Status + :target: https://travis-ci.org/hamcrest/PyHamcrest + +.. |appveyor| image:: https://ci.appveyor.com/api/projects/status/github/hamcrest/PyHamcrest?branch=master + :alt: AppVeyor Build Status + :target: https://ci.appveyor.com/project/hamcrest/PyHamcrest + +.. |coveralls| image:: http://img.shields.io/coveralls/hamcrest/PyHamcrest/master.png?style=flat + :alt: Coverage Status + :target: https://coveralls.io/r/hamcrest/PyHamcrest + +.. |landscape| image:: https://landscape.io/github/hamcrest/PyHamcrest/master/landscape.svg?style=flat + :target: https://landscape.io/github/hamcrest/PyHamcrest/master + :alt: Code Quality Status + +.. |codeclimate| image:: https://codeclimate.com/github/hamcrest/PyHamcrest/badges/gpa.svg + :target: https://codeclimate.com/github/hamcrest/PyHamcrest + :alt: Code Climate + +.. |version| image:: http://img.shields.io/pypi/v/PyHamcrest.png?style=flat + :alt: PyPI Package latest release + :target: https://pypi.python.org/pypi/PyHamcrest + +.. |downloads| image:: http://img.shields.io/pypi/dm/PyHamcrest.png?style=flat + :alt: PyPI Package monthly downloads + :target: https://pypi.python.org/pypi/PyHamcrest + +.. |wheel| image:: https://pypip.in/wheel/PyHamcrest/badge.png?style=flat + :alt: PyPI Wheel + :target: https://pypi.python.org/pypi/PyHamcrest + +.. |supported-versions| image:: https://pypip.in/py_versions/PyHamcrest/badge.png?style=flat + :alt: Supported versions + :target: https://pypi.python.org/pypi/PyHamcrest + +.. |supported-implementations| image:: https://pypip.in/implementation/PyHamcrest/badge.png?style=flat + :alt: Supported imlementations + :target: https://pypi.python.org/pypi/PyHamcrest + +.. |scrutinizer| image:: https://img.shields.io/scrutinizer/g/hamcrest/PyHamcrest/master.png?style=flat + :alt: Scrtinizer Status + :target: https://scrutinizer-ci.com/g/hamcrest/PyHamcrest/ + + +Introduction +============ + +PyHamcrest is a framework for writing matcher objects, allowing you to +declaratively define "match" rules. There are a number of situations where +matchers are invaluable, such as UI validation, or data filtering, but it is in +the area of writing flexible tests that matchers are most commonly used. This +tutorial shows you how to use PyHamcrest for unit testing. + +When writing tests it is sometimes difficult to get the balance right between +overspecifying the test (and making it brittle to changes), and not specifying +enough (making the test less valuable since it continues to pass even when the +thing being tested is broken). Having a tool that allows you to pick out +precisely the aspect under test and describe the values it should have, to a +controlled level of precision, helps greatly in writing tests that are "just +right." Such tests fail when the behavior of the aspect under test deviates +from the expected behavior, yet continue to pass when minor, unrelated changes +to the behaviour are made. + +Installation +============ + +Hamcrest can be installed using the usual Python packaging tools. It depends on +distribute, but as long as you have a network connection when you install, the +installation process will take care of that for you. + +My first PyHamcrest test +======================== + +We'll start by writing a very simple PyUnit test, but instead of using PyUnit's +``assertEqual`` method, we'll use PyHamcrest's ``assert_that`` construct and +the standard set of matchers: + +.. code:: python + + from hamcrest import * + import unittest + + class BiscuitTest(unittest.TestCase): + def testEquals(self): + theBiscuit = Biscuit('Ginger') + myBiscuit = Biscuit('Ginger') + assert_that(theBiscuit, equal_to(myBiscuit)) + + if __name__ == '__main__': + unittest.main() + +The ``assert_that`` function is a stylized sentence for making a test +assertion. In this example, the subject of the assertion is the object +``theBiscuit``, which is the first method parameter. The second method +parameter is a matcher for ``Biscuit`` objects, here a matcher that checks one +object is equal to another using the Python ``==`` operator. The test passes +since the ``Biscuit`` class defines an ``__eq__`` method. + +If you have more than one assertion in your test you can include an identifier +for the tested value in the assertion: + +.. code:: python + + assert_that(theBiscuit.getChocolateChipCount(), equal_to(10), 'chocolate chips') + assert_that(theBiscuit.getHazelnutCount(), equal_to(3), 'hazelnuts') + +As a convenience, assert_that can also be used to verify a boolean condition: + +.. code:: python + + assert_that(theBiscuit.isCooked(), 'cooked') + +This is equivalent to the ``assert_`` method of unittest.TestCase, but because +it's a standalone function, it offers greater flexibility in test writing. + + +Predefined matchers +=================== + +PyHamcrest comes with a library of useful matchers: + +* Object + + * ``equal_to`` - match equal object + * ``has_length`` - match ``len()`` + * ``has_property`` - match value of property with given name + * ``has_properties`` - match an object that has all of the given properties. + * ``has_string`` - match ``str()`` + * ``instance_of`` - match object type + * ``none``, ``not_none`` - match ``None``, or not ``None`` + * ``same_instance`` - match same object + * ``calling, raises`` - wrap a method call and assert that it raises an exception + +* Number + + * ``close_to`` - match number close to a given value + * ``greater_than``, ``greater_than_or_equal_to``, ``less_than``, + ``less_than_or_equal_to`` - match numeric ordering + +* Text + + * ``contains_string`` - match part of a string + * ``ends_with`` - match the end of a string + * ``equal_to_ignoring_case`` - match the complete string but ignore case + * ``equal_to_ignoring_whitespace`` - match the complete string but ignore extra whitespace + * ``matches_regexp`` - match a regular expression in a string + * ``starts_with`` - match the beginning of a string + * ``string_contains_in_order`` - match parts of a string, in relative order + +* Logical + + * ``all_of`` - ``and`` together all matchers + * ``any_of`` - ``or`` together all matchers + * ``anything`` - match anything, useful in composite matchers when you don't care about a particular value + * ``is_not`` - negate the matcher + +* Sequence + + * ``contains`` - exactly match the entire sequence + * ``contains_inanyorder`` - match the entire sequence, but in any order + * ``has_item`` - match if given item appears in the sequence + * ``has_items`` - match if all given items appear in the sequence, in any order + * ``is_in`` - match if item appears in the given sequence + * ``only_contains`` - match if sequence's items appear in given list + * ``empty`` - match if the sequence is empty + +* Dictionary + + * ``has_entries`` - match dictionary with list of key-value pairs + * ``has_entry`` - match dictionary containing a key-value pair + * ``has_key`` - match dictionary with a key + * ``has_value`` - match dictionary with a value + +* Decorator + + * ``calling`` - wrap a callable in a deffered object, for subsequent matching on calling behaviour + * ``raises`` - Ensure that a deferred callable raises as expected + * ``described_as`` - give the matcher a custom failure description + * ``is_`` - decorator to improve readability - see `Syntactic sugar` below + +The arguments for many of these matchers accept not just a matching value, but +another matcher, so matchers can be composed for greater flexibility. For +example, ``only_contains(less_than(5))`` will match any sequence where every +item is less than 5. + + +Syntactic sugar +=============== + +PyHamcrest strives to make your tests as readable as possible. For example, the +``is_`` matcher is a wrapper that doesn't add any extra behavior to the +underlying matcher. The following assertions are all equivalent: + +.. code:: python + + assert_that(theBiscuit, equal_to(myBiscuit)) + assert_that(theBiscuit, is_(equal_to(myBiscuit))) + assert_that(theBiscuit, is_(myBiscuit)) + +The last form is allowed since ``is_(value)`` wraps most non-matcher arguments +with ``equal_to``. But if the argument is a type, it is wrapped with +``instance_of``, so the following are also equivalent: + +.. code:: python + + assert_that(theBiscuit, instance_of(Biscuit)) + assert_that(theBiscuit, is_(instance_of(Biscuit))) + assert_that(theBiscuit, is_(Biscuit)) + +*Note that PyHamcrest's ``is_`` matcher is unrelated to Python's ``is`` +operator. The matcher for object identity is ``same_instance``.* + + +Writing custom matchers +======================= + +PyHamcrest comes bundled with lots of useful matchers, but you'll probably find +that you need to create your own from time to time to fit your testing needs. +This commonly occurs when you find a fragment of code that tests the same set +of properties over and over again (and in different tests), and you want to +bundle the fragment into a single assertion. By writing your own matcher you'll +eliminate code duplication and make your tests more readable! + +Let's write our own matcher for testing if a calendar date falls on a Saturday. +This is the test we want to write: + +.. code:: python + + def testDateIsOnASaturday(self): + d = datetime.date(2008, 04, 26) + assert_that(d, is_(on_a_saturday())) + +And here's the implementation: + +.. code:: python + + from hamcrest.core.base_matcher import BaseMatcher + from hamcrest.core.helpers.hasmethod import hasmethod + + class IsGivenDayOfWeek(BaseMatcher): + + def __init__(self, day): + self.day = day # Monday is 0, Sunday is 6 + + def _matches(self, item): + if not hasmethod(item, 'weekday'): + return False + return item.weekday() == self.day + + def describe_to(self, description): + day_as_string = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', + 'Friday', 'Saturday', 'Sunday'] + description.append_text('calendar date falling on ') \ + .append_text(day_as_string[self.day]) + + def on_a_saturday(): + return IsGivenDayOfWeek(5) + +For our Matcher implementation we implement the ``_matches`` method - which +calls the ``weekday`` method after confirming that the argument (which may not +be a date) has such a method - and the ``describe_to`` method - which is used +to produce a failure message when a test fails. Here's an example of how the +failure message looks: + +.. code:: python + + assert_that(datetime.date(2008, 04, 06), is_(on_a_saturday())) + +fails with the message:: + + AssertionError: + Expected: is calendar date falling on Saturday + got: <2008-04-06> + +Let's say this matcher is saved in a module named ``isgivendayofweek``. We +could use it in our test by importing the factory function ``on_a_saturday``: + +.. code:: python + + from hamcrest import * + import unittest + from isgivendayofweek import on_a_saturday + + class DateTest(unittest.TestCase): + def testDateIsOnASaturday(self): + d = datetime.date(2008, 04, 26) + assert_that(d, is_(on_a_saturday())) + + if __name__ == '__main__': + unittest.main() + +Even though the ``on_a_saturday`` function creates a new matcher each time it +is called, you should not assume this is the only usage pattern for your +matcher. Therefore you should make sure your matcher is stateless, so a single +instance can be reused between matches. + + +More resources +============== + +* Documentation_ +* Package_ +* Sources_ +* Hamcrest_ + +.. _Documentation: http://readthedocs.org/docs/pyhamcrest/en/V1.8.2/ +.. _Package: http://pypi.python.org/pypi/PyHamcrest +.. _Sources: https://github.com/hamcrest/PyHamcrest +.. _Hamcrest: http://hamcrest.org + + diff --git a/venv/lib/python3.7/site-packages/PyHamcrest-1.9.0.dist-info/RECORD b/venv/lib/python3.7/site-packages/PyHamcrest-1.9.0.dist-info/RECORD new file mode 100644 index 0000000..e9bb3e9 --- /dev/null +++ b/venv/lib/python3.7/site-packages/PyHamcrest-1.9.0.dist-info/RECORD @@ -0,0 +1,120 @@ +hamcrest/__init__.py,sha256=Uo0mxeePyXP9_yIzBBvKqIL6tzEHqBwBO1eSHfAKies,230 +hamcrest/core/__init__.py,sha256=nDkYm1E1P7XpHmR8EHu17eahlmC6uYix4HurTyJjhlE,230 +hamcrest/core/assert_that.py,sha256=mPdTQQVsjUliK3xp8l_Vn3YmMzg_h5rYhWJk2mstMc0,2428 +hamcrest/core/base_description.py,sha256=auvrelro2vGh_A05TQxwbaBJStvfHiFqm0TL56luxEU,2841 +hamcrest/core/base_matcher.py,sha256=eRhLv7zFBJGaz68vEsDlvKbrWwU8GRDfZc7pWBNcxwI,1193 +hamcrest/core/compat.py,sha256=wUi1u_nIhgUA3kFGJDZLQ2D_cRw79E1SxPDMaI4mzG0,642 +hamcrest/core/description.py,sha256=gbVS-ejZJ783o-WEA66bXnXc9DH5cOlQXg0FlzoVGro,1729 +hamcrest/core/matcher.py,sha256=BG6e8bIJvwFI0qkaSkt_SOuuLI0VidvoX8GQLadYssU,1851 +hamcrest/core/selfdescribing.py,sha256=RzwqHRGg00AJYweGiP8JzSxoHFdBo0Q7m5axYfutfG8,574 +hamcrest/core/selfdescribingvalue.py,sha256=OpGLOjdPA9FSgmLZzmkfYrDvpG261TDDiM56muROFqQ,834 +hamcrest/core/string_description.py,sha256=Jp-SbuY8LAwPucL4NMrwWqRhkg6CMwYE-pH0ZDMUq8A,908 +hamcrest/core/core/__init__.py,sha256=7q_pNO9cmtV3BEixiGcueNdbxRxlKEFZ1RSO-5GP58E,770 +hamcrest/core/core/allof.py,sha256=x2ea18Z5cioRybs1heTd3E8zYtpFbuBJg3vIU3vl9k0,1487 +hamcrest/core/core/anyof.py,sha256=8j2KAsaToXbv8CA5hed4bqPR3hscODIiaFhAlAyJ2Vs,1097 +hamcrest/core/core/described_as.py,sha256=kyy_qRpoebWB1bS2ReAkNDt-79iXu6HqHxOG0GT7PtQ,1623 +hamcrest/core/core/is_.py,sha256=C7UCASfr4AIlaaMZnT5d34OthAZQ3rYv8OhszQjz-Eg,2547 +hamcrest/core/core/isanything.py,sha256=D2QO5dbDhwlVRGLFrnxOSijTyeKN2iWLRwjpvnumkvg,798 +hamcrest/core/core/isequal.py,sha256=TAwF_lWIjVokPruXN8IGS6ajzPGlThanTLPdhktKwRQ,893 +hamcrest/core/core/isinstanceof.py,sha256=dnt8YKLhYwGZvDkJ0OTdLd1PN9cB9ZWCg5k8kdnEuqI,1352 +hamcrest/core/core/isnone.py,sha256=51ueQKBgg0RzWVLzjFOyt6K0ejk2EbXUlUX90ORPm80,557 +hamcrest/core/core/isnot.py,sha256=_z_ynAVUXEUGWoiRlynFa_yaCVh9cK9LIOznDfKVZeo,1533 +hamcrest/core/core/issame.py,sha256=8FvAjud4HTuyz7O-XoJbzLtKhChCr1_5JmzMYMeQt1s,1261 +hamcrest/core/core/raises.py,sha256=BZXtMlQiEqEjQMYT76HUiuQNRjTECIUmL82_FKYhAvs,3610 +hamcrest/core/helpers/__init__.py,sha256=mPsycYI18LoGawOo9BfETa7yKtnM-fDjFOr43BIevUg,146 +hamcrest/core/helpers/hasmethod.py,sha256=LPh_WDRuyKYII3G3fX_x2Ql-ECuPJn4tK5eWMLbetLg,325 +hamcrest/core/helpers/wrap_matcher.py,sha256=IQTtw98Pp1NXcVTy9boaNh6jayvawKHhX62R3ZwnVwQ,880 +hamcrest/library/__init__.py,sha256=2atNiBCC2g3c-7jw53CltNgU4wEao1uRcheUPl1ML50,1014 +hamcrest/library/collection/__init__.py,sha256=iJU6WCsf0R22m11fqMA9Ztb161AZAdrsKG-4Cj38lZ0,635 +hamcrest/library/collection/is_empty.py,sha256=p3-B7DCmdbVzqiW3D1h3krdeqmu9B0mfYOaa6HehODg,913 +hamcrest/library/collection/isdict_containing.py,sha256=6QxDtDp_Z2TK-6om8cHnJDh45YdmaNHAEy5n97rzf00,2056 +hamcrest/library/collection/isdict_containingentries.py,sha256=xKtdFjrwLN32rUdRR4PBUSYa3yACa6jXsmlZv0D9YAU,5168 +hamcrest/library/collection/isdict_containingkey.py,sha256=aiBpusjpZmkUEMZ_rUFZBB1GxIfsqluMjhXoWNScqZY,1535 +hamcrest/library/collection/isdict_containingvalue.py,sha256=N7mHKgMnd7q6HsQekHH6DShNYbLiSXN9cpQgcdMIjlw,1565 +hamcrest/library/collection/isin.py,sha256=bcVslW0fUq0pM_SrT9gdltTlNfeJkrVPZAlg6riV2Ys,774 +hamcrest/library/collection/issequence_containing.py,sha256=ZwYMm2-Ul_JtvjcgdMjipYdz82yUbGmRNsdPAjO9RX0,3001 +hamcrest/library/collection/issequence_containinginanyorder.py,sha256=Px_W2-_0XDOXiL2NTTMp16ZTZvBl4m5rXjlMoR4Ulmw,3613 +hamcrest/library/collection/issequence_containinginorder.py,sha256=x7AT_kOCaPY0LmZw28ln8xLLHBtT-I3NneoCWzMJoYA,3219 +hamcrest/library/collection/issequence_onlycontaining.py,sha256=Ia17P1HVgb43lZfdUEhmPyUUUWtGLix__fqXIQJTUiI,1626 +hamcrest/library/integration/__init__.py,sha256=3aiupojVacPksKTXVhqRs9OwUDoUlUw-bjWItJnRg8Q,254 +hamcrest/library/integration/match_equality.py,sha256=0BMth20YLTqjqTLT4qMVldAe2dQV3CJ2j3zLXDIGl9c,1192 +hamcrest/library/number/__init__.py,sha256=J3UoFdR9UPq9zXSKe1a9qAlpjaVst8-pnaxsvbCPj78,335 +hamcrest/library/number/iscloseto.py,sha256=2lQTw3Xvo5MW-aePxpWVUOwyV_ydXtH6cCAIAxeopk8,2259 +hamcrest/library/number/ordering_comparison.py,sha256=8XxVSOzPK29D14h4wtBZYVYKZf6IcABaQEKihEuzlhI,1700 +hamcrest/library/object/__init__.py,sha256=pxzCpybBHRaIg7RJUAw7R1Po0llw8QBbVv_R1TXNBhc,319 +hamcrest/library/object/haslength.py,sha256=mpYVvrBZV548FwEeqlHWYofv9LPgChvnypZ4RhZDMp0,1681 +hamcrest/library/object/hasproperty.py,sha256=9t8upZxjqSQp6IvGyTm4ftGvcpBeyk0dy36HgvlXZBg,5740 +hamcrest/library/object/hasstring.py,sha256=_Ht1x-DwV4hk2fRuGo_KoayoLOIoWObKoA30u7HnABU,1250 +hamcrest/library/text/__init__.py,sha256=3Uuy1lY2p0VEUy1SAIO6IZgDDgyx8ZsB98k-J2FA_R0,548 +hamcrest/library/text/isequal_ignoring_case.py,sha256=VGkR3PNDOVE1MJT9H4a3SjR2SIYNzT80VoV6NEq3aqw,1257 +hamcrest/library/text/isequal_ignoring_whitespace.py,sha256=NQzswc7fk5rOhcoHO4zbYSWqn-WQdQ7Hwf0FoDHAwBM,1667 +hamcrest/library/text/stringcontains.py,sha256=JbkSxdFkpRrNYJfSUghboxe1jRLfHAJvOn6PYvMx7fQ,953 +hamcrest/library/text/stringcontainsinorder.py,sha256=B3qG7TG24_WyVPGJER2iqi7fzOMZN0UsBRJPtWutBkc,1705 +hamcrest/library/text/stringendswith.py,sha256=JjukJWSVWgURvTstrbCGCQdQzY0PMWLul__UlDh2NGA,980 +hamcrest/library/text/stringmatches.py,sha256=AEBn8NI3q-YzRUdXiAfnw1Kmse-LLxJUluDAuy_D9nU,1151 +hamcrest/library/text/stringstartswith.py,sha256=oOro8G3z8nAOUyOjHHkHhUvY-lt7XRTJzDr9dYxxons,1007 +hamcrest/library/text/substringmatcher.py,sha256=lSPxE7pTpTJlUkMtd28WgsM1FFm56JVZixSvAldSZXk,695 +PyHamcrest-1.9.0.dist-info/DESCRIPTION.rst,sha256=13XTDh2baR2aJ91v_lAOjEXD7Ydush_RHhk0Z3azfs8,11973 +PyHamcrest-1.9.0.dist-info/METADATA,sha256=s0naXZHUZhft0MWcUeZVaZYlREKPOqHp3mUQrhUoC6s,13276 +PyHamcrest-1.9.0.dist-info/metadata.json,sha256=Jqs-ZSW5kWSnfvxDsRMwSQH6TxEqSJjBJWiQk1G-c_A,1545 +PyHamcrest-1.9.0.dist-info/pbr.json,sha256=jdAcCmfO0nnMs9-YKXuwDyKnxc4qGwyUxyGulF9Pam4,47 +PyHamcrest-1.9.0.dist-info/RECORD,, +PyHamcrest-1.9.0.dist-info/top_level.txt,sha256=mRc0yPsPQSqFgWBmZBY33u-05Xtm5M4GEve4NjYdloQ,9 +PyHamcrest-1.9.0.dist-info/WHEEL,sha256=AvR0WeTpDaxT645bl5FQxUK6NPsTls2ttpcGJg3j1Xg,110 +PyHamcrest-1.9.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +hamcrest/core/core/__pycache__/issame.cpython-37.pyc,, +hamcrest/core/core/__pycache__/isinstanceof.cpython-37.pyc,, +hamcrest/core/core/__pycache__/raises.cpython-37.pyc,, +hamcrest/core/core/__pycache__/is_.cpython-37.pyc,, +hamcrest/core/core/__pycache__/isanything.cpython-37.pyc,, +hamcrest/core/core/__pycache__/isnone.cpython-37.pyc,, +hamcrest/core/core/__pycache__/isnot.cpython-37.pyc,, +hamcrest/core/core/__pycache__/anyof.cpython-37.pyc,, +hamcrest/core/core/__pycache__/allof.cpython-37.pyc,, +hamcrest/core/core/__pycache__/__init__.cpython-37.pyc,, +hamcrest/core/core/__pycache__/described_as.cpython-37.pyc,, +hamcrest/core/core/__pycache__/isequal.cpython-37.pyc,, +hamcrest/core/__pycache__/string_description.cpython-37.pyc,, +hamcrest/core/__pycache__/base_matcher.cpython-37.pyc,, +hamcrest/core/__pycache__/compat.cpython-37.pyc,, +hamcrest/core/__pycache__/assert_that.cpython-37.pyc,, +hamcrest/core/__pycache__/selfdescribing.cpython-37.pyc,, +hamcrest/core/__pycache__/selfdescribingvalue.cpython-37.pyc,, +hamcrest/core/__pycache__/matcher.cpython-37.pyc,, +hamcrest/core/__pycache__/base_description.cpython-37.pyc,, +hamcrest/core/__pycache__/description.cpython-37.pyc,, +hamcrest/core/__pycache__/__init__.cpython-37.pyc,, +hamcrest/core/helpers/__pycache__/hasmethod.cpython-37.pyc,, +hamcrest/core/helpers/__pycache__/wrap_matcher.cpython-37.pyc,, +hamcrest/core/helpers/__pycache__/__init__.cpython-37.pyc,, +hamcrest/library/collection/__pycache__/issequence_containinginanyorder.cpython-37.pyc,, +hamcrest/library/collection/__pycache__/issequence_containing.cpython-37.pyc,, +hamcrest/library/collection/__pycache__/issequence_containinginorder.cpython-37.pyc,, +hamcrest/library/collection/__pycache__/isdict_containingentries.cpython-37.pyc,, +hamcrest/library/collection/__pycache__/isdict_containing.cpython-37.pyc,, +hamcrest/library/collection/__pycache__/isdict_containingkey.cpython-37.pyc,, +hamcrest/library/collection/__pycache__/is_empty.cpython-37.pyc,, +hamcrest/library/collection/__pycache__/issequence_onlycontaining.cpython-37.pyc,, +hamcrest/library/collection/__pycache__/isin.cpython-37.pyc,, +hamcrest/library/collection/__pycache__/isdict_containingvalue.cpython-37.pyc,, +hamcrest/library/collection/__pycache__/__init__.cpython-37.pyc,, +hamcrest/library/integration/__pycache__/match_equality.cpython-37.pyc,, +hamcrest/library/integration/__pycache__/__init__.cpython-37.pyc,, +hamcrest/library/__pycache__/__init__.cpython-37.pyc,, +hamcrest/library/number/__pycache__/ordering_comparison.cpython-37.pyc,, +hamcrest/library/number/__pycache__/__init__.cpython-37.pyc,, +hamcrest/library/number/__pycache__/iscloseto.cpython-37.pyc,, +hamcrest/library/object/__pycache__/hasstring.cpython-37.pyc,, +hamcrest/library/object/__pycache__/haslength.cpython-37.pyc,, +hamcrest/library/object/__pycache__/hasproperty.cpython-37.pyc,, +hamcrest/library/object/__pycache__/__init__.cpython-37.pyc,, +hamcrest/library/text/__pycache__/stringendswith.cpython-37.pyc,, +hamcrest/library/text/__pycache__/stringmatches.cpython-37.pyc,, +hamcrest/library/text/__pycache__/stringstartswith.cpython-37.pyc,, +hamcrest/library/text/__pycache__/substringmatcher.cpython-37.pyc,, +hamcrest/library/text/__pycache__/stringcontainsinorder.cpython-37.pyc,, +hamcrest/library/text/__pycache__/isequal_ignoring_whitespace.cpython-37.pyc,, +hamcrest/library/text/__pycache__/stringcontains.cpython-37.pyc,, +hamcrest/library/text/__pycache__/isequal_ignoring_case.cpython-37.pyc,, +hamcrest/library/text/__pycache__/__init__.cpython-37.pyc,, +hamcrest/__pycache__/__init__.cpython-37.pyc,, diff --git a/venv/lib/python3.7/site-packages/PyHamcrest-1.9.0.dist-info/WHEEL b/venv/lib/python3.7/site-packages/PyHamcrest-1.9.0.dist-info/WHEEL new file mode 100644 index 0000000..9dff69d --- /dev/null +++ b/venv/lib/python3.7/site-packages/PyHamcrest-1.9.0.dist-info/WHEEL @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.24.0) +Root-Is-Purelib: true +Tag: py2-none-any +Tag: py3-none-any + diff --git a/venv/lib/python3.7/site-packages/PyHamcrest-1.9.0.dist-info/metadata.json b/venv/lib/python3.7/site-packages/PyHamcrest-1.9.0.dist-info/metadata.json new file mode 100644 index 0000000..9fffe4b --- /dev/null +++ b/venv/lib/python3.7/site-packages/PyHamcrest-1.9.0.dist-info/metadata.json @@ -0,0 +1 @@ +{"license": "New BSD", "download_url": "http://pypi.python.org/packages/source/P/PyHamcrest/PyHamcrest-1.9.0.tar.gz", "name": "PyHamcrest", "provides": "hamcrest", "test_requires": [{"requires": ["hypothesis (>=1.11)", "pytest (>=2.8)", "mock", "pytest-cov"]}], "extensions": {"python.details": {"project_urls": {"Home": "https://github.com/hamcrest/PyHamcrest"}, "contacts": [{"name": "Chris Rose", "role": "author", "email": "offline@offby1.net"}], "document_names": {"description": "DESCRIPTION.rst"}}}, "run_requires": [{"requires": ["setuptools", "six"]}], "generator": "bdist_wheel (0.24.0)", "summary": "Hamcrest framework for matcher objects", "extras": [], "classifiers": ["Development Status :: 5 - Production/Stable", "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: Jython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Software Development", "Topic :: Software Development :: Quality Assurance", "Topic :: Software Development :: Testing"], "version": "1.9.0", "metadata_version": "2.0", "keywords": ["hamcrest", "matchers", "pyunit", "unit", "test", "testing", "unittest", "unittesting"], "platform": "All"} \ No newline at end of file diff --git a/venv/lib/python3.7/site-packages/PyJWT-1.7.1.dist-info/INSTALLER b/venv/lib/python3.7/site-packages/PyJWT-1.7.1.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/lib/python3.7/site-packages/PyJWT-1.7.1.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/lib/python3.7/site-packages/PyJWT-1.7.1.dist-info/RECORD b/venv/lib/python3.7/site-packages/PyJWT-1.7.1.dist-info/RECORD new file mode 100644 index 0000000..99c3c0b --- /dev/null +++ b/venv/lib/python3.7/site-packages/PyJWT-1.7.1.dist-info/RECORD @@ -0,0 +1,35 @@ +jwt/__init__.py,sha256=zzpUkNjnVRNWZKLBgn-t3fR3IWVdCWekrAKtsZWkCoQ,810 +jwt/__main__.py,sha256=_rMsGakpyw1N023P8QOjCgbCxhXSCNIg92YpmUhQGMk,4162 +jwt/algorithms.py,sha256=kL1ARjxNL8JeuxEpWS8On14qJWomMX_A_ncIrnZhBrA,13336 +jwt/api_jws.py,sha256=wQxbg_cYR4hAJl4-9Ijf29B46NrOKhruXS7ANPFqkZ8,8095 +jwt/api_jwt.py,sha256=NKRiCsTcMd0B5N-74zvqBYpQuxBxC4f6TCLM6P0jxVU,7905 +jwt/compat.py,sha256=VG2zhmZFQ5spP0AThSVumRogymUXORz6fxA1jTew-cA,1624 +jwt/exceptions.py,sha256=kGq96NMkyPBmx7-RXvLXq9ddTo2_SJPKPTpPscvGUuA,986 +jwt/help.py,sha256=w9sYBatZK8-DIAxLPsdxQBVHXnqjOTETJ4dFY5hhEHs,1609 +jwt/utils.py,sha256=RraFiloy_xsB8NA1CrlHxS9lR73If8amInQ3P1mKXeM,2629 +jwt/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +jwt/contrib/algorithms/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +jwt/contrib/algorithms/py_ecdsa.py,sha256=tSTUrwx-u14DJcqAChRzJG-wf7bEY2Gv2hI5xSZZNjk,1771 +jwt/contrib/algorithms/pycrypto.py,sha256=mU3vRfk9QKj06ky3XXKXNkxv8-R4mBHbFR3EvbOgJ6k,1249 +PyJWT-1.7.1.dist-info/AUTHORS,sha256=rahh5ZJ3f4RSF4X1_K1DvxTRm4Hy45QiMP7dDG_-yrE,595 +PyJWT-1.7.1.dist-info/LICENSE,sha256=7IKvgVtfnahoWvswDMW-t5SeHCK3m2wcBUeWzv32ysY,1080 +PyJWT-1.7.1.dist-info/METADATA,sha256=wIohFuzbkeGUiMkkD5U98z520aUoY6UnmsfDl4vVHRI,3878 +PyJWT-1.7.1.dist-info/WHEEL,sha256=_wJFdOYk7i3xxT8ElOkUJvOdOvfNGbR9g-bf6UQT6sU,110 +PyJWT-1.7.1.dist-info/entry_points.txt,sha256=Xl_tLkGbTgywYa7PwaEY2xSiCtVtM2PdHTL4CW_n9dM,45 +PyJWT-1.7.1.dist-info/top_level.txt,sha256=RP5DHNyJbMq2ka0FmfTgoSaQzh7e3r5XuCWCO8a00k8,4 +PyJWT-1.7.1.dist-info/RECORD,, +../../../bin/pyjwt,sha256=_ql8FxEP66OfxPNUZ3I2dUPYQkrWDYSMH2EWsj-symU,265 +PyJWT-1.7.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +jwt/__pycache__/help.cpython-37.pyc,, +jwt/__pycache__/exceptions.cpython-37.pyc,, +jwt/__pycache__/algorithms.cpython-37.pyc,, +jwt/__pycache__/compat.cpython-37.pyc,, +jwt/__pycache__/__main__.cpython-37.pyc,, +jwt/__pycache__/utils.cpython-37.pyc,, +jwt/__pycache__/api_jwt.cpython-37.pyc,, +jwt/__pycache__/__init__.cpython-37.pyc,, +jwt/__pycache__/api_jws.cpython-37.pyc,, +jwt/contrib/algorithms/__pycache__/py_ecdsa.cpython-37.pyc,, +jwt/contrib/algorithms/__pycache__/pycrypto.cpython-37.pyc,, +jwt/contrib/algorithms/__pycache__/__init__.cpython-37.pyc,, +jwt/contrib/__pycache__/__init__.cpython-37.pyc,, diff --git a/venv/lib/python3.7/site-packages/PyJWT-1.7.1.dist-info/WHEEL b/venv/lib/python3.7/site-packages/PyJWT-1.7.1.dist-info/WHEEL new file mode 100644 index 0000000..c4bde30 --- /dev/null +++ b/venv/lib/python3.7/site-packages/PyJWT-1.7.1.dist-info/WHEEL @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.32.3) +Root-Is-Purelib: true +Tag: py2-none-any +Tag: py3-none-any + diff --git a/venv/lib/python3.7/site-packages/Twisted-19.10.0-py3.7.egg-info/PKG-INFO b/venv/lib/python3.7/site-packages/Twisted-19.10.0-py3.7.egg-info/PKG-INFO new file mode 100644 index 0000000..bbca08d --- /dev/null +++ b/venv/lib/python3.7/site-packages/Twisted-19.10.0-py3.7.egg-info/PKG-INFO @@ -0,0 +1,135 @@ +Metadata-Version: 2.1 +Name: Twisted +Version: 19.10.0 +Summary: An asynchronous networking framework written in Python +Home-page: https://twistedmatrix.com/ +Author: Twisted Matrix Laboratories +Author-email: twisted-python@twistedmatrix.com +Maintainer: Glyph Lefkowitz +Maintainer-email: glyph@twistedmatrix.com +License: MIT +Project-URL: Documentation, https://twistedmatrix.com/documents/current/ +Project-URL: Source, https://github.com/twisted/twisted +Project-URL: Issues, https://twistedmatrix.com/trac/report +Description: Twisted + ======= + + |pypi|_ + |travis|_ + |circleci|_ + + For information on changes in this release, see the `NEWS `_ file. + + + What is this? + ------------- + + Twisted is an event-based framework for internet applications, supporting Python 2.7 and Python 3.5+. + It includes modules for many different purposes, including the following: + + - ``twisted.web``: HTTP clients and servers, HTML templating, and a WSGI server + - ``twisted.conch``: SSHv2 and Telnet clients and servers and terminal emulators + - ``twisted.words``: Clients and servers for IRC, XMPP, and other IM protocols + - ``twisted.mail``: IMAPv4, POP3, SMTP clients and servers + - ``twisted.positioning``: Tools for communicating with NMEA-compatible GPS receivers + - ``twisted.names``: DNS client and tools for making your own DNS servers + - ``twisted.trial``: A unit testing framework that integrates well with Twisted-based code. + + Twisted supports all major system event loops -- ``select`` (all platforms), ``poll`` (most POSIX platforms), ``epoll`` (Linux), ``kqueue`` (FreeBSD, macOS), IOCP (Windows), and various GUI event loops (GTK+2/3, Qt, wxWidgets). + Third-party reactors can plug into Twisted, and provide support for additional event loops. + + + Installing + ---------- + + To install the latest version of Twisted using pip:: + + $ pip install twisted + + Additional instructions for installing this software are in `the installation instructions `_. + + + Documentation and Support + ------------------------- + + Twisted's documentation is available from the `Twisted Matrix website `_. + This documentation contains how-tos, code examples, and an API reference. + + Help is also available on the `Twisted mailing list `_. + + There is also a pair of very lively IRC channels, ``#twisted`` (for general Twisted questions) and ``#twisted.web`` (for Twisted Web), on ``chat.freenode.net``. + + + Unit Tests + ---------- + + Twisted has a comprehensive test suite, which can be run by ``tox``:: + + $ tox -l # to view all test environments + $ tox -e py27-tests # to run the tests for Python 2.7 + $ tox -e py35-tests # to run the tests for Python 3.5 + + + You can test running the test suite under the different reactors with the ``TWISTED_REACTOR`` environment variable:: + + $ env TWISTED_REACTOR=epoll tox -e py27-tests + + + Some of these tests may fail if you: + + * don't have the dependencies required for a particular subsystem installed, + * have a firewall blocking some ports (or things like Multicast, which Linux NAT has shown itself to do), or + * run them as root. + + + Copyright + --------- + + All of the code in this distribution is Copyright (c) 2001-2019 Twisted Matrix Laboratories. + + Twisted is made available under the MIT license. + The included `LICENSE `_ file describes this in detail. + + + Warranty + -------- + + THIS SOFTWARE IS PROVIDED "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 USE OF THIS SOFTWARE IS WITH YOU. + + IN NO EVENT WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY + AND/OR REDISTRIBUTE THE LIBRARY, BE LIABLE TO YOU FOR ANY DAMAGES, EVEN IF + SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + DAMAGES. + + Again, see the included `LICENSE `_ file for specific legal details. + + + .. |pypi| image:: http://img.shields.io/pypi/v/twisted.svg + .. _pypi: https://pypi.python.org/pypi/twisted + + .. |travis| image:: https://travis-ci.org/twisted/twisted.svg?branch=trunk + .. _travis: https://travis-ci.org/twisted/twisted + + .. |circleci| image:: https://circleci.com/gh/twisted/twisted.svg?style=svg + .. _circleci: https://circleci.com/gh/twisted/twisted + +Platform: UNKNOWN +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.5 +Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 +Description-Content-Type: text/x-rst +Provides-Extra: soap +Provides-Extra: conch +Provides-Extra: windows_platform +Provides-Extra: tls +Provides-Extra: dev +Provides-Extra: all_non_platform +Provides-Extra: macos_platform +Provides-Extra: serial +Provides-Extra: osx_platform +Provides-Extra: http2 diff --git a/venv/lib/python3.7/site-packages/Twisted-19.10.0-py3.7.egg-info/SOURCES.txt b/venv/lib/python3.7/site-packages/Twisted-19.10.0-py3.7.egg-info/SOURCES.txt new file mode 100644 index 0000000..130a2fc --- /dev/null +++ b/venv/lib/python3.7/site-packages/Twisted-19.10.0-py3.7.egg-info/SOURCES.txt @@ -0,0 +1,1479 @@ +.coveragerc +CONTRIBUTING +INSTALL.rst +LICENSE +MANIFEST.in +NEWS.rst +README.rst +code_of_conduct.md +setup.cfg +setup.py +tox.ini +docs/Makefile +docs/conf.py +docs/index.rst +docs/make.bat +docs/stylesheet.css +docs/_extensions/apilinks.py +docs/_extensions/traclinks.py +docs/_static/.placeholder +docs/_templates/.placeholder +docs/_themes/twisteddefault/theme.conf +docs/_themes/twistedtrac/layout.html +docs/_themes/twistedtrac/theme.conf +docs/_themes/twistedtrac/static/ctxt_grad.png +docs/_themes/twistedtrac/static/extlink.gif +docs/_themes/twistedtrac/static/footer_grad.png +docs/_themes/twistedtrac/static/main_grad.png +docs/_themes/twistedtrac/static/menu_grad.png +docs/_themes/twistedtrac/static/tab.png +docs/_themes/twistedtrac/static/top_grad.png +docs/_themes/twistedtrac/static/trac_banner.png +docs/_themes/twistedtrac/static/twisted-icon.ico +docs/_themes/twistedtrac/static/twistedtrac.css +docs/_themes/twistedtrac/static/css/trac.css +docs/_themes/twistedtrac/static/css/wiki.css +docs/conch/index.rst +docs/conch/benchmarks/README +docs/conch/benchmarks/buffering_mixin.py +docs/conch/examples/demo.tac +docs/conch/examples/demo_draw.tac +docs/conch/examples/demo_insults.tac +docs/conch/examples/demo_manhole.tac +docs/conch/examples/demo_recvline.tac +docs/conch/examples/demo_scroll.tac +docs/conch/examples/index.rst +docs/conch/examples/sshsimpleclient.py +docs/conch/examples/sshsimpleserver.py +docs/conch/examples/telnet_echo.tac +docs/conch/examples/window.tac +docs/conch/howto/conch_client.rst +docs/conch/howto/index.rst +docs/conch/howto/listings/echoclient_shared_ssh.py +docs/conch/howto/listings/echoclient_ssh.py +docs/conch/man/cftp.1 +docs/conch/man/ckeygen.1 +docs/conch/man/conch.1 +docs/conch/man/tkconch.1 +docs/core/index.rst +docs/core/benchmarks/banana.py +docs/core/benchmarks/deferreds.py +docs/core/benchmarks/failure.py +docs/core/benchmarks/linereceiver.py +docs/core/benchmarks/netstringreceiver.py +docs/core/benchmarks/task.py +docs/core/benchmarks/timer.py +docs/core/benchmarks/tpclient.py +docs/core/benchmarks/tpclient_nt.py +docs/core/benchmarks/tpserver.py +docs/core/benchmarks/tpserver_nt.py +docs/core/development/index.rst +docs/core/development/naming.rst +docs/core/development/philosophy.rst +docs/core/development/security.rst +docs/core/development/listings/new_module_template.py +docs/core/development/policy/code-dev.rst +docs/core/development/policy/coding-standard.rst +docs/core/development/policy/compatibility-policy.rst +docs/core/development/policy/index.rst +docs/core/development/policy/release-process.rst +docs/core/development/policy/test-standard.rst +docs/core/development/policy/writing-standard.rst +docs/core/examples/ampclient.py +docs/core/examples/ampserver.py +docs/core/examples/bananabench.py +docs/core/examples/chatserver.py +docs/core/examples/courier.py +docs/core/examples/cred.py +docs/core/examples/dbcred.py +docs/core/examples/echoclient.py +docs/core/examples/echoclient_ssl.py +docs/core/examples/echoclient_udp.py +docs/core/examples/echoserv.py +docs/core/examples/echoserv_ssl.py +docs/core/examples/echoserv_udp.py +docs/core/examples/filewatch.py +docs/core/examples/ftpclient.py +docs/core/examples/ftpserver.py +docs/core/examples/index.rst +docs/core/examples/longex.py +docs/core/examples/longex2.py +docs/core/examples/pb_exceptions.py +docs/core/examples/pbbenchclient.py +docs/core/examples/pbbenchserver.py +docs/core/examples/pbecho.py +docs/core/examples/pbechoclient.py +docs/core/examples/pbgtk2.py +docs/core/examples/pbgtk2login.glade +docs/core/examples/pbinterop.py +docs/core/examples/pbsimple.py +docs/core/examples/pbsimpleclient.py +docs/core/examples/postfix.py +docs/core/examples/ptyserv.py +docs/core/examples/public.pem +docs/core/examples/pyui_bg.png +docs/core/examples/pyuidemo.py +docs/core/examples/recvfd.py +docs/core/examples/rotatinglog.py +docs/core/examples/sendfd.py +docs/core/examples/server.pem +docs/core/examples/shaper.py +docs/core/examples/shoutcast.py +docs/core/examples/simple.tac +docs/core/examples/simpleclient.py +docs/core/examples/simpleserv.py +docs/core/examples/ssl_clientauth_client.py +docs/core/examples/ssl_clientauth_server.py +docs/core/examples/starttls_client.py +docs/core/examples/starttls_server.py +docs/core/examples/stdin.py +docs/core/examples/stdiodemo.py +docs/core/examples/streaming.py +docs/core/examples/testlogging.py +docs/core/examples/tkinterdemo.py +docs/core/examples/tls_alpn_npn_client.py +docs/core/examples/tls_alpn_npn_server.py +docs/core/examples/twistd-logging.tac +docs/core/examples/udpbroadcast.py +docs/core/examples/wxacceptance.py +docs/core/examples/wxdemo.py +docs/core/examples/threadedselect/README +docs/core/examples/threadedselect/blockingdemo.py +docs/core/examples/threadedselect/pygamedemo.py +docs/core/examples/threadedselect/Cocoa/SimpleWebClient/README.txt +docs/core/examples/threadedselect/Cocoa/SimpleWebClient/Twistzilla.py +docs/core/examples/threadedselect/Cocoa/SimpleWebClient/setup.py +docs/core/examples/threadedselect/Cocoa/SimpleWebClient/English.lproj/MainMenu.nib/classes.nib +docs/core/examples/threadedselect/Cocoa/SimpleWebClient/English.lproj/MainMenu.nib/info.nib +docs/core/examples/threadedselect/Cocoa/SimpleWebClient/English.lproj/MainMenu.nib/keyedobjects.nib +docs/core/howto/amp.rst +docs/core/howto/application.rst +docs/core/howto/basics.rst +docs/core/howto/choosing-reactor.rst +docs/core/howto/clients.rst +docs/core/howto/components.rst +docs/core/howto/constants.rst +docs/core/howto/cred.rst +docs/core/howto/debug-with-emacs.rst +docs/core/howto/defer-intro.rst +docs/core/howto/defer.rst +docs/core/howto/design.rst +docs/core/howto/dirdbm.rst +docs/core/howto/endpoints.rst +docs/core/howto/gendefer.rst +docs/core/howto/glossary.rst +docs/core/howto/howto.tidyrc +docs/core/howto/index.rst +docs/core/howto/internet-overview.rst +docs/core/howto/logger.rst +docs/core/howto/logging.rst +docs/core/howto/options.rst +docs/core/howto/pb-clients.rst +docs/core/howto/pb-copyable.rst +docs/core/howto/pb-cred.rst +docs/core/howto/pb-intro.rst +docs/core/howto/pb-limits.rst +docs/core/howto/pb-usage.rst +docs/core/howto/pb.rst +docs/core/howto/plugin.rst +docs/core/howto/positioning.rst +docs/core/howto/process.rst +docs/core/howto/producers.rst +docs/core/howto/python3.rst +docs/core/howto/quotes.rst +docs/core/howto/rdbms.rst +docs/core/howto/reactor-basics.rst +docs/core/howto/sendmsg.rst +docs/core/howto/servers.rst +docs/core/howto/ssl.rst +docs/core/howto/stylesheet-unprocessed.css +docs/core/howto/stylesheet.css +docs/core/howto/systemd.rst +docs/core/howto/tap.rst +docs/core/howto/template.tpl +docs/core/howto/testing.rst +docs/core/howto/threading.rst +docs/core/howto/time.rst +docs/core/howto/trial.rst +docs/core/howto/udp.rst +docs/core/howto/vision.rst +docs/core/howto/listings/TwistedQuotes/__init__.py +docs/core/howto/listings/TwistedQuotes/pbquote.py +docs/core/howto/listings/TwistedQuotes/pbquoteclient.py +docs/core/howto/listings/TwistedQuotes/quoteproto.py +docs/core/howto/listings/TwistedQuotes/quoters.py +docs/core/howto/listings/TwistedQuotes/quotes.txt +docs/core/howto/listings/TwistedQuotes/quotetap.py +docs/core/howto/listings/TwistedQuotes/quotetap2.py +docs/core/howto/listings/TwistedQuotes/webquote.rpy +docs/core/howto/listings/amp/basic_client.py +docs/core/howto/listings/amp/basic_server.tac +docs/core/howto/listings/amp/command_client.py +docs/core/howto/listings/application/service.tac +docs/core/howto/listings/cred/pop3_server.py +docs/core/howto/listings/deferred/synch-validation.py +docs/core/howto/listings/logger/ad_hoc.py +docs/core/howto/listings/logger/ad_hoc_save.py +docs/core/howto/listings/logger/analyze.py +docs/core/howto/listings/logger/loader-math.py +docs/core/howto/listings/logger/loader.py +docs/core/howto/listings/logger/logsource.py +docs/core/howto/listings/logger/offline_analyze.py +docs/core/howto/listings/logger/online_analyze.py +docs/core/howto/listings/logger/saver.py +docs/core/howto/listings/pb/cache_classes.py +docs/core/howto/listings/pb/cache_receiver.py +docs/core/howto/listings/pb/cache_sender.py +docs/core/howto/listings/pb/chatclient.py +docs/core/howto/listings/pb/chatserver.py +docs/core/howto/listings/pb/copy2_classes.py +docs/core/howto/listings/pb/copy2_receiver.py +docs/core/howto/listings/pb/copy2_sender.py +docs/core/howto/listings/pb/copy_receiver.tac +docs/core/howto/listings/pb/copy_sender.py +docs/core/howto/listings/pb/exc_client.py +docs/core/howto/listings/pb/exc_server.py +docs/core/howto/listings/pb/pb1client.py +docs/core/howto/listings/pb/pb1server.py +docs/core/howto/listings/pb/pb2client.py +docs/core/howto/listings/pb/pb2server.py +docs/core/howto/listings/pb/pb3client.py +docs/core/howto/listings/pb/pb3server.py +docs/core/howto/listings/pb/pb4client.py +docs/core/howto/listings/pb/pb5client.py +docs/core/howto/listings/pb/pb5server.py +docs/core/howto/listings/pb/pb6client1.py +docs/core/howto/listings/pb/pb6client2.py +docs/core/howto/listings/pb/pb6server.py +docs/core/howto/listings/pb/pb7client.py +docs/core/howto/listings/pb/pbAnonClient.py +docs/core/howto/listings/pb/pbAnonServer.py +docs/core/howto/listings/pb/trap_client.py +docs/core/howto/listings/pb/trap_server.py +docs/core/howto/listings/positioning/nmealogger.py +docs/core/howto/listings/process/process.py +docs/core/howto/listings/process/quotes.py +docs/core/howto/listings/process/trueandfalse.py +docs/core/howto/listings/sendmsg/copy_descriptor.py +docs/core/howto/listings/sendmsg/send_replacement.py +docs/core/howto/listings/servers/chat.py +docs/core/howto/listings/ssl/check_echo_certificate.py +docs/core/howto/listings/ssl/check_server_certificate.py +docs/core/howto/listings/systemd/www.example.com.socket +docs/core/howto/listings/systemd/www.example.com.socketactivated.service +docs/core/howto/listings/systemd/www.example.com.static.service +docs/core/howto/listings/trial/calculus/__init__.py +docs/core/howto/listings/trial/calculus/base_1.py +docs/core/howto/listings/trial/calculus/base_2.py +docs/core/howto/listings/trial/calculus/base_3.py +docs/core/howto/listings/trial/calculus/client_1.py +docs/core/howto/listings/trial/calculus/client_2.py +docs/core/howto/listings/trial/calculus/client_3.py +docs/core/howto/listings/trial/calculus/remote_1.py +docs/core/howto/listings/trial/calculus/remote_2.py +docs/core/howto/listings/trial/calculus/test/__init__.py +docs/core/howto/listings/trial/calculus/test/test_base_1.py +docs/core/howto/listings/trial/calculus/test/test_base_2.py +docs/core/howto/listings/trial/calculus/test/test_base_2b.py +docs/core/howto/listings/trial/calculus/test/test_base_3.py +docs/core/howto/listings/trial/calculus/test/test_client_1.py +docs/core/howto/listings/trial/calculus/test/test_client_2.py +docs/core/howto/listings/trial/calculus/test/test_client_3.py +docs/core/howto/listings/trial/calculus/test/test_client_4.py +docs/core/howto/listings/trial/calculus/test/test_remote_1.py +docs/core/howto/listings/trial/calculus/test/test_remote_2.py +docs/core/howto/listings/trial/calculus/test/test_remote_3.py +docs/core/howto/listings/udp/MulticastClient.py +docs/core/howto/listings/udp/MulticastServer.py +docs/core/howto/listings/udp/adopt_datagram_port.py +docs/core/howto/listings/udp/basic_example.py +docs/core/howto/listings/udp/connected_udp.py +docs/core/howto/listings/udp/getting_ip.py +docs/core/howto/listings/udp/ipv6_listen.py +docs/core/howto/tutorial/backends.rst +docs/core/howto/tutorial/client.rst +docs/core/howto/tutorial/components.rst +docs/core/howto/tutorial/configuration.rst +docs/core/howto/tutorial/factory.rst +docs/core/howto/tutorial/index.rst +docs/core/howto/tutorial/intro.rst +docs/core/howto/tutorial/library.rst +docs/core/howto/tutorial/pb.rst +docs/core/howto/tutorial/protocol.rst +docs/core/howto/tutorial/style.rst +docs/core/howto/tutorial/web.rst +docs/core/howto/tutorial/listings/finger/etc.users +docs/core/howto/tutorial/listings/finger/finger01.py +docs/core/howto/tutorial/listings/finger/finger02.py +docs/core/howto/tutorial/listings/finger/finger03.py +docs/core/howto/tutorial/listings/finger/finger04.py +docs/core/howto/tutorial/listings/finger/finger05.py +docs/core/howto/tutorial/listings/finger/finger06.py +docs/core/howto/tutorial/listings/finger/finger07.py +docs/core/howto/tutorial/listings/finger/finger08.py +docs/core/howto/tutorial/listings/finger/finger09.py +docs/core/howto/tutorial/listings/finger/finger10.py +docs/core/howto/tutorial/listings/finger/finger11.tac +docs/core/howto/tutorial/listings/finger/finger12.tac +docs/core/howto/tutorial/listings/finger/finger13.tac +docs/core/howto/tutorial/listings/finger/finger14.tac +docs/core/howto/tutorial/listings/finger/finger15.tac +docs/core/howto/tutorial/listings/finger/finger16.tac +docs/core/howto/tutorial/listings/finger/finger17.tac +docs/core/howto/tutorial/listings/finger/finger18.tac +docs/core/howto/tutorial/listings/finger/finger19.tac +docs/core/howto/tutorial/listings/finger/finger19a.tac +docs/core/howto/tutorial/listings/finger/finger19a_changes.py +docs/core/howto/tutorial/listings/finger/finger19b.tac +docs/core/howto/tutorial/listings/finger/finger19b_changes.py +docs/core/howto/tutorial/listings/finger/finger19c.tac +docs/core/howto/tutorial/listings/finger/finger19c_changes.py +docs/core/howto/tutorial/listings/finger/finger20.tac +docs/core/howto/tutorial/listings/finger/finger21.tac +docs/core/howto/tutorial/listings/finger/finger22.py +docs/core/howto/tutorial/listings/finger/fingerPBclient.py +docs/core/howto/tutorial/listings/finger/fingerXRclient.py +docs/core/howto/tutorial/listings/finger/finger_config.py +docs/core/howto/tutorial/listings/finger/fingerproxy.tac +docs/core/howto/tutorial/listings/finger/organized-finger.tac +docs/core/howto/tutorial/listings/finger/simple-finger.tac +docs/core/howto/tutorial/listings/finger/finger/__init__.py +docs/core/howto/tutorial/listings/finger/finger/finger.py +docs/core/howto/tutorial/listings/finger/finger/tap.py +docs/core/howto/tutorial/listings/finger/twisted/plugins/finger_tutorial.py +docs/core/img/TwistedLogo.bmp +docs/core/img/cred-login.dia +docs/core/img/cred-login.png +docs/core/img/deferred-attach.dia +docs/core/img/deferred-attach.png +docs/core/img/deferred-process.dia +docs/core/img/deferred-process.png +docs/core/img/deferred-states.svg +docs/core/img/deferred.dia +docs/core/img/deferred.png +docs/core/man/pyhtmlizer.1 +docs/core/man/trial.1 +docs/core/man/twistd.1 +docs/core/specifications/banana.rst +docs/core/specifications/index.rst +docs/fun/Twisted.Quotes +docs/fun/lightbulb +docs/fun/register.html +docs/historic/NEWS.rst +docs/historic/index.rst +docs/historic/ipc10errata.html +docs/historic/ipc10paper.html +docs/historic/stylesheet.css +docs/historic/template-notoc.tpl +docs/historic/template.tpl +docs/historic/twisted-debian.html +docs/historic/2002/ipc10/twisted-network-framework/errata.html +docs/historic/2002/ipc10/twisted-network-framework/index.html +docs/historic/2004/ibm/talk.html +docs/historic/Quotes/README.First +docs/historic/Quotes/Twisted-1.0 +docs/historic/Quotes/Twisted-1.1 +docs/historic/Quotes/Twisted-1.2 +docs/historic/Quotes/Twisted-1.3 +docs/historic/Quotes/Twisted-10.0 +docs/historic/Quotes/Twisted-10.1 +docs/historic/Quotes/Twisted-10.2 +docs/historic/Quotes/Twisted-11.0 +docs/historic/Quotes/Twisted-11.1 +docs/historic/Quotes/Twisted-12.0 +docs/historic/Quotes/Twisted-12.1 +docs/historic/Quotes/Twisted-12.2 +docs/historic/Quotes/Twisted-12.3 +docs/historic/Quotes/Twisted-13.0 +docs/historic/Quotes/Twisted-13.1 +docs/historic/Quotes/Twisted-13.2 +docs/historic/Quotes/Twisted-14.0 +docs/historic/Quotes/Twisted-15.0 +docs/historic/Quotes/Twisted-15.1 +docs/historic/Quotes/Twisted-15.2 +docs/historic/Quotes/Twisted-15.3 +docs/historic/Quotes/Twisted-15.4 +docs/historic/Quotes/Twisted-15.5 +docs/historic/Quotes/Twisted-16.0 +docs/historic/Quotes/Twisted-16.1 +docs/historic/Quotes/Twisted-16.2 +docs/historic/Quotes/Twisted-16.3 +docs/historic/Quotes/Twisted-16.4 +docs/historic/Quotes/Twisted-16.5 +docs/historic/Quotes/Twisted-16.6 +docs/historic/Quotes/Twisted-17.1 +docs/historic/Quotes/Twisted-17.5 +docs/historic/Quotes/Twisted-17.9 +docs/historic/Quotes/Twisted-2.0 +docs/historic/Quotes/Twisted-2.1 +docs/historic/Quotes/Twisted-2.2 +docs/historic/Quotes/Twisted-2.3 +docs/historic/Quotes/Twisted-2.5 +docs/historic/Quotes/Twisted-8.0 +docs/historic/Quotes/Twisted-8.1 +docs/historic/Quotes/Twisted-8.2 +docs/historic/Quotes/Twisted-9.0 +docs/installation/index.rst +docs/installation/howto/optional.rst +docs/mail/index.rst +docs/mail/examples/emailserver.tac +docs/mail/examples/imap4client.py +docs/mail/examples/index.rst +docs/mail/examples/sendmail_gmail.py +docs/mail/examples/sendmail_message.py +docs/mail/examples/sendmail_smtp.py +docs/mail/examples/smtpclient_simple.py +docs/mail/examples/smtpclient_tls.py +docs/mail/howto/index.rst +docs/mail/howto/sending-mail.rst +docs/mail/man/mailmail.1 +docs/mail/tutorial/smtpclient/smtpclient-1.tac +docs/mail/tutorial/smtpclient/smtpclient-10.tac +docs/mail/tutorial/smtpclient/smtpclient-11.tac +docs/mail/tutorial/smtpclient/smtpclient-2.tac +docs/mail/tutorial/smtpclient/smtpclient-3.tac +docs/mail/tutorial/smtpclient/smtpclient-4.tac +docs/mail/tutorial/smtpclient/smtpclient-5.tac +docs/mail/tutorial/smtpclient/smtpclient-6.tac +docs/mail/tutorial/smtpclient/smtpclient-7.tac +docs/mail/tutorial/smtpclient/smtpclient-8.tac +docs/mail/tutorial/smtpclient/smtpclient-9.tac +docs/mail/tutorial/smtpclient/smtpclient.rst +docs/mail/tutorial/smtpserver/smtpserver-1.tac +docs/mail/tutorial/smtpserver/smtpserver-2.tac +docs/mail/tutorial/smtpserver/smtpserver-3.tac +docs/mail/tutorial/smtpserver/smtpserver-4.tac +docs/mail/tutorial/smtpserver/smtpserver-5.tac +docs/mail/tutorial/smtpserver/smtpserver-6.tac +docs/mail/tutorial/smtpserver/smtpserver-7.tac +docs/mail/tutorial/smtpserver/smtpserver-8.tac +docs/names/index.rst +docs/names/examples/dns-service.py +docs/names/examples/gethostbyname.py +docs/names/examples/index.rst +docs/names/examples/multi_reverse_lookup.py +docs/names/examples/testdns.py +docs/names/howto/client-tour.rst +docs/names/howto/custom-server.rst +docs/names/howto/index.rst +docs/names/howto/names.rst +docs/names/howto/listings/names/example-domain.com +docs/names/howto/listings/names/override_server.py +docs/names/howto/listings/names/reverse_lookup.py +docs/names/howto/listings/names/simple_server.py +docs/pair/index.rst +docs/pair/examples/index.rst +docs/pair/examples/pairudp.py +docs/pair/howto/configuration.rst +docs/pair/howto/index.rst +docs/pair/howto/tunnels.rst +docs/web/index.rst +docs/web/examples/advogato.py +docs/web/examples/dlpage.py +docs/web/examples/fortune.rpy.py +docs/web/examples/getpage.py +docs/web/examples/hello.rpy.py +docs/web/examples/httpclient.py +docs/web/examples/index.rst +docs/web/examples/logging-proxy.py +docs/web/examples/proxy.py +docs/web/examples/report.rpy.py +docs/web/examples/reverse-proxy.py +docs/web/examples/rootscript.py +docs/web/examples/silly-web.py +docs/web/examples/simple.rtl +docs/web/examples/soap.py +docs/web/examples/users.rpy.py +docs/web/examples/web.py +docs/web/examples/webguard.py +docs/web/examples/xmlrpc.py +docs/web/examples/xmlrpcclient.py +docs/web/howto/client.rst +docs/web/howto/glossary.rst +docs/web/howto/index.rst +docs/web/howto/resource-templates.rst +docs/web/howto/twisted-templates.rst +docs/web/howto/using-twistedweb.rst +docs/web/howto/web-development.rst +docs/web/howto/web-overview.rst +docs/web/howto/xmlrpc.rst +docs/web/howto/listings/element_1.py +docs/web/howto/listings/element_2.py +docs/web/howto/listings/element_3.py +docs/web/howto/listings/iteration-1.py +docs/web/howto/listings/iteration-1.xml +docs/web/howto/listings/iteration-output-1.xml +docs/web/howto/listings/output-1.html +docs/web/howto/listings/output-2.html +docs/web/howto/listings/output-3.html +docs/web/howto/listings/quoting-output.html +docs/web/howto/listings/quoting_element.py +docs/web/howto/listings/render_1.py +docs/web/howto/listings/render_2.py +docs/web/howto/listings/render_3.py +docs/web/howto/listings/render_quoting.py +docs/web/howto/listings/render_slots_attrs.py +docs/web/howto/listings/render_transparent.py +docs/web/howto/listings/slots-attributes-1.xml +docs/web/howto/listings/slots-attributes-output.html +docs/web/howto/listings/slots_attributes_1.py +docs/web/howto/listings/soap.rpy +docs/web/howto/listings/subviews-1.py +docs/web/howto/listings/subviews-1.xml +docs/web/howto/listings/subviews-output-1.xml +docs/web/howto/listings/template-1.xml +docs/web/howto/listings/transparent-1.xml +docs/web/howto/listings/transparent-output.html +docs/web/howto/listings/transparent_element.py +docs/web/howto/listings/wait_for_it.py +docs/web/howto/listings/waited-for-it.html +docs/web/howto/listings/waited-for-it.txt +docs/web/howto/listings/webquote.rtl +docs/web/howto/listings/xmlAndSoapQuote.py +docs/web/howto/listings/xmlquote.rpy +docs/web/howto/listings/xmlrpc-customized.py +docs/web/howto/listings/client/bytesprod.py +docs/web/howto/listings/client/cookies.py +docs/web/howto/listings/client/endpointconstructor.py +docs/web/howto/listings/client/filesendbody.py +docs/web/howto/listings/client/gzipdecoder.py +docs/web/howto/listings/client/request.py +docs/web/howto/listings/client/response.py +docs/web/howto/listings/client/responseBody.py +docs/web/howto/listings/client/sendbody.py +docs/web/howto/web-in-60/access-logging.rst +docs/web/howto/web-in-60/asynchronous-deferred.rst +docs/web/howto/web-in-60/asynchronous.rst +docs/web/howto/web-in-60/custom-codes.rst +docs/web/howto/web-in-60/dynamic-content.rst +docs/web/howto/web-in-60/dynamic-dispatch.rst +docs/web/howto/web-in-60/error-handling.rst +docs/web/howto/web-in-60/handling-posts.rst +docs/web/howto/web-in-60/http-auth.rst +docs/web/howto/web-in-60/index.rst +docs/web/howto/web-in-60/interrupted.rst +docs/web/howto/web-in-60/logging-errors.rst +docs/web/howto/web-in-60/other-request-bodies.rst +docs/web/howto/web-in-60/rpy-scripts.rst +docs/web/howto/web-in-60/session-basics.rst +docs/web/howto/web-in-60/session-endings.rst +docs/web/howto/web-in-60/session-store.rst +docs/web/howto/web-in-60/static-content.rst +docs/web/howto/web-in-60/static-dispatch.rst +docs/web/howto/web-in-60/wsgi.rst +docs/web/img/controller.png +docs/web/img/livepage.png +docs/web/img/model.png +docs/web/img/plone_root_model.png +docs/web/img/view.png +docs/web/img/web-overview.dia +docs/web/img/web-overview.png +docs/web/img/web-process.png +docs/web/img/web-process.svg +docs/web/img/web-session.png +docs/web/img/web-widgets.dia +docs/web/img/web-widgets.png +docs/words/index.rst +docs/words/examples/cursesclient.py +docs/words/examples/index.rst +docs/words/examples/ircLogBot.py +docs/words/examples/minchat.py +docs/words/examples/pb_client.py +docs/words/examples/xmpp_client.py +docs/words/howto/im.rst +docs/words/howto/index.rst +docs/words/howto/ircclient.rst +docs/words/howto/ircserverclientcomm.rst +src/Twisted.egg-info/PKG-INFO +src/Twisted.egg-info/SOURCES.txt +src/Twisted.egg-info/dependency_links.txt +src/Twisted.egg-info/entry_points.txt +src/Twisted.egg-info/not-zip-safe +src/Twisted.egg-info/requires.txt +src/Twisted.egg-info/top_level.txt +src/twisted/__init__.py +src/twisted/__main__.py +src/twisted/_version.py +src/twisted/copyright.py +src/twisted/plugin.py +src/twisted/_threads/__init__.py +src/twisted/_threads/_convenience.py +src/twisted/_threads/_ithreads.py +src/twisted/_threads/_memory.py +src/twisted/_threads/_pool.py +src/twisted/_threads/_team.py +src/twisted/_threads/_threadworker.py +src/twisted/_threads/test/__init__.py +src/twisted/_threads/test/test_convenience.py +src/twisted/_threads/test/test_memory.py +src/twisted/_threads/test/test_team.py +src/twisted/_threads/test/test_threadworker.py +src/twisted/application/__init__.py +src/twisted/application/app.py +src/twisted/application/internet.py +src/twisted/application/reactors.py +src/twisted/application/service.py +src/twisted/application/strports.py +src/twisted/application/runner/__init__.py +src/twisted/application/runner/_exit.py +src/twisted/application/runner/_pidfile.py +src/twisted/application/runner/_runner.py +src/twisted/application/runner/test/__init__.py +src/twisted/application/runner/test/test_exit.py +src/twisted/application/runner/test/test_pidfile.py +src/twisted/application/runner/test/test_runner.py +src/twisted/application/test/__init__.py +src/twisted/application/test/test_internet.py +src/twisted/application/test/test_service.py +src/twisted/application/twist/__init__.py +src/twisted/application/twist/_options.py +src/twisted/application/twist/_twist.py +src/twisted/application/twist/test/__init__.py +src/twisted/application/twist/test/test_options.py +src/twisted/application/twist/test/test_twist.py +src/twisted/conch/__init__.py +src/twisted/conch/avatar.py +src/twisted/conch/checkers.py +src/twisted/conch/endpoints.py +src/twisted/conch/error.py +src/twisted/conch/interfaces.py +src/twisted/conch/ls.py +src/twisted/conch/manhole.py +src/twisted/conch/manhole_ssh.py +src/twisted/conch/manhole_tap.py +src/twisted/conch/mixin.py +src/twisted/conch/recvline.py +src/twisted/conch/stdio.py +src/twisted/conch/tap.py +src/twisted/conch/telnet.py +src/twisted/conch/ttymodes.py +src/twisted/conch/unix.py +src/twisted/conch/client/__init__.py +src/twisted/conch/client/agent.py +src/twisted/conch/client/connect.py +src/twisted/conch/client/default.py +src/twisted/conch/client/direct.py +src/twisted/conch/client/knownhosts.py +src/twisted/conch/client/options.py +src/twisted/conch/insults/__init__.py +src/twisted/conch/insults/helper.py +src/twisted/conch/insults/insults.py +src/twisted/conch/insults/text.py +src/twisted/conch/insults/window.py +src/twisted/conch/openssh_compat/__init__.py +src/twisted/conch/openssh_compat/factory.py +src/twisted/conch/openssh_compat/primes.py +src/twisted/conch/scripts/__init__.py +src/twisted/conch/scripts/cftp.py +src/twisted/conch/scripts/ckeygen.py +src/twisted/conch/scripts/conch.py +src/twisted/conch/scripts/tkconch.py +src/twisted/conch/ssh/__init__.py +src/twisted/conch/ssh/_kex.py +src/twisted/conch/ssh/address.py +src/twisted/conch/ssh/agent.py +src/twisted/conch/ssh/channel.py +src/twisted/conch/ssh/common.py +src/twisted/conch/ssh/connection.py +src/twisted/conch/ssh/factory.py +src/twisted/conch/ssh/filetransfer.py +src/twisted/conch/ssh/forwarding.py +src/twisted/conch/ssh/keys.py +src/twisted/conch/ssh/service.py +src/twisted/conch/ssh/session.py +src/twisted/conch/ssh/sexpy.py +src/twisted/conch/ssh/transport.py +src/twisted/conch/ssh/userauth.py +src/twisted/conch/test/__init__.py +src/twisted/conch/test/keydata.py +src/twisted/conch/test/loopback.py +src/twisted/conch/test/test_address.py +src/twisted/conch/test/test_agent.py +src/twisted/conch/test/test_cftp.py +src/twisted/conch/test/test_channel.py +src/twisted/conch/test/test_checkers.py +src/twisted/conch/test/test_ckeygen.py +src/twisted/conch/test/test_conch.py +src/twisted/conch/test/test_connection.py +src/twisted/conch/test/test_default.py +src/twisted/conch/test/test_endpoints.py +src/twisted/conch/test/test_filetransfer.py +src/twisted/conch/test/test_forwarding.py +src/twisted/conch/test/test_helper.py +src/twisted/conch/test/test_insults.py +src/twisted/conch/test/test_keys.py +src/twisted/conch/test/test_knownhosts.py +src/twisted/conch/test/test_manhole.py +src/twisted/conch/test/test_manhole_tap.py +src/twisted/conch/test/test_mixin.py +src/twisted/conch/test/test_openssh_compat.py +src/twisted/conch/test/test_recvline.py +src/twisted/conch/test/test_scripts.py +src/twisted/conch/test/test_session.py +src/twisted/conch/test/test_ssh.py +src/twisted/conch/test/test_tap.py +src/twisted/conch/test/test_telnet.py +src/twisted/conch/test/test_text.py +src/twisted/conch/test/test_transport.py +src/twisted/conch/test/test_unix.py +src/twisted/conch/test/test_userauth.py +src/twisted/conch/test/test_window.py +src/twisted/conch/ui/__init__.py +src/twisted/conch/ui/ansi.py +src/twisted/conch/ui/tkvt100.py +src/twisted/cred/__init__.py +src/twisted/cred/_digest.py +src/twisted/cred/checkers.py +src/twisted/cred/credentials.py +src/twisted/cred/error.py +src/twisted/cred/portal.py +src/twisted/cred/strcred.py +src/twisted/cred/test/__init__.py +src/twisted/cred/test/test_cramauth.py +src/twisted/cred/test/test_cred.py +src/twisted/cred/test/test_digestauth.py +src/twisted/cred/test/test_simpleauth.py +src/twisted/cred/test/test_strcred.py +src/twisted/enterprise/__init__.py +src/twisted/enterprise/adbapi.py +src/twisted/internet/__init__.py +src/twisted/internet/_baseprocess.py +src/twisted/internet/_dumbwin32proc.py +src/twisted/internet/_glibbase.py +src/twisted/internet/_idna.py +src/twisted/internet/_newtls.py +src/twisted/internet/_pollingfile.py +src/twisted/internet/_posixserialport.py +src/twisted/internet/_posixstdio.py +src/twisted/internet/_producer_helpers.py +src/twisted/internet/_resolver.py +src/twisted/internet/_signals.py +src/twisted/internet/_sslverify.py +src/twisted/internet/_threadedselect.py +src/twisted/internet/_win32serialport.py +src/twisted/internet/_win32stdio.py +src/twisted/internet/abstract.py +src/twisted/internet/address.py +src/twisted/internet/asyncioreactor.py +src/twisted/internet/base.py +src/twisted/internet/cfreactor.py +src/twisted/internet/default.py +src/twisted/internet/defer.py +src/twisted/internet/endpoints.py +src/twisted/internet/epollreactor.py +src/twisted/internet/error.py +src/twisted/internet/fdesc.py +src/twisted/internet/gireactor.py +src/twisted/internet/glib2reactor.py +src/twisted/internet/gtk2reactor.py +src/twisted/internet/gtk3reactor.py +src/twisted/internet/inotify.py +src/twisted/internet/interfaces.py +src/twisted/internet/kqreactor.py +src/twisted/internet/main.py +src/twisted/internet/pollreactor.py +src/twisted/internet/posixbase.py +src/twisted/internet/process.py +src/twisted/internet/protocol.py +src/twisted/internet/pyuisupport.py +src/twisted/internet/reactor.py +src/twisted/internet/selectreactor.py +src/twisted/internet/serialport.py +src/twisted/internet/ssl.py +src/twisted/internet/stdio.py +src/twisted/internet/task.py +src/twisted/internet/tcp.py +src/twisted/internet/testing.py +src/twisted/internet/threads.py +src/twisted/internet/tksupport.py +src/twisted/internet/udp.py +src/twisted/internet/unix.py +src/twisted/internet/utils.py +src/twisted/internet/win32eventreactor.py +src/twisted/internet/wxreactor.py +src/twisted/internet/wxsupport.py +src/twisted/internet/iocpreactor/__init__.py +src/twisted/internet/iocpreactor/abstract.py +src/twisted/internet/iocpreactor/build.bat +src/twisted/internet/iocpreactor/const.py +src/twisted/internet/iocpreactor/interfaces.py +src/twisted/internet/iocpreactor/notes.txt +src/twisted/internet/iocpreactor/reactor.py +src/twisted/internet/iocpreactor/setup.py +src/twisted/internet/iocpreactor/tcp.py +src/twisted/internet/iocpreactor/udp.py +src/twisted/internet/iocpreactor/iocpsupport/acceptex.pxi +src/twisted/internet/iocpreactor/iocpsupport/connectex.pxi +src/twisted/internet/iocpreactor/iocpsupport/iocpsupport.c +src/twisted/internet/iocpreactor/iocpsupport/iocpsupport.pyx +src/twisted/internet/iocpreactor/iocpsupport/winsock_pointers.c +src/twisted/internet/iocpreactor/iocpsupport/winsock_pointers.h +src/twisted/internet/iocpreactor/iocpsupport/wsarecv.pxi +src/twisted/internet/iocpreactor/iocpsupport/wsasend.pxi +src/twisted/internet/test/__init__.py +src/twisted/internet/test/_awaittests.py.3only +src/twisted/internet/test/_posixifaces.py +src/twisted/internet/test/_win32ifaces.py +src/twisted/internet/test/_yieldfromtests.py.3only +src/twisted/internet/test/connectionmixins.py +src/twisted/internet/test/fakeendpoint.py +src/twisted/internet/test/modulehelpers.py +src/twisted/internet/test/process_cli.py +src/twisted/internet/test/process_connectionlost.py +src/twisted/internet/test/process_gireactornocompat.py +src/twisted/internet/test/process_helper.py +src/twisted/internet/test/reactormixins.py +src/twisted/internet/test/test_abstract.py +src/twisted/internet/test/test_address.py +src/twisted/internet/test/test_asyncioreactor.py +src/twisted/internet/test/test_base.py +src/twisted/internet/test/test_baseprocess.py +src/twisted/internet/test/test_core.py +src/twisted/internet/test/test_coroutines.py +src/twisted/internet/test/test_default.py +src/twisted/internet/test/test_endpoints.py +src/twisted/internet/test/test_epollreactor.py +src/twisted/internet/test/test_error.py +src/twisted/internet/test/test_fdset.py +src/twisted/internet/test/test_filedescriptor.py +src/twisted/internet/test/test_gireactor.py +src/twisted/internet/test/test_glibbase.py +src/twisted/internet/test/test_inlinecb.py +src/twisted/internet/test/test_inotify.py +src/twisted/internet/test/test_iocp.py +src/twisted/internet/test/test_kqueuereactor.py +src/twisted/internet/test/test_main.py +src/twisted/internet/test/test_newtls.py +src/twisted/internet/test/test_pollingfile.py +src/twisted/internet/test/test_posixbase.py +src/twisted/internet/test/test_posixprocess.py +src/twisted/internet/test/test_process.py +src/twisted/internet/test/test_protocol.py +src/twisted/internet/test/test_resolver.py +src/twisted/internet/test/test_serialport.py +src/twisted/internet/test/test_sigchld.py +src/twisted/internet/test/test_socket.py +src/twisted/internet/test/test_stdio.py +src/twisted/internet/test/test_tcp.py +src/twisted/internet/test/test_testing.py +src/twisted/internet/test/test_threads.py +src/twisted/internet/test/test_time.py +src/twisted/internet/test/test_tls.py +src/twisted/internet/test/test_udp.py +src/twisted/internet/test/test_udp_internals.py +src/twisted/internet/test/test_unix.py +src/twisted/internet/test/test_win32events.py +src/twisted/internet/test/test_win32serialport.py +src/twisted/internet/test/fake_CAs/chain.pem +src/twisted/internet/test/fake_CAs/not-a-certificate +src/twisted/internet/test/fake_CAs/thing1.pem +src/twisted/internet/test/fake_CAs/thing2-duplicate.pem +src/twisted/internet/test/fake_CAs/thing2.pem +src/twisted/logger/__init__.py +src/twisted/logger/_buffer.py +src/twisted/logger/_capture.py +src/twisted/logger/_file.py +src/twisted/logger/_filter.py +src/twisted/logger/_flatten.py +src/twisted/logger/_format.py +src/twisted/logger/_global.py +src/twisted/logger/_io.py +src/twisted/logger/_json.py +src/twisted/logger/_legacy.py +src/twisted/logger/_levels.py +src/twisted/logger/_logger.py +src/twisted/logger/_observer.py +src/twisted/logger/_stdlib.py +src/twisted/logger/_util.py +src/twisted/logger/test/__init__.py +src/twisted/logger/test/test_buffer.py +src/twisted/logger/test/test_capture.py +src/twisted/logger/test/test_file.py +src/twisted/logger/test/test_filter.py +src/twisted/logger/test/test_flatten.py +src/twisted/logger/test/test_format.py +src/twisted/logger/test/test_global.py +src/twisted/logger/test/test_io.py +src/twisted/logger/test/test_json.py +src/twisted/logger/test/test_legacy.py +src/twisted/logger/test/test_levels.py +src/twisted/logger/test/test_logger.py +src/twisted/logger/test/test_observer.py +src/twisted/logger/test/test_stdlib.py +src/twisted/logger/test/test_util.py +src/twisted/mail/__init__.py +src/twisted/mail/_cred.py +src/twisted/mail/_except.py +src/twisted/mail/alias.py +src/twisted/mail/bounce.py +src/twisted/mail/imap4.py +src/twisted/mail/interfaces.py +src/twisted/mail/mail.py +src/twisted/mail/maildir.py +src/twisted/mail/pb.py +src/twisted/mail/pop3.py +src/twisted/mail/pop3client.py +src/twisted/mail/protocols.py +src/twisted/mail/relay.py +src/twisted/mail/relaymanager.py +src/twisted/mail/smtp.py +src/twisted/mail/tap.py +src/twisted/mail/scripts/__init__.py +src/twisted/mail/scripts/mailmail.py +src/twisted/mail/test/__init__.py +src/twisted/mail/test/pop3testserver.py +src/twisted/mail/test/rfc822.message +src/twisted/mail/test/test_bounce.py +src/twisted/mail/test/test_imap.py +src/twisted/mail/test/test_mail.py +src/twisted/mail/test/test_mailmail.py +src/twisted/mail/test/test_options.py +src/twisted/mail/test/test_pop3.py +src/twisted/mail/test/test_pop3client.py +src/twisted/mail/test/test_scripts.py +src/twisted/mail/test/test_smtp.py +src/twisted/names/__init__.py +src/twisted/names/_rfc1982.py +src/twisted/names/authority.py +src/twisted/names/cache.py +src/twisted/names/client.py +src/twisted/names/common.py +src/twisted/names/dns.py +src/twisted/names/error.py +src/twisted/names/hosts.py +src/twisted/names/resolve.py +src/twisted/names/root.py +src/twisted/names/secondary.py +src/twisted/names/server.py +src/twisted/names/srvconnect.py +src/twisted/names/tap.py +src/twisted/names/test/__init__.py +src/twisted/names/test/test_cache.py +src/twisted/names/test/test_client.py +src/twisted/names/test/test_common.py +src/twisted/names/test/test_dns.py +src/twisted/names/test/test_examples.py +src/twisted/names/test/test_hosts.py +src/twisted/names/test/test_names.py +src/twisted/names/test/test_resolve.py +src/twisted/names/test/test_rfc1982.py +src/twisted/names/test/test_rootresolve.py +src/twisted/names/test/test_server.py +src/twisted/names/test/test_srvconnect.py +src/twisted/names/test/test_tap.py +src/twisted/names/test/test_util.py +src/twisted/news/__init__.py +src/twisted/news/database.py +src/twisted/news/news.py +src/twisted/news/nntp.py +src/twisted/news/tap.py +src/twisted/news/test/__init__.py +src/twisted/news/test/test_database.py +src/twisted/news/test/test_news.py +src/twisted/news/test/test_nntp.py +src/twisted/pair/__init__.py +src/twisted/pair/ethernet.py +src/twisted/pair/ip.py +src/twisted/pair/raw.py +src/twisted/pair/rawudp.py +src/twisted/pair/testing.py +src/twisted/pair/tuntap.py +src/twisted/pair/test/__init__.py +src/twisted/pair/test/test_ethernet.py +src/twisted/pair/test/test_ip.py +src/twisted/pair/test/test_rawudp.py +src/twisted/pair/test/test_tuntap.py +src/twisted/persisted/__init__.py +src/twisted/persisted/aot.py +src/twisted/persisted/crefutil.py +src/twisted/persisted/dirdbm.py +src/twisted/persisted/sob.py +src/twisted/persisted/styles.py +src/twisted/persisted/test/__init__.py +src/twisted/persisted/test/test_styles.py +src/twisted/plugins/__init__.py +src/twisted/plugins/cred_anonymous.py +src/twisted/plugins/cred_file.py +src/twisted/plugins/cred_memory.py +src/twisted/plugins/cred_sshkeys.py +src/twisted/plugins/cred_unix.py +src/twisted/plugins/twisted_conch.py +src/twisted/plugins/twisted_core.py +src/twisted/plugins/twisted_ftp.py +src/twisted/plugins/twisted_inet.py +src/twisted/plugins/twisted_mail.py +src/twisted/plugins/twisted_names.py +src/twisted/plugins/twisted_news.py +src/twisted/plugins/twisted_portforward.py +src/twisted/plugins/twisted_reactors.py +src/twisted/plugins/twisted_runner.py +src/twisted/plugins/twisted_socks.py +src/twisted/plugins/twisted_trial.py +src/twisted/plugins/twisted_web.py +src/twisted/plugins/twisted_words.py +src/twisted/positioning/__init__.py +src/twisted/positioning/_sentence.py +src/twisted/positioning/base.py +src/twisted/positioning/ipositioning.py +src/twisted/positioning/nmea.py +src/twisted/positioning/test/__init__.py +src/twisted/positioning/test/receiver.py +src/twisted/positioning/test/test_base.py +src/twisted/positioning/test/test_nmea.py +src/twisted/positioning/test/test_sentence.py +src/twisted/protocols/__init__.py +src/twisted/protocols/amp.py +src/twisted/protocols/basic.py +src/twisted/protocols/dict.py +src/twisted/protocols/finger.py +src/twisted/protocols/ftp.py +src/twisted/protocols/htb.py +src/twisted/protocols/ident.py +src/twisted/protocols/loopback.py +src/twisted/protocols/memcache.py +src/twisted/protocols/pcp.py +src/twisted/protocols/policies.py +src/twisted/protocols/portforward.py +src/twisted/protocols/postfix.py +src/twisted/protocols/shoutcast.py +src/twisted/protocols/sip.py +src/twisted/protocols/socks.py +src/twisted/protocols/stateful.py +src/twisted/protocols/tls.py +src/twisted/protocols/wire.py +src/twisted/protocols/haproxy/__init__.py +src/twisted/protocols/haproxy/_exceptions.py +src/twisted/protocols/haproxy/_info.py +src/twisted/protocols/haproxy/_interfaces.py +src/twisted/protocols/haproxy/_parser.py +src/twisted/protocols/haproxy/_v1parser.py +src/twisted/protocols/haproxy/_v2parser.py +src/twisted/protocols/haproxy/_wrapper.py +src/twisted/protocols/haproxy/test/__init__.py +src/twisted/protocols/haproxy/test/test_parser.py +src/twisted/protocols/haproxy/test/test_v1parser.py +src/twisted/protocols/haproxy/test/test_v2parser.py +src/twisted/protocols/haproxy/test/test_wrapper.py +src/twisted/protocols/test/__init__.py +src/twisted/protocols/test/test_basic.py +src/twisted/protocols/test/test_tls.py +src/twisted/python/__init__.py +src/twisted/python/_appdirs.py +src/twisted/python/_inotify.py +src/twisted/python/_oldstyle.py +src/twisted/python/_pydoctor.py +src/twisted/python/_release.py +src/twisted/python/_sendmsg.c +src/twisted/python/_setup.py +src/twisted/python/_shellcomp.py +src/twisted/python/_textattributes.py +src/twisted/python/_tzhelper.py +src/twisted/python/_url.py +src/twisted/python/compat.py +src/twisted/python/components.py +src/twisted/python/constants.py +src/twisted/python/context.py +src/twisted/python/deprecate.py +src/twisted/python/failure.py +src/twisted/python/fakepwd.py +src/twisted/python/filepath.py +src/twisted/python/finalize.py +src/twisted/python/formmethod.py +src/twisted/python/hook.py +src/twisted/python/htmlizer.py +src/twisted/python/lockfile.py +src/twisted/python/log.py +src/twisted/python/logfile.py +src/twisted/python/modules.py +src/twisted/python/monkey.py +src/twisted/python/procutils.py +src/twisted/python/randbytes.py +src/twisted/python/rebuild.py +src/twisted/python/reflect.py +src/twisted/python/release.py +src/twisted/python/roots.py +src/twisted/python/runtime.py +src/twisted/python/sendmsg.py +src/twisted/python/shortcut.py +src/twisted/python/syslog.py +src/twisted/python/systemd.py +src/twisted/python/text.py +src/twisted/python/threadable.py +src/twisted/python/threadpool.py +src/twisted/python/twisted-completion.zsh +src/twisted/python/url.py +src/twisted/python/urlpath.py +src/twisted/python/usage.py +src/twisted/python/util.py +src/twisted/python/versions.py +src/twisted/python/win32.py +src/twisted/python/zippath.py +src/twisted/python/zipstream.py +src/twisted/python/_pydoctortemplates/common.html +src/twisted/python/_pydoctortemplates/index.html +src/twisted/python/_pydoctortemplates/summary.html +src/twisted/python/test/__init__.py +src/twisted/python/test/_deprecatetests.py.3only +src/twisted/python/test/cmodulepullpipe.py +src/twisted/python/test/deprecatedattributes.py +src/twisted/python/test/modules_helpers.py +src/twisted/python/test/pullpipe.py +src/twisted/python/test/test_appdirs.py +src/twisted/python/test/test_components.py +src/twisted/python/test/test_constants.py +src/twisted/python/test/test_deprecate.py +src/twisted/python/test/test_dist3.py +src/twisted/python/test/test_fakepwd.py +src/twisted/python/test/test_htmlizer.py +src/twisted/python/test/test_inotify.py +src/twisted/python/test/test_pydoctor.py +src/twisted/python/test/test_release.py +src/twisted/python/test/test_runtime.py +src/twisted/python/test/test_sendmsg.py +src/twisted/python/test/test_setup.py +src/twisted/python/test/test_shellcomp.py +src/twisted/python/test/test_syslog.py +src/twisted/python/test/test_systemd.py +src/twisted/python/test/test_textattributes.py +src/twisted/python/test/test_tzhelper.py +src/twisted/python/test/test_url.py +src/twisted/python/test/test_urlpath.py +src/twisted/python/test/test_util.py +src/twisted/python/test/test_versions.py +src/twisted/python/test/test_win32.py +src/twisted/python/test/test_zippath.py +src/twisted/python/test/test_zipstream.py +src/twisted/runner/__init__.py +src/twisted/runner/inetd.py +src/twisted/runner/inetdconf.py +src/twisted/runner/inetdtap.py +src/twisted/runner/procmon.py +src/twisted/runner/procmontap.py +src/twisted/runner/test/__init__.py +src/twisted/runner/test/test_inetdconf.py +src/twisted/runner/test/test_procmon.py +src/twisted/runner/test/test_procmontap.py +src/twisted/scripts/__init__.py +src/twisted/scripts/_twistd_unix.py +src/twisted/scripts/_twistw.py +src/twisted/scripts/htmlizer.py +src/twisted/scripts/trial.py +src/twisted/scripts/twistd.py +src/twisted/scripts/test/__init__.py +src/twisted/scripts/test/test_scripts.py +src/twisted/spread/__init__.py +src/twisted/spread/banana.py +src/twisted/spread/flavors.py +src/twisted/spread/interfaces.py +src/twisted/spread/jelly.py +src/twisted/spread/pb.py +src/twisted/spread/publish.py +src/twisted/spread/util.py +src/twisted/spread/test/__init__.py +src/twisted/spread/test/test_banana.py +src/twisted/spread/test/test_jelly.py +src/twisted/spread/test/test_pb.py +src/twisted/spread/test/test_pbfailure.py +src/twisted/tap/__init__.py +src/twisted/tap/ftp.py +src/twisted/tap/portforward.py +src/twisted/tap/socks.py +src/twisted/test/__init__.py +src/twisted/test/cert.pem.no_trailing_newline +src/twisted/test/crash_test_dummy.py +src/twisted/test/iosim.py +src/twisted/test/key.pem.no_trailing_newline +src/twisted/test/mock_win32process.py +src/twisted/test/myrebuilder1.py +src/twisted/test/myrebuilder2.py +src/twisted/test/plugin_basic.py +src/twisted/test/plugin_extra1.py +src/twisted/test/plugin_extra2.py +src/twisted/test/process_cmdline.py +src/twisted/test/process_echoer.py +src/twisted/test/process_fds.py +src/twisted/test/process_getargv.py +src/twisted/test/process_getenv.py +src/twisted/test/process_linger.py +src/twisted/test/process_reader.py +src/twisted/test/process_signal.py +src/twisted/test/process_stdinreader.py +src/twisted/test/process_tester.py +src/twisted/test/process_tty.py +src/twisted/test/process_twisted.py +src/twisted/test/proto_helpers.py +src/twisted/test/raiser.c +src/twisted/test/raiser.pyx +src/twisted/test/reflect_helper_IE.py +src/twisted/test/reflect_helper_VE.py +src/twisted/test/reflect_helper_ZDE.py +src/twisted/test/server.pem +src/twisted/test/ssl_helpers.py +src/twisted/test/stdio_test_consumer.py +src/twisted/test/stdio_test_halfclose.py +src/twisted/test/stdio_test_hostpeer.py +src/twisted/test/stdio_test_lastwrite.py +src/twisted/test/stdio_test_loseconn.py +src/twisted/test/stdio_test_producer.py +src/twisted/test/stdio_test_write.py +src/twisted/test/stdio_test_writeseq.py +src/twisted/test/test_abstract.py +src/twisted/test/test_adbapi.py +src/twisted/test/test_amp.py +src/twisted/test/test_application.py +src/twisted/test/test_compat.py +src/twisted/test/test_context.py +src/twisted/test/test_cooperator.py +src/twisted/test/test_defer.py +src/twisted/test/test_defer.py.3only +src/twisted/test/test_defgen.py +src/twisted/test/test_dict.py +src/twisted/test/test_dirdbm.py +src/twisted/test/test_error.py +src/twisted/test/test_factories.py +src/twisted/test/test_failure.py +src/twisted/test/test_fdesc.py +src/twisted/test/test_finger.py +src/twisted/test/test_formmethod.py +src/twisted/test/test_ftp.py +src/twisted/test/test_ftp_options.py +src/twisted/test/test_hook.py +src/twisted/test/test_htb.py +src/twisted/test/test_ident.py +src/twisted/test/test_internet.py +src/twisted/test/test_iosim.py +src/twisted/test/test_iutils.py +src/twisted/test/test_lockfile.py +src/twisted/test/test_log.py +src/twisted/test/test_logfile.py +src/twisted/test/test_loopback.py +src/twisted/test/test_main.py +src/twisted/test/test_memcache.py +src/twisted/test/test_modules.py +src/twisted/test/test_monkey.py +src/twisted/test/test_nooldstyle.py +src/twisted/test/test_paths.py +src/twisted/test/test_pcp.py +src/twisted/test/test_persisted.py +src/twisted/test/test_plugin.py +src/twisted/test/test_policies.py +src/twisted/test/test_postfix.py +src/twisted/test/test_process.py +src/twisted/test/test_protocols.py +src/twisted/test/test_randbytes.py +src/twisted/test/test_rebuild.py +src/twisted/test/test_reflect.py +src/twisted/test/test_roots.py +src/twisted/test/test_shortcut.py +src/twisted/test/test_sip.py +src/twisted/test/test_sob.py +src/twisted/test/test_socks.py +src/twisted/test/test_ssl.py +src/twisted/test/test_sslverify.py +src/twisted/test/test_stateful.py +src/twisted/test/test_stdio.py +src/twisted/test/test_strerror.py +src/twisted/test/test_strports.py +src/twisted/test/test_task.py +src/twisted/test/test_tcp.py +src/twisted/test/test_tcp_internals.py +src/twisted/test/test_text.py +src/twisted/test/test_threadable.py +src/twisted/test/test_threadpool.py +src/twisted/test/test_threads.py +src/twisted/test/test_tpfile.py +src/twisted/test/test_twistd.py +src/twisted/test/test_twisted.py +src/twisted/test/test_udp.py +src/twisted/test/test_unix.py +src/twisted/test/test_usage.py +src/twisted/test/testutils.py +src/twisted/trial/__init__.py +src/twisted/trial/__main__.py +src/twisted/trial/_asyncrunner.py +src/twisted/trial/_asynctest.py +src/twisted/trial/_synctest.py +src/twisted/trial/itrial.py +src/twisted/trial/reporter.py +src/twisted/trial/runner.py +src/twisted/trial/unittest.py +src/twisted/trial/util.py +src/twisted/trial/_dist/__init__.py +src/twisted/trial/_dist/distreporter.py +src/twisted/trial/_dist/disttrial.py +src/twisted/trial/_dist/managercommands.py +src/twisted/trial/_dist/options.py +src/twisted/trial/_dist/worker.py +src/twisted/trial/_dist/workercommands.py +src/twisted/trial/_dist/workerreporter.py +src/twisted/trial/_dist/workertrial.py +src/twisted/trial/_dist/test/__init__.py +src/twisted/trial/_dist/test/test_distreporter.py +src/twisted/trial/_dist/test/test_disttrial.py +src/twisted/trial/_dist/test/test_options.py +src/twisted/trial/_dist/test/test_worker.py +src/twisted/trial/_dist/test/test_workerreporter.py +src/twisted/trial/_dist/test/test_workertrial.py +src/twisted/trial/test/__init__.py +src/twisted/trial/test/_assertiontests.py.3only +src/twisted/trial/test/detests.py +src/twisted/trial/test/erroneous.py +src/twisted/trial/test/mockcustomsuite.py +src/twisted/trial/test/mockcustomsuite2.py +src/twisted/trial/test/mockcustomsuite3.py +src/twisted/trial/test/mockdoctest.py +src/twisted/trial/test/moduleself.py +src/twisted/trial/test/moduletest.py +src/twisted/trial/test/novars.py +src/twisted/trial/test/ordertests.py +src/twisted/trial/test/packages.py +src/twisted/trial/test/sample.py +src/twisted/trial/test/scripttest.py +src/twisted/trial/test/skipping.py +src/twisted/trial/test/suppression.py +src/twisted/trial/test/test_assertions.py +src/twisted/trial/test/test_asyncassertions.py +src/twisted/trial/test/test_deferred.py +src/twisted/trial/test/test_doctest.py +src/twisted/trial/test/test_keyboard.py +src/twisted/trial/test/test_loader.py +src/twisted/trial/test/test_log.py +src/twisted/trial/test/test_output.py +src/twisted/trial/test/test_plugins.py +src/twisted/trial/test/test_pyunitcompat.py +src/twisted/trial/test/test_reporter.py +src/twisted/trial/test/test_runner.py +src/twisted/trial/test/test_script.py +src/twisted/trial/test/test_suppression.py +src/twisted/trial/test/test_testcase.py +src/twisted/trial/test/test_tests.py +src/twisted/trial/test/test_util.py +src/twisted/trial/test/test_warning.py +src/twisted/trial/test/weird.py +src/twisted/web/__init__.py +src/twisted/web/_element.py +src/twisted/web/_flatten.py +src/twisted/web/_http2.py +src/twisted/web/_newclient.py +src/twisted/web/_responses.py +src/twisted/web/_stan.py +src/twisted/web/client.py +src/twisted/web/demo.py +src/twisted/web/distrib.py +src/twisted/web/domhelpers.py +src/twisted/web/error.py +src/twisted/web/guard.py +src/twisted/web/html.py +src/twisted/web/http.py +src/twisted/web/http_headers.py +src/twisted/web/iweb.py +src/twisted/web/microdom.py +src/twisted/web/proxy.py +src/twisted/web/resource.py +src/twisted/web/rewrite.py +src/twisted/web/script.py +src/twisted/web/server.py +src/twisted/web/soap.py +src/twisted/web/static.py +src/twisted/web/sux.py +src/twisted/web/tap.py +src/twisted/web/template.py +src/twisted/web/twcgi.py +src/twisted/web/util.py +src/twisted/web/vhost.py +src/twisted/web/wsgi.py +src/twisted/web/xmlrpc.py +src/twisted/web/_auth/__init__.py +src/twisted/web/_auth/basic.py +src/twisted/web/_auth/digest.py +src/twisted/web/_auth/wrapper.py +src/twisted/web/test/__init__.py +src/twisted/web/test/_util.py +src/twisted/web/test/injectionhelpers.py +src/twisted/web/test/requesthelper.py +src/twisted/web/test/test_agent.py +src/twisted/web/test/test_cgi.py +src/twisted/web/test/test_client.py +src/twisted/web/test/test_distrib.py +src/twisted/web/test/test_domhelpers.py +src/twisted/web/test/test_error.py +src/twisted/web/test/test_flatten.py +src/twisted/web/test/test_html.py +src/twisted/web/test/test_http.py +src/twisted/web/test/test_http2.py +src/twisted/web/test/test_http_headers.py +src/twisted/web/test/test_httpauth.py +src/twisted/web/test/test_newclient.py +src/twisted/web/test/test_proxy.py +src/twisted/web/test/test_resource.py +src/twisted/web/test/test_script.py +src/twisted/web/test/test_soap.py +src/twisted/web/test/test_stan.py +src/twisted/web/test/test_static.py +src/twisted/web/test/test_tap.py +src/twisted/web/test/test_template.py +src/twisted/web/test/test_util.py +src/twisted/web/test/test_vhost.py +src/twisted/web/test/test_web.py +src/twisted/web/test/test_web__responses.py +src/twisted/web/test/test_webclient.py +src/twisted/web/test/test_wsgi.py +src/twisted/web/test/test_xml.py +src/twisted/web/test/test_xmlrpc.py +src/twisted/words/__init__.py +src/twisted/words/ewords.py +src/twisted/words/iwords.py +src/twisted/words/service.py +src/twisted/words/tap.py +src/twisted/words/xmpproutertap.py +src/twisted/words/im/__init__.py +src/twisted/words/im/baseaccount.py +src/twisted/words/im/basechat.py +src/twisted/words/im/basesupport.py +src/twisted/words/im/instancemessenger.glade +src/twisted/words/im/interfaces.py +src/twisted/words/im/ircsupport.py +src/twisted/words/im/locals.py +src/twisted/words/im/pbsupport.py +src/twisted/words/protocols/__init__.py +src/twisted/words/protocols/irc.py +src/twisted/words/protocols/jabber/__init__.py +src/twisted/words/protocols/jabber/client.py +src/twisted/words/protocols/jabber/component.py +src/twisted/words/protocols/jabber/error.py +src/twisted/words/protocols/jabber/ijabber.py +src/twisted/words/protocols/jabber/jid.py +src/twisted/words/protocols/jabber/jstrports.py +src/twisted/words/protocols/jabber/sasl.py +src/twisted/words/protocols/jabber/sasl_mechanisms.py +src/twisted/words/protocols/jabber/xmlstream.py +src/twisted/words/protocols/jabber/xmpp_stringprep.py +src/twisted/words/test/__init__.py +src/twisted/words/test/test_basechat.py +src/twisted/words/test/test_basesupport.py +src/twisted/words/test/test_domish.py +src/twisted/words/test/test_irc.py +src/twisted/words/test/test_irc_service.py +src/twisted/words/test/test_ircsupport.py +src/twisted/words/test/test_jabberclient.py +src/twisted/words/test/test_jabbercomponent.py +src/twisted/words/test/test_jabbererror.py +src/twisted/words/test/test_jabberjid.py +src/twisted/words/test/test_jabberjstrports.py +src/twisted/words/test/test_jabbersasl.py +src/twisted/words/test/test_jabbersaslmechanisms.py +src/twisted/words/test/test_jabberxmlstream.py +src/twisted/words/test/test_jabberxmppstringprep.py +src/twisted/words/test/test_service.py +src/twisted/words/test/test_tap.py +src/twisted/words/test/test_xishutil.py +src/twisted/words/test/test_xmlstream.py +src/twisted/words/test/test_xmpproutertap.py +src/twisted/words/test/test_xpath.py +src/twisted/words/xish/__init__.py +src/twisted/words/xish/domish.py +src/twisted/words/xish/utility.py +src/twisted/words/xish/xmlstream.py +src/twisted/words/xish/xpath.py +src/twisted/words/xish/xpathparser.g +src/twisted/words/xish/xpathparser.py \ No newline at end of file diff --git a/venv/lib/python3.7/site-packages/Twisted-19.10.0-py3.7.egg-info/dependency_links.txt b/venv/lib/python3.7/site-packages/Twisted-19.10.0-py3.7.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/venv/lib/python3.7/site-packages/Twisted-19.10.0-py3.7.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/venv/lib/python3.7/site-packages/Twisted-19.10.0-py3.7.egg-info/not-zip-safe b/venv/lib/python3.7/site-packages/Twisted-19.10.0-py3.7.egg-info/not-zip-safe new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/venv/lib/python3.7/site-packages/Twisted-19.10.0-py3.7.egg-info/not-zip-safe @@ -0,0 +1 @@ + diff --git a/venv/lib/python3.7/site-packages/Twisted-19.10.0-py3.7.egg-info/top_level.txt b/venv/lib/python3.7/site-packages/Twisted-19.10.0-py3.7.egg-info/top_level.txt new file mode 100644 index 0000000..3eb29f0 --- /dev/null +++ b/venv/lib/python3.7/site-packages/Twisted-19.10.0-py3.7.egg-info/top_level.txt @@ -0,0 +1 @@ +twisted diff --git a/venv/lib/python3.7/site-packages/Werkzeug-0.16.0.dist-info/RECORD b/venv/lib/python3.7/site-packages/Werkzeug-0.16.0.dist-info/RECORD new file mode 100644 index 0000000..cf15483 --- /dev/null +++ b/venv/lib/python3.7/site-packages/Werkzeug-0.16.0.dist-info/RECORD @@ -0,0 +1,119 @@ +werkzeug/__init__.py,sha256=tTlHx8lI6FpqB_X9x_zICTy3Rgikur6yIUJr8AE2XTs,7141 +werkzeug/_compat.py,sha256=oBEVVrJT4sqYdIZbUWmgV9T9w257RhTSDBlTjh0Zbb0,6431 +werkzeug/_internal.py,sha256=Wx7cpTRWqeBd0LAqobo0lCO4pNUW4oav6XKf7Taumgk,14590 +werkzeug/_reloader.py,sha256=I3mg3oRQ0lLzl06oEoVopN3bN7CtINuuUQdqDcmTnEs,11531 +werkzeug/datastructures.py,sha256=yVH4r-XD8CjOo18tDGVJYiAfezng6pK9hWzzLFy5a94,91761 +werkzeug/exceptions.py,sha256=7wl3ufZZU23sASp0ciPe8GJssGND9DX6sDbjxvPuGYU,23437 +werkzeug/filesystem.py,sha256=HzKl-j0Hd8Jl66j778UbPTAYNnY6vUZgYLlBZ0e7uw0,2101 +werkzeug/formparser.py,sha256=Sto0jZid9im9ZVIf56vilCdyX-arK33wSftkYsLCnzo,21788 +werkzeug/http.py,sha256=L6r2ehiorjOtsXITW-01zJsvtVa8Emkpkftu9di_cSk,41628 +werkzeug/local.py,sha256=USVEcgIg-oCiUJFPIecFIW9jkIejfw4Fjf1u5yN-Np4,14456 +werkzeug/posixemulation.py,sha256=gSSiv1SCmOyzOM_nq1ZaZCtxP__C5MeDJl_4yXJmi4Q,3541 +werkzeug/routing.py,sha256=BSgjrYNwj2j5dAHQtK4INEp2TOf4OJP8hBncYSRO2ps,73410 +werkzeug/security.py,sha256=81149MplFq7-hD4RK4sKp9kzXXejjV9D4lWBzaRyeQ8,8106 +werkzeug/serving.py,sha256=qqdsTMILMt_B8ffBtROWK3RRpZeyTkQ9g-jhtpJodrY,36607 +werkzeug/test.py,sha256=Cnb5xa3vLDL0hzFCH1fkG_YRpndViGQgCh4D744iSQk,40645 +werkzeug/testapp.py,sha256=bHekqMsqRfVxwgFbvOMem-DYa_sdB7R47yUXpt1RUTo,9329 +werkzeug/urls.py,sha256=hWZMk4ABiJmQPP_B5rRibWTp9gOyNLQpTqq6cmQAfeE,39322 +werkzeug/useragents.py,sha256=0A_Ip74edPv_hy6CouBTpGumi2uyOci01COuzYFOm3U,5622 +werkzeug/utils.py,sha256=KxCOHhsox7tAVe0m-ZyOGPoCaIbBIy7TxhocaUEHrd4,25050 +werkzeug/wsgi.py,sha256=iXOR9l1fDd2IgqeTRQZPR6LnBBBx7Xsy97_i2n5HPUo,34666 +werkzeug/contrib/__init__.py,sha256=EvNyiiCF49j5P0fZYJ3ZGe82ofXdSBvUNqWFwwBMibQ,553 +werkzeug/contrib/atom.py,sha256=KpPJcTfzNW1J0VNQckCbVtVGBe3V8s451tOUya4qByI,15415 +werkzeug/contrib/cache.py,sha256=AEh5UIw-Ui7sHZnlpvrD7ueOKUhCaAD55FXiPtXbbRs,32115 +werkzeug/contrib/fixers.py,sha256=peEtAiIWYT5bh00EWEPOGKzGZXivOzVhhzKPvvzk1RM,9193 +werkzeug/contrib/iterio.py,sha256=KKHa_8aCF_uhoeQVyPGUwrivuB6y6nNdXYo2D2vzOA8,10928 +werkzeug/contrib/lint.py,sha256=NdIxP0E2kVt1xDIxoaIz3Rcl8ZdgmHaFbGTOaybGpN4,296 +werkzeug/contrib/profiler.py,sha256=k_oMLU-AtsVvQ9TxNdermY6FuzSTYr-WE-ZmWb_DMyU,1229 +werkzeug/contrib/securecookie.py,sha256=xbtElskGmtbiApgOJ5WhGgqGDs_68_PcWzqDIAY_QZY,13076 +werkzeug/contrib/sessions.py,sha256=CkJ4IWvNqIaZCP83FMKYFszKL7E6Y1m6YEii7RaTYWs,13040 +werkzeug/contrib/wrappers.py,sha256=ZmNk0wpzD66yomPnQxapndZQs4c0kNJaRzqI-BVxeQk,13199 +werkzeug/debug/__init__.py,sha256=Bo3HvgTNY4NQ_2jROTSk3r1ScZcT_g_4EnuHTjKyrKM,18275 +werkzeug/debug/console.py,sha256=HoBL21bbcmtiCLqiLDJLZi1LYnWMZxjoXYH5WaZB1XY,5469 +werkzeug/debug/repr.py,sha256=lIwuhbyrMwVe3P_cFqNyqzHL7P93TLKod7lw9clydEw,9621 +werkzeug/debug/tbtools.py,sha256=SkAAA4KKfwsXJinUbf-AEP4GqONTsR4uU7WPUloXcSE,20318 +werkzeug/debug/shared/FONT_LICENSE,sha256=LwAVEI1oYnvXiNMT9SnCH_TaLCxCpeHziDrMg0gPkAI,4673 +werkzeug/debug/shared/console.png,sha256=bxax6RXXlvOij_KeqvSNX0ojJf83YbnZ7my-3Gx9w2A,507 +werkzeug/debug/shared/debugger.js,sha256=rOhqZMRfpZnnu6_XCGn6wMWPhtfwRAcyZKksdIxPJas,6400 +werkzeug/debug/shared/jquery.js,sha256=CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo,88145 +werkzeug/debug/shared/less.png,sha256=-4-kNRaXJSONVLahrQKUxMwXGm9R4OnZ9SxDGpHlIR4,191 +werkzeug/debug/shared/more.png,sha256=GngN7CioHQoV58rH6ojnkYi8c_qED2Aka5FO5UXrReY,200 +werkzeug/debug/shared/source.png,sha256=RoGcBTE4CyCB85GBuDGTFlAnUqxwTBiIfDqW15EpnUQ,818 +werkzeug/debug/shared/style.css,sha256=gZ9uhmb5zj3XLuT9RvnMp6jMINgQ-VVBCp-2AZbG3YQ,6604 +werkzeug/debug/shared/ubuntu.ttf,sha256=1eaHFyepmy4FyDvjLVzpITrGEBu_CZYY94jE0nED1c0,70220 +werkzeug/middleware/__init__.py,sha256=f1SFZo67IlW4k1uqKzNHxYQlsakUS-D6KK_j0e3jjwQ,549 +werkzeug/middleware/dispatcher.py,sha256=_-KoMzHtcISHS7ouWKAOraqlCLprdh83YOAn_8DjLp8,2240 +werkzeug/middleware/http_proxy.py,sha256=lRjTdMmghHiZuZrS7_UJ3gZc-vlFizhBbFZ-XZPLwIA,7117 +werkzeug/middleware/lint.py,sha256=ItTwuWJnflF8xMT1uqU_Ty1ryhux-CjeUfskqaUpxsw,12967 +werkzeug/middleware/profiler.py,sha256=8B_s23d6BGrU_q54gJsm6kcCbOJbTSqrXCsioHON0Xs,4471 +werkzeug/middleware/proxy_fix.py,sha256=1hi6AJH-J2uh2hMm1g0u7XfjRiTOoUeIOOmwWZ2n9t0,8670 +werkzeug/middleware/shared_data.py,sha256=WtSphPrsUdpEk4E-_09CAILhfOBJ1YtcX1LrxcQfIzw,8224 +werkzeug/wrappers/__init__.py,sha256=S4VioKAmF_av9Ec9zQvG71X1EOkYfPx1TYck9jyDiyY,1384 +werkzeug/wrappers/accept.py,sha256=TIvjUc0g73fhTWX54wg_D9NNzKvpnG1X8u1w26tK1o8,1760 +werkzeug/wrappers/auth.py,sha256=Pmn6iaGHBrUyHbJpW0lZhO_q9RVoAa5QalaTqcavdAI,1158 +werkzeug/wrappers/base_request.py,sha256=aknREwqVT7WJUxm4weUGdBj90H6rDR3DvsIvmYhaC8A,26943 +werkzeug/wrappers/base_response.py,sha256=ZA1XlxtsbvG4SpbdOEMT5--z7aZM0w6C5y33W8wOXa4,27906 +werkzeug/wrappers/common_descriptors.py,sha256=OJ8jOwMun4L-BxCuFPkK1vaefx_-Y5IndVXvvn_ems4,12089 +werkzeug/wrappers/etag.py,sha256=TwMO1fvluXbBqnFTj2DvrCNa3mYhbHYe1UZAVzfXvuU,12533 +werkzeug/wrappers/json.py,sha256=HvK_A4NpO0sLqgb10sTJcoZydYOwyNiPCJPV7SVgcgE,4343 +werkzeug/wrappers/request.py,sha256=qPo2zmmBv4HxboywtWZb2pJL8OPXo07BUXBKw2j9Fi8,1338 +werkzeug/wrappers/response.py,sha256=vDZFEGzDOG0jjmS0uVVjeT3hqRt1hFaf15npnx7RD28,2329 +werkzeug/wrappers/user_agent.py,sha256=YJb-vr12cujG7sQMG9V89VsJa-03SWSenhg1W4cT0EY,435 +Werkzeug-0.16.0.dist-info/LICENSE.rst,sha256=O0nc7kEF6ze6wQ-vG-JgQI_oXSUrjp3y4JefweCUQ3s,1475 +Werkzeug-0.16.0.dist-info/METADATA,sha256=BH9_q8z1IK2FbYDS7tSWLsd07z7GDReBgRumclV7T08,4712 +Werkzeug-0.16.0.dist-info/WHEEL,sha256=8zNYZbwQSXoB9IfXOjPfeNwvAsALAjffgk27FqvCWbo,110 +Werkzeug-0.16.0.dist-info/top_level.txt,sha256=QRyj2VjwJoQkrwjwFIOlB8Xg3r9un0NtqVHQF-15xaw,9 +Werkzeug-0.16.0.dist-info/RECORD,, +Werkzeug-0.16.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +werkzeug/middleware/__pycache__/http_proxy.cpython-37.pyc,, +werkzeug/middleware/__pycache__/lint.cpython-37.pyc,, +werkzeug/middleware/__pycache__/dispatcher.cpython-37.pyc,, +werkzeug/middleware/__pycache__/profiler.cpython-37.pyc,, +werkzeug/middleware/__pycache__/shared_data.cpython-37.pyc,, +werkzeug/middleware/__pycache__/proxy_fix.cpython-37.pyc,, +werkzeug/middleware/__pycache__/__init__.cpython-37.pyc,, +werkzeug/wrappers/__pycache__/response.cpython-37.pyc,, +werkzeug/wrappers/__pycache__/base_response.cpython-37.pyc,, +werkzeug/wrappers/__pycache__/request.cpython-37.pyc,, +werkzeug/wrappers/__pycache__/base_request.cpython-37.pyc,, +werkzeug/wrappers/__pycache__/auth.cpython-37.pyc,, +werkzeug/wrappers/__pycache__/user_agent.cpython-37.pyc,, +werkzeug/wrappers/__pycache__/etag.cpython-37.pyc,, +werkzeug/wrappers/__pycache__/json.cpython-37.pyc,, +werkzeug/wrappers/__pycache__/__init__.cpython-37.pyc,, +werkzeug/wrappers/__pycache__/common_descriptors.cpython-37.pyc,, +werkzeug/wrappers/__pycache__/accept.cpython-37.pyc,, +werkzeug/__pycache__/posixemulation.cpython-37.pyc,, +werkzeug/__pycache__/datastructures.cpython-37.pyc,, +werkzeug/__pycache__/exceptions.cpython-37.pyc,, +werkzeug/__pycache__/useragents.cpython-37.pyc,, +werkzeug/__pycache__/filesystem.cpython-37.pyc,, +werkzeug/__pycache__/serving.cpython-37.pyc,, +werkzeug/__pycache__/_internal.cpython-37.pyc,, +werkzeug/__pycache__/security.cpython-37.pyc,, +werkzeug/__pycache__/_compat.cpython-37.pyc,, +werkzeug/__pycache__/testapp.cpython-37.pyc,, +werkzeug/__pycache__/local.cpython-37.pyc,, +werkzeug/__pycache__/_reloader.cpython-37.pyc,, +werkzeug/__pycache__/routing.cpython-37.pyc,, +werkzeug/__pycache__/wsgi.cpython-37.pyc,, +werkzeug/__pycache__/utils.cpython-37.pyc,, +werkzeug/__pycache__/http.cpython-37.pyc,, +werkzeug/__pycache__/formparser.cpython-37.pyc,, +werkzeug/__pycache__/urls.cpython-37.pyc,, +werkzeug/__pycache__/test.cpython-37.pyc,, +werkzeug/__pycache__/__init__.cpython-37.pyc,, +werkzeug/contrib/__pycache__/sessions.cpython-37.pyc,, +werkzeug/contrib/__pycache__/lint.cpython-37.pyc,, +werkzeug/contrib/__pycache__/iterio.cpython-37.pyc,, +werkzeug/contrib/__pycache__/profiler.cpython-37.pyc,, +werkzeug/contrib/__pycache__/fixers.cpython-37.pyc,, +werkzeug/contrib/__pycache__/securecookie.cpython-37.pyc,, +werkzeug/contrib/__pycache__/cache.cpython-37.pyc,, +werkzeug/contrib/__pycache__/wrappers.cpython-37.pyc,, +werkzeug/contrib/__pycache__/__init__.cpython-37.pyc,, +werkzeug/contrib/__pycache__/atom.cpython-37.pyc,, +werkzeug/debug/__pycache__/repr.cpython-37.pyc,, +werkzeug/debug/__pycache__/console.cpython-37.pyc,, +werkzeug/debug/__pycache__/tbtools.cpython-37.pyc,, +werkzeug/debug/__pycache__/__init__.cpython-37.pyc,, diff --git a/venv/lib/python3.7/site-packages/Werkzeug-0.16.0.dist-info/WHEEL b/venv/lib/python3.7/site-packages/Werkzeug-0.16.0.dist-info/WHEEL new file mode 100644 index 0000000..8b701e9 --- /dev/null +++ b/venv/lib/python3.7/site-packages/Werkzeug-0.16.0.dist-info/WHEEL @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.33.6) +Root-Is-Purelib: true +Tag: py2-none-any +Tag: py3-none-any + diff --git a/venv/lib/python3.7/site-packages/asgiref-3.2.3.dist-info/LICENSE b/venv/lib/python3.7/site-packages/asgiref-3.2.3.dist-info/LICENSE new file mode 100644 index 0000000..5f4f225 --- /dev/null +++ b/venv/lib/python3.7/site-packages/asgiref-3.2.3.dist-info/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) Django Software Foundation and 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 Django 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.7/site-packages/asgiref-3.2.3.dist-info/METADATA b/venv/lib/python3.7/site-packages/asgiref-3.2.3.dist-info/METADATA new file mode 100644 index 0000000..1a039bc --- /dev/null +++ b/venv/lib/python3.7/site-packages/asgiref-3.2.3.dist-info/METADATA @@ -0,0 +1,225 @@ +Metadata-Version: 2.1 +Name: asgiref +Version: 3.2.3 +Summary: ASGI specs, helper code, and adapters +Home-page: http://github.com/django/asgiref/ +Author: Django Software Foundation +Author-email: foundation@djangoproject.com +License: BSD +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Environment :: Web Environment +Classifier: Intended Audience :: Developers +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.5 +Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Topic :: Internet :: WWW/HTTP +Description-Content-Type: text/x-rst +Provides-Extra: tests +Requires-Dist: pytest (~=4.3.0) ; extra == 'tests' +Requires-Dist: pytest-asyncio (~=0.10.0) ; extra == 'tests' + +asgiref +======= + +.. image:: https://api.travis-ci.org/django/asgiref.svg + :target: https://travis-ci.org/django/asgiref + +.. image:: https://img.shields.io/pypi/v/asgiref.svg + :target: https://pypi.python.org/pypi/asgiref + +ASGI is a standard for Python asynchronous web apps and servers to communicate +with each other, and positioned as an asynchronous successor to WSGI. You can +read more at https://asgi.readthedocs.io/en/latest/ + +This package includes ASGI base libraries, such as: + +* Sync-to-async and async-to-sync function wrappers, ``asgiref.sync`` +* Server base classes, ``asgiref.server`` +* A WSGI-to-ASGI adapter, in ``asgiref.wsgi`` + + +Function wrappers +----------------- + +These allow you to wrap or decorate async or sync functions to call them from +the other style (so you can call async functions from a synchronous thread, +or vice-versa). + +In particular: + +* AsyncToSync lets a synchronous subthread stop and wait while the async + function is called on the main thread's event loop, and then control is + returned to the thread when the async function is finished. + +* SyncToAsync lets async code call a synchronous function, which is run in + a threadpool and control returned to the async coroutine when the synchronous + function completes. + +The idea is to make it easier to call synchronous APIs from async code and +asynchronous APIs from synchronous code so it's easier to transition code from +one style to the other. In the case of Channels, we wrap the (synchronous) +Django view system with SyncToAsync to allow it to run inside the (asynchronous) +ASGI server. + +Note that exactly what threads things run in is very specific, and aimed to +keep maximum compatibility with old synchronous code. See +"Synchronous code & Threads" below for a full explanation. + + +Threadlocal replacement +----------------------- + +This is a drop-in replacement for ``threading.local`` that works with both +threads and asyncio Tasks. Even better, it will proxy values through from a +task-local context to a thread-local context when you use ``sync_to_async`` +to run things in a threadpool, and vice-versa for ``async_to_sync``. + +If you instead want true thread- and task-safety, you can set +``thread_critical`` on the Local object to ensure this instead. + + +Server base classes +------------------- + +Includes a ``StatelessServer`` class which provides all the hard work of +writing a stateless server (as in, does not handle direct incoming sockets +but instead consumes external streams or sockets to work out what is happening). + +An example of such a server would be a chatbot server that connects out to +a central chat server and provides a "connection scope" per user chatting to +it. There's only one actual connection, but the server has to separate things +into several scopes for easier writing of the code. + +You can see an example of this being used in `frequensgi `_. + + +WSGI-to-ASGI adapter +-------------------- + +Allows you to wrap a WSGI application so it appears as a valid ASGI application. + +Simply wrap it around your WSGI application like so:: + + asgi_application = WsgiToAsgi(wsgi_application) + +The WSGI application will be run in a synchronous threadpool, and the wrapped +ASGI application will be one that accepts ``http`` class messages. + +Please note that not all extended features of WSGI may be supported (such as +file handles for incoming POST bodies). + + +Dependencies +------------ + +``asgiref`` requires Python 3.5 or higher. + + +Contributing +------------ + +Please refer to the +`main Channels contributing docs `_. + + +Testing +''''''' + +To run tests, make sure you have installed the ``tests`` extra with the package:: + + cd asgiref/ + pip install -e .[tests] + pytest + + +Building the documentation +'''''''''''''''''''''''''' + +The documentation uses `Sphinx `_:: + + cd asgiref/docs/ + pip install sphinx + +To build the docs, you can use the default tools:: + + sphinx-build -b html . _build/html # or `make html`, if you've got make set up + cd _build/html + python -m http.server + +...or you can use ``sphinx-autobuild`` to run a server and rebuild/reload +your documentation changes automatically:: + + pip install sphinx-autobuild + sphinx-autobuild . _build/html + + +Implementation Details +---------------------- + +Synchronous code & threads +'''''''''''''''''''''''''' + +The ``asgiref.sync`` module provides two wrappers that let you go between +asynchronous and synchronous code at will, while taking care of the rough edges +for you. + +Unfortunately, the rough edges are numerous, and the code has to work especially +hard to keep things in the same thread as much as possible. Notably, the +restrictions we are working with are: + +* All synchronous code called through ``SyncToAsync`` and marked with + ``thread_sensitive`` should run in the same thread as each other (and if the + outer layer of the program is synchronous, the main thread) + +* If a thread already has a running async loop, ``AsyncToSync`` can't run things + on that loop if it's blocked on synchronous code that is above you in the + call stack. + +The first compromise you get to might be that ``thread_sensitive`` code should +just run in the same thread and not spawn in a sub-thread, fulfilling the first +restriction, but that immediately runs you into the second restriction. + +The only real solution is to essentially have a variant of ThreadPoolExecutor +that executes any ``thread_sensitive`` code on the outermost synchronous +thread - either the main thread, or a single spawned subthread. + +This means you now have two basic states: + +* If the outermost layer of your program is synchronous, then all async code + run through ``AsyncToSync`` will run in a per-call event loop in arbitary + sub-threads, while all ``thread_sensitive`` code will run in the main thread. + +* If the outermost layer of your program is asynchronous, then all async code + runs on the main thread's event loop, and all ``thread_sensitive`` synchronous + code will run in a single shared sub-thread. + +Cruicially, this means that in both cases there is a thread which is a shared +resource that all ``thread_sensitive`` code must run on, and there is a chance +that this thread is currently blocked on its own ``AsyncToSync`` call. Thus, +``AsyncToSync`` needs to act as an executor for thread code while it's blocking. + +The ``CurrentThreadExecutor`` class provides this functionality; rather than +simply waiting on a Future, you can call its ``run_until_future`` method and +it will run submitted code until that Future is done. This means that code +inside the call can then run code on your thread. + + +Maintenance and Security +------------------------ + +To report security issues, please contact security@djangoproject.com. For GPG +signatures and more security process information, see +https://docs.djangoproject.com/en/dev/internals/security/. + +To report bugs or request new features, please open a new GitHub issue. + +This repository is part of the Channels project. For the shepherd and maintenance team, please see the +`main Channels readme `_. + + diff --git a/venv/lib/python3.7/site-packages/asgiref/current_thread_executor.py b/venv/lib/python3.7/site-packages/asgiref/current_thread_executor.py new file mode 100644 index 0000000..2955ff0 --- /dev/null +++ b/venv/lib/python3.7/site-packages/asgiref/current_thread_executor.py @@ -0,0 +1,86 @@ +import queue +import threading +import time +from concurrent.futures import Executor, Future + + +class _WorkItem(object): + """ + Represents an item needing to be run in the executor. + Copied from ThreadPoolExecutor (but it's private, so we're not going to rely on importing it) + """ + + def __init__(self, future, fn, args, kwargs): + self.future = future + self.fn = fn + self.args = args + self.kwargs = kwargs + + def run(self): + if not self.future.set_running_or_notify_cancel(): + return + try: + result = self.fn(*self.args, **self.kwargs) + except BaseException as exc: + self.future.set_exception(exc) + # Break a reference cycle with the exception 'exc' + self = None + else: + self.future.set_result(result) + + +class CurrentThreadExecutor(Executor): + """ + An Executor that actually runs code in the thread it is instantiated in. + Passed to other threads running async code, so they can run sync code in + the thread they came from. + """ + + def __init__(self): + self._work_thread = threading.current_thread() + self._work_queue = queue.Queue() + self._broken = False + + def run_until_future(self, future): + """ + Runs the code in the work queue until a result is available from the future. + Should be run from the thread the executor is initialised in. + """ + # Check we're in the right thread + if threading.current_thread() != self._work_thread: + raise RuntimeError( + "You cannot run CurrentThreadExecutor from a different thread" + ) + # Keep getting work items and checking the future + try: + while True: + # Get a work item and run it + try: + work_item = self._work_queue.get(block=False) + except queue.Empty: + # See if the future is done (we only exit if the work queue is empty) + if future.done(): + return + # Prevent hot-looping on nothing + time.sleep(0.001) + else: + work_item.run() + del work_item + finally: + self._broken = True + + def submit(self, fn, *args, **kwargs): + # Check they're not submitting from the same thread + if threading.current_thread() == self._work_thread: + raise RuntimeError( + "You cannot submit onto CurrentThreadExecutor from its own thread" + ) + # Check they're not too late or the executor errored + if self._broken: + raise RuntimeError("CurrentThreadExecutor already quit or is broken") + # Add to work queue + f = Future() + work_item = _WorkItem(f, fn, args, kwargs) + self._work_queue.put(work_item) + # Return the future + return f diff --git a/venv/lib/python3.7/site-packages/asgiref/server.py b/venv/lib/python3.7/site-packages/asgiref/server.py new file mode 100644 index 0000000..9fd2e0c --- /dev/null +++ b/venv/lib/python3.7/site-packages/asgiref/server.py @@ -0,0 +1,154 @@ +import asyncio +import logging +import time +import traceback + +logger = logging.getLogger(__name__) + + +class StatelessServer: + """ + Base server class that handles basic concepts like application instance + creation/pooling, exception handling, and similar, for stateless protocols + (i.e. ones without actual incoming connections to the process) + + Your code should override the handle() method, doing whatever it needs to, + and calling get_or_create_application_instance with a unique `scope_id` + and `scope` for the scope it wants to get. + + If an application instance is found with the same `scope_id`, you are + given its input queue, otherwise one is made for you with the scope provided + and you are given that fresh new input queue. Either way, you should do + something like: + + input_queue = self.get_or_create_application_instance( + "user-123456", + {"type": "testprotocol", "user_id": "123456", "username": "andrew"}, + ) + input_queue.put_nowait(message) + + If you try and create an application instance and there are already + `max_application` instances, the oldest/least recently used one will be + reclaimed and shut down to make space. + + Application coroutines that error will be found periodically (every 100ms + by default) and have their exceptions printed to the console. Override + application_exception() if you want to do more when this happens. + + If you override run(), make sure you handle things like launching the + application checker. + """ + + application_checker_interval = 0.1 + + def __init__(self, application, max_applications=1000): + # Parameters + self.application = application + self.max_applications = max_applications + # Initialisation + self.application_instances = {} + + ### Mainloop and handling + + def run(self): + """ + Runs the asyncio event loop with our handler loop. + """ + event_loop = asyncio.get_event_loop() + asyncio.ensure_future(self.application_checker()) + try: + event_loop.run_until_complete(self.handle()) + except KeyboardInterrupt: + logger.info("Exiting due to Ctrl-C/interrupt") + + async def handle(self): + raise NotImplementedError("You must implement handle()") + + async def application_send(self, scope, message): + """ + Receives outbound sends from applications and handles them. + """ + raise NotImplementedError("You must implement application_send()") + + ### Application instance management + + def get_or_create_application_instance(self, scope_id, scope): + """ + Creates an application instance and returns its queue. + """ + if scope_id in self.application_instances: + self.application_instances[scope_id]["last_used"] = time.time() + return self.application_instances[scope_id]["input_queue"] + # See if we need to delete an old one + while len(self.application_instances) > self.max_applications: + self.delete_oldest_application_instance() + # Make an instance of the application + input_queue = asyncio.Queue() + application_instance = self.application(scope=scope) + # Run it, and stash the future for later checking + future = asyncio.ensure_future( + application_instance( + receive=input_queue.get, + send=lambda message: self.application_send(scope, message), + ) + ) + self.application_instances[scope_id] = { + "input_queue": input_queue, + "future": future, + "scope": scope, + "last_used": time.time(), + } + return input_queue + + def delete_oldest_application_instance(self): + """ + Finds and deletes the oldest application instance + """ + oldest_time = min( + details["last_used"] for details in self.application_instances.values() + ) + for scope_id, details in self.application_instances.items(): + if details["last_used"] == oldest_time: + self.delete_application_instance(scope_id) + # Return to make sure we only delete one in case two have + # the same oldest time + return + + def delete_application_instance(self, scope_id): + """ + Removes an application instance (makes sure its task is stopped, + then removes it from the current set) + """ + details = self.application_instances[scope_id] + del self.application_instances[scope_id] + if not details["future"].done(): + details["future"].cancel() + + async def application_checker(self): + """ + Goes through the set of current application instance Futures and cleans up + any that are done/prints exceptions for any that errored. + """ + while True: + await asyncio.sleep(self.application_checker_interval) + for scope_id, details in list(self.application_instances.items()): + if details["future"].done(): + exception = details["future"].exception() + if exception: + await self.application_exception(exception, details) + try: + del self.application_instances[scope_id] + except KeyError: + # Exception handling might have already got here before us. That's fine. + pass + + async def application_exception(self, exception, application_details): + """ + Called whenever an application coroutine has an exception. + """ + logging.error( + "Exception inside application: %s\n%s%s", + exception, + "".join(traceback.format_tb(exception.__traceback__)), + " {}".format(exception), + ) diff --git a/venv/lib/python3.7/site-packages/asgiref/sync.py b/venv/lib/python3.7/site-packages/asgiref/sync.py new file mode 100644 index 0000000..53f1900 --- /dev/null +++ b/venv/lib/python3.7/site-packages/asgiref/sync.py @@ -0,0 +1,304 @@ +import asyncio +import asyncio.coroutines +import functools +import os +import sys +import threading +from concurrent.futures import Future, ThreadPoolExecutor + +from .current_thread_executor import CurrentThreadExecutor +from .local import Local + +try: + import contextvars # Python 3.7+ only. +except ImportError: + contextvars = None + + +class AsyncToSync: + """ + Utility class which turns an awaitable that only works on the thread with + the event loop into a synchronous callable that works in a subthread. + + If the call stack contains an async loop, the code runs there. + Otherwise, the code runs in a new loop in a new thread. + + Either way, this thread then pauses and waits to run any thread_sensitive + code called from further down the call stack using SyncToAsync, before + finally exiting once the async task returns. + """ + + # Maps launched Tasks to the threads that launched them (for locals impl) + launch_map = {} + + # Keeps track of which CurrentThreadExecutor to use. This uses an asgiref + # Local, not a threadlocal, so that tasks can work out what their parent used. + executors = Local() + + def __init__(self, awaitable, force_new_loop=False): + self.awaitable = awaitable + if force_new_loop: + # They have asked that we always run in a new sub-loop. + self.main_event_loop = None + else: + try: + self.main_event_loop = asyncio.get_event_loop() + except RuntimeError: + # There's no event loop in this thread. Look for the threadlocal if + # we're inside SyncToAsync + self.main_event_loop = getattr( + SyncToAsync.threadlocal, "main_event_loop", None + ) + + def __call__(self, *args, **kwargs): + # You can't call AsyncToSync from a thread with a running event loop + try: + event_loop = asyncio.get_event_loop() + except RuntimeError: + pass + else: + if event_loop.is_running(): + raise RuntimeError( + "You cannot use AsyncToSync in the same thread as an async event loop - " + "just await the async function directly." + ) + # Make a future for the return information + call_result = Future() + # Get the source thread + source_thread = threading.current_thread() + # Make a CurrentThreadExecutor we'll use to idle in this thread - we + # need one for every sync frame, even if there's one above us in the + # same thread. + if hasattr(self.executors, "current"): + old_current_executor = self.executors.current + else: + old_current_executor = None + current_executor = CurrentThreadExecutor() + self.executors.current = current_executor + # Use call_soon_threadsafe to schedule a synchronous callback on the + # main event loop's thread if it's there, otherwise make a new loop + # in this thread. + try: + if not (self.main_event_loop and self.main_event_loop.is_running()): + # Make our own event loop - in a new thread - and run inside that. + loop = asyncio.new_event_loop() + loop_executor = ThreadPoolExecutor(max_workers=1) + loop_future = loop_executor.submit( + self._run_event_loop, + loop, + self.main_wrap( + args, kwargs, call_result, source_thread, sys.exc_info() + ), + ) + if current_executor: + # Run the CurrentThreadExecutor until the future is done + current_executor.run_until_future(loop_future) + # Wait for future and/or allow for exception propagation + loop_future.result() + else: + # Call it inside the existing loop + self.main_event_loop.call_soon_threadsafe( + self.main_event_loop.create_task, + self.main_wrap( + args, kwargs, call_result, source_thread, sys.exc_info() + ), + ) + if current_executor: + # Run the CurrentThreadExecutor until the future is done + current_executor.run_until_future(call_result) + finally: + # Clean up any executor we were running + if hasattr(self.executors, "current"): + del self.executors.current + if old_current_executor: + self.executors.current = old_current_executor + # Wait for results from the future. + return call_result.result() + + def _run_event_loop(self, loop, coro): + """ + Runs the given event loop (designed to be called in a thread). + """ + asyncio.set_event_loop(loop) + try: + loop.run_until_complete(coro) + finally: + try: + if hasattr(loop, "shutdown_asyncgens"): + loop.run_until_complete(loop.shutdown_asyncgens()) + finally: + loop.close() + asyncio.set_event_loop(self.main_event_loop) + + def __get__(self, parent, objtype): + """ + Include self for methods + """ + func = functools.partial(self.__call__, parent) + return functools.update_wrapper(func, self.awaitable) + + async def main_wrap(self, args, kwargs, call_result, source_thread, exc_info): + """ + Wraps the awaitable with something that puts the result into the + result/exception future. + """ + current_task = SyncToAsync.get_current_task() + self.launch_map[current_task] = source_thread + try: + # If we have an exception, run the function inside the except block + # after raising it so exc_info is correctly populated. + if exc_info[1]: + try: + raise exc_info[1] + except: + result = await self.awaitable(*args, **kwargs) + else: + result = await self.awaitable(*args, **kwargs) + except Exception as e: + call_result.set_exception(e) + else: + call_result.set_result(result) + finally: + del self.launch_map[current_task] + + +class SyncToAsync: + """ + Utility class which turns a synchronous callable into an awaitable that + runs in a threadpool. It also sets a threadlocal inside the thread so + calls to AsyncToSync can escape it. + + If thread_sensitive is passed, the code will run in the same thread as any + outer code. This is needed for underlying Python code that is not + threadsafe (for example, code which handles SQLite database connections). + + If the outermost program is async (i.e. SyncToAsync is outermost), then + this will be a dedicated single sub-thread that all sync code runs in, + one after the other. If the outermost program is sync (i.e. AsyncToSync is + outermost), this will just be the main thread. This is achieved by idling + with a CurrentThreadExecutor while AsyncToSync is blocking its sync parent, + rather than just blocking. + """ + + # If they've set ASGI_THREADS, update the default asyncio executor for now + if "ASGI_THREADS" in os.environ: + loop = asyncio.get_event_loop() + loop.set_default_executor( + ThreadPoolExecutor(max_workers=int(os.environ["ASGI_THREADS"])) + ) + + # Maps launched threads to the coroutines that spawned them + launch_map = {} + + # Storage for main event loop references + threadlocal = threading.local() + + # Single-thread executor for thread-sensitive code + single_thread_executor = ThreadPoolExecutor(max_workers=1) + + def __init__(self, func, thread_sensitive=False): + self.func = func + self._thread_sensitive = thread_sensitive + self._is_coroutine = asyncio.coroutines._is_coroutine + try: + self.__self__ = func.__self__ + except AttributeError: + pass + + async def __call__(self, *args, **kwargs): + loop = asyncio.get_event_loop() + + # Work out what thread to run the code in + if self._thread_sensitive: + if hasattr(AsyncToSync.executors, "current"): + # If we have a parent sync thread above somewhere, use that + executor = AsyncToSync.executors.current + else: + # Otherwise, we run it in a fixed single thread + executor = self.single_thread_executor + else: + executor = None # Use default + + if contextvars is not None: + context = contextvars.copy_context() + child = functools.partial(self.func, *args, **kwargs) + func = context.run + args = (child,) + kwargs = {} + else: + func = self.func + + # Run the code in the right thread + future = loop.run_in_executor( + executor, + functools.partial( + self.thread_handler, + loop, + self.get_current_task(), + sys.exc_info(), + func, + *args, + **kwargs + ), + ) + return await asyncio.wait_for(future, timeout=None) + + def __get__(self, parent, objtype): + """ + Include self for methods + """ + return functools.partial(self.__call__, parent) + + def thread_handler(self, loop, source_task, exc_info, func, *args, **kwargs): + """ + Wraps the sync application with exception handling. + """ + # Set the threadlocal for AsyncToSync + self.threadlocal.main_event_loop = loop + # Set the task mapping (used for the locals module) + current_thread = threading.current_thread() + if AsyncToSync.launch_map.get(source_task) == current_thread: + # Our parent task was launched from this same thread, so don't make + # a launch map entry - let it shortcut over us! (and stop infinite loops) + parent_set = False + else: + self.launch_map[current_thread] = source_task + parent_set = True + # Run the function + try: + # If we have an exception, run the function inside the except block + # after raising it so exc_info is correctly populated. + if exc_info[1]: + try: + raise exc_info[1] + except: + return func(*args, **kwargs) + else: + return func(*args, **kwargs) + finally: + # Only delete the launch_map parent if we set it, otherwise it is + # from someone else. + if parent_set: + del self.launch_map[current_thread] + + @staticmethod + def get_current_task(): + """ + Cross-version implementation of asyncio.current_task() + + Returns None if there is no task. + """ + try: + if hasattr(asyncio, "current_task"): + # Python 3.7 and up + return asyncio.current_task() + else: + # Python 3.6 + return asyncio.Task.current_task() + except RuntimeError: + return None + + +# Lowercase is more sensible for most things +sync_to_async = SyncToAsync +async_to_sync = AsyncToSync diff --git a/venv/lib/python3.7/site-packages/asgiref/timeout.py b/venv/lib/python3.7/site-packages/asgiref/timeout.py new file mode 100644 index 0000000..0ff5892 --- /dev/null +++ b/venv/lib/python3.7/site-packages/asgiref/timeout.py @@ -0,0 +1,128 @@ +# This code is originally sourced from the aio-libs project "async_timeout", +# under the Apache 2.0 license. You may see the original project at +# https://github.com/aio-libs/async-timeout + +# It is vendored here to reduce chain-dependencies on this library, and +# modified slightly to remove some features we don't use. + + +import asyncio +import sys +from types import TracebackType +from typing import Any, Optional, Type # noqa + +PY_37 = sys.version_info >= (3, 7) + + +class timeout: + """timeout context manager. + + Useful in cases when you want to apply timeout logic around block + of code or in cases when asyncio.wait_for is not suitable. For example: + + >>> with timeout(0.001): + ... async with aiohttp.get('https://github.com') as r: + ... await r.text() + + + timeout - value in seconds or None to disable timeout logic + loop - asyncio compatible event loop + """ + + def __init__( + self, + timeout: Optional[float], + *, + loop: Optional[asyncio.AbstractEventLoop] = None + ) -> None: + self._timeout = timeout + if loop is None: + loop = asyncio.get_event_loop() + self._loop = loop + self._task = None # type: Optional[asyncio.Task[Any]] + self._cancelled = False + self._cancel_handler = None # type: Optional[asyncio.Handle] + self._cancel_at = None # type: Optional[float] + + def __enter__(self) -> "timeout": + return self._do_enter() + + def __exit__( + self, + exc_type: Type[BaseException], + exc_val: BaseException, + exc_tb: TracebackType, + ) -> Optional[bool]: + self._do_exit(exc_type) + return None + + async def __aenter__(self) -> "timeout": + return self._do_enter() + + async def __aexit__( + self, + exc_type: Type[BaseException], + exc_val: BaseException, + exc_tb: TracebackType, + ) -> None: + self._do_exit(exc_type) + + @property + def expired(self) -> bool: + return self._cancelled + + @property + def remaining(self) -> Optional[float]: + if self._cancel_at is not None: + return max(self._cancel_at - self._loop.time(), 0.0) + else: + return None + + def _do_enter(self) -> "timeout": + # Support Tornado 5- without timeout + # Details: https://github.com/python/asyncio/issues/392 + if self._timeout is None: + return self + + self._task = current_task(self._loop) + if self._task is None: + raise RuntimeError( + "Timeout context manager should be used " "inside a task" + ) + + if self._timeout <= 0: + self._loop.call_soon(self._cancel_task) + return self + + self._cancel_at = self._loop.time() + self._timeout + self._cancel_handler = self._loop.call_at(self._cancel_at, self._cancel_task) + return self + + def _do_exit(self, exc_type: Type[BaseException]) -> None: + if exc_type is asyncio.CancelledError and self._cancelled: + self._cancel_handler = None + self._task = None + raise asyncio.TimeoutError + if self._timeout is not None and self._cancel_handler is not None: + self._cancel_handler.cancel() + self._cancel_handler = None + self._task = None + return None + + def _cancel_task(self) -> None: + if self._task is not None: + self._task.cancel() + self._cancelled = True + + +def current_task(loop: asyncio.AbstractEventLoop) -> "asyncio.Task[Any]": + if PY_37: + task = asyncio.current_task(loop=loop) # type: ignore + else: + task = asyncio.Task.current_task(loop=loop) + if task is None: + # this should be removed, tokio must use register_task and family API + if hasattr(loop, "current_task"): + task = loop.current_task() # type: ignore + + return task diff --git a/venv/lib/python3.7/site-packages/attr/__init__.pyi b/venv/lib/python3.7/site-packages/attr/__init__.pyi new file mode 100644 index 0000000..38f16f0 --- /dev/null +++ b/venv/lib/python3.7/site-packages/attr/__init__.pyi @@ -0,0 +1,278 @@ +from typing import ( + Any, + Callable, + Dict, + Generic, + List, + Optional, + Sequence, + Mapping, + Tuple, + Type, + TypeVar, + Union, + overload, +) + +# `import X as X` is required to make these public +from . import exceptions as exceptions +from . import filters as filters +from . import converters as converters +from . import validators as validators + +from ._version_info import VersionInfo + +__version__: str +__version_info__: VersionInfo +__title__: str +__description__: str +__url__: str +__uri__: str +__author__: str +__email__: str +__license__: str +__copyright__: str + +_T = TypeVar("_T") +_C = TypeVar("_C", bound=type) + +_ValidatorType = Callable[[Any, Attribute[_T], _T], Any] +_ConverterType = Callable[[Any], _T] +_FilterType = Callable[[Attribute[_T], _T], bool] +_ReprType = Callable[[Any], str] +_ReprArgType = Union[bool, _ReprType] +# FIXME: in reality, if multiple validators are passed they must be in a list or tuple, +# but those are invariant and so would prevent subtypes of _ValidatorType from working +# when passed in a list or tuple. +_ValidatorArgType = Union[_ValidatorType[_T], Sequence[_ValidatorType[_T]]] + +# _make -- + +NOTHING: object + +# NOTE: Factory lies about its return type to make this possible: `x: List[int] = Factory(list)` +# Work around mypy issue #4554 in the common case by using an overload. +@overload +def Factory(factory: Callable[[], _T]) -> _T: ... +@overload +def Factory( + factory: Union[Callable[[Any], _T], Callable[[], _T]], + takes_self: bool = ..., +) -> _T: ... + +class Attribute(Generic[_T]): + name: str + default: Optional[_T] + validator: Optional[_ValidatorType[_T]] + repr: _ReprArgType + cmp: bool + eq: bool + order: bool + hash: Optional[bool] + init: bool + converter: Optional[_ConverterType[_T]] + metadata: Dict[Any, Any] + type: Optional[Type[_T]] + kw_only: bool + +# NOTE: We had several choices for the annotation to use for type arg: +# 1) Type[_T] +# - Pros: Handles simple cases correctly +# - Cons: Might produce less informative errors in the case of conflicting TypeVars +# e.g. `attr.ib(default='bad', type=int)` +# 2) Callable[..., _T] +# - Pros: Better error messages than #1 for conflicting TypeVars +# - Cons: Terrible error messages for validator checks. +# e.g. attr.ib(type=int, validator=validate_str) +# -> error: Cannot infer function type argument +# 3) type (and do all of the work in the mypy plugin) +# - Pros: Simple here, and we could customize the plugin with our own errors. +# - Cons: Would need to write mypy plugin code to handle all the cases. +# We chose option #1. + +# `attr` lies about its return type to make the following possible: +# attr() -> Any +# attr(8) -> int +# attr(validator=) -> Whatever the callable expects. +# This makes this type of assignments possible: +# x: int = attr(8) +# +# This form catches explicit None or no default but with no other arguments returns Any. +@overload +def attrib( + default: None = ..., + validator: None = ..., + repr: _ReprArgType = ..., + cmp: Optional[bool] = ..., + hash: Optional[bool] = ..., + init: bool = ..., + metadata: Optional[Mapping[Any, Any]] = ..., + type: None = ..., + converter: None = ..., + factory: None = ..., + kw_only: bool = ..., + eq: Optional[bool] = ..., + order: Optional[bool] = ..., +) -> Any: ... + +# This form catches an explicit None or no default and infers the type from the other arguments. +@overload +def attrib( + default: None = ..., + validator: Optional[_ValidatorArgType[_T]] = ..., + repr: _ReprArgType = ..., + cmp: Optional[bool] = ..., + hash: Optional[bool] = ..., + init: bool = ..., + metadata: Optional[Mapping[Any, Any]] = ..., + type: Optional[Type[_T]] = ..., + converter: Optional[_ConverterType[_T]] = ..., + factory: Optional[Callable[[], _T]] = ..., + kw_only: bool = ..., + eq: Optional[bool] = ..., + order: Optional[bool] = ..., +) -> _T: ... + +# This form catches an explicit default argument. +@overload +def attrib( + default: _T, + validator: Optional[_ValidatorArgType[_T]] = ..., + repr: _ReprArgType = ..., + cmp: Optional[bool] = ..., + hash: Optional[bool] = ..., + init: bool = ..., + metadata: Optional[Mapping[Any, Any]] = ..., + type: Optional[Type[_T]] = ..., + converter: Optional[_ConverterType[_T]] = ..., + factory: Optional[Callable[[], _T]] = ..., + kw_only: bool = ..., + eq: Optional[bool] = ..., + order: Optional[bool] = ..., +) -> _T: ... + +# This form covers type=non-Type: e.g. forward references (str), Any +@overload +def attrib( + default: Optional[_T] = ..., + validator: Optional[_ValidatorArgType[_T]] = ..., + repr: _ReprArgType = ..., + cmp: Optional[bool] = ..., + hash: Optional[bool] = ..., + init: bool = ..., + metadata: Optional[Mapping[Any, Any]] = ..., + type: object = ..., + converter: Optional[_ConverterType[_T]] = ..., + factory: Optional[Callable[[], _T]] = ..., + kw_only: bool = ..., + eq: Optional[bool] = ..., + order: Optional[bool] = ..., +) -> Any: ... +@overload +def attrs( + maybe_cls: _C, + these: Optional[Dict[str, Any]] = ..., + repr_ns: Optional[str] = ..., + repr: bool = ..., + cmp: Optional[bool] = ..., + hash: Optional[bool] = ..., + init: bool = ..., + slots: bool = ..., + frozen: bool = ..., + weakref_slot: bool = ..., + str: bool = ..., + auto_attribs: bool = ..., + kw_only: bool = ..., + cache_hash: bool = ..., + auto_exc: bool = ..., + eq: Optional[bool] = ..., + order: Optional[bool] = ..., +) -> _C: ... +@overload +def attrs( + maybe_cls: None = ..., + these: Optional[Dict[str, Any]] = ..., + repr_ns: Optional[str] = ..., + repr: bool = ..., + cmp: Optional[bool] = ..., + hash: Optional[bool] = ..., + init: bool = ..., + slots: bool = ..., + frozen: bool = ..., + weakref_slot: bool = ..., + str: bool = ..., + auto_attribs: bool = ..., + kw_only: bool = ..., + cache_hash: bool = ..., + auto_exc: bool = ..., + eq: Optional[bool] = ..., + order: Optional[bool] = ..., +) -> Callable[[_C], _C]: ... + +# TODO: add support for returning NamedTuple from the mypy plugin +class _Fields(Tuple[Attribute[Any], ...]): + def __getattr__(self, name: str) -> Attribute[Any]: ... + +def fields(cls: type) -> _Fields: ... +def fields_dict(cls: type) -> Dict[str, Attribute[Any]]: ... +def validate(inst: Any) -> None: ... + +# TODO: add support for returning a proper attrs class from the mypy plugin +# we use Any instead of _CountingAttr so that e.g. `make_class('Foo', [attr.ib()])` is valid +def make_class( + name: str, + attrs: Union[List[str], Tuple[str, ...], Dict[str, Any]], + bases: Tuple[type, ...] = ..., + repr_ns: Optional[str] = ..., + repr: bool = ..., + cmp: Optional[bool] = ..., + hash: Optional[bool] = ..., + init: bool = ..., + slots: bool = ..., + frozen: bool = ..., + weakref_slot: bool = ..., + str: bool = ..., + auto_attribs: bool = ..., + kw_only: bool = ..., + cache_hash: bool = ..., + auto_exc: bool = ..., + eq: Optional[bool] = ..., + order: Optional[bool] = ..., +) -> type: ... + +# _funcs -- + +# TODO: add support for returning TypedDict from the mypy plugin +# FIXME: asdict/astuple do not honor their factory args. waiting on one of these: +# https://github.com/python/mypy/issues/4236 +# https://github.com/python/typing/issues/253 +def asdict( + inst: Any, + recurse: bool = ..., + filter: Optional[_FilterType[Any]] = ..., + dict_factory: Type[Mapping[Any, Any]] = ..., + retain_collection_types: bool = ..., +) -> Dict[str, Any]: ... + +# TODO: add support for returning NamedTuple from the mypy plugin +def astuple( + inst: Any, + recurse: bool = ..., + filter: Optional[_FilterType[Any]] = ..., + tuple_factory: Type[Sequence[Any]] = ..., + retain_collection_types: bool = ..., +) -> Tuple[Any, ...]: ... +def has(cls: type) -> bool: ... +def assoc(inst: _T, **changes: Any) -> _T: ... +def evolve(inst: _T, **changes: Any) -> _T: ... + +# _config -- + +def set_run_validators(run: bool) -> None: ... +def get_run_validators() -> bool: ... + +# aliases -- + +s = attributes = attrs +ib = attr = attrib +dataclass = attrs # Technically, partial(attrs, auto_attribs=True) ;) diff --git a/venv/lib/python3.7/site-packages/attr/_compat.py b/venv/lib/python3.7/site-packages/attr/_compat.py new file mode 100644 index 0000000..a915db8 --- /dev/null +++ b/venv/lib/python3.7/site-packages/attr/_compat.py @@ -0,0 +1,230 @@ +from __future__ import absolute_import, division, print_function + +import platform +import sys +import types +import warnings + + +PY2 = sys.version_info[0] == 2 +PYPY = platform.python_implementation() == "PyPy" + + +if PYPY or sys.version_info[:2] >= (3, 6): + ordered_dict = dict +else: + from collections import OrderedDict + + ordered_dict = OrderedDict + + +if PY2: + from UserDict import IterableUserDict + from collections import Mapping, Sequence + + # We 'bundle' isclass instead of using inspect as importing inspect is + # fairly expensive (order of 10-15 ms for a modern machine in 2016) + def isclass(klass): + return isinstance(klass, (type, types.ClassType)) + + # TYPE is used in exceptions, repr(int) is different on Python 2 and 3. + TYPE = "type" + + def iteritems(d): + return d.iteritems() + + # Python 2 is bereft of a read-only dict proxy, so we make one! + class ReadOnlyDict(IterableUserDict): + """ + Best-effort read-only dict wrapper. + """ + + def __setitem__(self, key, val): + # We gently pretend we're a Python 3 mappingproxy. + raise TypeError( + "'mappingproxy' object does not support item assignment" + ) + + def update(self, _): + # We gently pretend we're a Python 3 mappingproxy. + raise AttributeError( + "'mappingproxy' object has no attribute 'update'" + ) + + def __delitem__(self, _): + # We gently pretend we're a Python 3 mappingproxy. + raise TypeError( + "'mappingproxy' object does not support item deletion" + ) + + def clear(self): + # We gently pretend we're a Python 3 mappingproxy. + raise AttributeError( + "'mappingproxy' object has no attribute 'clear'" + ) + + def pop(self, key, default=None): + # We gently pretend we're a Python 3 mappingproxy. + raise AttributeError( + "'mappingproxy' object has no attribute 'pop'" + ) + + def popitem(self): + # We gently pretend we're a Python 3 mappingproxy. + raise AttributeError( + "'mappingproxy' object has no attribute 'popitem'" + ) + + def setdefault(self, key, default=None): + # We gently pretend we're a Python 3 mappingproxy. + raise AttributeError( + "'mappingproxy' object has no attribute 'setdefault'" + ) + + def __repr__(self): + # Override to be identical to the Python 3 version. + return "mappingproxy(" + repr(self.data) + ")" + + def metadata_proxy(d): + res = ReadOnlyDict() + res.data.update(d) # We blocked update, so we have to do it like this. + return res + + def just_warn(*args, **kw): # pragma: nocover + """ + We only warn on Python 3 because we are not aware of any concrete + consequences of not setting the cell on Python 2. + """ + + +else: # Python 3 and later. + from collections.abc import Mapping, Sequence # noqa + + def just_warn(*args, **kw): + """ + We only warn on Python 3 because we are not aware of any concrete + consequences of not setting the cell on Python 2. + """ + warnings.warn( + "Running interpreter doesn't sufficiently support code object " + "introspection. Some features like bare super() or accessing " + "__class__ will not work with slotted classes.", + RuntimeWarning, + stacklevel=2, + ) + + def isclass(klass): + return isinstance(klass, type) + + TYPE = "class" + + def iteritems(d): + return d.items() + + def metadata_proxy(d): + return types.MappingProxyType(dict(d)) + + +def make_set_closure_cell(): + """Return a function of two arguments (cell, value) which sets + the value stored in the closure cell `cell` to `value`. + """ + # pypy makes this easy. (It also supports the logic below, but + # why not do the easy/fast thing?) + if PYPY: # pragma: no cover + + def set_closure_cell(cell, value): + cell.__setstate__((value,)) + + return set_closure_cell + + # Otherwise gotta do it the hard way. + + # Create a function that will set its first cellvar to `value`. + def set_first_cellvar_to(value): + x = value + return + + # This function will be eliminated as dead code, but + # not before its reference to `x` forces `x` to be + # represented as a closure cell rather than a local. + def force_x_to_be_a_cell(): # pragma: no cover + return x + + try: + # Extract the code object and make sure our assumptions about + # the closure behavior are correct. + if PY2: + co = set_first_cellvar_to.func_code + else: + co = set_first_cellvar_to.__code__ + if co.co_cellvars != ("x",) or co.co_freevars != (): + raise AssertionError # pragma: no cover + + # Convert this code object to a code object that sets the + # function's first _freevar_ (not cellvar) to the argument. + if sys.version_info >= (3, 8): + # CPython 3.8+ has an incompatible CodeType signature + # (added a posonlyargcount argument) but also added + # CodeType.replace() to do this without counting parameters. + set_first_freevar_code = co.replace( + co_cellvars=co.co_freevars, co_freevars=co.co_cellvars + ) + else: + args = [co.co_argcount] + if not PY2: + args.append(co.co_kwonlyargcount) + args.extend( + [ + co.co_nlocals, + co.co_stacksize, + co.co_flags, + co.co_code, + co.co_consts, + co.co_names, + co.co_varnames, + co.co_filename, + co.co_name, + co.co_firstlineno, + co.co_lnotab, + # These two arguments are reversed: + co.co_cellvars, + co.co_freevars, + ] + ) + set_first_freevar_code = types.CodeType(*args) + + def set_closure_cell(cell, value): + # Create a function using the set_first_freevar_code, + # whose first closure cell is `cell`. Calling it will + # change the value of that cell. + setter = types.FunctionType( + set_first_freevar_code, {}, "setter", (), (cell,) + ) + # And call it to set the cell. + setter(value) + + # Make sure it works on this interpreter: + def make_func_with_cell(): + x = None + + def func(): + return x # pragma: no cover + + return func + + if PY2: + cell = make_func_with_cell().func_closure[0] + else: + cell = make_func_with_cell().__closure__[0] + set_closure_cell(cell, 100) + if cell.cell_contents != 100: + raise AssertionError # pragma: no cover + + except Exception: + return just_warn + else: + return set_closure_cell + + +set_closure_cell = make_set_closure_cell() diff --git a/venv/lib/python3.7/site-packages/attr/_config.py b/venv/lib/python3.7/site-packages/attr/_config.py new file mode 100644 index 0000000..8ec9209 --- /dev/null +++ b/venv/lib/python3.7/site-packages/attr/_config.py @@ -0,0 +1,23 @@ +from __future__ import absolute_import, division, print_function + + +__all__ = ["set_run_validators", "get_run_validators"] + +_run_validators = True + + +def set_run_validators(run): + """ + Set whether or not validators are run. By default, they are run. + """ + if not isinstance(run, bool): + raise TypeError("'run' must be bool.") + global _run_validators + _run_validators = run + + +def get_run_validators(): + """ + Return whether or not validators are run. + """ + return _run_validators diff --git a/venv/lib/python3.7/site-packages/attr/_make.py b/venv/lib/python3.7/site-packages/attr/_make.py new file mode 100644 index 0000000..46f9c54 --- /dev/null +++ b/venv/lib/python3.7/site-packages/attr/_make.py @@ -0,0 +1,2168 @@ +from __future__ import absolute_import, division, print_function + +import copy +import linecache +import sys +import threading +import uuid +import warnings + +from operator import itemgetter + +from . import _config +from ._compat import ( + PY2, + isclass, + iteritems, + metadata_proxy, + ordered_dict, + set_closure_cell, +) +from .exceptions import ( + DefaultAlreadySetError, + FrozenInstanceError, + NotAnAttrsClassError, + PythonTooOldError, + UnannotatedAttributeError, +) + + +# This is used at least twice, so cache it here. +_obj_setattr = object.__setattr__ +_init_converter_pat = "__attr_converter_{}" +_init_factory_pat = "__attr_factory_{}" +_tuple_property_pat = ( + " {attr_name} = _attrs_property(_attrs_itemgetter({index}))" +) +_classvar_prefixes = ("typing.ClassVar", "t.ClassVar", "ClassVar") +# we don't use a double-underscore prefix because that triggers +# name mangling when trying to create a slot for the field +# (when slots=True) +_hash_cache_field = "_attrs_cached_hash" + +_empty_metadata_singleton = metadata_proxy({}) + +# Unique object for unequivocal getattr() defaults. +_sentinel = object() + + +class _Nothing(object): + """ + Sentinel class to indicate the lack of a value when ``None`` is ambiguous. + + ``_Nothing`` is a singleton. There is only ever one of it. + """ + + _singleton = None + + def __new__(cls): + if _Nothing._singleton is None: + _Nothing._singleton = super(_Nothing, cls).__new__(cls) + return _Nothing._singleton + + def __repr__(self): + return "NOTHING" + + +NOTHING = _Nothing() +""" +Sentinel to indicate the lack of a value when ``None`` is ambiguous. +""" + + +def attrib( + default=NOTHING, + validator=None, + repr=True, + cmp=None, + hash=None, + init=True, + metadata=None, + type=None, + converter=None, + factory=None, + kw_only=False, + eq=None, + order=None, +): + """ + Create a new attribute on a class. + + .. warning:: + + Does *not* do anything unless the class is also decorated with + `attr.s`! + + :param default: A value that is used if an ``attrs``-generated ``__init__`` + is used and no value is passed while instantiating or the attribute is + excluded using ``init=False``. + + If the value is an instance of `Factory`, its callable will be + used to construct a new value (useful for mutable data types like lists + or dicts). + + If a default is not set (or set manually to ``attr.NOTHING``), a value + *must* be supplied when instantiating; otherwise a `TypeError` + will be raised. + + The default can also be set using decorator notation as shown below. + + :type default: Any value + + :param callable factory: Syntactic sugar for + ``default=attr.Factory(callable)``. + + :param validator: `callable` that is called by ``attrs``-generated + ``__init__`` methods after the instance has been initialized. They + receive the initialized instance, the `Attribute`, and the + passed value. + + The return value is *not* inspected so the validator has to throw an + exception itself. + + If a ``list`` is passed, its items are treated as validators and must + all pass. + + Validators can be globally disabled and re-enabled using + `get_run_validators`. + + The validator can also be set using decorator notation as shown below. + + :type validator: ``callable`` or a ``list`` of ``callable``\\ s. + + :param repr: Include this attribute in the generated ``__repr__`` + method. If ``True``, include the attribute; if ``False``, omit it. By + default, the built-in ``repr()`` function is used. To override how the + attribute value is formatted, pass a ``callable`` that takes a single + value and returns a string. Note that the resulting string is used + as-is, i.e. it will be used directly *instead* of calling ``repr()`` + (the default). + :type repr: a ``bool`` or a ``callable`` to use a custom function. + :param bool eq: If ``True`` (default), include this attribute in the + generated ``__eq__`` and ``__ne__`` methods that check two instances + for equality. + :param bool order: If ``True`` (default), include this attributes in the + generated ``__lt__``, ``__le__``, ``__gt__`` and ``__ge__`` methods. + :param bool cmp: Setting to ``True`` is equivalent to setting ``eq=True, + order=True``. Deprecated in favor of *eq* and *order*. + :param hash: Include this attribute in the generated ``__hash__`` + method. If ``None`` (default), mirror *eq*'s value. This is the + correct behavior according the Python spec. Setting this value to + anything else than ``None`` is *discouraged*. + :type hash: ``bool`` or ``None`` + :param bool init: Include this attribute in the generated ``__init__`` + method. It is possible to set this to ``False`` and set a default + value. In that case this attributed is unconditionally initialized + with the specified default value or factory. + :param callable converter: `callable` that is called by + ``attrs``-generated ``__init__`` methods to converter attribute's value + to the desired format. It is given the passed-in value, and the + returned value will be used as the new value of the attribute. The + value is converted before being passed to the validator, if any. + :param metadata: An arbitrary mapping, to be used by third-party + components. See `extending_metadata`. + :param type: The type of the attribute. In Python 3.6 or greater, the + preferred method to specify the type is using a variable annotation + (see `PEP 526 `_). + This argument is provided for backward compatibility. + Regardless of the approach used, the type will be stored on + ``Attribute.type``. + + Please note that ``attrs`` doesn't do anything with this metadata by + itself. You can use it as part of your own code or for + `static type checking `. + :param kw_only: Make this attribute keyword-only (Python 3+) + in the generated ``__init__`` (if ``init`` is ``False``, this + parameter is ignored). + + .. versionadded:: 15.2.0 *convert* + .. versionadded:: 16.3.0 *metadata* + .. versionchanged:: 17.1.0 *validator* can be a ``list`` now. + .. versionchanged:: 17.1.0 + *hash* is ``None`` and therefore mirrors *eq* by default. + .. versionadded:: 17.3.0 *type* + .. deprecated:: 17.4.0 *convert* + .. versionadded:: 17.4.0 *converter* as a replacement for the deprecated + *convert* to achieve consistency with other noun-based arguments. + .. versionadded:: 18.1.0 + ``factory=f`` is syntactic sugar for ``default=attr.Factory(f)``. + .. versionadded:: 18.2.0 *kw_only* + .. versionchanged:: 19.2.0 *convert* keyword argument removed + .. versionchanged:: 19.2.0 *repr* also accepts a custom callable. + .. deprecated:: 19.2.0 *cmp* Removal on or after 2021-06-01. + .. versionadded:: 19.2.0 *eq* and *order* + """ + eq, order = _determine_eq_order(cmp, eq, order) + + if hash is not None and hash is not True and hash is not False: + raise TypeError( + "Invalid value for hash. Must be True, False, or None." + ) + + if factory is not None: + if default is not NOTHING: + raise ValueError( + "The `default` and `factory` arguments are mutually " + "exclusive." + ) + if not callable(factory): + raise ValueError("The `factory` argument must be a callable.") + default = Factory(factory) + + if metadata is None: + metadata = {} + + return _CountingAttr( + default=default, + validator=validator, + repr=repr, + cmp=None, + hash=hash, + init=init, + converter=converter, + metadata=metadata, + type=type, + kw_only=kw_only, + eq=eq, + order=order, + ) + + +def _make_attr_tuple_class(cls_name, attr_names): + """ + Create a tuple subclass to hold `Attribute`s for an `attrs` class. + + The subclass is a bare tuple with properties for names. + + class MyClassAttributes(tuple): + __slots__ = () + x = property(itemgetter(0)) + """ + attr_class_name = "{}Attributes".format(cls_name) + attr_class_template = [ + "class {}(tuple):".format(attr_class_name), + " __slots__ = ()", + ] + if attr_names: + for i, attr_name in enumerate(attr_names): + attr_class_template.append( + _tuple_property_pat.format(index=i, attr_name=attr_name) + ) + else: + attr_class_template.append(" pass") + globs = {"_attrs_itemgetter": itemgetter, "_attrs_property": property} + eval(compile("\n".join(attr_class_template), "", "exec"), globs) + + return globs[attr_class_name] + + +# Tuple class for extracted attributes from a class definition. +# `base_attrs` is a subset of `attrs`. +_Attributes = _make_attr_tuple_class( + "_Attributes", + [ + # all attributes to build dunder methods for + "attrs", + # attributes that have been inherited + "base_attrs", + # map inherited attributes to their originating classes + "base_attrs_map", + ], +) + + +def _is_class_var(annot): + """ + Check whether *annot* is a typing.ClassVar. + + The string comparison hack is used to avoid evaluating all string + annotations which would put attrs-based classes at a performance + disadvantage compared to plain old classes. + """ + return str(annot).startswith(_classvar_prefixes) + + +def _get_annotations(cls): + """ + Get annotations for *cls*. + """ + anns = getattr(cls, "__annotations__", None) + if anns is None: + return {} + + # Verify that the annotations aren't merely inherited. + for base_cls in cls.__mro__[1:]: + if anns is getattr(base_cls, "__annotations__", None): + return {} + + return anns + + +def _counter_getter(e): + """ + Key function for sorting to avoid re-creating a lambda for every class. + """ + return e[1].counter + + +def _transform_attrs(cls, these, auto_attribs, kw_only): + """ + Transform all `_CountingAttr`s on a class into `Attribute`s. + + If *these* is passed, use that and don't look for them on the class. + + Return an `_Attributes`. + """ + cd = cls.__dict__ + anns = _get_annotations(cls) + + if these is not None: + ca_list = [(name, ca) for name, ca in iteritems(these)] + + if not isinstance(these, ordered_dict): + ca_list.sort(key=_counter_getter) + elif auto_attribs is True: + ca_names = { + name + for name, attr in cd.items() + if isinstance(attr, _CountingAttr) + } + ca_list = [] + annot_names = set() + for attr_name, type in anns.items(): + if _is_class_var(type): + continue + annot_names.add(attr_name) + a = cd.get(attr_name, NOTHING) + if not isinstance(a, _CountingAttr): + if a is NOTHING: + a = attrib() + else: + a = attrib(default=a) + ca_list.append((attr_name, a)) + + unannotated = ca_names - annot_names + if len(unannotated) > 0: + raise UnannotatedAttributeError( + "The following `attr.ib`s lack a type annotation: " + + ", ".join( + sorted(unannotated, key=lambda n: cd.get(n).counter) + ) + + "." + ) + else: + ca_list = sorted( + ( + (name, attr) + for name, attr in cd.items() + if isinstance(attr, _CountingAttr) + ), + key=lambda e: e[1].counter, + ) + + own_attrs = [ + Attribute.from_counting_attr( + name=attr_name, ca=ca, type=anns.get(attr_name) + ) + for attr_name, ca in ca_list + ] + + base_attrs = [] + base_attr_map = {} # A dictionary of base attrs to their classes. + taken_attr_names = {a.name: a for a in own_attrs} + + # Traverse the MRO and collect attributes. + for base_cls in cls.__mro__[1:-1]: + sub_attrs = getattr(base_cls, "__attrs_attrs__", None) + if sub_attrs is not None: + for a in sub_attrs: + prev_a = taken_attr_names.get(a.name) + # Only add an attribute if it hasn't been defined before. This + # allows for overwriting attribute definitions by subclassing. + if prev_a is None: + base_attrs.append(a) + taken_attr_names[a.name] = a + base_attr_map[a.name] = base_cls + + attr_names = [a.name for a in base_attrs + own_attrs] + + AttrsClass = _make_attr_tuple_class(cls.__name__, attr_names) + + if kw_only: + own_attrs = [a._assoc(kw_only=True) for a in own_attrs] + base_attrs = [a._assoc(kw_only=True) for a in base_attrs] + + attrs = AttrsClass(base_attrs + own_attrs) + + # Mandatory vs non-mandatory attr order only matters when they are part of + # the __init__ signature and when they aren't kw_only (which are moved to + # the end and can be mandatory or non-mandatory in any order, as they will + # be specified as keyword args anyway). Check the order of those attrs: + had_default = False + for a in (a for a in attrs if a.init is not False and a.kw_only is False): + if had_default is True and a.default is NOTHING: + raise ValueError( + "No mandatory attributes allowed after an attribute with a " + "default value or factory. Attribute in question: %r" % (a,) + ) + + if had_default is False and a.default is not NOTHING: + had_default = True + + return _Attributes((attrs, base_attrs, base_attr_map)) + + +def _frozen_setattrs(self, name, value): + """ + Attached to frozen classes as __setattr__. + """ + raise FrozenInstanceError() + + +def _frozen_delattrs(self, name): + """ + Attached to frozen classes as __delattr__. + """ + raise FrozenInstanceError() + + +class _ClassBuilder(object): + """ + Iteratively build *one* class. + """ + + __slots__ = ( + "_cls", + "_cls_dict", + "_attrs", + "_base_names", + "_attr_names", + "_slots", + "_frozen", + "_weakref_slot", + "_cache_hash", + "_has_post_init", + "_delete_attribs", + "_base_attr_map", + "_is_exc", + ) + + def __init__( + self, + cls, + these, + slots, + frozen, + weakref_slot, + auto_attribs, + kw_only, + cache_hash, + is_exc, + ): + attrs, base_attrs, base_map = _transform_attrs( + cls, these, auto_attribs, kw_only + ) + + self._cls = cls + self._cls_dict = dict(cls.__dict__) if slots else {} + self._attrs = attrs + self._base_names = set(a.name for a in base_attrs) + self._base_attr_map = base_map + self._attr_names = tuple(a.name for a in attrs) + self._slots = slots + self._frozen = frozen or _has_frozen_base_class(cls) + self._weakref_slot = weakref_slot + self._cache_hash = cache_hash + self._has_post_init = bool(getattr(cls, "__attrs_post_init__", False)) + self._delete_attribs = not bool(these) + self._is_exc = is_exc + + self._cls_dict["__attrs_attrs__"] = self._attrs + + if frozen: + self._cls_dict["__setattr__"] = _frozen_setattrs + self._cls_dict["__delattr__"] = _frozen_delattrs + + def __repr__(self): + return "<_ClassBuilder(cls={cls})>".format(cls=self._cls.__name__) + + def build_class(self): + """ + Finalize class based on the accumulated configuration. + + Builder cannot be used after calling this method. + """ + if self._slots is True: + return self._create_slots_class() + else: + return self._patch_original_class() + + def _patch_original_class(self): + """ + Apply accumulated methods and return the class. + """ + cls = self._cls + base_names = self._base_names + + # Clean class of attribute definitions (`attr.ib()`s). + if self._delete_attribs: + for name in self._attr_names: + if ( + name not in base_names + and getattr(cls, name, _sentinel) is not _sentinel + ): + try: + delattr(cls, name) + except AttributeError: + # This can happen if a base class defines a class + # variable and we want to set an attribute with the + # same name by using only a type annotation. + pass + + # Attach our dunder methods. + for name, value in self._cls_dict.items(): + setattr(cls, name, value) + + # Attach __setstate__. This is necessary to clear the hash code + # cache on deserialization. See issue + # https://github.com/python-attrs/attrs/issues/482 . + # Note that this code only handles setstate for dict classes. + # For slotted classes, see similar code in _create_slots_class . + if self._cache_hash: + existing_set_state_method = getattr(cls, "__setstate__", None) + if existing_set_state_method: + raise NotImplementedError( + "Currently you cannot use hash caching if " + "you specify your own __setstate__ method." + "See https://github.com/python-attrs/attrs/issues/494 ." + ) + + def cache_hash_set_state(chss_self, _): + # clear hash code cache + setattr(chss_self, _hash_cache_field, None) + + setattr(cls, "__setstate__", cache_hash_set_state) + + return cls + + def _create_slots_class(self): + """ + Build and return a new class with a `__slots__` attribute. + """ + base_names = self._base_names + cd = { + k: v + for k, v in iteritems(self._cls_dict) + if k not in tuple(self._attr_names) + ("__dict__", "__weakref__") + } + + weakref_inherited = False + + # Traverse the MRO to check for an existing __weakref__. + for base_cls in self._cls.__mro__[1:-1]: + if "__weakref__" in getattr(base_cls, "__dict__", ()): + weakref_inherited = True + break + + names = self._attr_names + if ( + self._weakref_slot + and "__weakref__" not in getattr(self._cls, "__slots__", ()) + and "__weakref__" not in names + and not weakref_inherited + ): + names += ("__weakref__",) + + # We only add the names of attributes that aren't inherited. + # Settings __slots__ to inherited attributes wastes memory. + slot_names = [name for name in names if name not in base_names] + if self._cache_hash: + slot_names.append(_hash_cache_field) + cd["__slots__"] = tuple(slot_names) + + qualname = getattr(self._cls, "__qualname__", None) + if qualname is not None: + cd["__qualname__"] = qualname + + # __weakref__ is not writable. + state_attr_names = tuple( + an for an in self._attr_names if an != "__weakref__" + ) + + def slots_getstate(self): + """ + Automatically created by attrs. + """ + return tuple(getattr(self, name) for name in state_attr_names) + + hash_caching_enabled = self._cache_hash + + def slots_setstate(self, state): + """ + Automatically created by attrs. + """ + __bound_setattr = _obj_setattr.__get__(self, Attribute) + for name, value in zip(state_attr_names, state): + __bound_setattr(name, value) + # Clearing the hash code cache on deserialization is needed + # because hash codes can change from run to run. See issue + # https://github.com/python-attrs/attrs/issues/482 . + # Note that this code only handles setstate for slotted classes. + # For dict classes, see similar code in _patch_original_class . + if hash_caching_enabled: + __bound_setattr(_hash_cache_field, None) + + # slots and frozen require __getstate__/__setstate__ to work + cd["__getstate__"] = slots_getstate + cd["__setstate__"] = slots_setstate + + # Create new class based on old class and our methods. + cls = type(self._cls)(self._cls.__name__, self._cls.__bases__, cd) + + # The following is a fix for + # https://github.com/python-attrs/attrs/issues/102. On Python 3, + # if a method mentions `__class__` or uses the no-arg super(), the + # compiler will bake a reference to the class in the method itself + # as `method.__closure__`. Since we replace the class with a + # clone, we rewrite these references so it keeps working. + for item in cls.__dict__.values(): + if isinstance(item, (classmethod, staticmethod)): + # Class- and staticmethods hide their functions inside. + # These might need to be rewritten as well. + closure_cells = getattr(item.__func__, "__closure__", None) + else: + closure_cells = getattr(item, "__closure__", None) + + if not closure_cells: # Catch None or the empty list. + continue + for cell in closure_cells: + if cell.cell_contents is self._cls: + set_closure_cell(cell, cls) + + return cls + + def add_repr(self, ns): + self._cls_dict["__repr__"] = self._add_method_dunders( + _make_repr(self._attrs, ns=ns) + ) + return self + + def add_str(self): + repr = self._cls_dict.get("__repr__") + if repr is None: + raise ValueError( + "__str__ can only be generated if a __repr__ exists." + ) + + def __str__(self): + return self.__repr__() + + self._cls_dict["__str__"] = self._add_method_dunders(__str__) + return self + + def make_unhashable(self): + self._cls_dict["__hash__"] = None + return self + + def add_hash(self): + self._cls_dict["__hash__"] = self._add_method_dunders( + _make_hash( + self._cls, + self._attrs, + frozen=self._frozen, + cache_hash=self._cache_hash, + ) + ) + + return self + + def add_init(self): + self._cls_dict["__init__"] = self._add_method_dunders( + _make_init( + self._cls, + self._attrs, + self._has_post_init, + self._frozen, + self._slots, + self._cache_hash, + self._base_attr_map, + self._is_exc, + ) + ) + + return self + + def add_eq(self): + cd = self._cls_dict + + cd["__eq__"], cd["__ne__"] = ( + self._add_method_dunders(meth) + for meth in _make_eq(self._cls, self._attrs) + ) + + return self + + def add_order(self): + cd = self._cls_dict + + cd["__lt__"], cd["__le__"], cd["__gt__"], cd["__ge__"] = ( + self._add_method_dunders(meth) + for meth in _make_order(self._cls, self._attrs) + ) + + return self + + def _add_method_dunders(self, method): + """ + Add __module__ and __qualname__ to a *method* if possible. + """ + try: + method.__module__ = self._cls.__module__ + except AttributeError: + pass + + try: + method.__qualname__ = ".".join( + (self._cls.__qualname__, method.__name__) + ) + except AttributeError: + pass + + return method + + +_CMP_DEPRECATION = ( + "The usage of `cmp` is deprecated and will be removed on or after " + "2021-06-01. Please use `eq` and `order` instead." +) + + +def _determine_eq_order(cmp, eq, order): + """ + Validate the combination of *cmp*, *eq*, and *order*. Derive the effective + values of eq and order. + """ + if cmp is not None and any((eq is not None, order is not None)): + raise ValueError("Don't mix `cmp` with `eq' and `order`.") + + # cmp takes precedence due to bw-compatibility. + if cmp is not None: + warnings.warn(_CMP_DEPRECATION, DeprecationWarning, stacklevel=3) + + return cmp, cmp + + # If left None, equality is on and ordering mirrors equality. + if eq is None: + eq = True + + if order is None: + order = eq + + if eq is False and order is True: + raise ValueError("`order` can only be True if `eq` is True too.") + + return eq, order + + +def attrs( + maybe_cls=None, + these=None, + repr_ns=None, + repr=True, + cmp=None, + hash=None, + init=True, + slots=False, + frozen=False, + weakref_slot=True, + str=False, + auto_attribs=False, + kw_only=False, + cache_hash=False, + auto_exc=False, + eq=None, + order=None, +): + r""" + A class decorator that adds `dunder + `_\ -methods according to the + specified attributes using `attr.ib` or the *these* argument. + + :param these: A dictionary of name to `attr.ib` mappings. This is + useful to avoid the definition of your attributes within the class body + because you can't (e.g. if you want to add ``__repr__`` methods to + Django models) or don't want to. + + If *these* is not ``None``, ``attrs`` will *not* search the class body + for attributes and will *not* remove any attributes from it. + + If *these* is an ordered dict (`dict` on Python 3.6+, + `collections.OrderedDict` otherwise), the order is deduced from + the order of the attributes inside *these*. Otherwise the order + of the definition of the attributes is used. + + :type these: `dict` of `str` to `attr.ib` + + :param str repr_ns: When using nested classes, there's no way in Python 2 + to automatically detect that. Therefore it's possible to set the + namespace explicitly for a more meaningful ``repr`` output. + :param bool repr: Create a ``__repr__`` method with a human readable + representation of ``attrs`` attributes.. + :param bool str: Create a ``__str__`` method that is identical to + ``__repr__``. This is usually not necessary except for + `Exception`\ s. + :param bool eq: If ``True`` or ``None`` (default), add ``__eq__`` and + ``__ne__`` methods that check two instances for equality. + + They compare the instances as if they were tuples of their ``attrs`` + attributes, but only iff the types of both classes are *identical*! + :type eq: `bool` or `None` + :param bool order: If ``True``, add ``__lt__``, ``__le__``, ``__gt__``, + and ``__ge__`` methods that behave like *eq* above and allow instances + to be ordered. If ``None`` (default) mirror value of *eq*. + :type order: `bool` or `None` + :param cmp: Setting to ``True`` is equivalent to setting ``eq=True, + order=True``. Deprecated in favor of *eq* and *order*, has precedence + over them for backward-compatibility though. Must not be mixed with + *eq* or *order*. + :type cmp: `bool` or `None` + :param hash: If ``None`` (default), the ``__hash__`` method is generated + according how *eq* and *frozen* are set. + + 1. If *both* are True, ``attrs`` will generate a ``__hash__`` for you. + 2. If *eq* is True and *frozen* is False, ``__hash__`` will be set to + None, marking it unhashable (which it is). + 3. If *eq* is False, ``__hash__`` will be left untouched meaning the + ``__hash__`` method of the base class will be used (if base class is + ``object``, this means it will fall back to id-based hashing.). + + Although not recommended, you can decide for yourself and force + ``attrs`` to create one (e.g. if the class is immutable even though you + didn't freeze it programmatically) by passing ``True`` or not. Both of + these cases are rather special and should be used carefully. + + See our documentation on `hashing`, Python's documentation on + `object.__hash__`, and the `GitHub issue that led to the default \ + behavior `_ for more + details. + :type hash: ``bool`` or ``None`` + :param bool init: Create a ``__init__`` method that initializes the + ``attrs`` attributes. Leading underscores are stripped for the + argument name. If a ``__attrs_post_init__`` method exists on the + class, it will be called after the class is fully initialized. + :param bool slots: Create a `slotted class ` that's more + memory-efficient. + :param bool frozen: Make instances immutable after initialization. If + someone attempts to modify a frozen instance, + `attr.exceptions.FrozenInstanceError` is raised. + + Please note: + + 1. This is achieved by installing a custom ``__setattr__`` method + on your class, so you can't implement your own. + + 2. True immutability is impossible in Python. + + 3. This *does* have a minor a runtime performance `impact + ` when initializing new instances. In other words: + ``__init__`` is slightly slower with ``frozen=True``. + + 4. If a class is frozen, you cannot modify ``self`` in + ``__attrs_post_init__`` or a self-written ``__init__``. You can + circumvent that limitation by using + ``object.__setattr__(self, "attribute_name", value)``. + + :param bool weakref_slot: Make instances weak-referenceable. This has no + effect unless ``slots`` is also enabled. + :param bool auto_attribs: If True, collect `PEP 526`_-annotated attributes + (Python 3.6 and later only) from the class body. + + In this case, you **must** annotate every field. If ``attrs`` + encounters a field that is set to an `attr.ib` but lacks a type + annotation, an `attr.exceptions.UnannotatedAttributeError` is + raised. Use ``field_name: typing.Any = attr.ib(...)`` if you don't + want to set a type. + + If you assign a value to those attributes (e.g. ``x: int = 42``), that + value becomes the default value like if it were passed using + ``attr.ib(default=42)``. Passing an instance of `Factory` also + works as expected. + + Attributes annotated as `typing.ClassVar`, and attributes that are + neither annotated nor set to an `attr.ib` are **ignored**. + + .. _`PEP 526`: https://www.python.org/dev/peps/pep-0526/ + :param bool kw_only: Make all attributes keyword-only (Python 3+) + in the generated ``__init__`` (if ``init`` is ``False``, this + parameter is ignored). + :param bool cache_hash: Ensure that the object's hash code is computed + only once and stored on the object. If this is set to ``True``, + hashing must be either explicitly or implicitly enabled for this + class. If the hash code is cached, avoid any reassignments of + fields involved in hash code computation or mutations of the objects + those fields point to after object creation. If such changes occur, + the behavior of the object's hash code is undefined. + :param bool auto_exc: If the class subclasses `BaseException` + (which implicitly includes any subclass of any exception), the + following happens to behave like a well-behaved Python exceptions + class: + + - the values for *eq*, *order*, and *hash* are ignored and the + instances compare and hash by the instance's ids (N.B. ``attrs`` will + *not* remove existing implementations of ``__hash__`` or the equality + methods. It just won't add own ones.), + - all attributes that are either passed into ``__init__`` or have a + default value are additionally available as a tuple in the ``args`` + attribute, + - the value of *str* is ignored leaving ``__str__`` to base classes. + + .. versionadded:: 16.0.0 *slots* + .. versionadded:: 16.1.0 *frozen* + .. versionadded:: 16.3.0 *str* + .. versionadded:: 16.3.0 Support for ``__attrs_post_init__``. + .. versionchanged:: 17.1.0 + *hash* supports ``None`` as value which is also the default now. + .. versionadded:: 17.3.0 *auto_attribs* + .. versionchanged:: 18.1.0 + If *these* is passed, no attributes are deleted from the class body. + .. versionchanged:: 18.1.0 If *these* is ordered, the order is retained. + .. versionadded:: 18.2.0 *weakref_slot* + .. deprecated:: 18.2.0 + ``__lt__``, ``__le__``, ``__gt__``, and ``__ge__`` now raise a + `DeprecationWarning` if the classes compared are subclasses of + each other. ``__eq`` and ``__ne__`` never tried to compared subclasses + to each other. + .. versionchanged:: 19.2.0 + ``__lt__``, ``__le__``, ``__gt__``, and ``__ge__`` now do not consider + subclasses comparable anymore. + .. versionadded:: 18.2.0 *kw_only* + .. versionadded:: 18.2.0 *cache_hash* + .. versionadded:: 19.1.0 *auto_exc* + .. deprecated:: 19.2.0 *cmp* Removal on or after 2021-06-01. + .. versionadded:: 19.2.0 *eq* and *order* + """ + eq, order = _determine_eq_order(cmp, eq, order) + + def wrap(cls): + + if getattr(cls, "__class__", None) is None: + raise TypeError("attrs only works with new-style classes.") + + is_exc = auto_exc is True and issubclass(cls, BaseException) + + builder = _ClassBuilder( + cls, + these, + slots, + frozen, + weakref_slot, + auto_attribs, + kw_only, + cache_hash, + is_exc, + ) + + if repr is True: + builder.add_repr(repr_ns) + if str is True: + builder.add_str() + if eq is True and not is_exc: + builder.add_eq() + if order is True and not is_exc: + builder.add_order() + + if hash is not True and hash is not False and hash is not None: + # Can't use `hash in` because 1 == True for example. + raise TypeError( + "Invalid value for hash. Must be True, False, or None." + ) + elif hash is False or (hash is None and eq is False) or is_exc: + # Don't do anything. Should fall back to __object__'s __hash__ + # which is by id. + if cache_hash: + raise TypeError( + "Invalid value for cache_hash. To use hash caching," + " hashing must be either explicitly or implicitly " + "enabled." + ) + elif hash is True or (hash is None and eq is True and frozen is True): + # Build a __hash__ if told so, or if it's safe. + builder.add_hash() + else: + # Raise TypeError on attempts to hash. + if cache_hash: + raise TypeError( + "Invalid value for cache_hash. To use hash caching," + " hashing must be either explicitly or implicitly " + "enabled." + ) + builder.make_unhashable() + + if init is True: + builder.add_init() + else: + if cache_hash: + raise TypeError( + "Invalid value for cache_hash. To use hash caching," + " init must be True." + ) + + return builder.build_class() + + # maybe_cls's type depends on the usage of the decorator. It's a class + # if it's used as `@attrs` but ``None`` if used as `@attrs()`. + if maybe_cls is None: + return wrap + else: + return wrap(maybe_cls) + + +_attrs = attrs +""" +Internal alias so we can use it in functions that take an argument called +*attrs*. +""" + + +if PY2: + + def _has_frozen_base_class(cls): + """ + Check whether *cls* has a frozen ancestor by looking at its + __setattr__. + """ + return ( + getattr(cls.__setattr__, "__module__", None) + == _frozen_setattrs.__module__ + and cls.__setattr__.__name__ == _frozen_setattrs.__name__ + ) + + +else: + + def _has_frozen_base_class(cls): + """ + Check whether *cls* has a frozen ancestor by looking at its + __setattr__. + """ + return cls.__setattr__ == _frozen_setattrs + + +def _attrs_to_tuple(obj, attrs): + """ + Create a tuple of all values of *obj*'s *attrs*. + """ + return tuple(getattr(obj, a.name) for a in attrs) + + +def _generate_unique_filename(cls, func_name): + """ + Create a "filename" suitable for a function being generated. + """ + unique_id = uuid.uuid4() + extra = "" + count = 1 + + while True: + unique_filename = "".format( + func_name, + cls.__module__, + getattr(cls, "__qualname__", cls.__name__), + extra, + ) + # To handle concurrency we essentially "reserve" our spot in + # the linecache with a dummy line. The caller can then + # set this value correctly. + cache_line = (1, None, (str(unique_id),), unique_filename) + if ( + linecache.cache.setdefault(unique_filename, cache_line) + == cache_line + ): + return unique_filename + + # Looks like this spot is taken. Try again. + count += 1 + extra = "-{0}".format(count) + + +def _make_hash(cls, attrs, frozen, cache_hash): + attrs = tuple( + a for a in attrs if a.hash is True or (a.hash is None and a.eq is True) + ) + + tab = " " + + unique_filename = _generate_unique_filename(cls, "hash") + type_hash = hash(unique_filename) + + method_lines = ["def __hash__(self):"] + + def append_hash_computation_lines(prefix, indent): + """ + Generate the code for actually computing the hash code. + Below this will either be returned directly or used to compute + a value which is then cached, depending on the value of cache_hash + """ + method_lines.extend( + [indent + prefix + "hash((", indent + " %d," % (type_hash,)] + ) + + for a in attrs: + method_lines.append(indent + " self.%s," % a.name) + + method_lines.append(indent + " ))") + + if cache_hash: + method_lines.append(tab + "if self.%s is None:" % _hash_cache_field) + if frozen: + append_hash_computation_lines( + "object.__setattr__(self, '%s', " % _hash_cache_field, tab * 2 + ) + method_lines.append(tab * 2 + ")") # close __setattr__ + else: + append_hash_computation_lines( + "self.%s = " % _hash_cache_field, tab * 2 + ) + method_lines.append(tab + "return self.%s" % _hash_cache_field) + else: + append_hash_computation_lines("return ", tab) + + script = "\n".join(method_lines) + globs = {} + locs = {} + bytecode = compile(script, unique_filename, "exec") + eval(bytecode, globs, locs) + + # In order of debuggers like PDB being able to step through the code, + # we add a fake linecache entry. + linecache.cache[unique_filename] = ( + len(script), + None, + script.splitlines(True), + unique_filename, + ) + + return locs["__hash__"] + + +def _add_hash(cls, attrs): + """ + Add a hash method to *cls*. + """ + cls.__hash__ = _make_hash(cls, attrs, frozen=False, cache_hash=False) + return cls + + +def __ne__(self, other): + """ + Check equality and either forward a NotImplemented or return the result + negated. + """ + result = self.__eq__(other) + if result is NotImplemented: + return NotImplemented + + return not result + + +def _make_eq(cls, attrs): + attrs = [a for a in attrs if a.eq] + + unique_filename = _generate_unique_filename(cls, "eq") + lines = [ + "def __eq__(self, other):", + " if other.__class__ is not self.__class__:", + " return NotImplemented", + ] + # We can't just do a big self.x = other.x and... clause due to + # irregularities like nan == nan is false but (nan,) == (nan,) is true. + if attrs: + lines.append(" return (") + others = [" ) == ("] + for a in attrs: + lines.append(" self.%s," % (a.name,)) + others.append(" other.%s," % (a.name,)) + + lines += others + [" )"] + else: + lines.append(" return True") + + script = "\n".join(lines) + globs = {} + locs = {} + bytecode = compile(script, unique_filename, "exec") + eval(bytecode, globs, locs) + + # In order of debuggers like PDB being able to step through the code, + # we add a fake linecache entry. + linecache.cache[unique_filename] = ( + len(script), + None, + script.splitlines(True), + unique_filename, + ) + return locs["__eq__"], __ne__ + + +def _make_order(cls, attrs): + attrs = [a for a in attrs if a.order] + + def attrs_to_tuple(obj): + """ + Save us some typing. + """ + return _attrs_to_tuple(obj, attrs) + + def __lt__(self, other): + """ + Automatically created by attrs. + """ + if other.__class__ is self.__class__: + return attrs_to_tuple(self) < attrs_to_tuple(other) + + return NotImplemented + + def __le__(self, other): + """ + Automatically created by attrs. + """ + if other.__class__ is self.__class__: + return attrs_to_tuple(self) <= attrs_to_tuple(other) + + return NotImplemented + + def __gt__(self, other): + """ + Automatically created by attrs. + """ + if other.__class__ is self.__class__: + return attrs_to_tuple(self) > attrs_to_tuple(other) + + return NotImplemented + + def __ge__(self, other): + """ + Automatically created by attrs. + """ + if other.__class__ is self.__class__: + return attrs_to_tuple(self) >= attrs_to_tuple(other) + + return NotImplemented + + return __lt__, __le__, __gt__, __ge__ + + +def _add_eq(cls, attrs=None): + """ + Add equality methods to *cls* with *attrs*. + """ + if attrs is None: + attrs = cls.__attrs_attrs__ + + cls.__eq__, cls.__ne__ = _make_eq(cls, attrs) + + return cls + + +_already_repring = threading.local() + + +def _make_repr(attrs, ns): + """ + Make a repr method that includes relevant *attrs*, adding *ns* to the full + name. + """ + + # Figure out which attributes to include, and which function to use to + # format them. The a.repr value can be either bool or a custom callable. + attr_names_with_reprs = tuple( + (a.name, repr if a.repr is True else a.repr) + for a in attrs + if a.repr is not False + ) + + def __repr__(self): + """ + Automatically created by attrs. + """ + try: + working_set = _already_repring.working_set + except AttributeError: + working_set = set() + _already_repring.working_set = working_set + + if id(self) in working_set: + return "..." + real_cls = self.__class__ + if ns is None: + qualname = getattr(real_cls, "__qualname__", None) + if qualname is not None: + class_name = qualname.rsplit(">.", 1)[-1] + else: + class_name = real_cls.__name__ + else: + class_name = ns + "." + real_cls.__name__ + + # Since 'self' remains on the stack (i.e.: strongly referenced) for the + # duration of this call, it's safe to depend on id(...) stability, and + # not need to track the instance and therefore worry about properties + # like weakref- or hash-ability. + working_set.add(id(self)) + try: + result = [class_name, "("] + first = True + for name, attr_repr in attr_names_with_reprs: + if first: + first = False + else: + result.append(", ") + result.extend( + (name, "=", attr_repr(getattr(self, name, NOTHING))) + ) + return "".join(result) + ")" + finally: + working_set.remove(id(self)) + + return __repr__ + + +def _add_repr(cls, ns=None, attrs=None): + """ + Add a repr method to *cls*. + """ + if attrs is None: + attrs = cls.__attrs_attrs__ + + cls.__repr__ = _make_repr(attrs, ns) + return cls + + +def _make_init( + cls, attrs, post_init, frozen, slots, cache_hash, base_attr_map, is_exc +): + attrs = [a for a in attrs if a.init or a.default is not NOTHING] + + unique_filename = _generate_unique_filename(cls, "init") + + script, globs, annotations = _attrs_to_init_script( + attrs, frozen, slots, post_init, cache_hash, base_attr_map, is_exc + ) + locs = {} + bytecode = compile(script, unique_filename, "exec") + attr_dict = dict((a.name, a) for a in attrs) + globs.update({"NOTHING": NOTHING, "attr_dict": attr_dict}) + + if frozen is True: + # Save the lookup overhead in __init__ if we need to circumvent + # immutability. + globs["_cached_setattr"] = _obj_setattr + + eval(bytecode, globs, locs) + + # In order of debuggers like PDB being able to step through the code, + # we add a fake linecache entry. + linecache.cache[unique_filename] = ( + len(script), + None, + script.splitlines(True), + unique_filename, + ) + + __init__ = locs["__init__"] + __init__.__annotations__ = annotations + + return __init__ + + +def fields(cls): + """ + Return the tuple of ``attrs`` attributes for a class. + + The tuple also allows accessing the fields by their names (see below for + examples). + + :param type cls: Class to introspect. + + :raise TypeError: If *cls* is not a class. + :raise attr.exceptions.NotAnAttrsClassError: If *cls* is not an ``attrs`` + class. + + :rtype: tuple (with name accessors) of `attr.Attribute` + + .. versionchanged:: 16.2.0 Returned tuple allows accessing the fields + by name. + """ + if not isclass(cls): + raise TypeError("Passed object must be a class.") + attrs = getattr(cls, "__attrs_attrs__", None) + if attrs is None: + raise NotAnAttrsClassError( + "{cls!r} is not an attrs-decorated class.".format(cls=cls) + ) + return attrs + + +def fields_dict(cls): + """ + Return an ordered dictionary of ``attrs`` attributes for a class, whose + keys are the attribute names. + + :param type cls: Class to introspect. + + :raise TypeError: If *cls* is not a class. + :raise attr.exceptions.NotAnAttrsClassError: If *cls* is not an ``attrs`` + class. + + :rtype: an ordered dict where keys are attribute names and values are + `attr.Attribute`\\ s. This will be a `dict` if it's + naturally ordered like on Python 3.6+ or an + :class:`~collections.OrderedDict` otherwise. + + .. versionadded:: 18.1.0 + """ + if not isclass(cls): + raise TypeError("Passed object must be a class.") + attrs = getattr(cls, "__attrs_attrs__", None) + if attrs is None: + raise NotAnAttrsClassError( + "{cls!r} is not an attrs-decorated class.".format(cls=cls) + ) + return ordered_dict(((a.name, a) for a in attrs)) + + +def validate(inst): + """ + Validate all attributes on *inst* that have a validator. + + Leaves all exceptions through. + + :param inst: Instance of a class with ``attrs`` attributes. + """ + if _config._run_validators is False: + return + + for a in fields(inst.__class__): + v = a.validator + if v is not None: + v(inst, a, getattr(inst, a.name)) + + +def _is_slot_cls(cls): + return "__slots__" in cls.__dict__ + + +def _is_slot_attr(a_name, base_attr_map): + """ + Check if the attribute name comes from a slot class. + """ + return a_name in base_attr_map and _is_slot_cls(base_attr_map[a_name]) + + +def _attrs_to_init_script( + attrs, frozen, slots, post_init, cache_hash, base_attr_map, is_exc +): + """ + Return a script of an initializer for *attrs* and a dict of globals. + + The globals are expected by the generated script. + + If *frozen* is True, we cannot set the attributes directly so we use + a cached ``object.__setattr__``. + """ + lines = [] + any_slot_ancestors = any( + _is_slot_attr(a.name, base_attr_map) for a in attrs + ) + if frozen is True: + if slots is True: + lines.append( + # Circumvent the __setattr__ descriptor to save one lookup per + # assignment. + # Note _setattr will be used again below if cache_hash is True + "_setattr = _cached_setattr.__get__(self, self.__class__)" + ) + + def fmt_setter(attr_name, value_var): + return "_setattr('%(attr_name)s', %(value_var)s)" % { + "attr_name": attr_name, + "value_var": value_var, + } + + def fmt_setter_with_converter(attr_name, value_var): + conv_name = _init_converter_pat.format(attr_name) + return "_setattr('%(attr_name)s', %(conv)s(%(value_var)s))" % { + "attr_name": attr_name, + "value_var": value_var, + "conv": conv_name, + } + + else: + # Dict frozen classes assign directly to __dict__. + # But only if the attribute doesn't come from an ancestor slot + # class. + # Note _inst_dict will be used again below if cache_hash is True + lines.append("_inst_dict = self.__dict__") + if any_slot_ancestors: + lines.append( + # Circumvent the __setattr__ descriptor to save one lookup + # per assignment. + "_setattr = _cached_setattr.__get__(self, self.__class__)" + ) + + def fmt_setter(attr_name, value_var): + if _is_slot_attr(attr_name, base_attr_map): + res = "_setattr('%(attr_name)s', %(value_var)s)" % { + "attr_name": attr_name, + "value_var": value_var, + } + else: + res = "_inst_dict['%(attr_name)s'] = %(value_var)s" % { + "attr_name": attr_name, + "value_var": value_var, + } + return res + + def fmt_setter_with_converter(attr_name, value_var): + conv_name = _init_converter_pat.format(attr_name) + if _is_slot_attr(attr_name, base_attr_map): + tmpl = "_setattr('%(attr_name)s', %(c)s(%(value_var)s))" + else: + tmpl = "_inst_dict['%(attr_name)s'] = %(c)s(%(value_var)s)" + return tmpl % { + "attr_name": attr_name, + "value_var": value_var, + "c": conv_name, + } + + else: + # Not frozen. + def fmt_setter(attr_name, value): + return "self.%(attr_name)s = %(value)s" % { + "attr_name": attr_name, + "value": value, + } + + def fmt_setter_with_converter(attr_name, value_var): + conv_name = _init_converter_pat.format(attr_name) + return "self.%(attr_name)s = %(conv)s(%(value_var)s)" % { + "attr_name": attr_name, + "value_var": value_var, + "conv": conv_name, + } + + args = [] + kw_only_args = [] + attrs_to_validate = [] + + # This is a dictionary of names to validator and converter callables. + # Injecting this into __init__ globals lets us avoid lookups. + names_for_globals = {} + annotations = {"return": None} + + for a in attrs: + if a.validator: + attrs_to_validate.append(a) + attr_name = a.name + arg_name = a.name.lstrip("_") + has_factory = isinstance(a.default, Factory) + if has_factory and a.default.takes_self: + maybe_self = "self" + else: + maybe_self = "" + if a.init is False: + if has_factory: + init_factory_name = _init_factory_pat.format(a.name) + if a.converter is not None: + lines.append( + fmt_setter_with_converter( + attr_name, + init_factory_name + "({0})".format(maybe_self), + ) + ) + conv_name = _init_converter_pat.format(a.name) + names_for_globals[conv_name] = a.converter + else: + lines.append( + fmt_setter( + attr_name, + init_factory_name + "({0})".format(maybe_self), + ) + ) + names_for_globals[init_factory_name] = a.default.factory + else: + if a.converter is not None: + lines.append( + fmt_setter_with_converter( + attr_name, + "attr_dict['{attr_name}'].default".format( + attr_name=attr_name + ), + ) + ) + conv_name = _init_converter_pat.format(a.name) + names_for_globals[conv_name] = a.converter + else: + lines.append( + fmt_setter( + attr_name, + "attr_dict['{attr_name}'].default".format( + attr_name=attr_name + ), + ) + ) + elif a.default is not NOTHING and not has_factory: + arg = "{arg_name}=attr_dict['{attr_name}'].default".format( + arg_name=arg_name, attr_name=attr_name + ) + if a.kw_only: + kw_only_args.append(arg) + else: + args.append(arg) + if a.converter is not None: + lines.append(fmt_setter_with_converter(attr_name, arg_name)) + names_for_globals[ + _init_converter_pat.format(a.name) + ] = a.converter + else: + lines.append(fmt_setter(attr_name, arg_name)) + elif has_factory: + arg = "{arg_name}=NOTHING".format(arg_name=arg_name) + if a.kw_only: + kw_only_args.append(arg) + else: + args.append(arg) + lines.append( + "if {arg_name} is not NOTHING:".format(arg_name=arg_name) + ) + init_factory_name = _init_factory_pat.format(a.name) + if a.converter is not None: + lines.append( + " " + fmt_setter_with_converter(attr_name, arg_name) + ) + lines.append("else:") + lines.append( + " " + + fmt_setter_with_converter( + attr_name, + init_factory_name + "({0})".format(maybe_self), + ) + ) + names_for_globals[ + _init_converter_pat.format(a.name) + ] = a.converter + else: + lines.append(" " + fmt_setter(attr_name, arg_name)) + lines.append("else:") + lines.append( + " " + + fmt_setter( + attr_name, + init_factory_name + "({0})".format(maybe_self), + ) + ) + names_for_globals[init_factory_name] = a.default.factory + else: + if a.kw_only: + kw_only_args.append(arg_name) + else: + args.append(arg_name) + if a.converter is not None: + lines.append(fmt_setter_with_converter(attr_name, arg_name)) + names_for_globals[ + _init_converter_pat.format(a.name) + ] = a.converter + else: + lines.append(fmt_setter(attr_name, arg_name)) + + if a.init is True and a.converter is None and a.type is not None: + annotations[arg_name] = a.type + + if attrs_to_validate: # we can skip this if there are no validators. + names_for_globals["_config"] = _config + lines.append("if _config._run_validators is True:") + for a in attrs_to_validate: + val_name = "__attr_validator_{}".format(a.name) + attr_name = "__attr_{}".format(a.name) + lines.append( + " {}(self, {}, self.{})".format(val_name, attr_name, a.name) + ) + names_for_globals[val_name] = a.validator + names_for_globals[attr_name] = a + if post_init: + lines.append("self.__attrs_post_init__()") + + # because this is set only after __attrs_post_init is called, a crash + # will result if post-init tries to access the hash code. This seemed + # preferable to setting this beforehand, in which case alteration to + # field values during post-init combined with post-init accessing the + # hash code would result in silent bugs. + if cache_hash: + if frozen: + if slots: + # if frozen and slots, then _setattr defined above + init_hash_cache = "_setattr('%s', %s)" + else: + # if frozen and not slots, then _inst_dict defined above + init_hash_cache = "_inst_dict['%s'] = %s" + else: + init_hash_cache = "self.%s = %s" + lines.append(init_hash_cache % (_hash_cache_field, "None")) + + # For exceptions we rely on BaseException.__init__ for proper + # initialization. + if is_exc: + vals = ",".join("self." + a.name for a in attrs if a.init) + + lines.append("BaseException.__init__(self, %s)" % (vals,)) + + args = ", ".join(args) + if kw_only_args: + if PY2: + raise PythonTooOldError( + "Keyword-only arguments only work on Python 3 and later." + ) + + args += "{leading_comma}*, {kw_only_args}".format( + leading_comma=", " if args else "", + kw_only_args=", ".join(kw_only_args), + ) + return ( + """\ +def __init__(self, {args}): + {lines} +""".format( + args=args, lines="\n ".join(lines) if lines else "pass" + ), + names_for_globals, + annotations, + ) + + +class Attribute(object): + """ + *Read-only* representation of an attribute. + + :attribute name: The name of the attribute. + + Plus *all* arguments of `attr.ib` (except for ``factory`` + which is only syntactic sugar for ``default=Factory(...)``. + + For the version history of the fields, see `attr.ib`. + """ + + __slots__ = ( + "name", + "default", + "validator", + "repr", + "eq", + "order", + "hash", + "init", + "metadata", + "type", + "converter", + "kw_only", + ) + + def __init__( + self, + name, + default, + validator, + repr, + cmp, # XXX: unused, remove along with other cmp code. + hash, + init, + metadata=None, + type=None, + converter=None, + kw_only=False, + eq=None, + order=None, + ): + eq, order = _determine_eq_order(cmp, eq, order) + + # Cache this descriptor here to speed things up later. + bound_setattr = _obj_setattr.__get__(self, Attribute) + + # Despite the big red warning, people *do* instantiate `Attribute` + # themselves. + bound_setattr("name", name) + bound_setattr("default", default) + bound_setattr("validator", validator) + bound_setattr("repr", repr) + bound_setattr("eq", eq) + bound_setattr("order", order) + bound_setattr("hash", hash) + bound_setattr("init", init) + bound_setattr("converter", converter) + bound_setattr( + "metadata", + ( + metadata_proxy(metadata) + if metadata + else _empty_metadata_singleton + ), + ) + bound_setattr("type", type) + bound_setattr("kw_only", kw_only) + + def __setattr__(self, name, value): + raise FrozenInstanceError() + + @classmethod + def from_counting_attr(cls, name, ca, type=None): + # type holds the annotated value. deal with conflicts: + if type is None: + type = ca.type + elif ca.type is not None: + raise ValueError( + "Type annotation and type argument cannot both be present" + ) + inst_dict = { + k: getattr(ca, k) + for k in Attribute.__slots__ + if k + not in ( + "name", + "validator", + "default", + "type", + ) # exclude methods and deprecated alias + } + return cls( + name=name, + validator=ca._validator, + default=ca._default, + type=type, + cmp=None, + **inst_dict + ) + + @property + def cmp(self): + """ + Simulate the presence of a cmp attribute and warn. + """ + warnings.warn(_CMP_DEPRECATION, DeprecationWarning, stacklevel=2) + + return self.eq and self.order + + # Don't use attr.assoc since fields(Attribute) doesn't work + def _assoc(self, **changes): + """ + Copy *self* and apply *changes*. + """ + new = copy.copy(self) + + new._setattrs(changes.items()) + + return new + + # Don't use _add_pickle since fields(Attribute) doesn't work + def __getstate__(self): + """ + Play nice with pickle. + """ + return tuple( + getattr(self, name) if name != "metadata" else dict(self.metadata) + for name in self.__slots__ + ) + + def __setstate__(self, state): + """ + Play nice with pickle. + """ + self._setattrs(zip(self.__slots__, state)) + + def _setattrs(self, name_values_pairs): + bound_setattr = _obj_setattr.__get__(self, Attribute) + for name, value in name_values_pairs: + if name != "metadata": + bound_setattr(name, value) + else: + bound_setattr( + name, + metadata_proxy(value) + if value + else _empty_metadata_singleton, + ) + + +_a = [ + Attribute( + name=name, + default=NOTHING, + validator=None, + repr=True, + cmp=None, + eq=True, + order=False, + hash=(name != "metadata"), + init=True, + ) + for name in Attribute.__slots__ +] + +Attribute = _add_hash( + _add_eq(_add_repr(Attribute, attrs=_a), attrs=_a), + attrs=[a for a in _a if a.hash], +) + + +class _CountingAttr(object): + """ + Intermediate representation of attributes that uses a counter to preserve + the order in which the attributes have been defined. + + *Internal* data structure of the attrs library. Running into is most + likely the result of a bug like a forgotten `@attr.s` decorator. + """ + + __slots__ = ( + "counter", + "_default", + "repr", + "eq", + "order", + "hash", + "init", + "metadata", + "_validator", + "converter", + "type", + "kw_only", + ) + __attrs_attrs__ = tuple( + Attribute( + name=name, + default=NOTHING, + validator=None, + repr=True, + cmp=None, + hash=True, + init=True, + kw_only=False, + eq=True, + order=False, + ) + for name in ( + "counter", + "_default", + "repr", + "eq", + "order", + "hash", + "init", + ) + ) + ( + Attribute( + name="metadata", + default=None, + validator=None, + repr=True, + cmp=None, + hash=False, + init=True, + kw_only=False, + eq=True, + order=False, + ), + ) + cls_counter = 0 + + def __init__( + self, + default, + validator, + repr, + cmp, # XXX: unused, remove along with cmp + hash, + init, + converter, + metadata, + type, + kw_only, + eq, + order, + ): + _CountingAttr.cls_counter += 1 + self.counter = _CountingAttr.cls_counter + self._default = default + # If validator is a list/tuple, wrap it using helper validator. + if validator and isinstance(validator, (list, tuple)): + self._validator = and_(*validator) + else: + self._validator = validator + self.repr = repr + self.eq = eq + self.order = order + self.hash = hash + self.init = init + self.converter = converter + self.metadata = metadata + self.type = type + self.kw_only = kw_only + + def validator(self, meth): + """ + Decorator that adds *meth* to the list of validators. + + Returns *meth* unchanged. + + .. versionadded:: 17.1.0 + """ + if self._validator is None: + self._validator = meth + else: + self._validator = and_(self._validator, meth) + return meth + + def default(self, meth): + """ + Decorator that allows to set the default for an attribute. + + Returns *meth* unchanged. + + :raises DefaultAlreadySetError: If default has been set before. + + .. versionadded:: 17.1.0 + """ + if self._default is not NOTHING: + raise DefaultAlreadySetError() + + self._default = Factory(meth, takes_self=True) + + return meth + + +_CountingAttr = _add_eq(_add_repr(_CountingAttr)) + + +@attrs(slots=True, init=False, hash=True) +class Factory(object): + """ + Stores a factory callable. + + If passed as the default value to `attr.ib`, the factory is used to + generate a new value. + + :param callable factory: A callable that takes either none or exactly one + mandatory positional argument depending on *takes_self*. + :param bool takes_self: Pass the partially initialized instance that is + being initialized as a positional argument. + + .. versionadded:: 17.1.0 *takes_self* + """ + + factory = attrib() + takes_self = attrib() + + def __init__(self, factory, takes_self=False): + """ + `Factory` is part of the default machinery so if we want a default + value here, we have to implement it ourselves. + """ + self.factory = factory + self.takes_self = takes_self + + +def make_class(name, attrs, bases=(object,), **attributes_arguments): + """ + A quick way to create a new class called *name* with *attrs*. + + :param name: The name for the new class. + :type name: str + + :param attrs: A list of names or a dictionary of mappings of names to + attributes. + + If *attrs* is a list or an ordered dict (`dict` on Python 3.6+, + `collections.OrderedDict` otherwise), the order is deduced from + the order of the names or attributes inside *attrs*. Otherwise the + order of the definition of the attributes is used. + :type attrs: `list` or `dict` + + :param tuple bases: Classes that the new class will subclass. + + :param attributes_arguments: Passed unmodified to `attr.s`. + + :return: A new class with *attrs*. + :rtype: type + + .. versionadded:: 17.1.0 *bases* + .. versionchanged:: 18.1.0 If *attrs* is ordered, the order is retained. + """ + if isinstance(attrs, dict): + cls_dict = attrs + elif isinstance(attrs, (list, tuple)): + cls_dict = dict((a, attrib()) for a in attrs) + else: + raise TypeError("attrs argument must be a dict or a list.") + + post_init = cls_dict.pop("__attrs_post_init__", None) + type_ = type( + name, + bases, + {} if post_init is None else {"__attrs_post_init__": post_init}, + ) + # For pickling to work, the __module__ variable needs to be set to the + # frame where the class is created. Bypass this step in environments where + # sys._getframe is not defined (Jython for example) or sys._getframe is not + # defined for arguments greater than 0 (IronPython). + try: + type_.__module__ = sys._getframe(1).f_globals.get( + "__name__", "__main__" + ) + except (AttributeError, ValueError): + pass + + # We do it here for proper warnings with meaningful stacklevel. + cmp = attributes_arguments.pop("cmp", None) + attributes_arguments["eq"], attributes_arguments[ + "order" + ] = _determine_eq_order( + cmp, attributes_arguments.get("eq"), attributes_arguments.get("order") + ) + + return _attrs(these=cls_dict, **attributes_arguments)(type_) + + +# These are required by within this module so we define them here and merely +# import into .validators. + + +@attrs(slots=True, hash=True) +class _AndValidator(object): + """ + Compose many validators to a single one. + """ + + _validators = attrib() + + def __call__(self, inst, attr, value): + for v in self._validators: + v(inst, attr, value) + + +def and_(*validators): + """ + A validator that composes multiple validators into one. + + When called on a value, it runs all wrapped validators. + + :param validators: Arbitrary number of validators. + :type validators: callables + + .. versionadded:: 17.1.0 + """ + vals = [] + for validator in validators: + vals.extend( + validator._validators + if isinstance(validator, _AndValidator) + else [validator] + ) + + return _AndValidator(tuple(vals)) diff --git a/venv/lib/python3.7/site-packages/attr/converters.py b/venv/lib/python3.7/site-packages/attr/converters.py new file mode 100644 index 0000000..8592897 --- /dev/null +++ b/venv/lib/python3.7/site-packages/attr/converters.py @@ -0,0 +1,78 @@ +""" +Commonly useful converters. +""" + +from __future__ import absolute_import, division, print_function + +from ._make import NOTHING, Factory + + +def optional(converter): + """ + A converter that allows an attribute to be optional. An optional attribute + is one which can be set to ``None``. + + :param callable converter: the converter that is used for non-``None`` + values. + + .. versionadded:: 17.1.0 + """ + + def optional_converter(val): + if val is None: + return None + return converter(val) + + return optional_converter + + +def default_if_none(default=NOTHING, factory=None): + """ + A converter that allows to replace ``None`` values by *default* or the + result of *factory*. + + :param default: Value to be used if ``None`` is passed. Passing an instance + of `attr.Factory` is supported, however the ``takes_self`` option + is *not*. + :param callable factory: A callable that takes not parameters whose result + is used if ``None`` is passed. + + :raises TypeError: If **neither** *default* or *factory* is passed. + :raises TypeError: If **both** *default* and *factory* are passed. + :raises ValueError: If an instance of `attr.Factory` is passed with + ``takes_self=True``. + + .. versionadded:: 18.2.0 + """ + if default is NOTHING and factory is None: + raise TypeError("Must pass either `default` or `factory`.") + + if default is not NOTHING and factory is not None: + raise TypeError( + "Must pass either `default` or `factory` but not both." + ) + + if factory is not None: + default = Factory(factory) + + if isinstance(default, Factory): + if default.takes_self: + raise ValueError( + "`takes_self` is not supported by default_if_none." + ) + + def default_if_none_converter(val): + if val is not None: + return val + + return default.factory() + + else: + + def default_if_none_converter(val): + if val is not None: + return val + + return default + + return default_if_none_converter diff --git a/venv/lib/python3.7/site-packages/attr/converters.pyi b/venv/lib/python3.7/site-packages/attr/converters.pyi new file mode 100644 index 0000000..63b2a38 --- /dev/null +++ b/venv/lib/python3.7/site-packages/attr/converters.pyi @@ -0,0 +1,12 @@ +from typing import TypeVar, Optional, Callable, overload +from . import _ConverterType + +_T = TypeVar("_T") + +def optional( + converter: _ConverterType[_T] +) -> _ConverterType[Optional[_T]]: ... +@overload +def default_if_none(default: _T) -> _ConverterType[_T]: ... +@overload +def default_if_none(*, factory: Callable[[], _T]) -> _ConverterType[_T]: ... diff --git a/venv/lib/python3.7/site-packages/attr/exceptions.pyi b/venv/lib/python3.7/site-packages/attr/exceptions.pyi new file mode 100644 index 0000000..736fde2 --- /dev/null +++ b/venv/lib/python3.7/site-packages/attr/exceptions.pyi @@ -0,0 +1,15 @@ +from typing import Any + +class FrozenInstanceError(AttributeError): + msg: str = ... + +class AttrsAttributeNotFoundError(ValueError): ... +class NotAnAttrsClassError(ValueError): ... +class DefaultAlreadySetError(RuntimeError): ... +class UnannotatedAttributeError(RuntimeError): ... +class PythonTooOldError(RuntimeError): ... + +class NotCallableError(TypeError): + msg: str = ... + value: Any = ... + def __init__(self, msg: str, value: Any) -> None: ... diff --git a/venv/lib/python3.7/site-packages/attr/filters.py b/venv/lib/python3.7/site-packages/attr/filters.py new file mode 100644 index 0000000..dc47e8f --- /dev/null +++ b/venv/lib/python3.7/site-packages/attr/filters.py @@ -0,0 +1,52 @@ +""" +Commonly useful filters for `attr.asdict`. +""" + +from __future__ import absolute_import, division, print_function + +from ._compat import isclass +from ._make import Attribute + + +def _split_what(what): + """ + Returns a tuple of `frozenset`s of classes and attributes. + """ + return ( + frozenset(cls for cls in what if isclass(cls)), + frozenset(cls for cls in what if isinstance(cls, Attribute)), + ) + + +def include(*what): + """ + Whitelist *what*. + + :param what: What to whitelist. + :type what: `list` of `type` or `attr.Attribute`\\ s + + :rtype: `callable` + """ + cls, attrs = _split_what(what) + + def include_(attribute, value): + return value.__class__ in cls or attribute in attrs + + return include_ + + +def exclude(*what): + """ + Blacklist *what*. + + :param what: What to blacklist. + :type what: `list` of classes or `attr.Attribute`\\ s. + + :rtype: `callable` + """ + cls, attrs = _split_what(what) + + def exclude_(attribute, value): + return value.__class__ not in cls and attribute not in attrs + + return exclude_ diff --git a/venv/lib/python3.7/site-packages/attrs-19.3.0.dist-info/INSTALLER b/venv/lib/python3.7/site-packages/attrs-19.3.0.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/lib/python3.7/site-packages/attrs-19.3.0.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/lib/python3.7/site-packages/attrs-19.3.0.dist-info/LICENSE b/venv/lib/python3.7/site-packages/attrs-19.3.0.dist-info/LICENSE new file mode 100644 index 0000000..7ae3df9 --- /dev/null +++ b/venv/lib/python3.7/site-packages/attrs-19.3.0.dist-info/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015 Hynek Schlawack + +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.7/site-packages/attrs-19.3.0.dist-info/METADATA b/venv/lib/python3.7/site-packages/attrs-19.3.0.dist-info/METADATA new file mode 100644 index 0000000..a106415 --- /dev/null +++ b/venv/lib/python3.7/site-packages/attrs-19.3.0.dist-info/METADATA @@ -0,0 +1,229 @@ +Metadata-Version: 2.1 +Name: attrs +Version: 19.3.0 +Summary: Classes Without Boilerplate +Home-page: https://www.attrs.org/ +Author: Hynek Schlawack +Author-email: hs@ox.cx +Maintainer: Hynek Schlawack +Maintainer-email: hs@ox.cx +License: MIT +Project-URL: Documentation, https://www.attrs.org/ +Project-URL: Bug Tracker, https://github.com/python-attrs/attrs/issues +Project-URL: Source Code, https://github.com/python-attrs/attrs +Keywords: class,attribute,boilerplate +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: Natural Language :: English +Classifier: License :: OSI Approved :: MIT License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.4 +Classifier: Programming Language :: Python :: 3.5 +Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.* +Description-Content-Type: text/x-rst +Provides-Extra: azure-pipelines +Requires-Dist: coverage ; extra == 'azure-pipelines' +Requires-Dist: hypothesis ; extra == 'azure-pipelines' +Requires-Dist: pympler ; extra == 'azure-pipelines' +Requires-Dist: pytest (>=4.3.0) ; extra == 'azure-pipelines' +Requires-Dist: six ; extra == 'azure-pipelines' +Requires-Dist: zope.interface ; extra == 'azure-pipelines' +Requires-Dist: pytest-azurepipelines ; extra == 'azure-pipelines' +Provides-Extra: dev +Requires-Dist: coverage ; extra == 'dev' +Requires-Dist: hypothesis ; extra == 'dev' +Requires-Dist: pympler ; extra == 'dev' +Requires-Dist: pytest (>=4.3.0) ; extra == 'dev' +Requires-Dist: six ; extra == 'dev' +Requires-Dist: zope.interface ; extra == 'dev' +Requires-Dist: sphinx ; extra == 'dev' +Requires-Dist: pre-commit ; extra == 'dev' +Provides-Extra: docs +Requires-Dist: sphinx ; extra == 'docs' +Requires-Dist: zope.interface ; extra == 'docs' +Provides-Extra: tests +Requires-Dist: coverage ; extra == 'tests' +Requires-Dist: hypothesis ; extra == 'tests' +Requires-Dist: pympler ; extra == 'tests' +Requires-Dist: pytest (>=4.3.0) ; extra == 'tests' +Requires-Dist: six ; extra == 'tests' +Requires-Dist: zope.interface ; extra == 'tests' + +.. image:: https://www.attrs.org/en/latest/_static/attrs_logo.png + :alt: attrs Logo + +====================================== +``attrs``: Classes Without Boilerplate +====================================== + +.. image:: https://readthedocs.org/projects/attrs/badge/?version=stable + :target: https://www.attrs.org/en/stable/?badge=stable + :alt: Documentation Status + +.. image:: https://attrs.visualstudio.com/attrs/_apis/build/status/python-attrs.attrs?branchName=master + :target: https://attrs.visualstudio.com/attrs/_build/latest?definitionId=1&branchName=master + :alt: CI Status + +.. image:: https://codecov.io/github/python-attrs/attrs/branch/master/graph/badge.svg + :target: https://codecov.io/github/python-attrs/attrs + :alt: Test Coverage + +.. image:: https://img.shields.io/badge/code%20style-black-000000.svg + :target: https://github.com/psf/black + :alt: Code style: black + +.. teaser-begin + +``attrs`` is the Python package that will bring back the **joy** of **writing classes** by relieving you from the drudgery of implementing object protocols (aka `dunder `_ methods). + +Its main goal is to help you to write **concise** and **correct** software without slowing down your code. + +.. -spiel-end- + +For that, it gives you a class decorator and a way to declaratively define the attributes on that class: + +.. -code-begin- + +.. code-block:: pycon + + >>> import attr + + >>> @attr.s + ... class SomeClass(object): + ... a_number = attr.ib(default=42) + ... list_of_numbers = attr.ib(factory=list) + ... + ... def hard_math(self, another_number): + ... return self.a_number + sum(self.list_of_numbers) * another_number + + + >>> sc = SomeClass(1, [1, 2, 3]) + >>> sc + SomeClass(a_number=1, list_of_numbers=[1, 2, 3]) + + >>> sc.hard_math(3) + 19 + >>> sc == SomeClass(1, [1, 2, 3]) + True + >>> sc != SomeClass(2, [3, 2, 1]) + True + + >>> attr.asdict(sc) + {'a_number': 1, 'list_of_numbers': [1, 2, 3]} + + >>> SomeClass() + SomeClass(a_number=42, list_of_numbers=[]) + + >>> C = attr.make_class("C", ["a", "b"]) + >>> C("foo", "bar") + C(a='foo', b='bar') + + +After *declaring* your attributes ``attrs`` gives you: + +- a concise and explicit overview of the class's attributes, +- a nice human-readable ``__repr__``, +- a complete set of comparison methods (equality and ordering), +- an initializer, +- and much more, + +*without* writing dull boilerplate code again and again and *without* runtime performance penalties. + +On Python 3.6 and later, you can often even drop the calls to ``attr.ib()`` by using `type annotations `_. + +This gives you the power to use actual classes with actual types in your code instead of confusing ``tuple``\ s or `confusingly behaving `_ ``namedtuple``\ s. +Which in turn encourages you to write *small classes* that do `one thing well `_. +Never again violate the `single responsibility principle `_ just because implementing ``__init__`` et al is a painful drag. + + +.. -testimonials- + +Testimonials +============ + +**Amber Hawkie Brown**, Twisted Release Manager and Computer Owl: + + Writing a fully-functional class using attrs takes me less time than writing this testimonial. + + +**Glyph Lefkowitz**, creator of `Twisted `_, `Automat `_, and other open source software, in `The One Python Library Everyone Needs `_: + + I’m looking forward to is being able to program in Python-with-attrs everywhere. + It exerts a subtle, but positive, design influence in all the codebases I’ve see it used in. + + +**Kenneth Reitz**, creator of `Requests `_ (`on paper no less `_!): + + attrs—classes for humans. I like it. + + +**Łukasz Langa**, creator of `Black `_, prolific Python core developer, and release manager for Python 3.8 and 3.9: + + I'm increasingly digging your attr.ocity. Good job! + + +.. -end- + +.. -project-information- + +Getting Help +============ + +Please use the ``python-attrs`` tag on `StackOverflow `_ to get help. + +Answering questions of your fellow developers is also great way to help the project! + + +Project Information +=================== + +``attrs`` is released under the `MIT `_ license, +its documentation lives at `Read the Docs `_, +the code on `GitHub `_, +and the latest release on `PyPI `_. +It’s rigorously tested on Python 2.7, 3.4+, and PyPy. + +We collect information on **third-party extensions** in our `wiki `_. +Feel free to browse and add your own! + +If you'd like to contribute to ``attrs`` you're most welcome and we've written `a little guide `_ to get you started! + + +Release Information +=================== + +19.3.0 (2019-10-15) +------------------- + +Changes +^^^^^^^ + +- Fixed ``auto_attribs`` usage when default values cannot be compared directly with ``==``, such as ``numpy`` arrays. + `#585 `_ + +`Full changelog `_. + +Credits +======= + +``attrs`` is written and maintained by `Hynek Schlawack `_. + +The development is kindly supported by `Variomedia AG `_. + +A full list of contributors can be found in `GitHub's overview `_. + +It’s the spiritual successor of `characteristic `_ and aspires to fix some of it clunkiness and unfortunate decisions. +Both were inspired by Twisted’s `FancyEqMixin `_ but both are implemented using class decorators because `subclassing is bad for you `_, m’kay? + + diff --git a/venv/lib/python3.7/site-packages/autobahn-19.11.1.dist-info/LICENSE b/venv/lib/python3.7/site-packages/autobahn-19.11.1.dist-info/LICENSE new file mode 100644 index 0000000..98b5b34 --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn-19.11.1.dist-info/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Crossbar.io Technologies GmbH + +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.7/site-packages/autobahn-19.11.1.dist-info/RECORD b/venv/lib/python3.7/site-packages/autobahn-19.11.1.dist-info/RECORD new file mode 100644 index 0000000..36b593e --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn-19.11.1.dist-info/RECORD @@ -0,0 +1,347 @@ +autobahn/__init__.py,sha256=uCdcBR1rNLDCosowHs3ea1A1lH10lrbC_aPjM5YGjOM,1399 +autobahn/__main__.py,sha256=vMSMsxDkAWFpIv-53lNBn9k7iFIstouSfLmJcTZPTtc,11114 +autobahn/_version.py,sha256=nAupaY5VTtY8dIxAKX-Xn8RL_GqiKBfOKcwKZ7Ii_XM,1319 +autobahn/exception.py,sha256=zJG4u2Y7iQdvBocW6EA0WYCCjB4s50lJw7nTUwwbKDA,1614 +autobahn/util.py,sha256=Cu68EMPBGYN85_AvrVBY0E2StDiUwHVngCk1U9IfuGs,27599 +autobahn/asyncio/__init__.py,sha256=EfiMPwA8Ivr-QPWKr1iuM5xpeb7S-n1UJyFeihRUnfA,2055 +autobahn/asyncio/component.py,sha256=5BNTpptXPv1y4UfDURJ-nxX0BC2RfdT1nizBgo4VaME,16045 +autobahn/asyncio/rawsocket.py,sha256=TVXD_CaJaWZ9Vfb7TiNiXNWoSZTSyu6-jlhpatw7Xd8,17259 +autobahn/asyncio/util.py,sha256=GvrzlbVwIRU7v4EIt2AhPyK_p2eQ8TmyUZw7UqsTDdA,3297 +autobahn/asyncio/wamp.py,sha256=2R7wr7VRYyknKID58ZHPAeTTSgBTrB-uiwLJPl7omDY,11247 +autobahn/asyncio/websocket.py,sha256=EzHkmuQcPC8IdzbCddtAHh_FfIyOrpZ7BoLd-lpRh8o,12134 +autobahn/asyncio/xbr.py,sha256=DSnL-qHXyU9O9Tz6QpguGDxN5t8vJDpaEwB_Y2OLNzg,3465 +autobahn/asyncio/test/README,sha256=LB9qc37yrpi15mmHeOw9sJ7yu9Bzo0xxcXJD2IvNYjM,951 +autobahn/asyncio/test/test_asyncio_rawsocket.py,sha256=SXo4IwYrka9jf_gl2bg4Gn7p5yfOXOEyj98hoGbSrbM,7713 +autobahn/asyncio/test/test_asyncio_websocket.py,sha256=9MPJoVTWrYHBoI0dnB4wQYihU9Uu9hDL-GP3fzwXEIk,2401 +autobahn/nvx/__init__.py,sha256=E2gqYZ596EK-HPfki680pP3KFimqfCCWVhQdzDYtH3c,1426 +autobahn/nvx/_utf8validator.c,sha256=C6mpS9BVrkwyrfmhqnbdQXn8nMF_fpo8ZYGekaZreUA,17063 +autobahn/nvx/_utf8validator.py,sha256=ADlNAm_kIUiOkKQnWfywd9d2JOEmJGeyGh0GF4bFcpk,2543 +autobahn/nvx/test/test_utf8validator.py,sha256=_pAJPTbIW9hogD44BvsKXcGdUPswV811NptiFnITnLU,14213 +autobahn/rawsocket/__init__.py,sha256=NhWjNyqDKUs_FqdWfLdMN5-ddQ8OrWaYok3_FRZSbJU,1293 +autobahn/rawsocket/util.py,sha256=7TuuTgPyKcFNQkpPmxy2GYUcQAMagx7dKPIuODifLtk,5931 +autobahn/rawsocket/test/__init__.py,sha256=NhWjNyqDKUs_FqdWfLdMN5-ddQ8OrWaYok3_FRZSbJU,1293 +autobahn/rawsocket/test/test_rawsocket_url.py,sha256=orFompUzrWUw7QtgcrIDFss-ZycfYgUnfBsw-Utf6Zg,4982 +autobahn/test/__init__.py,sha256=_drclixbeIOutvlA9xEKpg1NUa9t6ZVcRFkl8JIToBA,2471 +autobahn/test/test_rng.py,sha256=J7_nux44GBRcvBHU3INgaglkEUDK_lreE91sLnl9XXQ,3873 +autobahn/test/test_util.py,sha256=dBT7j-sca67xfI9lCUctjeRtELK_NwIwFDU-0F3h6Mg,1850 +autobahn/twisted/__init__.py,sha256=af4M9V4yMKhAoAA9cZCNjBLOhccbi_0BSwk8YeZJVE0,3110 +autobahn/twisted/choosereactor.py,sha256=8-kEWvufaLmlAxvYbHiLxR6CIezuzp_P1a3gdY72fCA,9042 +autobahn/twisted/component.py,sha256=NJBsvuGn5OVog0KM7QLoFb6oDVmZKuGlHrgzF4uPfqo,15052 +autobahn/twisted/cryptosign.py,sha256=FCi4fRGDDOJJZQqGyo32MypQzuLdQs-2Moz4SarY7Cs,5856 +autobahn/twisted/forwarder.py,sha256=HGW35hGYBBHrRTzU9-K-EJth8uzriEgxAhscohfdzok,4695 +autobahn/twisted/rawsocket.py,sha256=szK49XxxpeoSOBHQqB5uJtPLDBBSTSyfl8W1aLJ4zOQ,22903 +autobahn/twisted/resource.py,sha256=Uobz7135OXu8ljkj6Kh1aBFydu7uUg7zrKTSQX7YFZA,7208 +autobahn/twisted/util.py,sha256=mGaVwPAplcnd3ggtOYywpqUzwO9RhDsB3-kqaaM-2FE,5192 +autobahn/twisted/wamp.py,sha256=iHrowZDebCnQ_G9mBmR2gu-f9nvDLQkNaPRxQlFDgOY,32347 +autobahn/twisted/websocket.py,sha256=tEZ0sHI9d4cn9iHmyFdne1nKtd-Tw_0bF4VPSUm4vos,30162 +autobahn/twisted/xbr.py,sha256=vAK3mNAGBJLQ-IBT16M3QL4l4VgoRhOu--PVP9I2va4,3834 +autobahn/twisted/testing/__init__.py,sha256=JKkTGvbTkmEPNG5Eh83RcA27Tylmu0ZTUQa_Vx5fmhw,10000 +autobahn/wamp/__init__.py,sha256=PezDFOWF7GIM63pZRXnsD6LgC8fhaaTHgrmFwBvY8vI,2317 +autobahn/wamp/auth.py,sha256=r5mcqTTxe3lBineC-cz9hrD3qFeNqxilaLs5T-1U2zg,20164 +autobahn/wamp/component.py,sha256=O5LrREX6CePgRmDUAYg07uj1U-s3e4Paz8hPhgoD1kI,37093 +autobahn/wamp/cryptobox.py,sha256=lfo_cUTrqMq3imNY1uVp5eoZ_025W75V7wA6m-QlpBs,10673 +autobahn/wamp/cryptosign.py,sha256=wFUeN99vN4qLJbMVNAkUnzST3Dhap16J7FwvkLMmjXg,21198 +autobahn/wamp/exception.py,sha256=9teqpFXPJ3Gjlb0S7_irsCpXCLMLpUksiM8EEuAIpyw,10115 +autobahn/wamp/interfaces.py,sha256=iXad4yNp4ul440jS534MzxWMtV7wW2iupwEw08Xidng,26914 +autobahn/wamp/message.py,sha256=_oAsii5xTLDPG2AmQqIGu021fGz8TGmrEpX8foeoZs4,215716 +autobahn/wamp/message_fbs.py,sha256=6NFttrOPlGdtSNBQ-375JezbDOo14kYR-vKrUhbjBFQ,4649 +autobahn/wamp/protocol.py,sha256=uyEns1_ul27nkpTKFe8_hyhfVquxkPWUsRTeNAeP0ak,85576 +autobahn/wamp/request.py,sha256=u0dk4eMIlMkKSe2BU2_SKyT_ds5PoqSVIItWjriRZAg,9559 +autobahn/wamp/role.py,sha256=ojL8hqeyDB1fecD7GH5VGjo94rfg3NWBYtbblFz4CXM,10986 +autobahn/wamp/serializer.py,sha256=2cSw2jeCZ5FHkaptt5O0ArFhVN8IXTs98qs9T2EnOdY,26307 +autobahn/wamp/types.py,sha256=YL-qf_owVahxVpDKIbYhBC4Rr6itQq_d4aTxJV3Sv1o,52400 +autobahn/wamp/uri.py,sha256=-fEI4eYF01S4p4U-2KJoQqIqKFNVs7L1ca0cQ2lv3P4,11613 +autobahn/wamp/websocket.py,sha256=3yO5qrD3Yx2C0ya7BAWA542XXC3Lv_yIq3KsoAC1oqQ,11165 +autobahn/wamp/gen/__init__.py,sha256=NhWjNyqDKUs_FqdWfLdMN5-ddQ8OrWaYok3_FRZSbJU,1293 +autobahn/wamp/gen/schema/auth.bfbs,sha256=5NohfPH8xErVkCRyH00Rvj5vYXOyKt4B44-rvVWiFiM,12792 +autobahn/wamp/gen/schema/pubsub.bfbs,sha256=SpSvTkNV_dlFIat08VO4-SojyJWRY0qyhszV2oBmDV8,8840 +autobahn/wamp/gen/schema/roles.bfbs,sha256=Sjyzs0tFLDrbxNUvJov9Tyx_of7z9k2SHYYElsFer_8,8240 +autobahn/wamp/gen/schema/rpc.bfbs,sha256=XZbU-v1BFD9tBT7Al4GuCWdAJOpVinHxXLwRfvw0Lp8,7664 +autobahn/wamp/gen/schema/session.bfbs,sha256=Q-9TWiilL6qYGiNOewRoyeNx2BKAdUTBh2w017Ejtz0,15944 +autobahn/wamp/gen/schema/types.bfbs,sha256=ih3tez-Jdgwx0V0N07jp4ordvJEiS-11SoHRuEQVndE,3736 +autobahn/wamp/gen/schema/wamp.bfbs,sha256=QENoUkeKlGH2zrDDQOEaschawHAvGNKZvMySQPrdgQk,26856 +autobahn/wamp/gen/wamp/Map.py,sha256=tAF0s5-5-g7YNOKintFpR1d4lUt2gEgYi0R7wRyDF1k,1208 +autobahn/wamp/gen/wamp/Void.py,sha256=S9gG7Z1qe-c0bToR6c2OzhSU8ljvCksqiBFB6s9iljs,550 +autobahn/wamp/gen/wamp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +autobahn/wamp/gen/wamp/proto/Abort.py,sha256=4zEG4LxLduCzuz-bi-vIHNltK1rANazICQiWZE3miUc,1249 +autobahn/wamp/gen/wamp/proto/AnyMessage.py,sha256=GmCjxk29SVpDJIqklYkizaCnh2XTgMNq1HLx8IujnYQ,605 +autobahn/wamp/gen/wamp/proto/AuthCraChallenge.py,sha256=SZVi5fJxDH3k6hEBmuH6TD3hLx2V8szcDIIi2P47iA8,2062 +autobahn/wamp/gen/wamp/proto/AuthCraRequest.py,sha256=-GzXW3MeE3guUaHI6Mnvj6NClIwRFYHToaoP9Aq9jHk,611 +autobahn/wamp/gen/wamp/proto/AuthCraWelcome.py,sha256=CscxVwes4tfiwJMHiFDjV8mDTWsmuSoEJI8DE-QOJXQ,611 +autobahn/wamp/gen/wamp/proto/AuthCryptosignChallenge.py,sha256=_s6rx58ftx5Otl8vrjRRRz6xd4jpmhCKczzUzU8TXNQ,1049 +autobahn/wamp/gen/wamp/proto/AuthCryptosignRequest.py,sha256=TEXT0Hr1XkSl0z5U48CiLl4gEovieIDumcCBoR2PlJU,1409 +autobahn/wamp/gen/wamp/proto/AuthCryptosignWelcome.py,sha256=39bZjIyQNrGRx2-veF71fnC4zThO00pjrpDI1UQmbtI,653 +autobahn/wamp/gen/wamp/proto/AuthFactor.py,sha256=Y1zNCZNRMeWV8IvsaNt-uxLI8-yDFZ2Uc0lzKt6mqIg,234 +autobahn/wamp/gen/wamp/proto/AuthMethod.py,sha256=ZwkdO8-aitDwJLGY2vLbIrbrlg6gnyI5o86SMFXkiK8,222 +autobahn/wamp/gen/wamp/proto/AuthMode.py,sha256=UWgMyhyNUPeu2xw4aqI-ow_a0cvBOfVQ4L0EdOjnvwg,149 +autobahn/wamp/gen/wamp/proto/AuthScramChallenge.py,sha256=77CBgc_3tqNUb3yH80Icq003598p17GmN7KWxWzGTwc,2774 +autobahn/wamp/gen/wamp/proto/AuthScramRequest.py,sha256=aQQye797PXkm1RjldhI0uCW6QvqVHkO4WkkbyuSwzSM,1355 +autobahn/wamp/gen/wamp/proto/AuthScramWelcome.py,sha256=28xHstHV7V-Tu6-N9AnjmvxJSbnLm58k0sFCblyzAnw,997 +autobahn/wamp/gen/wamp/proto/AuthTicketChallenge.py,sha256=90DIv5T_ccz_PjDww7mL5Rk3VIV9N4xvsOFcQXP4rhc,641 +autobahn/wamp/gen/wamp/proto/AuthTicketRequest.py,sha256=ZrFj2sEItg5sYqimyfNMntPtBLfVUjrDuK80X1gjVSc,629 +autobahn/wamp/gen/wamp/proto/AuthTicketWelcome.py,sha256=AxVrC6XudwUDaDZOUCFvPYoENszNWW53lPnnigDt1QY,629 +autobahn/wamp/gen/wamp/proto/Authenticate.py,sha256=cPm08hvSQFrWJqOYfu_fTaaXY1j14a0gtRH6W4DSlq4,1443 +autobahn/wamp/gen/wamp/proto/BrokerFeatures.py,sha256=U1VL0LMW4txZ9f0N27LsVJpzbdsrBjNeTYgKuS3jUJw,6251 +autobahn/wamp/gen/wamp/proto/Call.py,sha256=VmrWRA5DBfA4gSjXn1-QKz4gnY4t4Wv9b8zZF0sKIM8,4541 +autobahn/wamp/gen/wamp/proto/CalleeFeatures.py,sha256=wIYgWCA099izQKDEs6EPX8x6nsQqufeM7dIiAfej6UY,4559 +autobahn/wamp/gen/wamp/proto/CallerFeatures.py,sha256=0BPek4PnoFDEMz4WegcfZFc_705ZEtKks1WhXO0sbnI,2966 +autobahn/wamp/gen/wamp/proto/Cancel.py,sha256=P0-5iW6et2HXnj9AQDzGsp7gbWHflfJMA4TzUvkZS5E,1197 +autobahn/wamp/gen/wamp/proto/CancelMode.py,sha256=vh5uzg0R1hO4R2WCQ4TzMjxqwwhp86Tc5mUCoEc_tlM,157 +autobahn/wamp/gen/wamp/proto/Challenge.py,sha256=49tA5J4B5mKGT1kTodPZxEDn4SH7DuT8WHTzwesLwRc,1373 +autobahn/wamp/gen/wamp/proto/ChannelBinding.py,sha256=M8qp-JHRwVu_AC_4fWdKor7rmNNRHw1iRETx_rOPvOE,153 +autobahn/wamp/gen/wamp/proto/ClientRoles.py,sha256=2NUgfetpclNCFOJOl3wg5Q_N6dAy26sa3sVXvilonaY,2679 +autobahn/wamp/gen/wamp/proto/DealerFeatures.py,sha256=GINWcy2mK4wiQT17mA1zLSc8ljVSNMAa2OcsPbwM0sE,5715 +autobahn/wamp/gen/wamp/proto/Error.py,sha256=GIwH1ssVtK7nHuL9yl__gFj_lXRe063EwUqggfUdxek,4210 +autobahn/wamp/gen/wamp/proto/Event.py,sha256=U-NF3jWWrtKrKCdqpVc3ozEKJpC5RbVZaYhUcieZSy4,9087 +autobahn/wamp/gen/wamp/proto/EventReceived.py,sha256=XZHvzQyjdTzVOx9KPlJ1FFMHzFkMG2QEjyxq0ctBtZA,3720 +autobahn/wamp/gen/wamp/proto/Goodbye.py,sha256=CuJ6K4g3DhsN31Rxq2gNm2BdCMo2Fsitc8sk2_Z-UVM,1609 +autobahn/wamp/gen/wamp/proto/Hello.py,sha256=gwApzTi6xiFGW3E39zsZGkSm9WuzR8JpJgy82KBbAN0,4627 +autobahn/wamp/gen/wamp/proto/HelloNew.py,sha256=7jnNPBeiT8ZMFkrnuCvsawo5CL-0svoG9RT7gTsewaw,5989 +autobahn/wamp/gen/wamp/proto/Interrupt.py,sha256=Vr4NuGUVzh-F2AZUsCU60w4Aghult6w-AUQnttjtc54,1227 +autobahn/wamp/gen/wamp/proto/Invocation.py,sha256=Mqcjaex_KNOzWRKUTrkUnyVGMPXs0pomHDFOHdNU6o0,6160 +autobahn/wamp/gen/wamp/proto/InvocationPolicy.py,sha256=PzKHYeKYTt3vuPUyj260cPSGgXtMZZE0H0JiyMKkeGw,199 +autobahn/wamp/gen/wamp/proto/Kdf.py,sha256=x9AXogMyCtV9pfBqBXEF6MAQhmQCuhm4koeGnEpfEm8,153 +autobahn/wamp/gen/wamp/proto/Match.py,sha256=xPyjrehsQXn7qjSIPON2k1-XrigZj2u-R4iNNZSpoqQ,158 +autobahn/wamp/gen/wamp/proto/Message.py,sha256=LsYjfelutuVJpPH5Wu5w9JyEjuptHb8uZ38bmRVtC5A,1321 +autobahn/wamp/gen/wamp/proto/MessageType.py,sha256=aluiW50TmyPljbCDBtz6slTC75Qrx2KA28OSXylS_hE,610 +autobahn/wamp/gen/wamp/proto/Payload.py,sha256=fmB6dDCwB-yVlGjWEYmK6affoF6rxVKcnFeuvDQdIvM,161 +autobahn/wamp/gen/wamp/proto/Principal.py,sha256=8kLZEH-513EViBkB60XMaou-4meeF3h6_-0S6pp2PxE,1623 +autobahn/wamp/gen/wamp/proto/Publish.py,sha256=smmlHJN8pXzMl6nkUKLL3kyG3Oby1BIdd0Aw3Inf9So,13155 +autobahn/wamp/gen/wamp/proto/Published.py,sha256=Ih51BbhQWSSPQdoNjX-0NQYFFUpIlFmH0QXgXdQMy64,1257 +autobahn/wamp/gen/wamp/proto/PublisherFeatures.py,sha256=uSoS1JazH32tEI082RZH5-8Iqa56Yzx5Z49oOCJWcAo,3124 +autobahn/wamp/gen/wamp/proto/Register.py,sha256=9cTBlJpuKqdvegS0Bf5BElgDWUKNNqw8Pu_0WWYd_uM,2618 +autobahn/wamp/gen/wamp/proto/Registered.py,sha256=THhRcMZzj0r-cDXaUT2k15KPEUvoE9H0_NGjP5oMfRg,1271 +autobahn/wamp/gen/wamp/proto/Result.py,sha256=bReDBODwihT8ZKeZHjRgHTHA-oJtVy6dfC5yXVOJg_o,3885 +autobahn/wamp/gen/wamp/proto/RouterRoles.py,sha256=9xco2KbV5qgAGmaKq7wsNJIrLgdMc1hFa663hqBscDk,1611 +autobahn/wamp/gen/wamp/proto/Serializer.py,sha256=64D2_OlFMfiOTJpbY3PHqBeu7qcUVzGmFnOkXHOC6AA,227 +autobahn/wamp/gen/wamp/proto/Subscribe.py,sha256=OgPOofEt6CRBIrx8oWBQWTAI1ct0SFCZ7Ec-2Mf-ABA,1932 +autobahn/wamp/gen/wamp/proto/Subscribed.py,sha256=EXs_Q3-TXiA5NIidjLlnVTeSXmm7ddoVAOpx7ppPC7s,1271 +autobahn/wamp/gen/wamp/proto/SubscriberFeatures.py,sha256=FWbBVXTBsYfNA1AyzkF11EseZOKJ75Xxw5h19wVTnb0,3956 +autobahn/wamp/gen/wamp/proto/SubscriberReceived.py,sha256=TVZNMQu-jao1Beaw8S9bS7isXD4V67Ne5CePrBzbf_o,5023 +autobahn/wamp/gen/wamp/proto/Unregister.py,sha256=n3fSOimgjCYVUTTC-I7XerGbaEhI3vCuv8C7TvFoDhI,1271 +autobahn/wamp/gen/wamp/proto/Unregistered.py,sha256=5oRn_dWavEEo0hLfsIvzge6JEs41drZPICFEYnFhTvU,1649 +autobahn/wamp/gen/wamp/proto/Unsubscribe.py,sha256=Rv0YhU2DlmhfvVaBfdL3yqcickQCeHEXVRX3mbWAdEU,1281 +autobahn/wamp/gen/wamp/proto/Unsubscribed.py,sha256=sD6BlUodQMBWsB5XXqTRoHdOdJjPNsWL1JNqQHYvkjQ,1649 +autobahn/wamp/gen/wamp/proto/Welcome.py,sha256=MMkF8ebOTgnNhG_draW6WwdwhgN022UHPtpGWECRDNY,4669 +autobahn/wamp/gen/wamp/proto/Yield.py,sha256=bZmFHORjHR3NhOB5UJ4K3rbyUSAzP2KViKRPA3p8A_0,3528 +autobahn/wamp/gen/wamp/proto/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +autobahn/wamp/test/__init__.py,sha256=NhWjNyqDKUs_FqdWfLdMN5-ddQ8OrWaYok3_FRZSbJU,1293 +autobahn/wamp/test/test_auth.py,sha256=mHdNWCu46tY9ziMDMrxMYLaqpWclLRIZ8HynBHy4xQ0,9982 +autobahn/wamp/test/test_component.py,sha256=U0F5vQcVMRIbsW5M-A_lbVGt7fTGVpMm6jc0R8b272s,7636 +autobahn/wamp/test/test_component_aio.py,sha256=AhmADJBd4kbPJaHfDgdj9cLHffC3GB0eiqUjn-L32i8,6133 +autobahn/wamp/test/test_cryptobox.py,sha256=8us4P5Qb382rmAPX9HJlbjSothufX_w-Axi_Glpm2Co,1594 +autobahn/wamp/test/test_cryptosign.py,sha256=_jAyfjR2gUKvZoDv5J28hYMIoBJeKoX_A4mgkDna_rY,5056 +autobahn/wamp/test/test_exception.py,sha256=SxaFxSKNqxL0sCXIkpgfX17WaGWIPnhFkmCnMwhD6m4,2277 +autobahn/wamp/test/test_message.py,sha256=-oj55oc_8DIDLxHoB0UWfux_DiafVDkWPdH7HsIguGk,48434 +autobahn/wamp/test/test_protocol.py,sha256=mY3UNpX17BrRgd3MsoAeqctIPDdX9SRtfj2jTUm-suc,41982 +autobahn/wamp/test/test_protocol_peer.py,sha256=hDfL36jafVG1ni3QrUu9j0oKYZd3bFt3cy-dhtXlY8U,4484 +autobahn/wamp/test/test_runner.py,sha256=fbzE6RSXWnH6KNDYR8OSVC7h0w9HKJC37zgVVh_915s,9280 +autobahn/wamp/test/test_serializer.py,sha256=0RzcU-AsgVQ-lxTeyUxmsBVE9ggspoj61IRlXDNVuSw,11222 +autobahn/wamp/test/test_uri_pattern.py,sha256=8RermiOXm_KKNfCF5BsTbE6mXYhUABX0b8V0rjuaKwY,24728 +autobahn/wamp/test/test_user_handler_errors.py,sha256=mjVdWnRPkxoocmmk4cTsJO_ppnXquOwEnPmepWkMIVY,16020 +autobahn/wamp/test/test_websocket.py,sha256=gYNEzVKthy8PhWiBGxUrwLNKlxtG_izlIKnA1w9YTWE,1783 +autobahn/websocket/__init__.py,sha256=psmYUAHzor87GFkLEegMXfi0M_QxtliaTBo0yL278WA,1751 +autobahn/websocket/compress.py,sha256=oijEK_PGQ0WB1dRmVAn8_8hm3Q8Sb29_9CY34JZe2JQ,4606 +autobahn/websocket/compress_base.py,sha256=1mx7Chhonb2SjgAbtDCRp2_6wSQYlrNnwn5xrBzmNHU,2146 +autobahn/websocket/compress_bzip2.py,sha256=uXH6ABvkdHe4heIUUbdSIHAyG3h7j4YLHmyvgKDWyng,18368 +autobahn/websocket/compress_deflate.py,sha256=_6CIpzYZY95jDstXVGFICvSuDsWfGQO0TnVhVsEDZMg,29930 +autobahn/websocket/compress_snappy.py,sha256=NR-a90iCb1wwybLvdRxCJSkeHtmcGSZWucD6gltMreA,16979 +autobahn/websocket/interfaces.py,sha256=5kNhHo7qbZNG0gMmEMwJySxj4quBvU1MBtcG6H0_B4A,30069 +autobahn/websocket/protocol.py,sha256=Yo5sYF-LdgYDXZ-mAyvBPu2CM2pOaZ9aLFmT6DRRqzY,162502 +autobahn/websocket/types.py,sha256=Pbw7sNulOg3xKiDcmy8qOHUhfBh4WCNLzC0ZyRJd898,15313 +autobahn/websocket/utf8validator.py,sha256=zrWgsbNqnOJ5_DolmUJ4q_lyM748sNu6z7goOlQfRTQ,10472 +autobahn/websocket/util.py,sha256=XVBGXR4ayMYvvX29sHwPhz4meWwHcI-0gmUWy834eHI,6734 +autobahn/websocket/xormasker.py,sha256=XF9idKxou9DHNFYuRlossm_XLQW2SBydWa43skf2gbI,4546 +autobahn/websocket/test/__init__.py,sha256=NhWjNyqDKUs_FqdWfLdMN5-ddQ8OrWaYok3_FRZSbJU,1293 +autobahn/websocket/test/test_protocol.py,sha256=cEm2g69azxh_oNKnBW2rtZFjhoRvt9isoqCshGWlyhM,9523 +autobahn/websocket/test/test_websocket.py,sha256=oz-V1T31euVBqDgc6JOPRdVheBWpOU4Uy1GZfIvV8Ck,14095 +autobahn/websocket/test/test_websocket_url.py,sha256=1XU_f6LXYIzIc35M0RpdJ02jNTy_nZ10uqneEGnPieY,5455 +autobahn/xbr/__init__.py,sha256=KqqlDFiim1xYbwkRdkC_MZRFvbIsmq5l0n7EcUZXFcc,6543 +autobahn/xbr/_abi.py,sha256=ZbdUEKmwKcB3Q3Ls-O5zsX8MlsC2BPub32piymQ5was,3169 +autobahn/xbr/_blockchain.py,sha256=K5Yw4p0XzM2GHhtSifOkOdN9MtpZxqFxn8exz2DC9xU,7314 +autobahn/xbr/_buyer.py,sha256=t_OTeSWVJqvDi8tu4JouhRfKrFHRg7T2x_rngUzZQ3M,25629 +autobahn/xbr/_interfaces.py,sha256=KH3GryyUnnwmiYuXOQ9tcrSRJYNN-MI_8gPq8cC_FhQ,4572 +autobahn/xbr/_mnemonic.py,sha256=omcP6F5W3S_j9d636EBuQUtJRol79F8U4sqDuIsac2Q,6112 +autobahn/xbr/_seller.py,sha256=-cYXjmwg0mCTkSJjtqjGFudUqW8A2vmaZkxqXo2Th2c,31311 +autobahn/xbr/_util.py,sha256=9KtQBAU42MyqIdKlJJvffYPaPc_SDMxLo3Bv2hN9e0s,7775 +autobahn/xbr/contracts/ECDSA.json,sha256=EVvH_fkEzyji3VSDgq88_YzJf2d-iAzuBCde_PWN9Bo,102692 +autobahn/xbr/contracts/ERC20.json,sha256=WE4H06FGvmOUUoJXpafU3OAuu5QOqXTOV6Uz4uFwqgE,485849 +autobahn/xbr/contracts/ERC20Detailed.json,sha256=EKI-ACQu6D5kUELGLv13aqg6Qg3z5lSgHHWivIpBR_o,54285 +autobahn/xbr/contracts/IERC20.json,sha256=0H34Yqdivc9wuqCfcUWfYhleEZXNKScn_jhjEFCsqJE,69299 +autobahn/xbr/contracts/Migrations.json,sha256=-y8tyFGmlIpxiQ8UVnsVXyqog_Z8PstMjkQkEIOkfm8,54004 +autobahn/xbr/contracts/Roles.json,sha256=VE1FmcWS0sIZhExrlVQSjYgvbMEWrK_iOe_yuB080Qw,90764 +autobahn/xbr/contracts/SafeMath.json,sha256=ZGXMQAWIl8PbPKCS4fGk6zorp2YU0uWiunSamk7m05M,145860 +autobahn/xbr/contracts/XBRChannel.json,sha256=lyf2lGIviSAipky82hISfmJtyhYkmhu7YVhRtD8FbFo,785283 +autobahn/xbr/contracts/XBRMaintained.json,sha256=M_ORh2fC3PrLxls7ppyeAJIjqRcTqDPN3MqIrFdXd6s,97235 +autobahn/xbr/contracts/XBRNetwork.json,sha256=Kb-yQCubto1yWZeYnxRTA41EofAkeBkGf3yiC2uq8mU,2294558 +autobahn/xbr/contracts/XBRNetworkProxy.json,sha256=80LV0bjKi4_plCXZD--S7-fq8glRwG1S32qeXx9UZXQ,28872 +autobahn/xbr/contracts/XBRToken.json,sha256=eBux5eHKi_ZZqAq4-CEOBWDsVUhCzQxa_t6GyDDriuU,68488 +twisted/plugins/autobahn_endpoints.py,sha256=PwwMP1IYX-2KVAzxm4LYpVc8rpSaPGlcgSKfEFrKiYc,6389 +twisted/plugins/autobahn_twistd.py,sha256=9mccXpFlai3XpoYHAtxAynedzogaLb6XM7-Qb9IF5yQ,1566 +autobahn-19.11.1.dist-info/LICENSE,sha256=A4fu_OVwRT2qpgYz8oZ2ADcx7soostCgBxxijjoABO8,1091 +autobahn-19.11.1.dist-info/METADATA,sha256=TZrnK8k_AAaXCE7n_tSLnKy-AdUk96rc3KnW0yXEKSw,16840 +autobahn-19.11.1.dist-info/WHEEL,sha256=8zNYZbwQSXoB9IfXOjPfeNwvAsALAjffgk27FqvCWbo,110 +autobahn-19.11.1.dist-info/entry_points.txt,sha256=pOQzqt1oaJ0ZAex4ZEdquHVbriLGGB6DicT_1O1Y96w,50 +autobahn-19.11.1.dist-info/top_level.txt,sha256=i67H6_FOEnZCuafCKor2-4scMopj2B4VZiqG_K2709g,17 +autobahn-19.11.1.dist-info/RECORD,, +../../../bin/wamp,sha256=f5CNfXC8MlqzFh6qfB3IICZmkBsawPVDZSpwxSPZIWU,272 +autobahn-19.11.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +autobahn/websocket/test/__pycache__/test_protocol.cpython-37.pyc,, +autobahn/websocket/test/__pycache__/test_websocket_url.cpython-37.pyc,, +autobahn/websocket/test/__pycache__/__init__.cpython-37.pyc,, +autobahn/websocket/test/__pycache__/test_websocket.cpython-37.pyc,, +autobahn/websocket/__pycache__/util.cpython-37.pyc,, +autobahn/websocket/__pycache__/interfaces.cpython-37.pyc,, +autobahn/websocket/__pycache__/compress_base.cpython-37.pyc,, +autobahn/websocket/__pycache__/types.cpython-37.pyc,, +autobahn/websocket/__pycache__/compress.cpython-37.pyc,, +autobahn/websocket/__pycache__/compress_bzip2.cpython-37.pyc,, +autobahn/websocket/__pycache__/protocol.cpython-37.pyc,, +autobahn/websocket/__pycache__/compress_deflate.cpython-37.pyc,, +autobahn/websocket/__pycache__/xormasker.cpython-37.pyc,, +autobahn/websocket/__pycache__/__init__.cpython-37.pyc,, +autobahn/websocket/__pycache__/utf8validator.cpython-37.pyc,, +autobahn/websocket/__pycache__/compress_snappy.cpython-37.pyc,, +autobahn/test/__pycache__/test_rng.cpython-37.pyc,, +autobahn/test/__pycache__/test_util.cpython-37.pyc,, +autobahn/test/__pycache__/__init__.cpython-37.pyc,, +autobahn/xbr/__pycache__/_interfaces.cpython-37.pyc,, +autobahn/xbr/__pycache__/_util.cpython-37.pyc,, +autobahn/xbr/__pycache__/_seller.cpython-37.pyc,, +autobahn/xbr/__pycache__/_blockchain.cpython-37.pyc,, +autobahn/xbr/__pycache__/_abi.cpython-37.pyc,, +autobahn/xbr/__pycache__/_mnemonic.cpython-37.pyc,, +autobahn/xbr/__pycache__/__init__.cpython-37.pyc,, +autobahn/xbr/__pycache__/_buyer.cpython-37.pyc,, +autobahn/rawsocket/test/__pycache__/test_rawsocket_url.cpython-37.pyc,, +autobahn/rawsocket/test/__pycache__/__init__.cpython-37.pyc,, +autobahn/rawsocket/__pycache__/util.cpython-37.pyc,, +autobahn/rawsocket/__pycache__/__init__.cpython-37.pyc,, +autobahn/twisted/__pycache__/util.cpython-37.pyc,, +autobahn/twisted/__pycache__/forwarder.cpython-37.pyc,, +autobahn/twisted/__pycache__/websocket.cpython-37.pyc,, +autobahn/twisted/__pycache__/resource.cpython-37.pyc,, +autobahn/twisted/__pycache__/rawsocket.cpython-37.pyc,, +autobahn/twisted/__pycache__/wamp.cpython-37.pyc,, +autobahn/twisted/__pycache__/component.cpython-37.pyc,, +autobahn/twisted/__pycache__/xbr.cpython-37.pyc,, +autobahn/twisted/__pycache__/choosereactor.cpython-37.pyc,, +autobahn/twisted/__pycache__/cryptosign.cpython-37.pyc,, +autobahn/twisted/__pycache__/__init__.cpython-37.pyc,, +autobahn/twisted/testing/__pycache__/__init__.cpython-37.pyc,, +autobahn/__pycache__/util.cpython-37.pyc,, +autobahn/__pycache__/_version.cpython-37.pyc,, +autobahn/__pycache__/__main__.cpython-37.pyc,, +autobahn/__pycache__/exception.cpython-37.pyc,, +autobahn/__pycache__/__init__.cpython-37.pyc,, +autobahn/nvx/test/__pycache__/test_utf8validator.cpython-37.pyc,, +autobahn/nvx/__pycache__/_utf8validator.cpython-37.pyc,, +autobahn/nvx/__pycache__/__init__.cpython-37.pyc,, +autobahn/wamp/test/__pycache__/test_message.cpython-37.pyc,, +autobahn/wamp/test/__pycache__/test_exception.cpython-37.pyc,, +autobahn/wamp/test/__pycache__/test_runner.cpython-37.pyc,, +autobahn/wamp/test/__pycache__/test_cryptobox.cpython-37.pyc,, +autobahn/wamp/test/__pycache__/test_component_aio.cpython-37.pyc,, +autobahn/wamp/test/__pycache__/test_protocol.cpython-37.pyc,, +autobahn/wamp/test/__pycache__/test_component.cpython-37.pyc,, +autobahn/wamp/test/__pycache__/test_auth.cpython-37.pyc,, +autobahn/wamp/test/__pycache__/test_cryptosign.cpython-37.pyc,, +autobahn/wamp/test/__pycache__/test_protocol_peer.cpython-37.pyc,, +autobahn/wamp/test/__pycache__/test_serializer.cpython-37.pyc,, +autobahn/wamp/test/__pycache__/test_user_handler_errors.cpython-37.pyc,, +autobahn/wamp/test/__pycache__/test_uri_pattern.cpython-37.pyc,, +autobahn/wamp/test/__pycache__/__init__.cpython-37.pyc,, +autobahn/wamp/test/__pycache__/test_websocket.cpython-37.pyc,, +autobahn/wamp/__pycache__/serializer.cpython-37.pyc,, +autobahn/wamp/__pycache__/interfaces.cpython-37.pyc,, +autobahn/wamp/__pycache__/uri.cpython-37.pyc,, +autobahn/wamp/__pycache__/websocket.cpython-37.pyc,, +autobahn/wamp/__pycache__/request.cpython-37.pyc,, +autobahn/wamp/__pycache__/message.cpython-37.pyc,, +autobahn/wamp/__pycache__/message_fbs.cpython-37.pyc,, +autobahn/wamp/__pycache__/types.cpython-37.pyc,, +autobahn/wamp/__pycache__/component.cpython-37.pyc,, +autobahn/wamp/__pycache__/auth.cpython-37.pyc,, +autobahn/wamp/__pycache__/role.cpython-37.pyc,, +autobahn/wamp/__pycache__/cryptosign.cpython-37.pyc,, +autobahn/wamp/__pycache__/exception.cpython-37.pyc,, +autobahn/wamp/__pycache__/protocol.cpython-37.pyc,, +autobahn/wamp/__pycache__/__init__.cpython-37.pyc,, +autobahn/wamp/__pycache__/cryptobox.cpython-37.pyc,, +autobahn/wamp/gen/__pycache__/__init__.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/Payload.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/Publish.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/AuthScramChallenge.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/Principal.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/BrokerFeatures.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/Unsubscribe.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/Hello.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/Register.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/Serializer.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/ClientRoles.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/ChannelBinding.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/AuthTicketRequest.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/AuthTicketWelcome.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/Event.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/CalleeFeatures.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/Result.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/Invocation.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/Welcome.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/Message.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/Call.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/Published.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/Abort.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/AuthScramRequest.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/Unregister.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/AuthScramWelcome.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/AuthTicketChallenge.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/AuthMode.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/Yield.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/InvocationPolicy.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/AuthMethod.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/Unregistered.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/Subscribed.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/SubscriberFeatures.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/DealerFeatures.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/RouterRoles.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/Registered.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/Unsubscribed.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/AuthCraWelcome.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/AuthCraRequest.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/Match.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/MessageType.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/EventReceived.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/Challenge.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/PublisherFeatures.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/AuthCryptosignChallenge.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/CallerFeatures.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/Subscribe.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/Interrupt.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/HelloNew.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/Authenticate.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/AuthCraChallenge.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/Kdf.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/AnyMessage.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/AuthCryptosignRequest.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/AuthCryptosignWelcome.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/AuthFactor.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/Goodbye.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/CancelMode.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/Error.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/__init__.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/SubscriberReceived.cpython-37.pyc,, +autobahn/wamp/gen/wamp/proto/__pycache__/Cancel.cpython-37.pyc,, +autobahn/wamp/gen/wamp/__pycache__/Map.cpython-37.pyc,, +autobahn/wamp/gen/wamp/__pycache__/Void.cpython-37.pyc,, +autobahn/wamp/gen/wamp/__pycache__/__init__.cpython-37.pyc,, +autobahn/asyncio/test/__pycache__/test_asyncio_websocket.cpython-37.pyc,, +autobahn/asyncio/test/__pycache__/test_asyncio_rawsocket.cpython-37.pyc,, +autobahn/asyncio/__pycache__/util.cpython-37.pyc,, +autobahn/asyncio/__pycache__/websocket.cpython-37.pyc,, +autobahn/asyncio/__pycache__/rawsocket.cpython-37.pyc,, +autobahn/asyncio/__pycache__/wamp.cpython-37.pyc,, +autobahn/asyncio/__pycache__/component.cpython-37.pyc,, +autobahn/asyncio/__pycache__/xbr.cpython-37.pyc,, +autobahn/asyncio/__pycache__/__init__.cpython-37.pyc,, +twisted/plugins/__pycache__/autobahn_endpoints.cpython-37.pyc,, +twisted/plugins/__pycache__/autobahn_twistd.cpython-37.pyc,, diff --git a/venv/lib/python3.7/site-packages/autobahn/_version.py b/venv/lib/python3.7/site-packages/autobahn/_version.py new file mode 100644 index 0000000..aedd0a2 --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/_version.py @@ -0,0 +1,27 @@ +############################################################################### +# +# The MIT License (MIT) +# +# Copyright (c) Crossbar.io Technologies GmbH +# +# 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. +# +############################################################################### + +__version__ = u'19.11.1' diff --git a/venv/lib/python3.7/site-packages/autobahn/asyncio/rawsocket.py b/venv/lib/python3.7/site-packages/autobahn/asyncio/rawsocket.py new file mode 100644 index 0000000..fbf4303 --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/asyncio/rawsocket.py @@ -0,0 +1,505 @@ +############################################################################### +# +# The MIT License (MIT) +# +# Copyright (c) Crossbar.io Technologies GmbH +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +############################################################################### + +from __future__ import absolute_import + +try: + import asyncio +except ImportError: + # trollious for py2 support - however it has been deprecated + import trollius as asyncio +import struct +import math + +from autobahn.util import public, _LazyHexFormatter +from autobahn.wamp.exception import ProtocolError, SerializationError, TransportLost +from autobahn.asyncio.util import peer2str, get_serializers +import txaio + +__all__ = ( + 'WampRawSocketServerProtocol', + 'WampRawSocketClientProtocol', + 'WampRawSocketServerFactory', + 'WampRawSocketClientFactory' +) + +txaio.use_asyncio() + +FRAME_TYPE_DATA = 0 +FRAME_TYPE_PING = 1 +FRAME_TYPE_PONG = 2 + +MAGIC_BYTE = 0x7F + + +class PrefixProtocol(asyncio.Protocol): + + prefix_format = '!L' + prefix_length = struct.calcsize(prefix_format) + max_length = 16 * 1024 * 1024 + max_length_send = max_length + log = txaio.make_logger() # @UndefinedVariable + + def connection_made(self, transport): + self.transport = transport + peer = transport.get_extra_info('peername') + self.peer = peer2str(peer) + self.log.debug('RawSocker Asyncio: Connection made with peer {peer}', peer=self.peer) + self._buffer = b'' + self._header = None + self._wait_closed = txaio.create_future() + + @property + def is_closed(self): + if hasattr(self, '_wait_closed'): + return self._wait_closed + else: + f = txaio.create_future() + f.set_result(True) + return f + + def connection_lost(self, exc): + self.log.debug('RawSocker Asyncio: Connection lost') + self.transport = None + self._wait_closed.set_result(True) + self._on_connection_lost(exc) + + def _on_connection_lost(self, exc): + pass + + def protocol_error(self, msg): + self.log.error(msg) + self.transport.close() + + def sendString(self, data): + l = len(data) + if l > self.max_length_send: + raise ValueError('Data too big') + header = struct.pack(self.prefix_format, len(data)) + self.transport.write(header) + self.transport.write(data) + + def ping(self, data): + raise NotImplementedError() + + def pong(self, data): + raise NotImplementedError() + + def data_received(self, data): + self._buffer += data + pos = 0 + remaining = len(self._buffer) + while remaining >= self.prefix_length: + # do not recalculate header if available from previous call + if self._header: + frame_type, frame_length = self._header + else: + header = self._buffer[pos:pos + self.prefix_length] + frame_type = ord(header[0:1]) & 0b00000111 + if frame_type > FRAME_TYPE_PONG: + self.protocol_error('Invalid frame type') + return + frame_length = struct.unpack(self.prefix_format, b'\0' + header[1:])[0] + if frame_length > self.max_length: + self.protocol_error('Frame too big') + return + + if remaining - self.prefix_length >= frame_length: + self._header = None + pos += self.prefix_length + remaining -= self.prefix_length + data = self._buffer[pos:pos + frame_length] + pos += frame_length + remaining -= frame_length + + if frame_type == FRAME_TYPE_DATA: + self.stringReceived(data) + elif frame_type == FRAME_TYPE_PING: + self.ping(data) + elif frame_type == FRAME_TYPE_PONG: + self.pong(data) + else: + # save heaader + self._header = frame_type, frame_length + break + + self._buffer = self._buffer[pos:] + + def stringReceived(self, data): + raise NotImplementedError() + + +class RawSocketProtocol(PrefixProtocol): + + def __init__(self): + max_size = None + if max_size: + exp = int(math.ceil(math.log(max_size, 2))) - 9 + if exp > 15: + raise ValueError('Maximum length is 16M') + self.max_length = 2**(exp + 9) + self._length_exp = exp + else: + self._length_exp = 15 + self.max_length = 2**24 + + def connection_made(self, transport): + PrefixProtocol.connection_made(self, transport) + self._handshake_done = False + + def _on_handshake_complete(self): + raise NotImplementedError() + + def parse_handshake(self): + buf = bytearray(self._buffer[:4]) + if buf[0] != MAGIC_BYTE: + raise HandshakeError('Invalid magic byte in handshake') + return + ser = buf[1] & 0x0F + lexp = buf[1] >> 4 + self.max_length_send = 2**(lexp + 9) + if buf[2] != 0 or buf[3] != 0: + raise HandshakeError('Reserved bytes must be zero') + return ser, lexp + + def process_handshake(self): + raise NotImplementedError() + + def data_received(self, data): + self.log.debug('RawSocker Asyncio: data received {data}', data=_LazyHexFormatter(data)) + if self._handshake_done: + return PrefixProtocol.data_received(self, data) + else: + self._buffer += data + if len(self._buffer) >= 4: + try: + self.process_handshake() + except HandshakeError as e: + self.protocol_error('Handshake error : {err}'.format(err=e)) + return + self._handshake_done = True + self._on_handshake_complete() + data = self._buffer[4:] + self._buffer = b'' + if data: + PrefixProtocol.data_received(self, data) + + +ERR_SERIALIZER_UNSUPPORTED = 1 + +ERRMAP = { + 0: "illegal (must not be used)", + 1: "serializer unsupported", + 2: "maximum message length unacceptable", + 3: "use of reserved bits (unsupported feature)", + 4: "maximum connection count reached" +} + + +class HandshakeError(Exception): + def __init__(self, msg, code=0): + Exception.__init__(self, msg if not code else msg + ' : %s' % ERRMAP.get(code)) + + +class RawSocketClientProtocol(RawSocketProtocol): + + def check_serializer(self, ser_id): + return True + + def process_handshake(self): + ser_id, err = self.parse_handshake() + if ser_id == 0: + raise HandshakeError('Server returned handshake error', err) + if self.serializer_id != ser_id: + raise HandshakeError('Server returned different serializer {0} then requested {1}' + .format(ser_id, self.serializer_id)) + + @property + def serializer_id(self): + raise NotImplementedError() + + def connection_made(self, transport): + RawSocketProtocol.connection_made(self, transport) + # start handshake + hs = bytes(bytearray([MAGIC_BYTE, + self._length_exp << 4 | self.serializer_id, + 0, 0])) + transport.write(hs) + self.log.debug('RawSocket Asyncio: Client handshake sent') + + +class RawSocketServerProtocol(RawSocketProtocol): + + def supports_serializer(self, ser_id): + raise NotImplementedError() + + def process_handshake(self): + def send_response(lexp, ser_id): + b2 = lexp << 4 | (ser_id & 0x0f) + self.transport.write(bytes(bytearray([MAGIC_BYTE, b2, 0, 0]))) + ser_id, _lexp = self.parse_handshake() + if not self.supports_serializer(ser_id): + send_response(ERR_SERIALIZER_UNSUPPORTED, 0) + raise HandshakeError('Serializer unsupported : {ser_id}'.format(ser_id=ser_id)) + send_response(self._length_exp, ser_id) + + +# this is transport independent part of WAMP protocol +class WampRawSocketMixinGeneral(object): + + def _on_handshake_complete(self): + self.log.debug("WampRawSocketProtocol: Handshake complete") + try: + self._session = self.factory._factory() + self._session.onOpen(self) + except Exception as e: + # Exceptions raised in onOpen are fatal .. + self.log.warn("WampRawSocketProtocol: ApplicationSession constructor / onOpen raised ({err})", err=e) + self.abort() + else: + self.log.info("ApplicationSession started.") + + def stringReceived(self, payload): + self.log.debug("WampRawSocketProtocol: RX octets: {octets}", octets=_LazyHexFormatter(payload)) + try: + for msg in self._serializer.unserialize(payload): + self.log.debug("WampRawSocketProtocol: RX WAMP message: {msg}", msg=msg) + self._session.onMessage(msg) + + except ProtocolError as e: + self.log.warn("WampRawSocketProtocol: WAMP Protocol Error ({err}) - aborting connection", err=e) + self.abort() + + except Exception as e: + self.log.warn("WampRawSocketProtocol: WAMP Internal Error ({err}) - aborting connection", err=e) + self.abort() + + def send(self, msg): + """ + Implements :func:`autobahn.wamp.interfaces.ITransport.send` + """ + if self.isOpen(): + self.log.debug("WampRawSocketProtocol: TX WAMP message: {msg}", msg=msg) + try: + payload, _ = self._serializer.serialize(msg) + except Exception as e: + # all exceptions raised from above should be serialization errors .. + raise SerializationError("WampRawSocketProtocol: unable to serialize WAMP application payload ({0})" + .format(e)) + else: + self.sendString(payload) + self.log.debug("WampRawSocketProtocol: TX octets: {octets}", octets=_LazyHexFormatter(payload)) + else: + raise TransportLost() + + def isOpen(self): + """ + Implements :func:`autobahn.wamp.interfaces.ITransport.isOpen` + """ + return hasattr(self, '_session') and self._session is not None + + +# this is asyncio dependent part of WAMP protocol +class WampRawSocketMixinAsyncio(object): + """ + Base class for asyncio-based WAMP-over-RawSocket protocols. + """ + + def _on_connection_lost(self, exc): + try: + wasClean = exc is None + self._session.onClose(wasClean) + except Exception as e: + # silently ignore exceptions raised here .. + self.log.warn("WampRawSocketProtocol: ApplicationSession.onClose raised ({err})", err=e) + self._session = None + + def close(self): + """ + Implements :func:`autobahn.wamp.interfaces.ITransport.close` + """ + if self.isOpen(): + self.transport.close() + else: + raise TransportLost() + + def abort(self): + """ + Implements :func:`autobahn.wamp.interfaces.ITransport.abort` + """ + if self.isOpen(): + if hasattr(self.transport, 'abort'): + # ProcessProtocol lacks abortConnection() + self.transport.abort() + else: + self.transport.close() + else: + raise TransportLost() + + +@public +class WampRawSocketServerProtocol(WampRawSocketMixinGeneral, WampRawSocketMixinAsyncio, RawSocketServerProtocol): + """ + asyncio-based WAMP-over-RawSocket server protocol. + + Implements: + + * :class:`autobahn.wamp.interfaces.ITransport` + """ + + def supports_serializer(self, ser_id): + if ser_id in self.factory._serializers: + self._serializer = self.factory._serializers[ser_id]() + self.log.debug( + "WampRawSocketProtocol: client wants to use serializer '{serializer}'", + serializer=ser_id, + ) + return True + else: + self.log.debug( + "WampRawSocketProtocol: opening handshake - no suitable serializer found (client requested {serializer}, and we have {serializers}", + serializer=ser_id, + serializers=self.factory._serializers.keys(), + ) + self.abort() + return False + + def get_channel_id(self, channel_id_type=u'tls-unique'): + """ + Implements :func:`autobahn.wamp.interfaces.ITransport.get_channel_id` + """ + return None + # return transport_channel_id(self.transport, is_server=True, channel_id_type=channel_id_type) + + +@public +class WampRawSocketClientProtocol(WampRawSocketMixinGeneral, WampRawSocketMixinAsyncio, RawSocketClientProtocol): + """ + asyncio-based WAMP-over-RawSocket client protocol. + + Implements: + + * :class:`autobahn.wamp.interfaces.ITransport` + """ + + @property + def serializer_id(self): + if not hasattr(self, '_serializer'): + self._serializer = self.factory._serializer + return self._serializer.RAWSOCKET_SERIALIZER_ID + + def get_channel_id(self, channel_id_type=u'tls-unique'): + """ + Implements :func:`autobahn.wamp.interfaces.ITransport.get_channel_id` + """ + return None + # return transport_channel_id(self.transport, is_server=False, channel_id_type=channel_id_type) + + +class WampRawSocketFactory(object): + """ + Adapter class for asyncio-based WebSocket client and server factories.def dataReceived(self, data): + """ + + log = txaio.make_logger() + + @public + def __call__(self): + proto = self.protocol() + proto.factory = self + return proto + + +@public +class WampRawSocketServerFactory(WampRawSocketFactory): + """ + asyncio-based WAMP-over-RawSocket server protocol factory. + """ + protocol = WampRawSocketServerProtocol + + def __init__(self, factory, serializers=None): + """ + + :param factory: A callable that produces instances that implement + :class:`autobahn.wamp.interfaces.ITransportHandler` + :type factory: callable + + :param serializers: A list of WAMP serializers to use (or ``None`` + for all available serializers). + :type serializers: list of objects implementing + :class:`autobahn.wamp.interfaces.ISerializer` + """ + if callable(factory): + self._factory = factory + else: + self._factory = lambda: factory + + # when no serializers were requested specifically, then support + # all that are available + if serializers is None: + serializers = get_serializers() + + if not serializers: + raise Exception("could not import any WAMP serializers") + + self._serializers = {ser.RAWSOCKET_SERIALIZER_ID: ser for ser in serializers} + + +@public +class WampRawSocketClientFactory(WampRawSocketFactory): + """ + asyncio-based WAMP-over-RawSocket client factory. + """ + protocol = WampRawSocketClientProtocol + + def __init__(self, factory, serializer=None): + """ + + :param factory: A callable that produces instances that implement + :class:`autobahn.wamp.interfaces.ITransportHandler` + :type factory: callable + + :param serializer: The WAMP serializer to use (or ``None`` for + "best" serializer, chosen as the first serializer available from + this list: CBOR, MessagePack, UBJSON, JSON). + :type serializer: object implementing :class:`autobahn.wamp.interfaces.ISerializer` + """ + if callable(factory): + self._factory = factory + else: + self._factory = lambda: factory + + # when no serializer was requested specifically, use the first + # one available + if serializer is None: + serializers = get_serializers() + if serializers: + serializer = serializers[0]() + + if serializer is None: + raise Exception("could not import any WAMP serializer") + + self._serializer = serializer diff --git a/venv/lib/python3.7/site-packages/autobahn/asyncio/websocket.py b/venv/lib/python3.7/site-packages/autobahn/asyncio/websocket.py new file mode 100644 index 0000000..97a494c --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/asyncio/websocket.py @@ -0,0 +1,396 @@ +############################################################################### +# +# The MIT License (MIT) +# +# Copyright (c) Crossbar.io Technologies GmbH +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +############################################################################### + +from __future__ import absolute_import + +from collections import deque + +import txaio +txaio.use_asyncio() + +from autobahn.util import public +from autobahn.asyncio.util import transport_channel_id, peer2str +from autobahn.wamp import websocket +from autobahn.websocket import protocol +from autobahn.websocket.types import TransportDetails + +try: + import asyncio + from asyncio import iscoroutine + from asyncio import Future +except ImportError: + # Trollius >= 0.3 was renamed + # noinspection PyUnresolvedReferences + import trollius as asyncio + from trollius import iscoroutine + from trollius import Future + +if hasattr(asyncio, 'ensure_future'): + ensure_future = asyncio.ensure_future +else: # Deprecated since Python 3.4.4 + ensure_future = getattr(asyncio, 'async') + +__all__ = ( + 'WebSocketServerProtocol', + 'WebSocketClientProtocol', + 'WebSocketServerFactory', + 'WebSocketClientFactory', + 'WampWebSocketServerProtocol', + 'WampWebSocketClientProtocol', + 'WampWebSocketServerFactory', + 'WampWebSocketClientFactory', +) + + +def yields(value): + """ + Returns ``True`` iff the value yields. + + .. seealso:: http://stackoverflow.com/questions/20730248/maybedeferred-analog-with-asyncio + """ + return isinstance(value, Future) or iscoroutine(value) + + +class WebSocketAdapterProtocol(asyncio.Protocol): + """ + Adapter class for asyncio-based WebSocket client and server protocols. + """ + + def connection_made(self, transport): + self.transport = transport + + self.receive_queue = deque() + self._consume() + + try: + self.peer = peer2str(transport.get_extra_info('peername')) + except: + self.peer = u"?" + + self._connectionMade() + + def connection_lost(self, exc): + self._connectionLost(exc) + # according to asyncio docs, connection_lost(None) is called + # if something else called transport.close() + if exc is not None: + self.transport.close() + self.transport = None + + def _consume(self): + self.waiter = Future(loop=self.factory.loop or txaio.config.loop) + + def process(_): + while len(self.receive_queue): + data = self.receive_queue.popleft() + if self.transport: + self._dataReceived(data) + self._consume() + + self.waiter.add_done_callback(process) + + def data_received(self, data): + self.receive_queue.append(data) + if not self.waiter.done(): + self.waiter.set_result(None) + + def _closeConnection(self, abort=False): + if abort and hasattr(self.transport, 'abort'): + self.transport.abort() + else: + self.transport.close() + + def _onOpen(self): + res = self.onOpen() + if yields(res): + ensure_future(res) + + def _onMessageBegin(self, isBinary): + res = self.onMessageBegin(isBinary) + if yields(res): + ensure_future(res) + + def _onMessageFrameBegin(self, length): + res = self.onMessageFrameBegin(length) + if yields(res): + ensure_future(res) + + def _onMessageFrameData(self, payload): + res = self.onMessageFrameData(payload) + if yields(res): + ensure_future(res) + + def _onMessageFrameEnd(self): + res = self.onMessageFrameEnd() + if yields(res): + ensure_future(res) + + def _onMessageFrame(self, payload): + res = self.onMessageFrame(payload) + if yields(res): + ensure_future(res) + + def _onMessageEnd(self): + res = self.onMessageEnd() + if yields(res): + ensure_future(res) + + def _onMessage(self, payload, isBinary): + res = self.onMessage(payload, isBinary) + if yields(res): + ensure_future(res) + + def _onPing(self, payload): + res = self.onPing(payload) + if yields(res): + ensure_future(res) + + def _onPong(self, payload): + res = self.onPong(payload) + if yields(res): + ensure_future(res) + + def _onClose(self, wasClean, code, reason): + res = self.onClose(wasClean, code, reason) + if yields(res): + ensure_future(res) + + def registerProducer(self, producer, streaming): + raise Exception("not implemented") + + def unregisterProducer(self): + # note that generic websocket/protocol.py code calls + # .unregisterProducer whenever we dropConnection -- that's + # correct behavior on Twisted so either we'd have to + # try/except there, or special-case Twisted, ..or just make + # this "not an error" + pass + + +@public +class WebSocketServerProtocol(WebSocketAdapterProtocol, protocol.WebSocketServerProtocol): + """ + Base class for asyncio-based WebSocket server protocols. + + Implements: + + * :class:`autobahn.websocket.interfaces.IWebSocketChannel` + """ + + log = txaio.make_logger() + + def get_channel_id(self, channel_id_type=u'tls-unique'): + """ + Implements :func:`autobahn.wamp.interfaces.ITransport.get_channel_id` + """ + return transport_channel_id(self.transport, True, channel_id_type) + + +@public +class WebSocketClientProtocol(WebSocketAdapterProtocol, protocol.WebSocketClientProtocol): + """ + Base class for asyncio-based WebSocket client protocols. + + Implements: + + * :class:`autobahn.websocket.interfaces.IWebSocketChannel` + """ + + log = txaio.make_logger() + + def _onConnect(self, response): + res = self.onConnect(response) + if yields(res): + ensure_future(res) + + def startTLS(self): + raise Exception("WSS over explicit proxies not implemented") + + def get_channel_id(self, channel_id_type=u'tls-unique'): + """ + Implements :func:`autobahn.wamp.interfaces.ITransport.get_channel_id` + """ + return transport_channel_id(self.transport, False, channel_id_type) + + def _create_transport_details(self): + """ + Internal helper. + Base class calls this to create a TransportDetails + """ + is_secure = self.transport.get_extra_info('peercert', None) is not None + if is_secure: + secure_channel_id = { + u'tls-unique': transport_channel_id(self.transport, False, 'tls-unique'), + } + else: + secure_channel_id = {} + return TransportDetails(peer=self.peer, is_secure=is_secure, secure_channel_id=secure_channel_id) + + +class WebSocketAdapterFactory(object): + """ + Adapter class for asyncio-based WebSocket client and server factories. + """ + log = txaio.make_logger() + + def __call__(self): + proto = self.protocol() + proto.factory = self + return proto + + +@public +class WebSocketServerFactory(WebSocketAdapterFactory, protocol.WebSocketServerFactory): + """ + Base class for asyncio-based WebSocket server factories. + + Implements: + + * :class:`autobahn.websocket.interfaces.IWebSocketServerChannelFactory` + """ + + protocol = WebSocketServerProtocol + + def __init__(self, *args, **kwargs): + """ + .. note:: + In addition to all arguments to the constructor of + :meth:`autobahn.websocket.interfaces.IWebSocketServerChannelFactory`, + you can supply a ``loop`` keyword argument to specify the + asyncio event loop to be used. + """ + loop = kwargs.pop('loop', None) + self.loop = loop or asyncio.get_event_loop() + + protocol.WebSocketServerFactory.__init__(self, *args, **kwargs) + + +@public +class WebSocketClientFactory(WebSocketAdapterFactory, protocol.WebSocketClientFactory): + """ + Base class for asyncio-based WebSocket client factories. + + Implements: + + * :class:`autobahn.websocket.interfaces.IWebSocketClientChannelFactory` + """ + + def __init__(self, *args, **kwargs): + """ + + .. note:: + In addition to all arguments to the constructor of + :meth:`autobahn.websocket.interfaces.IWebSocketClientChannelFactory`, + you can supply a ``loop`` keyword argument to specify the + asyncio event loop to be used. + """ + loop = kwargs.pop('loop', None) + self.loop = loop or asyncio.get_event_loop() + + protocol.WebSocketClientFactory.__init__(self, *args, **kwargs) + + +@public +class WampWebSocketServerProtocol(websocket.WampWebSocketServerProtocol, WebSocketServerProtocol): + """ + asyncio-based WAMP-over-WebSocket server protocol. + + Implements: + + * :class:`autobahn.wamp.interfaces.ITransport` + """ + + +@public +class WampWebSocketServerFactory(websocket.WampWebSocketServerFactory, WebSocketServerFactory): + """ + asyncio-based WAMP-over-WebSocket server factory. + """ + + protocol = WampWebSocketServerProtocol + + def __init__(self, factory, *args, **kwargs): + """ + + :param factory: A callable that produces instances that implement + :class:`autobahn.wamp.interfaces.ITransportHandler` + :type factory: callable + + :param serializers: A list of WAMP serializers to use (or ``None`` + for all available serializers). + :type serializers: list of objects implementing + :class:`autobahn.wamp.interfaces.ISerializer` + """ + + serializers = kwargs.pop('serializers', None) + + websocket.WampWebSocketServerFactory.__init__(self, factory, serializers) + + kwargs['protocols'] = self._protocols + + # noinspection PyCallByClass + WebSocketServerFactory.__init__(self, *args, **kwargs) + + +@public +class WampWebSocketClientProtocol(websocket.WampWebSocketClientProtocol, WebSocketClientProtocol): + """ + asyncio-based WAMP-over-WebSocket client protocols. + + Implements: + + * :class:`autobahn.wamp.interfaces.ITransport` + """ + + +@public +class WampWebSocketClientFactory(websocket.WampWebSocketClientFactory, WebSocketClientFactory): + """ + asyncio-based WAMP-over-WebSocket client factory. + """ + + protocol = WampWebSocketClientProtocol + + def __init__(self, factory, *args, **kwargs): + """ + + :param factory: A callable that produces instances that implement + :class:`autobahn.wamp.interfaces.ITransportHandler` + :type factory: callable + + :param serializer: The WAMP serializer to use (or ``None`` for + "best" serializer, chosen as the first serializer available from + this list: CBOR, MessagePack, UBJSON, JSON). + :type serializer: object implementing :class:`autobahn.wamp.interfaces.ISerializer` + """ + + serializers = kwargs.pop('serializers', None) + + websocket.WampWebSocketClientFactory.__init__(self, factory, serializers) + + kwargs['protocols'] = self._protocols + + WebSocketClientFactory.__init__(self, *args, **kwargs) diff --git a/venv/lib/python3.7/site-packages/autobahn/exception.py b/venv/lib/python3.7/site-packages/autobahn/exception.py new file mode 100644 index 0000000..5d6432c --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/exception.py @@ -0,0 +1,41 @@ +############################################################################### +# +# The MIT License (MIT) +# +# Copyright (c) Crossbar.io Technologies GmbH +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +############################################################################### + +from __future__ import absolute_import + +from autobahn.util import public + +__all__ = ( + 'PayloadExceededError', +) + + +@public +class PayloadExceededError(RuntimeError): + """ + Exception raised when the serialized and framed (eg WebSocket/RawSocket) WAMP payload + exceeds the transport message size limit. + """ diff --git a/venv/lib/python3.7/site-packages/autobahn/nvx/_utf8validator.c b/venv/lib/python3.7/site-packages/autobahn/nvx/_utf8validator.c new file mode 100644 index 0000000..5e632ac --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/nvx/_utf8validator.c @@ -0,0 +1,646 @@ +/////////////////////////////////////////////////////////////////////////////// +// +// The MIT License (MIT) +// +// Copyright (c) Crossbar.io Technologies GmbH +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +/////////////////////////////////////////////////////////////////////////////// + +#include +#include + +// http://stackoverflow.com/questions/11228855/header-files-for-simd-intrinsics +#include + + +#define UTF8_ACCEPT 0 +#define UTF8_REJECT 1 + + +typedef struct { + size_t current_index; + size_t total_index; + int state; + int impl; +} utf8_validator_t; + + +#define UTF8_VALIDATOR_OPTIMAL 0 +#define UTF8_VALIDATOR_TABLE_DFA 1 +#define UTF8_VALIDATOR_UNROLLED_DFA 2 +#define UTF8_VALIDATOR_SSE2_DFA 3 +#define UTF8_VALIDATOR_SSE41_DFA 4 + + +int nvx_utf8vld_get_impl (void* utf8vld) { + utf8_validator_t* vld = (utf8_validator_t*) utf8vld; + + return vld->impl; +} + +int nvx_utf8vld_set_impl (void* utf8vld, int impl) { + utf8_validator_t* vld = (utf8_validator_t*) utf8vld; + + if (impl) { + // set requested implementation + // +#ifndef __SSE4_1__ +# ifdef __SSE2__ + if (impl <= UTF8_VALIDATOR_SSE2_DFA) { + vld->impl = impl; + } +# else + if (impl <= UTF8_VALIDATOR_UNROLLED_DFA) { + vld->impl = impl; + } +# endif +#else + if (impl <= UTF8_VALIDATOR_SSE41_DFA) { + vld->impl = impl; + } +#endif + + } else { + // set optimal implementation + // +#ifndef __SSE4_1__ +# ifdef __SSE2__ + vld->impl = UTF8_VALIDATOR_SSE2_DFA; +# else + vld->impl = UTF8_VALIDATOR_UNROLLED_DFA; +# endif +#else + vld->impl = UTF8_VALIDATOR_SSE41_DFA; +#endif + + } + return vld->impl; +} + + +void nvx_utf8vld_reset (void* utf8vld) { + utf8_validator_t* vld = (utf8_validator_t*) utf8vld; + + vld->state = 0; + vld->current_index = -1; + vld->total_index = -1; +} + + +void* nvx_utf8vld_new () { + void* p = malloc(sizeof(utf8_validator_t)); + nvx_utf8vld_reset(p); + nvx_utf8vld_set_impl(p, 0); + return p; +} + + +void nvx_utf8vld_free (void* utf8vld) { + free (utf8vld); +} + + +// unrolled DFA from http://bjoern.hoehrmann.de/utf-8/decoder/dfa/ +// +static const uint8_t UTF8VALIDATOR_DFA[] __attribute__((aligned(64))) = +{ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 00..1f + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 20..3f + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 40..5f + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 60..7f + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, // 80..9f + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, // a0..bf + 8,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, // c0..df + + 0xa,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x4,0x3,0x3, // e0..ef + 0xb,0x6,0x6,0x6,0x5,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8, // f0..ff + 0x0,0x1,0x2,0x3,0x5,0x8,0x7,0x1,0x1,0x1,0x4,0x6,0x1,0x1,0x1,0x1, // s0..s0 + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,1,1,1,1,1, // s1..s2 + 1,2,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1, // s3..s4 + 1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,3,1,1,1,1,1,1, // s5..s6 + 1,3,1,1,1,1,1,3,1,3,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1 // s7..s8 +}; + + +int _nvx_utf8vld_validate_table (void* utf8vld, const uint8_t* data, size_t length) { + + utf8_validator_t* vld = (utf8_validator_t*) utf8vld; + + int state = vld->state; + + const uint8_t* end = data + length; + + while (data < end && state != 1) { + state = UTF8VALIDATOR_DFA[256 + state * 16 + UTF8VALIDATOR_DFA[*data++]]; + } + + vld->state = state; + + if (state == 0) { + // UTF8 is valid and ends on codepoint + return 0; + } else { + if (state == 1) { + // UTF8 is invalid + return -1; + } else { + // UTF8 is valid, but does not end on codepoint (needs more data) + return 1; + } + } +} + + +// unrolled DFA from http://bjoern.hoehrmann.de/utf-8/decoder/dfa/ +// +#define DFA_TRANSITION(state, octet) \ + if (state == 0) { \ + if (octet >= 0x00 && octet <= 0x7f) { \ + /* reflective state 0 */ \ + } else if (octet >= 0xc2 && octet <= 0xdf) { \ + state = 2; \ + } else if ((octet >= 0xe1 && octet <= 0xec) || octet == 0xee || octet == 0xef) { \ + state = 3; \ + } else if (octet == 0xe0) { \ + state = 4; \ + } else if (octet == 0xed) { \ + state = 5; \ + } else if (octet == 0xf4) { \ + state = 8; \ + } else if (octet == 0xf1 || octet == 0xf2 || octet == 0xf3) { \ + state = 7; \ + } else if (octet == 0xf0) { \ + state = 6; \ + } else { \ + state = 1; \ + } \ + } else if (state == 2) { \ + if (octet >= 0x80 && octet <= 0xbf) { \ + state = 0; \ + } else { \ + state = 1; \ + } \ + } else if (state == 3) { \ + if (octet >= 0x80 && octet <= 0xbf) { \ + state = 2; \ + } else { \ + state = 1; \ + } \ + } else if (state == 4) { \ + if (octet >= 0xa0 && octet <= 0xbf) { \ + state = 2; \ + } else { \ + state = 1; \ + } \ + } else if (state == 5) { \ + if (octet >= 0x80 && octet <= 0x9f) { \ + state = 2; \ + } else { \ + state = 1; \ + } \ + } else if (state == 6) { \ + if (octet >= 0x90 && octet <= 0xbf) { \ + state = 3; \ + } else { \ + state = 1; \ + } \ + } else if (state == 7) { \ + if (octet >= 0x80 && octet <= 0xbf) { \ + state = 3; \ + } else { \ + state = 1; \ + } \ + } else if (state == 8) { \ + if (octet >= 0x80 && octet <= 0x8f) { \ + state = 3; \ + } else { \ + state = 1; \ + } \ + } else if (state == 1) { \ + /* refective state 1 */ \ + } else { \ + /* should not arrive here */ \ + } + + +int _nvx_utf8vld_validate_unrolled (void* utf8vld, const uint8_t* data, size_t length) { + + utf8_validator_t* vld = (utf8_validator_t*) utf8vld; + + int state = vld->state; + + const uint8_t* tail_end = data + length; + + while (data < tail_end && state != 1) { + + // get tail octet + int octet = *data; + + // do the DFA + DFA_TRANSITION(state, octet); + + ++data; + } + + vld->state = state; + + if (state == 0) { + // UTF8 is valid and ends on codepoint + return 0; + } else { + if (state == 1) { + // UTF8 is invalid + return -1; + } else { + // UTF8 is valid, but does not end on codepoint (needs more data) + return 1; + } + } +} + + +/* + __m128i _mm_load_si128 (__m128i const* mem_addr) + #include "emmintrin.h" + Instruction: movdqa + CPUID Feature Flag: SSE2 + + int _mm_movemask_epi8 (__m128i a) + #include "emmintrin.h" + Instruction: pmovmskb + CPUID Feature Flag: SSE2 + + __m128i _mm_srli_si128 (__m128i a, int imm) + #include "emmintrin.h" + Instruction: psrldq + CPUID Feature Flag: SSE2 + + int _mm_cvtsi128_si32 (__m128i a) + #include "emmintrin.h" + Instruction: movd + CPUID Feature Flag: SSE2 + + int _mm_extract_epi16 (__m128i a, int imm) + #include "emmintrin.h" + Instruction: pextrw + CPUID Feature Flag: SSE2 + + int _mm_extract_epi8 (__m128i a, const int imm) + #include "smmintrin.h" + Instruction: pextrb + CPUID Feature Flag: SSE4.1 +*/ + +#ifdef __SSE2__ +int _nvx_utf8vld_validate_sse2 (void* utf8vld, const uint8_t* data, size_t length) { + + utf8_validator_t* vld = (utf8_validator_t*) utf8vld; + + int state = vld->state; + + const uint8_t* tail_end = data + length; + + // process unaligned head (sub 16 octets) + // + size_t head_len = ((size_t) data) % sizeof(__m128i); + if (head_len) { + + const uint8_t* head_end = data + head_len; + + while (data < head_end && state != UTF8_REJECT) { + + // get head octet + int octet = *data; + + // do the DFA + DFA_TRANSITION(state, octet); + + ++data; + } + } + + // process aligned middle (16 octet chunks) + // + const __m128i* ptr = ((const __m128i*) data); + const __m128i* end = ((const __m128i*) data) + ((length - head_len) / sizeof(__m128i)); + + while (ptr < end && state != UTF8_REJECT) { + + __builtin_prefetch(ptr + 1, 0, 3); + //__builtin_prefetch(ptr + 4, 0, 3); // 16*4=64: cache-line prefetch + + __m128i xmm1 = _mm_load_si128(ptr); + + if (__builtin_expect(state || _mm_movemask_epi8(xmm1), 0)) { + + // copy to different reg - this allows the prefetching to + // do its job in the meantime (I guess ..) + + // SSE2 variant + // + int octet; + + // octet 0 + octet = 0xff & _mm_cvtsi128_si32(xmm1); + DFA_TRANSITION(state, octet); + + // octet 1 + xmm1 = _mm_srli_si128(xmm1, 1); + octet = 0xff & _mm_cvtsi128_si32(xmm1); + DFA_TRANSITION(state, octet); + + // octet 2 + xmm1 = _mm_srli_si128(xmm1, 1); + octet = 0xff & _mm_cvtsi128_si32(xmm1); + DFA_TRANSITION(state, octet); + + // octet 3 + xmm1 = _mm_srli_si128(xmm1, 1); + octet = 0xff & _mm_cvtsi128_si32(xmm1); + DFA_TRANSITION(state, octet); + + // octet 4 + xmm1 = _mm_srli_si128(xmm1, 1); + octet = 0xff & _mm_cvtsi128_si32(xmm1); + DFA_TRANSITION(state, octet); + + // octet 5 + xmm1 = _mm_srli_si128(xmm1, 1); + octet = 0xff & _mm_cvtsi128_si32(xmm1); + DFA_TRANSITION(state, octet); + + // octet 6 + xmm1 = _mm_srli_si128(xmm1, 1); + octet = 0xff & _mm_cvtsi128_si32(xmm1); + DFA_TRANSITION(state, octet); + + // octet 7 + xmm1 = _mm_srli_si128(xmm1, 1); + octet = 0xff & _mm_cvtsi128_si32(xmm1); + DFA_TRANSITION(state, octet); + + // octet 8 + xmm1 = _mm_srli_si128(xmm1, 1); + octet = 0xff & _mm_cvtsi128_si32(xmm1); + DFA_TRANSITION(state, octet); + + // octet 9 + xmm1 = _mm_srli_si128(xmm1, 1); + octet = 0xff & _mm_cvtsi128_si32(xmm1); + DFA_TRANSITION(state, octet); + + // octet 10 + xmm1 = _mm_srli_si128(xmm1, 1); + octet = 0xff & _mm_cvtsi128_si32(xmm1); + DFA_TRANSITION(state, octet); + + // octet 11 + xmm1 = _mm_srli_si128(xmm1, 1); + octet = 0xff & _mm_cvtsi128_si32(xmm1); + DFA_TRANSITION(state, octet); + + // octet 12 + xmm1 = _mm_srli_si128(xmm1, 1); + octet = 0xff & _mm_cvtsi128_si32(xmm1); + DFA_TRANSITION(state, octet); + + // octet 13 + xmm1 = _mm_srli_si128(xmm1, 1); + octet = 0xff & _mm_cvtsi128_si32(xmm1); + DFA_TRANSITION(state, octet); + + // octet 14 + xmm1 = _mm_srli_si128(xmm1, 1); + octet = 0xff & _mm_cvtsi128_si32(xmm1); + DFA_TRANSITION(state, octet); + + // octet 15 + xmm1 = _mm_srli_si128(xmm1, 1); + octet = 0xff & _mm_cvtsi128_si32(xmm1); + DFA_TRANSITION(state, octet); + } + ++ptr; + } + + // process unaligned tail (sub 16 octets) + // + const uint8_t* tail_ptr = (const uint8_t*) ptr; + + while (tail_ptr < tail_end && state != UTF8_REJECT) { + + // get tail octet + int octet = *tail_ptr; + + // do the DFA + DFA_TRANSITION(state, octet); + + ++tail_ptr; + } + + vld->state = state; + + if (state == UTF8_ACCEPT) { + // UTF8 is valid and ends on codepoint + return 0; + } else { + if (state == UTF8_REJECT) { + // UTF8 is invalid + return -1; + } else { + // UTF8 is valid, but does not end on codepoint (needs more data) + return 1; + } + } +} +#endif + + +#ifdef __SSE4_1__ +int _nvx_utf8vld_validate_sse4 (void* utf8vld, const uint8_t* data, size_t length) { + + utf8_validator_t* vld = (utf8_validator_t*) utf8vld; + + int state = vld->state; + + const uint8_t* tail_end = data + length; + + // process unaligned head (sub 16 octets) + // + size_t head_len = ((size_t) data) % sizeof(__m128i); + if (head_len) { + + const uint8_t* head_end = data + head_len; + + while (data < head_end && state != UTF8_REJECT) { + + // get head octet + int octet = *data; + + // do the DFA + DFA_TRANSITION(state, octet); + + ++data; + } + } + + // process aligned middle (16 octet chunks) + // + const __m128i* ptr = ((const __m128i*) data); + const __m128i* end = ((const __m128i*) data) + ((length - head_len) / sizeof(__m128i)); + + while (ptr < end && state != UTF8_REJECT) { + + __builtin_prefetch(ptr + 1, 0, 3); + //__builtin_prefetch(ptr + 4, 0, 3); // 16*4=64: cache-line prefetch + + __m128i xmm1 = _mm_load_si128(ptr); + + + if (__builtin_expect(state || _mm_movemask_epi8(xmm1), 0)) { + + // copy to different reg - this allows the prefetching to + // do its job in the meantime (I guess ..) + + // SSE4.1 variant + // + int octet; + + // octet 0 + octet = _mm_extract_epi8(xmm1, 0); + DFA_TRANSITION(state, octet); + + // octet 1 + octet = _mm_extract_epi8(xmm1, 1); + DFA_TRANSITION(state, octet); + + // octet 2 + octet = _mm_extract_epi8(xmm1, 2); + DFA_TRANSITION(state, octet); + + // octet 3 + octet = _mm_extract_epi8(xmm1, 3); + DFA_TRANSITION(state, octet); + + // octet 4 + octet = _mm_extract_epi8(xmm1, 4); + DFA_TRANSITION(state, octet); + + // octet 5 + octet = _mm_extract_epi8(xmm1, 5); + DFA_TRANSITION(state, octet); + + // octet 6 + octet = _mm_extract_epi8(xmm1, 6); + DFA_TRANSITION(state, octet); + + // octet 7 + octet = _mm_extract_epi8(xmm1, 7); + DFA_TRANSITION(state, octet); + + // octet 8 + octet = _mm_extract_epi8(xmm1, 8); + DFA_TRANSITION(state, octet); + + // octet 9 + octet = _mm_extract_epi8(xmm1, 9); + DFA_TRANSITION(state, octet); + + // octet 10 + octet = _mm_extract_epi8(xmm1, 10); + DFA_TRANSITION(state, octet); + + // octet 11 + octet = _mm_extract_epi8(xmm1, 11); + DFA_TRANSITION(state, octet); + + // octet 12 + octet = _mm_extract_epi8(xmm1, 12); + DFA_TRANSITION(state, octet); + + // octet 13 + octet = _mm_extract_epi8(xmm1, 13); + DFA_TRANSITION(state, octet); + + // octet 14 + octet = _mm_extract_epi8(xmm1, 14); + DFA_TRANSITION(state, octet); + + // octet 15 + octet = _mm_extract_epi8(xmm1, 15); + DFA_TRANSITION(state, octet); + } + ++ptr; + } + + // process unaligned tail (sub 16 octets) + // + const uint8_t* tail_ptr = (const uint8_t*) ptr; + + while (tail_ptr < tail_end && state != UTF8_REJECT) { + + // get tail octet + int octet = *tail_ptr; + + // do the DFA + DFA_TRANSITION(state, octet); + + ++tail_ptr; + } + + vld->state = state; + + if (state == UTF8_ACCEPT) { + // UTF8 is valid and ends on codepoint + return 0; + } else { + if (state == UTF8_REJECT) { + // UTF8 is invalid + return -1; + } else { + // UTF8 is valid, but does not end on codepoint (needs more data) + return 1; + } + } +} +#endif + + +int nvx_utf8vld_validate (void* utf8vld, const uint8_t* data, size_t length) { + + utf8_validator_t* vld = (utf8_validator_t*) utf8vld; + + switch (vld->impl) { + case UTF8_VALIDATOR_TABLE_DFA: + return _nvx_utf8vld_validate_table(utf8vld, data, length); + case UTF8_VALIDATOR_UNROLLED_DFA: + return _nvx_utf8vld_validate_unrolled(utf8vld, data, length); +#ifdef __SSE2__ + case UTF8_VALIDATOR_SSE2_DFA: + return _nvx_utf8vld_validate_table(utf8vld, data, length); +#endif +#ifdef __SSE4_1__ + case UTF8_VALIDATOR_SSE41_DFA: + return _nvx_utf8vld_validate_table(utf8vld, data, length); +#endif + default: + return _nvx_utf8vld_validate_table(utf8vld, data, length); + } +} diff --git a/venv/lib/python3.7/site-packages/autobahn/nvx/test/test_utf8validator.py b/venv/lib/python3.7/site-packages/autobahn/nvx/test/test_utf8validator.py new file mode 100644 index 0000000..f31ca2a --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/nvx/test/test_utf8validator.py @@ -0,0 +1,357 @@ +# coding=utf-8 + +############################################################################### +# +# The MIT License (MIT) +# +# Copyright (c) Crossbar.io Technologies GmbH +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +############################################################################### + +from __future__ import absolute_import + +import six +import struct +import unittest + +from autobahn.websocket.utf8validator import Utf8Validator as StandardUtf8Validator + +try: + from _nvx_utf8validator import lib # noqa + from autobahn.nvx import Utf8Validator as NvxUtf8Validator +except ImportError: + HAS_NVX = False +else: + HAS_NVX = True + + +def _create_utf8_test_sequences(): + """ + Create test sequences for UTF-8 decoder tests from + http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt + """ + + UTF8_TEST_SEQUENCES = [] + + # 1 Some correct UTF-8 text + vss = b'\xce\xba\xe1\xbd\xb9\xcf\x83\xce\xbc\xce\xb5' + vs = [b"Some valid UTF-8 sequences", []] + vs[1].append((True, b'hello\x24world')) # U+0024 + vs[1].append((True, b'hello\xC2\xA2world')) # U+00A2 + vs[1].append((True, b'hello\xE2\x82\xACworld')) # U+20AC + vs[1].append((True, b'hello\xF0\xA4\xAD\xA2world')) # U+24B62 + vs[1].append((True, vss)) + UTF8_TEST_SEQUENCES.append(vs) + + # All prefixes of correct UTF-8 text + vs = [ + b"All prefixes of a valid UTF-8 string that contains multi-byte code points", + []] + v = StandardUtf8Validator() + for i in range(1, len(vss) + 1): + v.reset() + res = v.validate(vss[:i]) + vs[1].append((res[0] and res[1], vss[:i])) + UTF8_TEST_SEQUENCES.append(vs) + + # 2.1 First possible sequence of a certain length + vs = [b"First possible sequence of a certain length", []] + vs[1].append((True, b'\x00')) + vs[1].append((True, b'\xc2\x80')) + vs[1].append((True, b'\xe0\xa0\x80')) + vs[1].append((True, b'\xf0\x90\x80\x80')) + UTF8_TEST_SEQUENCES.append(vs) + + # the following conform to the UTF-8 integer encoding scheme, but + # valid UTF-8 only allows for Unicode code points up to U+10FFFF + vs = [b"First possible sequence length 5/6 (invalid codepoints)", []] + vs[1].append((False, b'\xf8\x88\x80\x80\x80')) + vs[1].append((False, b'\xfc\x84\x80\x80\x80\x80')) + UTF8_TEST_SEQUENCES.append(vs) + + # 2.2 Last possible sequence of a certain length + vs = [b"Last possible sequence of a certain length", []] + vs[1].append((True, b'\x7f')) + vs[1].append((True, b'\xdf\xbf')) + vs[1].append((True, b'\xef\xbf\xbf')) + vs[1].append((True, b'\xf4\x8f\xbf\xbf')) + UTF8_TEST_SEQUENCES.append(vs) + + # the following conform to the UTF-8 integer encoding scheme, but + # valid UTF-8 only allows for Unicode code points up to U+10FFFF + vs = [b"Last possible sequence length 4/5/6 (invalid codepoints)", []] + vs[1].append((False, b'\xf7\xbf\xbf\xbf')) + vs[1].append((False, b'\xfb\xbf\xbf\xbf\xbf')) + vs[1].append((False, b'\xfd\xbf\xbf\xbf\xbf\xbf')) + UTF8_TEST_SEQUENCES.append(vs) + + # 2.3 Other boundary conditions + vs = [b"Other boundary conditions", []] + vs[1].append((True, b'\xed\x9f\xbf')) + vs[1].append((True, b'\xee\x80\x80')) + vs[1].append((True, b'\xef\xbf\xbd')) + vs[1].append((True, b'\xf4\x8f\xbf\xbf')) + vs[1].append((False, b'\xf4\x90\x80\x80')) + UTF8_TEST_SEQUENCES.append(vs) + + # 3.1 Unexpected continuation bytes + vs = [b"Unexpected continuation bytes", []] + vs[1].append((False, b'\x80')) + vs[1].append((False, b'\xbf')) + vs[1].append((False, b'\x80\xbf')) + vs[1].append((False, b'\x80\xbf\x80')) + vs[1].append((False, b'\x80\xbf\x80\xbf')) + vs[1].append((False, b'\x80\xbf\x80\xbf\x80')) + vs[1].append((False, b'\x80\xbf\x80\xbf\x80\xbf')) + s = b'' + + # 3.2 Lonely start characters + vs = [b"Lonely start characters", []] + m = [(0xc0, 0xdf), (0xe0, 0xef), (0xf0, 0xf7), (0xf8, 0xfb), (0xfc, 0xfd)] + for mm in m: + s = b'' + for i in range(mm[0], mm[1]): + s += struct.pack('BB', i, 0x20) + # s += chr(i) + # s += chr(0x20) + vs[1].append((False, s)) + UTF8_TEST_SEQUENCES.append(vs) + + # 3.3 Sequences with last continuation byte missing + vs = [b"Sequences with last continuation byte missing", []] + k = [b'\xc0', b'\xe0\x80', b'\xf0\x80\x80', b'\xf8\x80\x80\x80', b'\xfc\x80\x80\x80\x80', + b'\xdf', b'\xef\xbf', b'\xf7\xbf\xbf', b'\xfb\xbf\xbf\xbf', b'\xfd\xbf\xbf\xbf\xbf'] + for kk in k: + vs[1].append((False, kk)) + UTF8_TEST_SEQUENCES.append(vs) + + # 3.4 Concatenation of incomplete sequences + vs = [b"Concatenation of incomplete sequences", []] + vs[1].append((False, b''.join(k))) + UTF8_TEST_SEQUENCES.append(vs) + + # 3.5 Impossible bytes + vs = [b"Impossible bytes", []] + vs[1].append((False, b'\xfe')) + vs[1].append((False, b'\xff')) + vs[1].append((False, b'\xfe\xfe\xff\xff')) + UTF8_TEST_SEQUENCES.append(vs) + + # 4.1 Examples of an overlong ASCII character + vs = [b"Examples of an overlong ASCII character", []] + vs[1].append((False, b'\xc0\xaf')) + vs[1].append((False, b'\xe0\x80\xaf')) + vs[1].append((False, b'\xf0\x80\x80\xaf')) + vs[1].append((False, b'\xf8\x80\x80\x80\xaf')) + vs[1].append((False, b'\xfc\x80\x80\x80\x80\xaf')) + UTF8_TEST_SEQUENCES.append(vs) + + # 4.2 Maximum overlong sequences + vs = [b"Maximum overlong sequences", []] + vs[1].append((False, b'\xc1\xbf')) + vs[1].append((False, b'\xe0\x9f\xbf')) + vs[1].append((False, b'\xf0\x8f\xbf\xbf')) + vs[1].append((False, b'\xf8\x87\xbf\xbf\xbf')) + vs[1].append((False, b'\xfc\x83\xbf\xbf\xbf\xbf')) + UTF8_TEST_SEQUENCES.append(vs) + + # 4.3 Overlong representation of the NUL character + vs = [b"Overlong representation of the NUL character", []] + vs[1].append((False, b'\xc0\x80')) + vs[1].append((False, b'\xe0\x80\x80')) + vs[1].append((False, b'\xf0\x80\x80\x80')) + vs[1].append((False, b'\xf8\x80\x80\x80\x80')) + vs[1].append((False, b'\xfc\x80\x80\x80\x80\x80')) + UTF8_TEST_SEQUENCES.append(vs) + + # 5.1 Single UTF-16 surrogates + vs = [b"Single UTF-16 surrogates", []] + vs[1].append((False, b'\xed\xa0\x80')) + vs[1].append((False, b'\xed\xad\xbf')) + vs[1].append((False, b'\xed\xae\x80')) + vs[1].append((False, b'\xed\xaf\xbf')) + vs[1].append((False, b'\xed\xb0\x80')) + vs[1].append((False, b'\xed\xbe\x80')) + vs[1].append((False, b'\xed\xbf\xbf')) + UTF8_TEST_SEQUENCES.append(vs) + + # 5.2 Paired UTF-16 surrogates + vs = [b"Paired UTF-16 surrogates", []] + vs[1].append((False, b'\xed\xa0\x80\xed\xb0\x80')) + vs[1].append((False, b'\xed\xa0\x80\xed\xbf\xbf')) + vs[1].append((False, b'\xed\xad\xbf\xed\xb0\x80')) + vs[1].append((False, b'\xed\xad\xbf\xed\xbf\xbf')) + vs[1].append((False, b'\xed\xae\x80\xed\xb0\x80')) + vs[1].append((False, b'\xed\xae\x80\xed\xbf\xbf')) + vs[1].append((False, b'\xed\xaf\xbf\xed\xb0\x80')) + vs[1].append((False, b'\xed\xaf\xbf\xed\xbf\xbf')) + UTF8_TEST_SEQUENCES.append(vs) + + # 5.3 Other illegal code positions + # Those are non-character code points and valid UTF-8 by RFC 3629 + vs = [b"Non-character code points (valid UTF-8)", []] + # https://bug686312.bugzilla.mozilla.org/attachment.cgi?id=561257 + # non-characters: EF BF [BE-BF] + vs[1].append((True, b'\xef\xbf\xbe')) + vs[1].append((True, b'\xef\xbf\xbf')) + # non-characters: F[0-7] [89AB]F BF [BE-BF] + for z1 in [b'\xf0', b'\xf1', b'\xf2', b'\xf3', b'\xf4']: + for z2 in [b'\x8f', b'\x9f', b'\xaf', b'\xbf']: + # those encode codepoints >U+10FFFF + if not (z1 == b'\xf4' and z2 != b'\x8f'): + for z3 in [b'\xbe', b'\xbf']: + zz = z1 + z2 + b'\xbf' + z3 + if zz not in [b'\xf0\x8f\xbf\xbe', + b'\xf0\x8f\xbf\xbf']: # filter overlong sequences + vs[1].append((True, zz)) + UTF8_TEST_SEQUENCES.append(vs) + + # Unicode "specials", such as replacement char etc + # http://en.wikipedia.org/wiki/Specials_%28Unicode_block%29 + vs = [b"Unicode specials (i.e. replacement char)", []] + vs[1].append((True, b'\xef\xbf\xb9')) + vs[1].append((True, b'\xef\xbf\xba')) + vs[1].append((True, b'\xef\xbf\xbb')) + vs[1].append((True, b'\xef\xbf\xbc')) + vs[1].append((True, b'\xef\xbf\xbd')) # replacement char + vs[1].append((True, b'\xef\xbf\xbe')) + vs[1].append((True, b'\xef\xbf\xbf')) + UTF8_TEST_SEQUENCES.append(vs) + + return UTF8_TEST_SEQUENCES + + +def _create_valid_utf8_test_sequences(): + """ + Generate some exotic, but valid UTF8 test strings. + """ + VALID_UTF8_TEST_SEQUENCES = [] + for test in _create_utf8_test_sequences(): + valids = [x[1] for x in test[1] if x[0]] + if len(valids) > 0: + VALID_UTF8_TEST_SEQUENCES.append([test[0], valids]) + return VALID_UTF8_TEST_SEQUENCES + + +@unittest.skipIf(not HAS_NVX, 'NVX native extensions not present') +class TestNvxUtf8Validator(unittest.TestCase): + + def setUp(self): + # These tests verify the UTF-8 decoder/validator on the various test cases from + # http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt + vs = [] + for k in _create_utf8_test_sequences(): + vs.extend(k[1]) + + # All Unicode code points + for i in range( + 0, 0xffff): # should by 0x10ffff, but non-wide Python build is limited to 16-bits + if i < 0xD800 or i > 0xDFFF: # filter surrogate code points, which are disallowed to encode in UTF-8 + vs.append((True, six.unichr(i).encode("utf-8"))) + + # FIXME: UnicodeEncodeError: 'utf-8' codec can't encode character '\ud800' + # in position 0: surrogates not allowed + if False: + # 5.1 Single UTF-16 surrogates + for i in range(0xD800, 0xDBFF): # high-surrogate + ss = six.unichr(i).encode("utf-8") + vs.append((False, ss)) + for i in range(0xDC00, 0xDFFF): # low-surrogate + ss = six.unichr(i).encode("utf-8") + vs.append((False, ss)) + + # 5.2 Paired UTF-16 surrogates + for i in range(0xD800, 0xDBFF): # high-surrogate + for j in range(0xDC00, 0xDFFF): # low-surrogate + ss1 = six.unichr(i).encode("utf-8") + ss2 = six.unichr(j).encode("utf-8") + vs.append((False, ss1 + ss2)) + vs.append((False, ss2 + ss1)) + + self._TEST_SEQUENCES = vs + + def test_standard_utf8validator(self): + """ + Test standard implementation of UTF8 validator. + """ + validator = StandardUtf8Validator() + return self._test_utf8(validator) + + def test_nvx_utf8validator(self): + """ + Test NVX implementation of UTF8 validator. + """ + validator = NvxUtf8Validator() + return self._test_utf8(validator) + + def test_standard_utf8validator_incremental(self): + """ + Test standard implementation of UTF8 validator in incremental mode. + """ + validator = StandardUtf8Validator() + return self._test_utf8_incremental(validator) + + # NVX UTF8 validator lack incremental mode implementation + @unittest.expectedFailure + def test_nvx_utf8validator_incremental(self): + """ + Test NVX implementation of UTF8 validator in incremental mode. + """ + validator = NvxUtf8Validator() + return self._test_utf8_incremental(validator) + + def _test_utf8(self, validator): + for s in self._TEST_SEQUENCES: + validator.reset() + r = validator.validate(s[1]) + + # no UTF-8 decode error _and_ everything consumed + res = r[0] and r[1] + + self.assertEqual(res, s[0]) + + def _test_utf8_incremental(self, validator, withPositions=True): + # These tests verify that the UTF-8 decoder/validator can operate incrementally. + if withPositions: + # testing validator 4 on incremental detection with positions + k = 4 + else: + # testing validator 2 on incremental detection without positions + k = 2 + + validator.reset() + self.assertEqual((True, True, 15, 15)[:k], validator.validate(u'µ@ßöäüàá'.encode('utf8'))[:k]) + + validator.reset() + self.assertEqual((False, False, 0, 0)[:k], validator.validate(b"\xF5")[:k]) + + # the following 3 all fail on eating byte 7 (0xA0) + validator.reset() + self.assertEqual((True, True, 6, 6)[:k], validator.validate(b"\x65\x64\x69\x74\x65\x64")[:k]) + self.assertEqual((False, False, 1, 7)[:k], validator.validate(b"\xED\xA0\x80")[:k]) + + validator.reset() + self.assertEqual((True, True, 4, 4)[:k], validator.validate(b"\x65\x64\x69\x74")[:k]) + self.assertEqual((False, False, 3, 7)[:k], validator.validate(b"\x65\x64\xED\xA0\x80")[:k]) + + validator.reset() + self.assertEqual((True, False, 7, 7)[:k], validator.validate(b"\x65\x64\x69\x74\x65\x64\xED")[:k]) + self.assertEqual((False, False, 0, 7)[:k], validator.validate(b"\xA0\x80")[:k]) diff --git a/venv/lib/python3.7/site-packages/autobahn/rawsocket/test/test_rawsocket_url.py b/venv/lib/python3.7/site-packages/autobahn/rawsocket/test/test_rawsocket_url.py new file mode 100644 index 0000000..6b11fa8 --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/rawsocket/test/test_rawsocket_url.py @@ -0,0 +1,126 @@ +############################################################################### +# +# The MIT License (MIT) +# +# Copyright (c) Crossbar.io Technologies GmbH +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +############################################################################### + +from __future__ import absolute_import + +import unittest + +from autobahn.rawsocket.util import create_url, parse_url + + +class TestCreateRsUrl(unittest.TestCase): + + def test_create_url01(self): + self.assertEqual(create_url("localhost"), "rs://localhost:80") + + def test_create_url02(self): + self.assertEqual(create_url("localhost", port=8090), "rs://localhost:8090") + + def test_create_url03(self): + self.assertEqual(create_url("localhost", isSecure=True), "rss://localhost:443") + + def test_create_url04(self): + self.assertEqual(create_url("localhost", isSecure=True, port=443), "rss://localhost:443") + + def test_create_url05(self): + self.assertEqual(create_url("localhost", isSecure=True, port=80), "rss://localhost:80") + + def test_create_url06(self): + self.assertEqual(create_url("unix", port="file.sock"), "rs://unix:file.sock") + + def test_create_url07(self): + self.assertEqual(create_url("unix", port="/tmp/file.sock"), "rs://unix:/tmp/file.sock") + + def test_create_url08(self): + self.assertEqual(create_url("unix", port="../file.sock"), "rs://unix:../file.sock") + + def test_create_url09(self): + self.assertEqual(create_url("unix", isSecure=True, port="file.sock"), "rss://unix:file.sock") + + def test_create_url10(self): + self.assertEqual(create_url("unix", isSecure=True, port="/tmp/file.sock"), "rss://unix:/tmp/file.sock") + + def test_create_url11(self): + self.assertEqual(create_url("unix", isSecure=True, port="../file.sock"), "rss://unix:../file.sock") + + +class TestParseWsUrl(unittest.TestCase): + + # parse_url -> (isSecure, host, port) + + def test_parse_url01(self): + self.assertEqual(parse_url("rs://localhost"), (False, 'localhost', 80)) + + def test_parse_url02(self): + self.assertEqual(parse_url("rss://localhost"), (True, 'localhost', 443)) + + def test_parse_url03(self): + self.assertEqual(parse_url("rs://localhost:9000"), (False, 'localhost', 9000)) + + def test_parse_url04(self): + self.assertEqual(parse_url("rss://localhost:9000"), (True, 'localhost', 9000)) + + def test_parse_url05(self): + self.assertRaises(Exception, parse_url, "ws://localhost") + + def test_parse_url06(self): + self.assertRaises(Exception, parse_url, "wss://localhost") + + def test_parse_url07(self): + self.assertRaises(Exception, parse_url, "ws://localhost:80") + + def test_parse_url08(self): + self.assertRaises(Exception, parse_url, "rs://localhost/somepath") + + def test_parse_url09(self): + self.assertRaises(Exception, parse_url, "rs://localhost#somefrag") + + def test_parse_url10(self): + self.assertRaises(Exception, parse_url, "rs://localhost?foo=bar") + + def test_parse_url11(self): + self.assertRaises(Exception, parse_url, "rss://") + + def test_parse_url12(self): + self.assertRaises(Exception, parse_url, "rs://") + + def test_parse_url13(self): + self.assertEqual(parse_url("rs://unix:file.sock"), (False, 'unix', 'file.sock')) + + def test_parse_url14(self): + self.assertEqual(parse_url("rs://unix:/tmp/file.sock"), (False, 'unix', '/tmp/file.sock')) + + def test_parse_url15(self): + self.assertEqual(parse_url("rs://unix:../file.sock"), (False, 'unix', '../file.sock')) + + def test_parse_url16(self): + self.assertEqual(parse_url("rss://unix:file.sock"), (True, 'unix', 'file.sock')) + + def test_parse_url17(self): + self.assertEqual(parse_url("rss://unix:/tmp/file.sock"), (True, 'unix', '/tmp/file.sock')) + + def test_parse_url18(self): + self.assertEqual(parse_url("rss://unix:../file.sock"), (True, 'unix', '../file.sock')) diff --git a/venv/lib/python3.7/site-packages/autobahn/test/test_rng.py b/venv/lib/python3.7/site-packages/autobahn/test/test_rng.py new file mode 100644 index 0000000..5bf728c --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/test/test_rng.py @@ -0,0 +1,111 @@ +############################################################################### +# +# The MIT License (MIT) +# +# Copyright (c) Crossbar.io Technologies GmbH +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +############################################################################### + +from __future__ import absolute_import + +import sys +import unittest + +import uuid +import random +from nacl import utils, public + +from autobahn import util + + +@unittest.skipIf(not sys.platform.startswith('linux'), 'entropy depletion tests only available on Linux') +class TestEntropy(unittest.TestCase): + + def test_non_depleting(self): + res = {} + + with open('/dev/urandom', 'rb') as rng: + for i in range(1000): + for j in range(100): + + # "reseed" (seems pointless, but ..) + random.seed() + + # random UUIDs + v1 = uuid.uuid4() # noqa + + # stdlib random + v2 = random.random() # noqa + v3 = random.getrandbits(32) # noqa + v4 = random.randint(0, 9007199254740992) # noqa + v5 = random.normalvariate(10, 100) # noqa + v6 = random.choice(range(100)) # noqa + + # PyNaCl + v7 = utils.random(public.Box.NONCE_SIZE) # noqa + + # Autobahn utils + v8 = util.generate_token(4, 4) # noqa + v9 = util.id() # noqa + v10 = util.rid() # noqa + v11 = util.newid() # noqa + + # direct procfs access to PRNG + d = rng.read(1000) # noqa + + # check available entropy + with open('/proc/sys/kernel/random/entropy_avail', 'r') as ent: + ea = int(ent.read()) // 100 + if ea not in res: + res[ea] = 0 + res[ea] += 1 + + skeys = sorted(res.keys()) + + print('\nsystem entropy depletion stats:') + for k in skeys: + print('{}: {}'.format(k, res[k])) + + self.assertTrue(skeys[0] > 10) + + def test_depleting(self): + res = {} + + with open('/dev/random', 'rb') as rng: + for i in range(10000): + + # direct procfs access to "real" RNG + d = rng.read(1000) # noqa + + # check available entropy + with open('/proc/sys/kernel/random/entropy_avail', 'r') as ent: + ea = int(ent.read()) // 100 + if ea not in res: + res[ea] = 0 + res[ea] += 1 + + skeys = sorted(res.keys()) + + print('\nsystem entropy depletion stats:') + for k in skeys: + print('{}: {}'.format(k, res[k])) + + self.assertTrue(skeys[0] == 0) diff --git a/venv/lib/python3.7/site-packages/autobahn/test/test_util.py b/venv/lib/python3.7/site-packages/autobahn/test/test_util.py new file mode 100644 index 0000000..bf0652b --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/test/test_util.py @@ -0,0 +1,48 @@ +############################################################################### +# +# The MIT License (MIT) +# +# Copyright (c) Crossbar.io Technologies GmbH +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +############################################################################### + +from __future__ import absolute_import + +import unittest + +from autobahn.util import IdGenerator + + +class TestIdGenerator(unittest.TestCase): + def test_idgenerator_is_generator(self): + "IdGenerator follows the generator protocol" + g = IdGenerator() + self.assertEqual(1, next(g)) + self.assertEqual(2, next(g)) + + def test_generator_wrap(self): + g = IdGenerator() + g._next = 2 ** 53 - 1 # cheat a little + + v = next(g) + self.assertEqual(v, 2 ** 53) + v = next(g) + self.assertEqual(v, 1) diff --git a/venv/lib/python3.7/site-packages/autobahn/twisted/__init__.py b/venv/lib/python3.7/site-packages/autobahn/twisted/__init__.py new file mode 100644 index 0000000..80e24ad --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/twisted/__init__.py @@ -0,0 +1,89 @@ +############################################################################### +# +# The MIT License (MIT) +# +# Copyright (c) Crossbar.io Technologies GmbH +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +############################################################################### + + +from __future__ import absolute_import + +import sys +import platform + +import twisted + +import autobahn + +# Twisted specific utilities (these should really be in Twisted, but +# they aren't, and we use these in example code, so it must be part of +# the public API) +from autobahn.twisted.util import sleep +from autobahn.twisted.choosereactor import install_reactor + +# WebSocket protocol support +from autobahn.twisted.websocket import \ + WebSocketServerProtocol, \ + WebSocketClientProtocol, \ + WebSocketServerFactory, \ + WebSocketClientFactory + +# support for running Twisted stream protocols over WebSocket +from autobahn.twisted.websocket import WrappingWebSocketServerFactory, \ + WrappingWebSocketClientFactory + +# Twisted Web support - FIXME: these imports trigger import of Twisted reactor! +# from autobahn.twisted.resource import WebSocketResource, WSGIRootResource + +# WAMP support +from autobahn.twisted.wamp import ApplicationSession + + +__all__ = ( + # this should really be in Twisted + 'sleep', + 'install_reactor', + + # WebSocket + 'WebSocketServerProtocol', + 'WebSocketClientProtocol', + 'WebSocketServerFactory', + 'WebSocketClientFactory', + + # wrapping stream protocols in WebSocket + 'WrappingWebSocketServerFactory', + 'WrappingWebSocketClientFactory', + + # Twisted Web - FIXME: see comment for import above + # 'WebSocketResource', + + # this should really be in Twisted - FIXME: see comment for import above + # 'WSGIRootResource', + + # WAMP support + 'ApplicationSession', +) + +__ident__ = u'Autobahn/{}-Twisted/{}-{}/{}'.format(autobahn.__version__, twisted.__version__, platform.python_implementation(), '.'.join([str(x) for x in list(sys.version_info[:3])])) +""" +AutobahnPython library implementation (eg. "Autobahn/0.13.0-Twisted/15.5.0-CPython/3.5.1") +""" diff --git a/venv/lib/python3.7/site-packages/autobahn/util.py b/venv/lib/python3.7/site-packages/autobahn/util.py new file mode 100644 index 0000000..c248459 --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/util.py @@ -0,0 +1,870 @@ +############################################################################### +# +# The MIT License (MIT) +# +# Copyright (c) Crossbar.io Technologies GmbH +# +# 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", fWITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +############################################################################### + +from __future__ import absolute_import + +import os +import time +import struct +import sys +import re +import base64 +import math +import random +import binascii +from datetime import datetime, timedelta +from pprint import pformat +from array import array + +import six + +import txaio + +try: + _TLS = True + from OpenSSL import SSL +except ImportError: + _TLS = False + + +__all__ = ("public", + "encode_truncate", + "xor", + "utcnow", + "utcstr", + "id", + "rid", + "newid", + "rtime", + "Stopwatch", + "Tracker", + "EqualityMixin", + "ObservableMixin", + "IdGenerator", + "generate_token", + "generate_activation_code", + "generate_serial_number", + "generate_user_password") + + +def public(obj): + """ + The public user API of Autobahn is marked using this decorator. + Everything that is not decorated @public is library internal, can + change at any time and should not be used in user program code. + """ + try: + obj._is_public = True + except AttributeError: + # FIXME: exceptions.AttributeError: 'staticmethod' object has no attribute '_is_public' + pass + return obj + + +@public +def encode_truncate(text, limit, encoding='utf8', return_encoded=True): + """ + Given a string, return a truncated version of the string such that + the UTF8 encoding of the string is smaller than the given limit. + + This function correctly truncates even in the presence of Unicode code + points that encode to multi-byte encodings which must not be truncated + in the middle. + + :param text: The (Unicode) string to truncate. + :type text: str + :param limit: The number of bytes to limit the UTF8 encoding to. + :type limit: int + :param encoding: Truncate the string in this encoding (default is ``utf-8``). + :type encoding: str + :param return_encoded: If ``True``, return the string encoded into bytes + according to the specified encoding, else return the string as a string. + :type return_encoded: bool + + :returns: The truncated string. + :rtype: str or bytes + """ + assert(text is None or type(text) == six.text_type) + assert(type(limit) in six.integer_types) + assert(limit >= 0) + + if text is None: + return + + # encode the given string in the specified encoding + s = text.encode(encoding) + + # when the resulting byte string is longer than the given limit .. + if len(s) > limit: + # .. truncate, and + s = s[:limit] + + # decode back, ignoring errors that result from truncation + # in the middle of multi-byte encodings + text = s.decode(encoding, 'ignore') + + if return_encoded: + s = text.encode(encoding) + + if return_encoded: + return s + else: + return text + + +@public +def xor(d1, d2): + """ + XOR two binary strings of arbitrary (equal) length. + + :param d1: The first binary string. + :type d1: binary + :param d2: The second binary string. + :type d2: binary + + :returns: XOR of the binary strings (``XOR(d1, d2)``) + :rtype: bytes + """ + if type(d1) != six.binary_type: + raise Exception("invalid type {} for d1 - must be binary".format(type(d1))) + if type(d2) != six.binary_type: + raise Exception("invalid type {} for d2 - must be binary".format(type(d2))) + if len(d1) != len(d2): + raise Exception("cannot XOR binary string of differing length ({} != {})".format(len(d1), len(d2))) + + d1 = array('B', d1) + d2 = array('B', d2) + + for i in range(len(d1)): + d1[i] ^= d2[i] + + if six.PY3: + return d1.tobytes() + else: + return d1.tostring() + + +@public +def utcstr(ts=None): + """ + Format UTC timestamp in ISO 8601 format. + + Note: to parse an ISO 8601 formatted string, use the **iso8601** + module instead (e.g. ``iso8601.parse_date("2014-05-23T13:03:44.123Z")``). + + :param ts: The timestamp to format. + :type ts: instance of :py:class:`datetime.datetime` or ``None`` + + :returns: Timestamp formatted in ISO 8601 format. + :rtype: str + """ + assert(ts is None or isinstance(ts, datetime)) + if ts is None: + ts = datetime.utcnow() + return u"{0}Z".format(ts.strftime(u"%Y-%m-%dT%H:%M:%S.%f")[:-3]) + + +@public +def utcnow(): + """ + Get current time in UTC as ISO 8601 string. + + :returns: Current time as string in ISO 8601 format. + :rtype: str + """ + return utcstr() + + +class IdGenerator(object): + """ + ID generator for WAMP request IDs. + + WAMP request IDs are sequential per WAMP session, starting at 1 and + wrapping around at 2**53 (both value are inclusive [1, 2**53]). + + The upper bound **2**53** is chosen since it is the maximum integer that can be + represented as a IEEE double such that all smaller integers are representable as well. + + Hence, IDs can be safely used with languages that use IEEE double as their + main (or only) number type (JavaScript, Lua, etc). + + See https://github.com/wamp-proto/wamp-proto/blob/master/spec/basic.md#ids + """ + + def __init__(self): + self._next = 0 # starts at 1; next() pre-increments + + def next(self): + """ + Returns next ID. + + :returns: The next ID. + :rtype: int + """ + self._next += 1 + if self._next > 9007199254740992: + self._next = 1 + return self._next + + # generator protocol + def __next__(self): + return self.next() + + +# +# Performance comparison of IdGenerator.next(), id() and rid(). +# +# All tests were performed on: +# +# - Ubuntu 14.04 LTS x86-64 +# - Intel Core i7 920 @ 3.3GHz +# +# The tests generated 100 mio. IDs and run-time was measured +# as wallclock from Unix "time" command. In each run, a single CPU +# core was essentially at 100% load all the time (though the sys/usr +# ratio was different). +# +# PyPy 2.6.1: +# +# IdGenerator.next() 0.5s +# id() 29.4s +# rid() 106.1s +# +# CPython 2.7.10: +# +# IdGenerator.next() 49.0s +# id() 370.5s +# rid() 196.4s +# + +# +# Note on the ID range [0, 2**53]. We once reduced the range to [0, 2**31]. +# This lead to extremely hard to track down issues due to ID collisions! +# Here: https://github.com/crossbario/autobahn-python/issues/419#issue-90483337 +# + + +# 8 byte mask with 53 LSBs set (WAMP requires IDs from [0, 2**53] +_WAMP_ID_MASK = struct.unpack(">Q", b"\x00\x1f\xff\xff\xff\xff\xff\xff")[0] + + +def rid(): + """ + Generate a new random integer ID from range **[0, 2**53]**. + + The generated ID is uniformly distributed over the whole range, doesn't have + a period (no pseudo-random generator is used) and cryptographically strong. + + The upper bound **2**53** is chosen since it is the maximum integer that can be + represented as a IEEE double such that all smaller integers are representable as well. + + Hence, IDs can be safely used with languages that use IEEE double as their + main (or only) number type (JavaScript, Lua, etc). + + :returns: A random integer ID. + :rtype: int + """ + return struct.unpack("@Q", os.urandom(8))[0] & _WAMP_ID_MASK + + +# noinspection PyShadowingBuiltins +def id(): + """ + Generate a new random integer ID from range **[0, 2**53]**. + + The generated ID is based on a pseudo-random number generator (Mersenne Twister, + which has a period of 2**19937-1). It is NOT cryptographically strong, and + hence NOT suitable to generate e.g. secret keys or access tokens. + + The upper bound **2**53** is chosen since it is the maximum integer that can be + represented as a IEEE double such that all smaller integers are representable as well. + + Hence, IDs can be safely used with languages that use IEEE double as their + main (or only) number type (JavaScript, Lua, etc). + + :returns: A random integer ID. + :rtype: int + """ + return random.randint(0, 9007199254740992) + + +def newid(length=16): + """ + Generate a new random string ID. + + The generated ID is uniformly distributed and cryptographically strong. It is + hence usable for things like secret keys and access tokens. + + :param length: The length (in chars) of the ID to generate. + :type length: int + + :returns: A random string ID. + :rtype: str + """ + l = int(math.ceil(float(length) * 6. / 8.)) + return base64.b64encode(os.urandom(l))[:length].decode('ascii') + + +# a standard base36 character set +# DEFAULT_TOKEN_CHARS = string.digits + string.ascii_uppercase + +# we take out the following 9 chars (leaving 27), because there +# is visual ambiguity: 0/O/D, 1/I, 8/B, 2/Z +DEFAULT_TOKEN_CHARS = u'345679ACEFGHJKLMNPQRSTUVWXY' +""" +Default set of characters to create rtokens from. +""" + +DEFAULT_ZBASE32_CHARS = u'13456789abcdefghijkmnopqrstuwxyz' +""" +Our choice of confusing characters to eliminate is: `0', `l', `v', and `2'. Our +reasoning is that `0' is potentially mistaken for `o', that `l' is potentially +mistaken for `1' or `i', that `v' is potentially mistaken for `u' or `r' +(especially in handwriting) and that `2' is potentially mistaken for `z' +(especially in handwriting). + +Note that we choose to focus on typed and written transcription more than on +vocal, since humans already have a well-established system of disambiguating +spoken alphanumerics, such as the United States military's "Alpha Bravo Charlie +Delta" and telephone operators' "Is that 'd' as in 'dog'?". + +* http://philzimmermann.com/docs/human-oriented-base-32-encoding.txt +""" + + +@public +def generate_token(char_groups, chars_per_group, chars=None, sep=None, lower_case=False): + """ + Generate cryptographically strong tokens, which are strings like `M6X5-YO5W-T5IK`. + These can be used e.g. for used-only-once activation tokens or the like. + + The returned token has an entropy of + ``math.log(len(chars), 2.) * chars_per_group * char_groups`` + bits. + + With the default charset and 4 characters per group, ``generate_token()`` produces + strings with the following entropy: + + ================ =================== ======================================== + character groups entropy (at least) recommended use + ================ =================== ======================================== + 2 38 bits + 3 57 bits one-time activation or pairing code + 4 76 bits secure user password + 5 95 bits + 6 114 bits globally unique serial / product code + 7 133 bits + ================ =================== ======================================== + + Here are some examples: + + * token(3): ``9QXT-UXJW-7R4H`` + * token(4): ``LPNN-JMET-KWEP-YK45`` + * token(6): ``NXW9-74LU-6NUH-VLPV-X6AG-QUE3`` + + :param char_groups: Number of character groups (or characters if chars_per_group == 1). + :type char_groups: int + + :param chars_per_group: Number of characters per character group (or 1 to return a token with no grouping). + :type chars_per_group: int + + :param chars: Characters to choose from. Default is 27 character subset + of the ISO basic Latin alphabet (see: ``DEFAULT_TOKEN_CHARS``). + :type chars: str or None + + :param sep: When separating groups in the token, the separater string. + :type sep: str + + :param lower_case: If ``True``, generate token in lower-case. + :type lower_case: bool + + :returns: The generated token. + :rtype: str + """ + assert(type(char_groups) in six.integer_types) + assert(type(chars_per_group) in six.integer_types) + assert(chars is None or type(chars) == six.text_type) + chars = chars or DEFAULT_TOKEN_CHARS + if lower_case: + chars = chars.lower() + sep = sep or u'-' + rng = random.SystemRandom() + token_value = u''.join(rng.choice(chars) for _ in range(char_groups * chars_per_group)) + if chars_per_group > 1: + return sep.join(map(u''.join, zip(*[iter(token_value)] * chars_per_group))) + else: + return token_value + + +@public +def generate_activation_code(): + """ + Generate a one-time activation code or token of the form ``u'W97F-96MJ-YGJL'``. + The generated value is cryptographically strong and has (at least) 57 bits of entropy. + + :returns: The generated activation code. + :rtype: str + """ + return generate_token(char_groups=3, chars_per_group=4, chars=DEFAULT_TOKEN_CHARS, sep=u'-', lower_case=False) + + +@public +def generate_user_password(): + """ + Generate a secure, random user password of the form ``u'kgojzi61dn5dtb6d'``. + The generated value is cryptographically strong and has (at least) 76 bits of entropy. + + :returns: The generated password. + :rtype: str + """ + return generate_token(char_groups=16, chars_per_group=1, chars=DEFAULT_ZBASE32_CHARS, sep=u'-', lower_case=True) + + +@public +def generate_serial_number(): + """ + Generate a globally unique serial / product code of the form ``u'YRAC-EL4X-FQQE-AW4T-WNUV-VN6T'``. + The generated value is cryptographically strong and has (at least) 114 bits of entropy. + + :returns: The generated serial number / product code. + :rtype: str + """ + return generate_token(char_groups=6, chars_per_group=4, chars=DEFAULT_TOKEN_CHARS, sep=u'-', lower_case=False) + + +# Select the most precise walltime measurement function available +# on the platform +# +if sys.platform.startswith('win'): + # On Windows, this function returns wall-clock seconds elapsed since the + # first call to this function, as a floating point number, based on the + # Win32 function QueryPerformanceCounter(). The resolution is typically + # better than one microsecond + if sys.version_info >= (3, 8): + _rtime = time.perf_counter + else: + _rtime = time.clock + _ = _rtime() # this starts wallclock +else: + # On Unix-like platforms, this used the first available from this list: + # (1) gettimeofday() -- resolution in microseconds + # (2) ftime() -- resolution in milliseconds + # (3) time() -- resolution in seconds + _rtime = time.time + + +@public +def rtime(): + """ + Precise, fast wallclock time. + + :returns: The current wallclock in seconds. Returned values are only guaranteed + to be meaningful relative to each other. + :rtype: float + """ + return _rtime() + + +class Stopwatch(object): + """ + Stopwatch based on walltime. + + This can be used to do code timing and uses the most precise walltime measurement + available on the platform. This is a very light-weight object, + so create/dispose is very cheap. + """ + + def __init__(self, start=True): + """ + + :param start: If ``True``, immediately start the stopwatch. + :type start: bool + """ + self._elapsed = 0 + if start: + self._started = rtime() + self._running = True + else: + self._started = None + self._running = False + + def elapsed(self): + """ + Return total time elapsed in seconds during which the stopwatch was running. + + :returns: The elapsed time in seconds. + :rtype: float + """ + if self._running: + now = rtime() + return self._elapsed + (now - self._started) + else: + return self._elapsed + + def pause(self): + """ + Pauses the stopwatch and returns total time elapsed in seconds during which + the stopwatch was running. + + :returns: The elapsed time in seconds. + :rtype: float + """ + if self._running: + now = rtime() + self._elapsed += now - self._started + self._running = False + return self._elapsed + else: + return self._elapsed + + def resume(self): + """ + Resumes a paused stopwatch and returns total elapsed time in seconds + during which the stopwatch was running. + + :returns: The elapsed time in seconds. + :rtype: float + """ + if not self._running: + self._started = rtime() + self._running = True + return self._elapsed + else: + now = rtime() + return self._elapsed + (now - self._started) + + def stop(self): + """ + Stops the stopwatch and returns total time elapsed in seconds during which + the stopwatch was (previously) running. + + :returns: The elapsed time in seconds. + :rtype: float + """ + elapsed = self.pause() + self._elapsed = 0 + self._started = None + self._running = False + return elapsed + + +class Tracker(object): + """ + A key-based statistics tracker. + """ + + def __init__(self, tracker, tracked): + """ + """ + self.tracker = tracker + self.tracked = tracked + self._timings = {} + self._offset = rtime() + self._dt_offset = datetime.utcnow() + + def track(self, key): + """ + Track elapsed for key. + + :param key: Key under which to track the timing. + :type key: str + """ + self._timings[key] = rtime() + + def diff(self, start_key, end_key, formatted=True): + """ + Get elapsed difference between two previously tracked keys. + + :param start_key: First key for interval (older timestamp). + :type start_key: str + :param end_key: Second key for interval (younger timestamp). + :type end_key: str + :param formatted: If ``True``, format computed time period and return string. + :type formatted: bool + + :returns: Computed time period in seconds (or formatted string). + :rtype: float or str + """ + if end_key in self._timings and start_key in self._timings: + d = self._timings[end_key] - self._timings[start_key] + if formatted: + if d < 0.00001: # 10us + s = "%d ns" % round(d * 1000000000.) + elif d < 0.01: # 10ms + s = "%d us" % round(d * 1000000.) + elif d < 10: # 10s + s = "%d ms" % round(d * 1000.) + else: + s = "%d s" % round(d) + return s.rjust(8) + else: + return d + else: + if formatted: + return "n.a.".rjust(8) + else: + return None + + def absolute(self, key): + """ + Return the UTC wall-clock time at which a tracked event occurred. + + :param key: The key + :type key: str + + :returns: Timezone-naive datetime. + :rtype: instance of :py:class:`datetime.datetime` + """ + elapsed = self[key] + if elapsed is None: + raise KeyError("No such key \"%s\"." % elapsed) + return self._dt_offset + timedelta(seconds=elapsed) + + def __getitem__(self, key): + if key in self._timings: + return self._timings[key] - self._offset + else: + return None + + def __iter__(self): + return self._timings.__iter__() + + def __str__(self): + return pformat(self._timings) + + +class EqualityMixin(object): + """ + Mixing to add equality comparison operators to a class. + + Two objects are identical under this mixin, if and only if: + + 1. both object have the same class + 2. all non-private object attributes are equal + """ + + def __eq__(self, other): + """ + Compare this object to another object for equality. + + :param other: The other object to compare with. + :type other: obj + + :returns: ``True`` iff the objects are equal. + :rtype: bool + """ + if not isinstance(other, self.__class__): + return False + # we only want the actual message data attributes (not eg _serialize) + for k in self.__dict__: + if not k.startswith('_'): + if not self.__dict__[k] == other.__dict__[k]: + return False + return True + # return (isinstance(other, self.__class__) and self.__dict__ == other.__dict__) + + def __ne__(self, other): + """ + Compare this object to another object for inequality. + + :param other: The other object to compare with. + :type other: obj + + :returns: ``True`` iff the objects are not equal. + :rtype: bool + """ + return not self.__eq__(other) + + +def wildcards2patterns(wildcards): + """ + Compute a list of regular expression patterns from a list of + wildcard strings. A wildcard string uses '*' as a wildcard character + matching anything. + + :param wildcards: List of wildcard strings to compute regular expression patterns for. + :type wildcards: list of str + + :returns: Computed regular expressions. + :rtype: list of obj + """ + # note that we add the ^ and $ so that the *entire* string must + # match. Without this, e.g. a prefix will match: + # re.match('.*good\\.com', 'good.com.evil.com') # match! + # re.match('.*good\\.com$', 'good.com.evil.com') # no match! + return [re.compile('^' + wc.replace('.', r'\.').replace('*', '.*') + '$') for wc in wildcards] + + +class ObservableMixin(object): + """ + Internal utility for enabling event-listeners on particular objects + """ + + # A "helper" style composable class (as opposed to a mix-in) might + # be a lot easier to deal with here. Having an __init__ method + # with a "mix in" style class can be fragile and error-prone, + # especially if it takes arguments. Since we don't use the + # "parent" beavior anywhere, I didn't add a .set_parent() (yet?) + + # these are class-level globals; individual instances are + # initialized as-needed (e.g. the first .on() call adds a + # _listeners dict). Thus, subclasses don't have to call super() + # properly etc. + _parent = None + _valid_events = None + _listeners = None + + def set_valid_events(self, valid_events=None): + """ + :param valid_events: if non-None, .on() or .fire() with an event + not listed in valid_events raises an exception. + """ + self._valid_events = list(valid_events) + + def _check_event(self, event): + """ + Internal helper. Throws RuntimeError if we have a valid_events + list, and the given event isnt' in it. Does nothing otherwise. + """ + if self._valid_events and event not in self._valid_events: + raise RuntimeError( + "Invalid event '{event}'. Expected one of: {events}".format( + event=event, + events=', '.join(self._valid_events), + ) + ) + + def on(self, event, handler): + """ + Add a handler for an event. + + :param event: the name of the event + + :param handler: a callable thats invoked when .fire() is + called for this events. Arguments will be whatever are given + to .fire() + """ + # print("adding '{}' to '{}': {}".format(event, hash(self), handler)) + self._check_event(event) + if self._listeners is None: + self._listeners = dict() + if event not in self._listeners: + self._listeners[event] = [] + self._listeners[event].append(handler) + + def off(self, event=None, handler=None): + """ + Stop listening for a single event, or all events. + + :param event: if None, remove all listeners. Otherwise, remove + listeners for the single named event. + + :param handler: if None, remove all handlers for the named + event; otherwise remove just the given handler. + """ + if event is None: + if handler is not None: + # maybe this should mean "remove the given handler + # from any event at all that contains it"...? + raise RuntimeError( + "Can't specificy a specific handler without an event" + ) + self._listeners = dict() + else: + if self._listeners is None: + return + self._check_event(event) + if event in self._listeners: + if handler is None: + del self._listeners[event] + else: + self._listeners[event].discard(handler) + + def fire(self, event, *args, **kwargs): + """ + Fire a particular event. + + :param event: the event to fire. All other args and kwargs are + passed on to the handler(s) for the event. + + :return: a Deferred/Future gathering all async results from + all handlers and/or parent handlers. + """ + # print("firing '{}' from '{}'".format(event, hash(self))) + if self._listeners is None: + return txaio.create_future(result=[]) + + self._check_event(event) + res = [] + for handler in self._listeners.get(event, []): + future = txaio.as_future(handler, *args, **kwargs) + res.append(future) + if self._parent is not None: + res.append(self._parent.fire(event, *args, **kwargs)) + return txaio.gather(res, consume_exceptions=False) + + +class _LazyHexFormatter(object): + """ + This is used to avoid calling binascii.hexlify() on data given to + log.debug() calls unless debug is active (for example). Like:: + + self.log.debug( + "Some data: {octets}", + octets=_LazyHexFormatter(os.urandom(32)), + ) + """ + __slots__ = ('obj',) + + def __init__(self, obj): + self.obj = obj + + def __str__(self): + return binascii.hexlify(self.obj).decode('ascii') + + +def _is_tls_error(instance): + """ + :returns: True if we have TLS support and 'instance' is an + instance of :class:`OpenSSL.SSL.Error` otherwise False + """ + if _TLS: + return isinstance(instance, SSL.Error) + return False + + +def _maybe_tls_reason(instance): + """ + :returns: a TLS error-message, or empty-string if 'instance' is + not a TLS error. + """ + if _is_tls_error(instance): + ssl_error = instance.args[0][0] + return u"SSL error: {msg} (in {func})".format( + func=ssl_error[1], + msg=ssl_error[2], + ) + return u"" diff --git a/venv/lib/python3.7/site-packages/autobahn/wamp/__init__.py b/venv/lib/python3.7/site-packages/autobahn/wamp/__init__.py new file mode 100644 index 0000000..3bd4d85 --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/wamp/__init__.py @@ -0,0 +1,83 @@ +############################################################################### +# +# The MIT License (MIT) +# +# Copyright (c) Crossbar.io Technologies GmbH +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +############################################################################### + +from __future__ import absolute_import + +from autobahn.wamp.types import \ + ComponentConfig, \ + SessionDetails, \ + CloseDetails, \ + RegisterOptions, \ + CallOptions, \ + CallDetails, \ + CallResult, \ + SubscribeOptions, \ + PublishOptions, \ + EventDetails + +from autobahn.wamp.exception import \ + Error, \ + SessionNotReady, \ + SerializationError, \ + ProtocolError, \ + TransportLost, \ + ApplicationError, \ + InvalidUri + +from autobahn.wamp.interfaces import ISession + +from autobahn.wamp.uri import \ + error, \ + register, \ + subscribe + + +__all__ = ( + 'ComponentConfig', + 'SessionDetails', + 'CloseDetails', + 'RegisterOptions', + 'CallOptions', + 'CallDetails', + 'CallResult', + 'SubscribeOptions', + 'PublishOptions', + 'EventDetails', + + 'Error', + 'SessionNotReady', + 'SerializationError', + 'ProtocolError', + 'TransportLost', + 'ApplicationError', + 'InvalidUri', + + 'ISession', + + 'error', + 'register', + 'subscribe', +) diff --git a/venv/lib/python3.7/site-packages/autobahn/wamp/exception.py b/venv/lib/python3.7/site-packages/autobahn/wamp/exception.py new file mode 100644 index 0000000..17ec6d4 --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/wamp/exception.py @@ -0,0 +1,314 @@ +############################################################################### +# +# The MIT License (MIT) +# +# Copyright (c) Crossbar.io Technologies GmbH +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +############################################################################### + +from __future__ import absolute_import + +import six + +from autobahn.util import public +from autobahn.wamp.uri import error + +__all__ = ( + 'Error', + 'SessionNotReady', + 'SerializationError', + 'ProtocolError', + 'TransportLost', + 'ApplicationError', + 'NotAuthorized', + 'InvalidUri', +) + + +@public +class Error(RuntimeError): + """ + Base class for all exceptions related to WAMP. + """ + + +@public +class SessionNotReady(Error): + """ + The application tried to perform a WAMP interaction, but the + session is not yet fully established. + """ + + +@public +class SerializationError(Error): + """ + Exception raised when the WAMP serializer could not serialize the + application payload (``args`` or ``kwargs`` for ``CALL``, ``PUBLISH``, etc). + """ + + +@public +class InvalidUriError(Error): + """ + Exception raised when an invalid WAMP URI was used. + """ + + +@public +class ProtocolError(Error): + """ + Exception raised when WAMP protocol was violated. Protocol errors + are fatal and are handled by the WAMP implementation. They are + not supposed to be handled at the application level. + """ + + +@public +class TransportLost(Error): + """ + Exception raised when the transport underlying the WAMP session + was lost or is not connected. + """ + + +@public +class ApplicationError(Error): + """ + Base class for all exceptions that can/may be handled + at the application level. + """ + + INVALID_URI = u"wamp.error.invalid_uri" + """ + Peer provided an incorrect URI for a URI-based attribute of a WAMP message + such as a realm, topic or procedure. + """ + + INVALID_PAYLOAD = u"wamp.error.invalid_payload" + """ + The application payload could not be serialized. + """ + + PAYLOAD_SIZE_EXCEEDED = u"wamp.error.payload_size_exceeded" + """ + The application payload could not be transported becuase the serialized/framed payload + exceeds the transport limits. + """ + + NO_SUCH_PROCEDURE = u"wamp.error.no_such_procedure" + """ + A Dealer could not perform a call, since not procedure is currently registered + under the given URI. + """ + + PROCEDURE_ALREADY_EXISTS = u"wamp.error.procedure_already_exists" + """ + A procedure could not be registered, since a procedure with the given URI is + already registered. + """ + + PROCEDURE_EXISTS_INVOCATION_POLICY_CONFLICT = u"wamp.error.procedure_exists_with_different_invocation_policy" + """ + A procedure could not be registered, since a procedure with the given URI is + already registered, and the registration has a conflicting invocation policy. + """ + + NO_SUCH_REGISTRATION = u"wamp.error.no_such_registration" + """ + A Dealer could not perform a unregister, since the given registration is not active. + """ + + NO_SUCH_SUBSCRIPTION = u"wamp.error.no_such_subscription" + """ + A Broker could not perform a unsubscribe, since the given subscription is not active. + """ + + NO_SUCH_SESSION = u"wamp.error.no_such_session" + """ + A router could not perform an operation, since a session ID specified was non-existant. + """ + + INVALID_ARGUMENT = u"wamp.error.invalid_argument" + """ + A call failed, since the given argument types or values are not acceptable to the + called procedure - in which case the *Callee* may throw this error. Or a Router + performing *payload validation* checked the payload (``args`` / ``kwargs``) of a call, + call result, call error or publish, and the payload did not conform. + """ + + # FIXME: this currently isn't used neither in Autobahn nor Crossbar. Check! + SYSTEM_SHUTDOWN = u"wamp.error.system_shutdown" + """ + The *Peer* is shutting down completely - used as a ``GOODBYE`` (or ``ABORT``) reason. + """ + + # FIXME: this currently isn't used neither in Autobahn nor Crossbar. Check! + CLOSE_REALM = u"wamp.error.close_realm" + """ + The *Peer* want to leave the realm - used as a ``GOODBYE`` reason. + """ + + # FIXME: this currently isn't used neither in Autobahn nor Crossbar. Check! + GOODBYE_AND_OUT = u"wamp.error.goodbye_and_out" + """ + A *Peer* acknowledges ending of a session - used as a ``GOOBYE`` reply reason. + """ + + NOT_AUTHORIZED = u"wamp.error.not_authorized" + """ + A call, register, publish or subscribe failed, since the session is not authorized + to perform the operation. + """ + + AUTHORIZATION_FAILED = u"wamp.error.authorization_failed" + """ + A Dealer or Broker could not determine if the *Peer* is authorized to perform + a join, call, register, publish or subscribe, since the authorization operation + *itself* failed. E.g. a custom authorizer did run into an error. + """ + + AUTHENTICATION_FAILED = u"wamp.error.authentication_failed" + """ + Something failed with the authentication itself, that is, authentication could + not run to end. + """ + + NO_AUTH_METHOD = u"wamp.error.no_auth_method" + """ + No authentication method the peer offered is available or active. + """ + + NO_SUCH_REALM = u"wamp.error.no_such_realm" + """ + Peer wanted to join a non-existing realm (and the *Router* did not allow to auto-create + the realm). + """ + + NO_SUCH_ROLE = u"wamp.error.no_such_role" + """ + A *Peer* was to be authenticated under a Role that does not (or no longer) exists on the Router. + For example, the *Peer* was successfully authenticated, but the Role configured does not + exists - hence there is some misconfiguration in the Router. + """ + + NO_SUCH_PRINCIPAL = u"wamp.error.no_such_principal" + """ + A *Peer* was authenticated for an authid that does not or longer exists. + """ + + CANCELED = u"wamp.error.canceled" + """ + A Dealer or Callee canceled a call previously issued (WAMP AP). + """ + + TIMEOUT = u"wamp.error.timeout" + """ + A pending (in-flight) call was timed out. + """ + + # FIXME: this currently isn't used neither in Autobahn nor Crossbar. Check! + NO_ELIGIBLE_CALLEE = u"wamp.error.no_eligible_callee" + """ + A *Dealer* could not perform a call, since a procedure with the given URI is registered, + but *Callee Black- and Whitelisting* and/or *Caller Exclusion* lead to the + exclusion of (any) *Callee* providing the procedure (WAMP AP). + """ + + ENC_NO_PAYLOAD_CODEC = u"wamp.error.no_payload_codec" + """ + WAMP message in payload transparency mode received, but no codec set + or codec did not decode the payload. + """ + + ENC_TRUSTED_URI_MISMATCH = u"wamp.error.encryption.trusted_uri_mismatch" + """ + WAMP-cryptobox application payload end-to-end encryption error. + """ + + ENC_DECRYPT_ERROR = u"wamp.error.encryption.decrypt_error" + """ + WAMP-cryptobox application payload end-to-end encryption error. + """ + + def __init__(self, error, *args, **kwargs): + """ + + :param error: The URI of the error that occurred, e.g. ``wamp.error.not_authorized``. + :type error: str + """ + Exception.__init__(self, *args) + self.kwargs = kwargs + self.error = error + self.enc_algo = kwargs.pop('enc_algo', None) + self.callee = kwargs.pop('callee', None) + self.callee_authid = kwargs.pop('callee_authid', None) + self.callee_authrole = kwargs.pop('callee_authrole', None) + self.forward_for = kwargs.pop('forward_for', None) + + @public + def error_message(self): + """ + Get the error message of this exception. + + :returns: The error message. + :rtype: str + """ + return u'{0}: {1}'.format( + self.error, + u' '.join([six.text_type(a) for a in self.args]), + ) + + def __unicode__(self): + if self.kwargs and 'traceback' in self.kwargs: + tb = u':\n' + u'\n'.join(self.kwargs.pop('traceback')) + u'\n' + self.kwargs['traceback'] = u'...' + else: + tb = u'' + return u"ApplicationError(error=<{0}>, args={1}, kwargs={2}, enc_algo={3}, callee={4}, callee_authid={5}, callee_authrole={6}, forward_for={7}){8}".format( + self.error, list(self.args), self.kwargs, self.enc_algo, self.callee, self.callee_authid, self.callee_authrole, self.forward_for, tb) + + def __str__(self): + if six.PY3: + return self.__unicode__() + else: + return self.__unicode__().encode('utf8') + + +@error(ApplicationError.NOT_AUTHORIZED) +class NotAuthorized(Exception): + """ + Not authorized to perform the respective action. + """ + + +@error(ApplicationError.INVALID_URI) +class InvalidUri(Exception): + """ + The URI for a topic, procedure or error is not a valid WAMP URI. + """ + + +@error(ApplicationError.INVALID_PAYLOAD) +class InvalidPayload(Exception): + """ + The URI for a topic, procedure or error is not a valid WAMP URI. + """ diff --git a/venv/lib/python3.7/site-packages/autobahn/wamp/gen/schema/session.bfbs b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/schema/session.bfbs new file mode 100644 index 0000000000000000000000000000000000000000..23cbacbde053c2f5d37974f46a2ddc4f7a58654c GIT binary patch literal 15944 zcmb80e{57&cE>MX$MLfKT1qLUl+3c;l%_N#DWwRZ2>-+eW4mLUI8_ugwg)`P;Bm)e z2T&A6QG}u>icl1-A{3zrMJRtDw2BZ~p$J7$v_hytQN(&#Hp`~zmZoV+Q_8X|%Vzrd z-uIq;eSQ6-PddEkd(S!d{J!^{H>@$n)HT(0ax=@!DpP5y%_5$RSz-U};i(2#1uOz8 zfzb6G2A^DD%s~*|;kmlXn2)|?%w_JkDxj@q9;DJjWB!@v2f#VAjlY2vE8+ha#=N>7 z{0E``o-wI)#`JK1`TOws0kU!bg87=iH0EvY!z&p3d*H8(`QWdO+4#rIGnfAxW9}gS zmOnD4b+s{T{@j=!Z3XY|j9Jh8j~|66>uvu{xx4`x)&QyV}#{8e@n* zW!;Y%yN|J^mUO4qlrQ9o`yF2}ykHCe_%g2^w=&zM#bYl|D}WDp&I2g`^Z4>NW%^5n zBI9G_av77FQz?0Us$BeO4oCc#-p{l6NcsBWq2W?tB)5Mko&BfL>`006^D&@Q{xOt4sjZk5nRF}MUg$yFjI5`OYYaxMRv)qAO8Qn-;^nF($h zO?mv}^UvTnlfU-GJQsua-I!-ruK$^AX_D>n|C#Q;ql`(8w)VD0ZszUZmdhKt`@Z@~ z#J{qNIoakppcRlj(!q(bT?6}whnrL5%hexrQ_Z}1)uwl}w-MVb|F>M$nu)y#gNbWX zjN4JStDyo}&F8f`%yd65<-kX0O$tgQ1ew%qv zZhXP>8Q^803rGQh9NC>M4HgEN8@e^suCjS@y^1W7xjy|wM^}4i%Z@f?=iGR3_dPwZ~*)~53A-EbaUx*GXK>kDS_ zLw#nbKbyDJ)|fr$lL9}{-_?g)O+bgTwso>y?jr zcJ6BF5YOj+UoLOq?#J4RUqm{IpWqho0q`o&1JnS21~~cAGBj4`&y;e7p^id6*MG=t zzCBexHx3{*caTN?P1m+Hv=ca0)EU>mZamb$OL3WQ?`~^Ix7W20mp}CQ`}XT$UTe12 z+HJ`E#KZUP_cHU+HQBe$@wackQ;bRG&X%?vt&PUKe=i&ppMM(JPkAamUI1ip>8HKb zvD@xUseh0mQ$>Ap^>_8D!8X<4Jl@jUP+yyF5dLNl-_@rJe9767Zft77VMqAe*X1B% z(zmgPy`1~Ye+bu|)4z;#k^QAl7Yo$@U-SIF=rjhT0I%+JW{bH@K6f~)z4^K)ujEUv zO6GL7XlkwPs_SlQYD{;UF~(AiCHWy)-D?Z;;?dqwYisLC58sbB)qml4*X`_VCw|5~ zd^g^-&YR4OM?LwZzpJRrDej3pu75Ot0esnKcju0d+WK8)9DLWGu77UDydz1dZQ%O; zS;d%YP!|c(*%9UR2F@iL857?{K%!&%SCNl|pVXiv-j*}w#9K$^P`;2EK>s=Pd6Rk9 zzE#w}6uc7sU40lf7h-v%y`!$3uruE<=Iiw}WAbH3Ypv3ld{}`Vif(DN%;v{Yo_rlQ ze`a;85~ga;8JLuSjlew&aRGP<=m6FLUtowcz(Jq^SO$EG)7}R1z((L6N?ZWm0Cd*e z0NjDMAJ-hST^sJsj*MjXXS)s!XN_4)4NWnh*rkbQ_xcRGA)ES;z1>2ax7{9)@t-i69`1kOYSMK#D^MsM9uZ{NKD(Yj3zY}?W z;3D&U0sJN08}~G}b@iqj>l<74$g+=lbTuBGVP5fJ>9`Mh_}};NH!>gjud}<3Lsv^( zQh4*o~rD{d$7c^>!hRfm%6 z7WjG(oxo2|8f*zQ&W(4yyCl~Jcxs)F?z+~N&StClamG@NC4O0!AjkK;%&RWPH0F|r zuefusqs&`>q|>(Wf8*gR=G^OpnE#IU_J+DA8qFn7e(_4KufUb>YP-9diINs_woz|O z>Q+c@y)7z+T>TY;$))-){p*_v%Eq=G5S!zSrMM^hQ|6{zdzqIE$+=MSrT9C+rwmTH zjxsNMJ>J+_-@aQbMDMb$d?`i~dP?S$>*IL6=Em06c4(KyyHuiELYL@O$-JHgZQW6> zoxWTyZ{lyQDgFtr2=oBAfcJryK)M15-`VRLi$&WOFz4V`#jMtr{S$tJ$clcI z;+q}n?|mkF$Xo~aKCAOo+_Tpw&q4B$@JE~j&f1@QEW!?4aXbz@&B@NET~|15Sk|eS10+iCgxQQf7wKQWk=af z@iAJ=nVP_y)+^El$rZB$Jeqaja9gbS$y#HsMn84cs*yUm?nm}jh8C5s1q+aTI}h@o zE0@-n9B&2Il}xhz>(P1(dF*nD{W!XXc zCu{R)_3z^T9H2b&&PO{6g@L|9S@vn@Wn({PHZu-ch5T8}j*K42^yNV}YmrmB`}q4J z{KeAgKy+|0OTL1~g33AlcLCa&{P*j?obSKSl(}Mu`*W!DG;b_MjsXf2)J=Y0Ho02J9=dDMAz4 zi|V31z{Z;Du;`L_J5P^|AtGUs8RkKS+|4=V`369>cs>06Sn&Pb8o-fm!^PZCe{MLF z=XobM+!l*gvJ?xpB$}P{(HL5wJ#H>p&IH!+Ww{c-@nsp0Wl?-emK+B7B$i`7d*-%J zr`sgSkDkDsFXJ9?WQ+Uwhnkx|zh?hjQr1*O7f# z!uYwml3s)Ir z)jrMHh-O-x9|vE1r1IVM*-*3}$TTML^*;N-^l!~4&}fhJX->p@h-gHp_=ssH&euym zkMiB8y*A@|kD5AYLi^_OxIRx`@6n0%o`+U>@2}Su(FXK;#JmShDED8SalJ<-*1G|1 z=zZ>dL~FmRD?V-R=mR=e+pp)&>$l)5VP~rw$G`z)THQDef9+wj)s1`e;D0yf@79fl z|2B8t_x$U0*^|6)V@@)=``+z4jLnhvrvg0vynpnzxbl!9VCAb{QcPV zef3-bM=`=d*c6%L(Y`wjkM`-6-yEYqGL!vlK=!^f%8&M^7KsaY{(EG1zfN9@*OGi= z^lA3xqBHeE@HaB%+grJ?4R{N<0LT{lF0csTr#HU+tqhL)&06?|YRwJh0Op&?|9hZQ zo$=*A9`%j%^CR9R4-|^n>P2vMZt!t0#<<$obERz2euw3-ck^CUFJwpUnewarnOv{@ zE|N`a$VboUhZ^iTeve1*K7NlU&)8mIrdW9iS?7wCcLO+*r7ts*-OSM_}xHdNr_z1FACk>c*hkL(cQp*F5PPaIIiw%nMai=x;N3|n5o`+zn6*XZ6?W5Vi#K3$G4k& zdk=UH(EKSNV88leW-{9@mZ$bj6@w`txvoaC+utTpWa#y1Msck!bS0-?WkYf;v%O30 zt0{((Jkj^V;^O}&G#$4oT1?jqy=&u2-L@*4yC88gwYVI6Nzihf=;>2fnR3;o)e z=qKH5&dx$VQ*SjUe!4(ZgwsZa7K{+$P zd%kv;aod-feg?Q1<4X>kV@0}D;QtW(nQ~$SxIMs+ffoQz&iZ_gmTWBNG5Ba-kWJk9 zd73<7XsN!TY2AK>1x4&4_=i;jNPjWcC*3|* zKa%K`eu|+ariH0rgX(KY^d4%KD&Ot9^Jrf_H!^59>i3}E&baS8(WpQ16`=RG4&ZCX zHUTAIFXJiT9iF|KRBzR9%G%bkdLf^%MyN-)+RAP!WS{uEOE2GT^h;4%G`;qr&{sIf zv{^}?CDiwLD(0bjlJKA-J~T3%DZ-20obNx-2Kyf|t=>UL2EiZbEoS%UMxd7f<`w8d zJrL;wNrh_4aHd2c5A|v<^~lXd=yg_+U)*?E&ba8+|92N;_2k!Gri#8v=)BSv(~2iO z%>DFjMsj1>Ud0^rBcu6}Om3Q>51nCNi|N(#u{8bm*K+p9mWQEHy!!Hf7}H1xOH;}n z$dbTX=QK2--udmAMsXF<6h}u&`RrIWZ{<72?_U+I{#p;i50VPyyy&vUUfQ&L71^in zBJv8qLxpxDcRyy8OLu_v#AOel+|C0t#c0uq(J^?2e04sSXFf4{&iS`)x zi_zQQg#7hbOgopqH`B8T`R@6cKIHGGp$Yl!y_hEC@3ieZO!wRMm}WM=t%bG~fB1gW zZ>LMtmv?~6Ks9HAck$nL#$NzdG4>Vr%Z#b!bO8aMHrVaK@##+13-yCukNR8lsyna2 zBh()nk9o}I(~HoCzNai_9Ca#G|4V#)%^V=Wd-<}E>CFu1n4tF&s+ZD7bh7c3x-m&= z9)mViCy&ImvVGj-bynov4Z2W`jK6bK%v2-wJK#`_ydAGMSB<;@eJJlXGcH|ctC0`= zCR`(nG3{JA^EC9KoO>^(59Q2pXhL~*J*Ele%qP%<@@zHZ(osGM)yVU0p*wX9^N@|+;DR1B>Y41awC>)KK1fTc!Xjn z?nBL5FCV1W5{jE4Yco^v06Jy*pBXAVo6ipH=flQ?66})wS+>jp^E5m{d+d8L57i|$ zEOK*@LxF7#nB&ldV&-~Gqj-(iicT@ko_-bDQ0%N@95Ng0^lSKCx83P_OU{*a3-~@&-CKhXFLT#k`x2nv^EUAJOF$3LE7+s;{YJkB`-s2a;I3x9_byOp zU%?!QOXkpbod>Nh^LrOqNB<_YuRk60n9bi$K^xl7PsX$lpr7k+$9EG>KLL->zW!y* zW3HI_9Qx4y{t)9VUlFQ1E9o(Y_I2qa8uh%B*evP1%t?7CG@%;(dQ7AJ!>tnTfk3}g z4%OyMF|A@IbdER=T_~Tc7?+&0)yKQwgz~t~p`EEdZl+%u%H!u_+PUiE81$h$mOheu zK6!i&9-%z0P%jl8Izxr>SikuV3LIi?cO1*v`h8hNya#x=GP@V~|1h-CJ@sU>|m^#mucq%S9%&9?3!`pvcO zzNq(Ozj^3ep?;5|US#xtL!&;6yRzaTWb@MzpDDi;8OJvAfp1@Nkp9-DdkQSMob@LE zmxU;F#!mr0Ev3@-Q8sYbnauLoof)2#d8)0%K{AKpt1s#g*&gy(CO?`5)9-^;(g~fg zH+|59@X7qy{p1#c`XVLlHYSiV`uV^Fv+_+He*$+?nwwgXv?DxgV`2PW! C0mG#L literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/Map.py b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/Map.py new file mode 100644 index 0000000..a77996f --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/Map.py @@ -0,0 +1,38 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: wamp + +import flatbuffers + +class Map(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsMap(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = Map() + x.Init(buf, n + offset) + return x + + # Map + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # Map + def Key(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.String(o + self._tab.Pos) + return None + + # Map + def Value(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.String(o + self._tab.Pos) + return None + +def MapStart(builder): builder.StartObject(2) +def MapAddKey(builder, key): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(key), 0) +def MapAddValue(builder, value): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(value), 0) +def MapEnd(builder): return builder.EndObject() diff --git a/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/Void.py b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/Void.py new file mode 100644 index 0000000..ec74fc6 --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/Void.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: wamp + +import flatbuffers + +class Void(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsVoid(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = Void() + x.Init(buf, n + offset) + return x + + # Void + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def VoidStart(builder): builder.StartObject(0) +def VoidEnd(builder): return builder.EndObject() diff --git a/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/AuthFactor.py b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/AuthFactor.py new file mode 100644 index 0000000..b90df61 --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/AuthFactor.py @@ -0,0 +1,11 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: proto + +class AuthFactor(object): + NONE = 0 + AuthTicketRequest = 1 + AuthCraRequest = 2 + AuthScramRequest = 3 + AuthCryptosignRequest = 4 + diff --git a/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/AuthMode.py b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/AuthMode.py new file mode 100644 index 0000000..5515f8a --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/AuthMode.py @@ -0,0 +1,8 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: proto + +class AuthMode(object): + FIRST = 0 + MULTIFACTOR = 1 + diff --git a/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/AuthTicketChallenge.py b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/AuthTicketChallenge.py new file mode 100644 index 0000000..4c7ce58 --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/AuthTicketChallenge.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: proto + +import flatbuffers + +class AuthTicketChallenge(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsAuthTicketChallenge(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = AuthTicketChallenge() + x.Init(buf, n + offset) + return x + + # AuthTicketChallenge + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def AuthTicketChallengeStart(builder): builder.StartObject(0) +def AuthTicketChallengeEnd(builder): return builder.EndObject() diff --git a/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/AuthTicketRequest.py b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/AuthTicketRequest.py new file mode 100644 index 0000000..363aa9b --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/AuthTicketRequest.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: proto + +import flatbuffers + +class AuthTicketRequest(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsAuthTicketRequest(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = AuthTicketRequest() + x.Init(buf, n + offset) + return x + + # AuthTicketRequest + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def AuthTicketRequestStart(builder): builder.StartObject(0) +def AuthTicketRequestEnd(builder): return builder.EndObject() diff --git a/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/CalleeFeatures.py b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/CalleeFeatures.py new file mode 100644 index 0000000..9c49627 --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/CalleeFeatures.py @@ -0,0 +1,102 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: proto + +import flatbuffers + +class CalleeFeatures(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsCalleeFeatures(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = CalleeFeatures() + x.Init(buf, n + offset) + return x + + # CalleeFeatures + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # CalleeFeatures + def CallerIdentification(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + + # CalleeFeatures + def CallTrustlevels(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + + # CalleeFeatures + def CallTimeout(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + + # CalleeFeatures + def CallCanceling(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + + # CalleeFeatures + def ProgressiveCallResults(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + + # CalleeFeatures + def RegistrationRevocation(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + + # CalleeFeatures + def PatternBasedRegistration(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + + # CalleeFeatures + def SharedRegistration(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(18)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + + # CalleeFeatures + def PayloadTransparency(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(20)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + + # CalleeFeatures + def PayloadEncryptionCryptobox(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(22)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + +def CalleeFeaturesStart(builder): builder.StartObject(10) +def CalleeFeaturesAddCallerIdentification(builder, callerIdentification): builder.PrependBoolSlot(0, callerIdentification, 0) +def CalleeFeaturesAddCallTrustlevels(builder, callTrustlevels): builder.PrependBoolSlot(1, callTrustlevels, 0) +def CalleeFeaturesAddCallTimeout(builder, callTimeout): builder.PrependBoolSlot(2, callTimeout, 0) +def CalleeFeaturesAddCallCanceling(builder, callCanceling): builder.PrependBoolSlot(3, callCanceling, 0) +def CalleeFeaturesAddProgressiveCallResults(builder, progressiveCallResults): builder.PrependBoolSlot(4, progressiveCallResults, 0) +def CalleeFeaturesAddRegistrationRevocation(builder, registrationRevocation): builder.PrependBoolSlot(5, registrationRevocation, 0) +def CalleeFeaturesAddPatternBasedRegistration(builder, patternBasedRegistration): builder.PrependBoolSlot(6, patternBasedRegistration, 0) +def CalleeFeaturesAddSharedRegistration(builder, sharedRegistration): builder.PrependBoolSlot(7, sharedRegistration, 0) +def CalleeFeaturesAddPayloadTransparency(builder, payloadTransparency): builder.PrependBoolSlot(8, payloadTransparency, 0) +def CalleeFeaturesAddPayloadEncryptionCryptobox(builder, payloadEncryptionCryptobox): builder.PrependBoolSlot(9, payloadEncryptionCryptobox, 0) +def CalleeFeaturesEnd(builder): return builder.EndObject() diff --git a/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/CallerFeatures.py b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/CallerFeatures.py new file mode 100644 index 0000000..e9abbd6 --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/CallerFeatures.py @@ -0,0 +1,70 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: proto + +import flatbuffers + +class CallerFeatures(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsCallerFeatures(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = CallerFeatures() + x.Init(buf, n + offset) + return x + + # CallerFeatures + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # CallerFeatures + def CallerIdentification(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + + # CallerFeatures + def CallTimeout(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + + # CallerFeatures + def CallCanceling(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + + # CallerFeatures + def ProgressiveCallResults(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + + # CallerFeatures + def PayloadTransparency(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + + # CallerFeatures + def PayloadEncryptionCryptobox(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + +def CallerFeaturesStart(builder): builder.StartObject(6) +def CallerFeaturesAddCallerIdentification(builder, callerIdentification): builder.PrependBoolSlot(0, callerIdentification, 0) +def CallerFeaturesAddCallTimeout(builder, callTimeout): builder.PrependBoolSlot(1, callTimeout, 0) +def CallerFeaturesAddCallCanceling(builder, callCanceling): builder.PrependBoolSlot(2, callCanceling, 0) +def CallerFeaturesAddProgressiveCallResults(builder, progressiveCallResults): builder.PrependBoolSlot(3, progressiveCallResults, 0) +def CallerFeaturesAddPayloadTransparency(builder, payloadTransparency): builder.PrependBoolSlot(4, payloadTransparency, 0) +def CallerFeaturesAddPayloadEncryptionCryptobox(builder, payloadEncryptionCryptobox): builder.PrependBoolSlot(5, payloadEncryptionCryptobox, 0) +def CallerFeaturesEnd(builder): return builder.EndObject() diff --git a/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/CancelMode.py b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/CancelMode.py new file mode 100644 index 0000000..e0a2b90 --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/CancelMode.py @@ -0,0 +1,9 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: proto + +class CancelMode(object): + SKIP = 0 + ABORT = 1 + KILL = 2 + diff --git a/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/Challenge.py b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/Challenge.py new file mode 100644 index 0000000..2919be2 --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/Challenge.py @@ -0,0 +1,42 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: proto + +import flatbuffers + +class Challenge(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsChallenge(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = Challenge() + x.Init(buf, n + offset) + return x + + # Challenge + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # Challenge + def Method(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos) + return 0 + + # Challenge + def Extra(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + x = self._tab.Indirect(o + self._tab.Pos) + from .Map import Map + obj = Map() + obj.Init(self._tab.Bytes, x) + return obj + return None + +def ChallengeStart(builder): builder.StartObject(2) +def ChallengeAddMethod(builder, method): builder.PrependUint8Slot(0, method, 0) +def ChallengeAddExtra(builder, extra): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(extra), 0) +def ChallengeEnd(builder): return builder.EndObject() diff --git a/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/ChannelBinding.py b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/ChannelBinding.py new file mode 100644 index 0000000..753d323 --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/ChannelBinding.py @@ -0,0 +1,8 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: proto + +class ChannelBinding(object): + NONE = 0 + TLS_UNIQUE = 1 + diff --git a/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/DealerFeatures.py b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/DealerFeatures.py new file mode 100644 index 0000000..7729cee --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/DealerFeatures.py @@ -0,0 +1,126 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: proto + +import flatbuffers + +class DealerFeatures(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsDealerFeatures(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = DealerFeatures() + x.Init(buf, n + offset) + return x + + # DealerFeatures + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # DealerFeatures + def CallerIdentification(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + + # DealerFeatures + def CallTrustlevels(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + + # DealerFeatures + def CallTimeout(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + + # DealerFeatures + def CallCanceling(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + + # DealerFeatures + def ProgressiveCallResults(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + + # DealerFeatures + def RegistrationRevocation(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + + # DealerFeatures + def PatternBasedRegistration(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + + # DealerFeatures + def SharedRegistration(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(18)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + + # DealerFeatures + def SessionMetaApi(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(20)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + + # DealerFeatures + def RegistrationMetaApi(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(22)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + + # DealerFeatures + def TestamentMetaApi(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(24)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + + # DealerFeatures + def PayloadTransparency(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(26)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + + # DealerFeatures + def PayloadEncryptionCryptobox(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(28)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + +def DealerFeaturesStart(builder): builder.StartObject(13) +def DealerFeaturesAddCallerIdentification(builder, callerIdentification): builder.PrependBoolSlot(0, callerIdentification, 0) +def DealerFeaturesAddCallTrustlevels(builder, callTrustlevels): builder.PrependBoolSlot(1, callTrustlevels, 0) +def DealerFeaturesAddCallTimeout(builder, callTimeout): builder.PrependBoolSlot(2, callTimeout, 0) +def DealerFeaturesAddCallCanceling(builder, callCanceling): builder.PrependBoolSlot(3, callCanceling, 0) +def DealerFeaturesAddProgressiveCallResults(builder, progressiveCallResults): builder.PrependBoolSlot(4, progressiveCallResults, 0) +def DealerFeaturesAddRegistrationRevocation(builder, registrationRevocation): builder.PrependBoolSlot(5, registrationRevocation, 0) +def DealerFeaturesAddPatternBasedRegistration(builder, patternBasedRegistration): builder.PrependBoolSlot(6, patternBasedRegistration, 0) +def DealerFeaturesAddSharedRegistration(builder, sharedRegistration): builder.PrependBoolSlot(7, sharedRegistration, 0) +def DealerFeaturesAddSessionMetaApi(builder, sessionMetaApi): builder.PrependBoolSlot(8, sessionMetaApi, 0) +def DealerFeaturesAddRegistrationMetaApi(builder, registrationMetaApi): builder.PrependBoolSlot(9, registrationMetaApi, 0) +def DealerFeaturesAddTestamentMetaApi(builder, testamentMetaApi): builder.PrependBoolSlot(10, testamentMetaApi, 0) +def DealerFeaturesAddPayloadTransparency(builder, payloadTransparency): builder.PrependBoolSlot(11, payloadTransparency, 0) +def DealerFeaturesAddPayloadEncryptionCryptobox(builder, payloadEncryptionCryptobox): builder.PrependBoolSlot(12, payloadEncryptionCryptobox, 0) +def DealerFeaturesEnd(builder): return builder.EndObject() diff --git a/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/Error.py b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/Error.py new file mode 100644 index 0000000..81dbcae --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/Error.py @@ -0,0 +1,110 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: proto + +import flatbuffers + +class Error(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsError(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = Error() + x.Init(buf, n + offset) + return x + + # Error + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # Error + def RequestType(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint16Flags, o + self._tab.Pos) + return 0 + + # Error + def Request(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + # Error + def Error(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.String(o + self._tab.Pos) + return None + + # Error + def Payload(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1)) + return 0 + + # Error + def PayloadAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint8Flags, o) + return 0 + + # Error + def PayloadLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + # Error + def EncAlgo(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos) + return 0 + + # Error + def EncSerializer(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos) + return 0 + + # Error + def EncKey(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1)) + return 0 + + # Error + def EncKeyAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint8Flags, o) + return 0 + + # Error + def EncKeyLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + +def ErrorStart(builder): builder.StartObject(7) +def ErrorAddRequestType(builder, requestType): builder.PrependUint16Slot(0, requestType, 0) +def ErrorAddRequest(builder, request): builder.PrependUint64Slot(1, request, 0) +def ErrorAddError(builder, error): builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(error), 0) +def ErrorAddPayload(builder, payload): builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(payload), 0) +def ErrorStartPayloadVector(builder, numElems): return builder.StartVector(1, numElems, 1) +def ErrorAddEncAlgo(builder, encAlgo): builder.PrependUint8Slot(4, encAlgo, 0) +def ErrorAddEncSerializer(builder, encSerializer): builder.PrependUint8Slot(5, encSerializer, 0) +def ErrorAddEncKey(builder, encKey): builder.PrependUOffsetTRelativeSlot(6, flatbuffers.number_types.UOffsetTFlags.py_type(encKey), 0) +def ErrorStartEncKeyVector(builder, numElems): return builder.StartVector(1, numElems, 1) +def ErrorEnd(builder): return builder.EndObject() diff --git a/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/Event.py b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/Event.py new file mode 100644 index 0000000..0177986 --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/Event.py @@ -0,0 +1,223 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: proto + +import flatbuffers + +class Event(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsEvent(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = Event() + x.Init(buf, n + offset) + return x + + # Event + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # Event + def Subscription(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + # Event + def Publication(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + +# /// Positional values for application-defined event payload. + # Event + def Args(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1)) + return 0 + + # Event + def ArgsAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint8Flags, o) + return 0 + + # Event + def ArgsLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + +# /// Keyword values for application-defined event payload. + # Event + def Kwargs(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1)) + return 0 + + # Event + def KwargsAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint8Flags, o) + return 0 + + # Event + def KwargsLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + +# /// Alternative, transparent payload. If given, ``args`` and ``kwargs`` must be left unset. + # Event + def Payload(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1)) + return 0 + + # Event + def PayloadAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint8Flags, o) + return 0 + + # Event + def PayloadLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + # Event + def EncAlgo(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos) + return 0 + + # Event + def EncSerializer(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos) + return 0 + + # Event + def EncKey(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(18)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1)) + return 0 + + # Event + def EncKeyAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(18)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint8Flags, o) + return 0 + + # Event + def EncKeyLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(18)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + # Event + def Publisher(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(20)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + # Event + def PublisherAuthid(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(22)) + if o != 0: + return self._tab.String(o + self._tab.Pos) + return None + + # Event + def PublisherAuthrole(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(24)) + if o != 0: + return self._tab.String(o + self._tab.Pos) + return None + + # Event + def Topic(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(26)) + if o != 0: + return self._tab.String(o + self._tab.Pos) + return None + + # Event + def Retained(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(28)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + + # Event + def Acknowledge(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(30)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + + # Event + def ForwardFor(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(32)) + if o != 0: + x = self._tab.Vector(o) + x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 + x = self._tab.Indirect(x) + from .Principal import Principal + obj = Principal() + obj.Init(self._tab.Bytes, x) + return obj + return None + + # Event + def ForwardForLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(32)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + +def EventStart(builder): builder.StartObject(15) +def EventAddSubscription(builder, subscription): builder.PrependUint64Slot(0, subscription, 0) +def EventAddPublication(builder, publication): builder.PrependUint64Slot(1, publication, 0) +def EventAddArgs(builder, args): builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(args), 0) +def EventStartArgsVector(builder, numElems): return builder.StartVector(1, numElems, 1) +def EventAddKwargs(builder, kwargs): builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(kwargs), 0) +def EventStartKwargsVector(builder, numElems): return builder.StartVector(1, numElems, 1) +def EventAddPayload(builder, payload): builder.PrependUOffsetTRelativeSlot(4, flatbuffers.number_types.UOffsetTFlags.py_type(payload), 0) +def EventStartPayloadVector(builder, numElems): return builder.StartVector(1, numElems, 1) +def EventAddEncAlgo(builder, encAlgo): builder.PrependUint8Slot(5, encAlgo, 0) +def EventAddEncSerializer(builder, encSerializer): builder.PrependUint8Slot(6, encSerializer, 0) +def EventAddEncKey(builder, encKey): builder.PrependUOffsetTRelativeSlot(7, flatbuffers.number_types.UOffsetTFlags.py_type(encKey), 0) +def EventStartEncKeyVector(builder, numElems): return builder.StartVector(1, numElems, 1) +def EventAddPublisher(builder, publisher): builder.PrependUint64Slot(8, publisher, 0) +def EventAddPublisherAuthid(builder, publisherAuthid): builder.PrependUOffsetTRelativeSlot(9, flatbuffers.number_types.UOffsetTFlags.py_type(publisherAuthid), 0) +def EventAddPublisherAuthrole(builder, publisherAuthrole): builder.PrependUOffsetTRelativeSlot(10, flatbuffers.number_types.UOffsetTFlags.py_type(publisherAuthrole), 0) +def EventAddTopic(builder, topic): builder.PrependUOffsetTRelativeSlot(11, flatbuffers.number_types.UOffsetTFlags.py_type(topic), 0) +def EventAddRetained(builder, retained): builder.PrependBoolSlot(12, retained, 0) +def EventAddAcknowledge(builder, acknowledge): builder.PrependBoolSlot(13, acknowledge, 0) +def EventAddForwardFor(builder, forwardFor): builder.PrependUOffsetTRelativeSlot(14, flatbuffers.number_types.UOffsetTFlags.py_type(forwardFor), 0) +def EventStartForwardForVector(builder, numElems): return builder.StartVector(4, numElems, 4) +def EventEnd(builder): return builder.EndObject() diff --git a/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/EventReceived.py b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/EventReceived.py new file mode 100644 index 0000000..c5ec69e --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/EventReceived.py @@ -0,0 +1,94 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: proto + +import flatbuffers + +class EventReceived(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsEventReceived(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = EventReceived() + x.Init(buf, n + offset) + return x + + # EventReceived + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # EventReceived + def Publication(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + # EventReceived + def Payload(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1)) + return 0 + + # EventReceived + def PayloadAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint8Flags, o) + return 0 + + # EventReceived + def PayloadLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + # EventReceived + def EncAlgo(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos) + return 0 + + # EventReceived + def EncSerializer(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos) + return 0 + + # EventReceived + def EncKey(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1)) + return 0 + + # EventReceived + def EncKeyAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint8Flags, o) + return 0 + + # EventReceived + def EncKeyLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + +def EventReceivedStart(builder): builder.StartObject(5) +def EventReceivedAddPublication(builder, publication): builder.PrependUint64Slot(0, publication, 0) +def EventReceivedAddPayload(builder, payload): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(payload), 0) +def EventReceivedStartPayloadVector(builder, numElems): return builder.StartVector(1, numElems, 1) +def EventReceivedAddEncAlgo(builder, encAlgo): builder.PrependUint8Slot(2, encAlgo, 0) +def EventReceivedAddEncSerializer(builder, encSerializer): builder.PrependUint8Slot(3, encSerializer, 0) +def EventReceivedAddEncKey(builder, encKey): builder.PrependUOffsetTRelativeSlot(4, flatbuffers.number_types.UOffsetTFlags.py_type(encKey), 0) +def EventReceivedStartEncKeyVector(builder, numElems): return builder.StartVector(1, numElems, 1) +def EventReceivedEnd(builder): return builder.EndObject() diff --git a/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/Hello.py b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/Hello.py new file mode 100644 index 0000000..cee368f --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/Hello.py @@ -0,0 +1,118 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: proto + +import flatbuffers + +class Hello(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsHello(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = Hello() + x.Init(buf, n + offset) + return x + + # Hello + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # Hello + def Roles(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + x = self._tab.Indirect(o + self._tab.Pos) + from .ClientRoles import ClientRoles + obj = ClientRoles() + obj.Init(self._tab.Bytes, x) + return obj + return None + + # Hello + def Realm(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.String(o + self._tab.Pos) + return None + + # Hello + def Authmethods(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1)) + return 0 + + # Hello + def AuthmethodsAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint8Flags, o) + return 0 + + # Hello + def AuthmethodsLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + # Hello + def Authid(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return self._tab.String(o + self._tab.Pos) + return None + + # Hello + def Authrole(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + return self._tab.String(o + self._tab.Pos) + return None + + # Hello + def Authextra(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) + if o != 0: + x = self._tab.Indirect(o + self._tab.Pos) + from .Map import Map + obj = Map() + obj.Init(self._tab.Bytes, x) + return obj + return None + + # Hello + def Resumable(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + + # Hello + def ResumeSession(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(18)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + # Hello + def ResumeToken(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(20)) + if o != 0: + return self._tab.String(o + self._tab.Pos) + return None + +def HelloStart(builder): builder.StartObject(9) +def HelloAddRoles(builder, roles): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(roles), 0) +def HelloAddRealm(builder, realm): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(realm), 0) +def HelloAddAuthmethods(builder, authmethods): builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(authmethods), 0) +def HelloStartAuthmethodsVector(builder, numElems): return builder.StartVector(1, numElems, 1) +def HelloAddAuthid(builder, authid): builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(authid), 0) +def HelloAddAuthrole(builder, authrole): builder.PrependUOffsetTRelativeSlot(4, flatbuffers.number_types.UOffsetTFlags.py_type(authrole), 0) +def HelloAddAuthextra(builder, authextra): builder.PrependUOffsetTRelativeSlot(5, flatbuffers.number_types.UOffsetTFlags.py_type(authextra), 0) +def HelloAddResumable(builder, resumable): builder.PrependBoolSlot(6, resumable, 0) +def HelloAddResumeSession(builder, resumeSession): builder.PrependUint64Slot(7, resumeSession, 0) +def HelloAddResumeToken(builder, resumeToken): builder.PrependUOffsetTRelativeSlot(8, flatbuffers.number_types.UOffsetTFlags.py_type(resumeToken), 0) +def HelloEnd(builder): return builder.EndObject() diff --git a/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/Interrupt.py b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/Interrupt.py new file mode 100644 index 0000000..9f77f3d --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/Interrupt.py @@ -0,0 +1,38 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: proto + +import flatbuffers + +class Interrupt(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsInterrupt(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = Interrupt() + x.Init(buf, n + offset) + return x + + # Interrupt + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # Interrupt + def Request(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + # Interrupt + def Mode(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos) + return 1 + +def InterruptStart(builder): builder.StartObject(2) +def InterruptAddRequest(builder, request): builder.PrependUint64Slot(0, request, 0) +def InterruptAddMode(builder, mode): builder.PrependUint8Slot(1, mode, 1) +def InterruptEnd(builder): return builder.EndObject() diff --git a/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/Kdf.py b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/Kdf.py new file mode 100644 index 0000000..da420a1 --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/Kdf.py @@ -0,0 +1,9 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: proto + +class Kdf(object): + NONE = 0 + PBKDF2 = 1 + ARGON2 = 2 + diff --git a/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/Match.py b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/Match.py new file mode 100644 index 0000000..cbe3d69 --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/Match.py @@ -0,0 +1,9 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: proto + +class Match(object): + EXACT = 0 + PREFIX = 1 + WILDCARD = 2 + diff --git a/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/PublisherFeatures.py b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/PublisherFeatures.py new file mode 100644 index 0000000..35a6d0f --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/PublisherFeatures.py @@ -0,0 +1,70 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: proto + +import flatbuffers + +class PublisherFeatures(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsPublisherFeatures(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = PublisherFeatures() + x.Init(buf, n + offset) + return x + + # PublisherFeatures + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # PublisherFeatures + def PublisherIdentification(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + + # PublisherFeatures + def PublisherExclusion(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + + # PublisherFeatures + def SubscriberBlackwhiteListing(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + + # PublisherFeatures + def AcknowledgeEventReceived(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + + # PublisherFeatures + def PayloadTransparency(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + + # PublisherFeatures + def PayloadEncryptionCryptobox(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + +def PublisherFeaturesStart(builder): builder.StartObject(6) +def PublisherFeaturesAddPublisherIdentification(builder, publisherIdentification): builder.PrependBoolSlot(0, publisherIdentification, 0) +def PublisherFeaturesAddPublisherExclusion(builder, publisherExclusion): builder.PrependBoolSlot(1, publisherExclusion, 0) +def PublisherFeaturesAddSubscriberBlackwhiteListing(builder, subscriberBlackwhiteListing): builder.PrependBoolSlot(2, subscriberBlackwhiteListing, 0) +def PublisherFeaturesAddAcknowledgeEventReceived(builder, acknowledgeEventReceived): builder.PrependBoolSlot(3, acknowledgeEventReceived, 0) +def PublisherFeaturesAddPayloadTransparency(builder, payloadTransparency): builder.PrependBoolSlot(4, payloadTransparency, 0) +def PublisherFeaturesAddPayloadEncryptionCryptobox(builder, payloadEncryptionCryptobox): builder.PrependBoolSlot(5, payloadEncryptionCryptobox, 0) +def PublisherFeaturesEnd(builder): return builder.EndObject() diff --git a/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/Serializer.py b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/Serializer.py new file mode 100644 index 0000000..c3c5b9d --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/Serializer.py @@ -0,0 +1,13 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: proto + +class Serializer(object): + TRANSPORT = 0 + JSON = 1 + MSGPACK = 2 + CBOR = 3 + UBJSON = 4 + OPAQUE = 5 + FLATBUFFERS = 6 + diff --git a/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/Yield.py b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/Yield.py new file mode 100644 index 0000000..0a0fac9 --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/Yield.py @@ -0,0 +1,94 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: proto + +import flatbuffers + +class Yield(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsYield(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = Yield() + x.Init(buf, n + offset) + return x + + # Yield + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # Yield + def Request(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + # Yield + def Payload(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1)) + return 0 + + # Yield + def PayloadAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint8Flags, o) + return 0 + + # Yield + def PayloadLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + # Yield + def EncAlgo(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos) + return 0 + + # Yield + def EncSerializer(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos) + return 0 + + # Yield + def EncKey(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1)) + return 0 + + # Yield + def EncKeyAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint8Flags, o) + return 0 + + # Yield + def EncKeyLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + +def YieldStart(builder): builder.StartObject(5) +def YieldAddRequest(builder, request): builder.PrependUint64Slot(0, request, 0) +def YieldAddPayload(builder, payload): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(payload), 0) +def YieldStartPayloadVector(builder, numElems): return builder.StartVector(1, numElems, 1) +def YieldAddEncAlgo(builder, encAlgo): builder.PrependUint8Slot(2, encAlgo, 0) +def YieldAddEncSerializer(builder, encSerializer): builder.PrependUint8Slot(3, encSerializer, 0) +def YieldAddEncKey(builder, encKey): builder.PrependUOffsetTRelativeSlot(4, flatbuffers.number_types.UOffsetTFlags.py_type(encKey), 0) +def YieldStartEncKeyVector(builder, numElems): return builder.StartVector(1, numElems, 1) +def YieldEnd(builder): return builder.EndObject() diff --git a/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/__init__.py b/venv/lib/python3.7/site-packages/autobahn/wamp/gen/wamp/proto/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.7/site-packages/autobahn/wamp/message.py b/venv/lib/python3.7/site-packages/autobahn/wamp/message.py new file mode 100644 index 0000000..6541288 --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/wamp/message.py @@ -0,0 +1,5947 @@ +############################################################################### +# +# The MIT License (MIT) +# +# Copyright (c) Crossbar.io Technologies GmbH +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +############################################################################### + +from __future__ import absolute_import + +import re +import binascii + +import six + +import autobahn +from autobahn.wamp.exception import ProtocolError, InvalidUriError +from autobahn.wamp.role import ROLE_NAME_TO_CLASS + +try: + import cbor + import flatbuffers + from autobahn.wamp import message_fbs +except ImportError: + _HAS_WAMP_FLATBUFFERS = False +else: + _HAS_WAMP_FLATBUFFERS = True + +__all__ = ('Message', + 'Hello', + 'Welcome', + 'Abort', + 'Challenge', + 'Authenticate', + 'Goodbye', + 'Error', + 'Publish', + 'Published', + 'Subscribe', + 'Subscribed', + 'Unsubscribe', + 'Unsubscribed', + 'Event', + 'Call', + 'Cancel', + 'Result', + 'Register', + 'Registered', + 'Unregister', + 'Unregistered', + 'Invocation', + 'Interrupt', + 'Yield', + 'check_or_raise_uri', + 'check_or_raise_id', + 'is_valid_enc_algo', + 'is_valid_enc_serializer', + 'PAYLOAD_ENC_CRYPTO_BOX', + 'PAYLOAD_ENC_MQTT', + 'PAYLOAD_ENC_STANDARD_IDENTIFIERS') + + +# strict URI check allowing empty URI components +_URI_PAT_STRICT_EMPTY = re.compile(r"^(([0-9a-z_]+\.)|\.)*([0-9a-z_]+)?$") + +# loose URI check allowing empty URI components +_URI_PAT_LOOSE_EMPTY = re.compile(r"^(([^\s\.#]+\.)|\.)*([^\s\.#]+)?$") + +# strict URI check disallowing empty URI components +_URI_PAT_STRICT_NON_EMPTY = re.compile(r"^([0-9a-z_]+\.)*([0-9a-z_]+)$") + +# loose URI check disallowing empty URI components +_URI_PAT_LOOSE_NON_EMPTY = re.compile(r"^([^\s\.#]+\.)*([^\s\.#]+)$") + +# strict URI check disallowing empty URI components in all but the last component +_URI_PAT_STRICT_LAST_EMPTY = re.compile(r"^([0-9a-z_]+\.)*([0-9a-z_]*)$") + +# loose URI check disallowing empty URI components in all but the last component +_URI_PAT_LOOSE_LAST_EMPTY = re.compile(r"^([^\s\.#]+\.)*([^\s\.#]*)$") + +# custom (=implementation specific) WAMP attributes (used in WAMP message details/options) +_CUSTOM_ATTRIBUTE = re.compile(r"^x_([a-z][0-9a-z_]+)?$") + +# Value for algo attribute in end-to-end encrypted messages using cryptobox, which +# is a scheme based on Curve25519, SHA512, Salsa20 and Poly1305. +# See: http://cr.yp.to/highspeed/coolnacl-20120725.pdf +PAYLOAD_ENC_CRYPTO_BOX = u'cryptobox' + +# Payload transparency identifier for MQTT payloads (which are arbitrary binary). +PAYLOAD_ENC_MQTT = u'mqtt' + +# Payload transparency identifier for XBR payloads +PAYLOAD_ENC_XBR = u'xbr' + +# Payload transparency algorithm identifiers from the WAMP spec. +PAYLOAD_ENC_STANDARD_IDENTIFIERS = [PAYLOAD_ENC_CRYPTO_BOX, PAYLOAD_ENC_MQTT, PAYLOAD_ENC_XBR] + +# Payload transparency serializer identifiers from the WAMP spec. +PAYLOAD_ENC_STANDARD_SERIALIZERS = [u'json', u'msgpack', u'cbor', u'ubjson', u'flatbuffers'] + +ENC_ALGO_NONE = 0 +ENC_ALGO_CRYPTOBOX = 1 +ENC_ALGO_MQTT = 2 +ENC_ALGO_XBR = 3 + +ENC_ALGOS = { + ENC_ALGO_NONE: u'null', + ENC_ALGO_CRYPTOBOX: u'cryptobox', + ENC_ALGO_MQTT: u'mqtt', + ENC_ALGO_XBR: u'xbr', +} + +ENC_ALGOS_FROMSTR = {key: value for value, key in ENC_ALGOS.items()} + +ENC_SER_NONE = 0 +ENC_SER_JSON = 1 +ENC_SER_MSGPACK = 2 +ENC_SER_CBOR = 3 +ENC_SER_UBJSON = 4 +ENC_SER_OPAQUE = 5 +ENC_SER_FLATBUFFERS = 6 + +ENC_SERS = { + ENC_SER_NONE: u'null', + ENC_SER_JSON: u'json', + ENC_SER_MSGPACK: u'msgpack', + ENC_SER_CBOR: u'cbor', + ENC_SER_UBJSON: u'ubjson', + ENC_SER_OPAQUE: u'opaque', + ENC_SER_FLATBUFFERS: u'flatbuffers', +} + +ENC_SERS_FROMSTR = {key: value for value, key in ENC_SERS.items()} + + +def is_valid_enc_algo(enc_algo): + """ + For WAMP payload transparency mode, check if the provided ``enc_algo`` + identifier in the WAMP message is a valid one. + + Currently defined standard identifiers are: + + * ``"cryptobox"`` + * ``"mqtt"`` + * ``"xbr"`` + + Users can select arbitrary identifiers too, but these MUST start with ``u"x_"``. + + :param enc_algo: The payload transparency algorithm identifier to check. + :type enc_algo: str + + :returns: Returns ``True`` if and only if the payload transparency + algorithm identifier is valid. + :rtype: bool + """ + return type(enc_algo) == six.text_type and (enc_algo in PAYLOAD_ENC_STANDARD_IDENTIFIERS or _CUSTOM_ATTRIBUTE.match(enc_algo)) + + +def is_valid_enc_serializer(enc_serializer): + """ + For WAMP payload transparency mode, check if the provided ``enc_serializer`` + identifier in the WAMP message is a valid one. + + Currently, the only standard defined identifier are + + * ``"json"`` + * ``"msgpack"`` + * ``"cbor"`` + * ``"ubjson"`` + * ``"flatbuffers"`` + + Users can select arbitrary identifiers too, but these MUST start with ``u"x_"``. + + :param enc_serializer: The payload transparency serializer identifier to check. + :type enc_serializer: str + + :returns: Returns ``True`` if and only if the payload transparency + serializer identifier is valid. + :rtype: bool + """ + return type(enc_serializer) == six.text_type and (enc_serializer in PAYLOAD_ENC_STANDARD_SERIALIZERS or _CUSTOM_ATTRIBUTE.match(enc_serializer)) + + +def b2a(data, max_len=40): + if type(data) == six.text_type: + s = data + elif type(data) == six.binary_type: + s = binascii.b2a_hex(data).decode('ascii') + elif data is None: + s = u'-' + else: + s = u'{}'.format(data) + if len(s) > max_len: + return s[:max_len] + u'..' + else: + return s + + +def check_or_raise_uri(value, message=u"WAMP message invalid", strict=False, allow_empty_components=False, allow_last_empty=False, allow_none=False): + """ + Check a value for being a valid WAMP URI. + + If the value is not a valid WAMP URI is invalid, raises :class:`autobahn.wamp.exception.ProtocolError`. + Otherwise return the value. + + :param value: The value to check. + :type value: str or None + + :param message: Prefix for message in exception raised when value is invalid. + :type message: str + + :param strict: If ``True``, do a strict check on the URI (the WAMP spec SHOULD behavior). + :type strict: bool + + :param allow_empty_components: If ``True``, allow empty URI components (for pattern based + subscriptions and registrations). + :type allow_empty_components: bool + + :param allow_none: If ``True``, allow ``None`` for URIs. + :type allow_none: bool + + :returns: The URI value (if valid). + :rtype: str + + :raises: instance of :class:`autobahn.wamp.exception.ProtocolError` + """ + if value is None: + if allow_none: + return + else: + raise InvalidUriError(u"{0}: URI cannot be null".format(message)) + + if type(value) != six.text_type: + if not (value is None and allow_none): + raise InvalidUriError(u"{0}: invalid type {1} for URI".format(message, type(value))) + + if strict: + if allow_last_empty: + pat = _URI_PAT_STRICT_LAST_EMPTY + elif allow_empty_components: + pat = _URI_PAT_STRICT_EMPTY + else: + pat = _URI_PAT_STRICT_NON_EMPTY + else: + if allow_last_empty: + pat = _URI_PAT_LOOSE_LAST_EMPTY + elif allow_empty_components: + pat = _URI_PAT_LOOSE_EMPTY + else: + pat = _URI_PAT_LOOSE_NON_EMPTY + + if not pat.match(value): + raise InvalidUriError(u'{0}: invalid value "{1}" for URI (did not match pattern "{2}" with options strict={3}, allow_empty_components={4}, allow_last_empty={5}, allow_none={6})'.format(message, value, pat.pattern, strict, allow_empty_components, allow_last_empty, allow_none)) + else: + return value + + +def check_or_raise_id(value, message=u"WAMP message invalid"): + """ + Check a value for being a valid WAMP ID. + + If the value is not a valid WAMP ID, raises :class:`autobahn.wamp.exception.ProtocolError`. + Otherwise return the value. + + :param value: The value to check. + :type value: int + + :param message: Prefix for message in exception raised when value is invalid. + :type message: str + + :returns: The ID value (if valid). + :rtype: int + + :raises: instance of :class:`autobahn.wamp.exception.ProtocolError` + """ + if type(value) not in six.integer_types: + raise ProtocolError(u"{0}: invalid type {1} for ID".format(message, type(value))) + # the value 0 for WAMP IDs is possible in certain WAMP messages, e.g. UNREGISTERED with + # router revocation signaling! + if value < 0 or value > 9007199254740992: # 2**53 + raise ProtocolError(u"{0}: invalid value {1} for ID".format(message, value)) + return value + + +def check_or_raise_extra(value, message=u"WAMP message invalid"): + """ + Check a value for being a valid WAMP extra dictionary. + + If the value is not a valid WAMP extra dictionary, raises :class:`autobahn.wamp.exception.ProtocolError`. + Otherwise return the value. + + :param value: The value to check. + :type value: dict + + :param message: Prefix for message in exception raised when value is invalid. + :type message: str + + :returns: The extra dictionary (if valid). + :rtype: dict + + :raises: instance of :class:`autobahn.wamp.exception.ProtocolError` + """ + if type(value) != dict: + raise ProtocolError(u"{0}: invalid type {1} for WAMP extra".format(message, type(value))) + for k in value.keys(): + if not isinstance(k, six.text_type): + raise ProtocolError(u"{0}: invalid type {1} for key in WAMP extra ('{2}')".format(message, type(k), k)) + return value + + +def _validate_kwargs(kwargs, message=u"WAMP message invalid"): + """ + Check a value for being a valid WAMP kwargs dictionary. + + If the value is not a valid WAMP kwargs dictionary, + raises :class:`autobahn.wamp.exception.ProtocolError`. + Otherwise return the kwargs. + + The WAMP spec requires that the keys in kwargs are proper + strings (unicode), not bytes. Note that the WAMP spec + says nothing about keys in application payload. Key in the + latter can be potentially of other type (if that is really + wanted). + + :param kwargs: The keyword arguments to check. + :type kwargs: dict + + :param message: Prefix for message in exception raised when + value is invalid. + :type message: str + + :returns: The kwargs dictionary (if valid). + :rtype: dict + + :raises: instance of + :class:`autobahn.wamp.exception.ProtocolError` + """ + if kwargs is not None: + if type(kwargs) != dict: + raise ProtocolError(u"{0}: invalid type {1} for WAMP kwargs".format(message, type(kwargs))) + for k in kwargs.keys(): + if not isinstance(k, six.text_type): + raise ProtocolError(u"{0}: invalid type {1} for key in WAMP kwargs ('{2}')".format(message, type(k), k)) + return kwargs + + +class Message(object): + """ + WAMP message base class. + + .. note:: This is not supposed to be instantiated, but subclassed only. + """ + + MESSAGE_TYPE = None + """ + WAMP message type code. + """ + + __slots__ = ( + '_from_fbs', + '_serialized', + '_correlation_id', + '_correlation_uri', + '_correlation_is_anchor', + '_correlation_is_last', + ) + + def __init__(self, from_fbs=None): + # only filled in case this object has flatbuffers underlying + self._from_fbs = from_fbs + + # serialization cache: mapping from ISerializer instances to serialized bytes + self._serialized = {} + + # user attributes for message correlation (mainly for message tracing) + self._correlation_id = None + self._correlation_uri = None + self._correlation_is_anchor = None + self._correlation_is_last = None + + @property + def correlation_id(self): + return self._correlation_id + + @correlation_id.setter + def correlation_id(self, value): + assert(value is None or type(value) == six.text_type) + self._correlation_id = value + + @property + def correlation_uri(self): + return self._correlation_uri + + @correlation_uri.setter + def correlation_uri(self, value): + assert(value is None or type(value) == six.text_type) + self._correlation_uri = value + + @property + def correlation_is_anchor(self): + return self._correlation_is_anchor + + @correlation_is_anchor.setter + def correlation_is_anchor(self, value): + assert(value is None or type(value) == bool) + self._correlation_is_anchor = value + + @property + def correlation_is_last(self): + return self._correlation_is_last + + @correlation_is_last.setter + def correlation_is_last(self, value): + assert(value is None or type(value) == bool) + self._correlation_is_last = value + + def __eq__(self, other): + """ + Compare this message to another message for equality. + + :param other: The other message to compare with. + :type other: obj + + :returns: ``True`` iff the messages are equal. + :rtype: bool + """ + if not isinstance(other, self.__class__): + return False + # we only want the actual message data attributes (not eg _serialize) + for k in self.__slots__: + if k not in ['_serialized', + '_correlation_id', + '_correlation_uri', + '_correlation_is_anchor', + '_correlation_is_last'] and not k.startswith('_'): + if not getattr(self, k) == getattr(other, k): + return False + return True + + def __ne__(self, other): + """ + Compare this message to another message for inequality. + + :param other: The other message to compare with. + :type other: obj + + :returns: ``True`` iff the messages are not equal. + :rtype: bool + """ + return not self.__eq__(other) + + @staticmethod + def parse(wmsg): + """ + Factory method that parses a unserialized raw message (as returned byte + :func:`autobahn.interfaces.ISerializer.unserialize`) into an instance + of this class. + + :returns: An instance of this class. + :rtype: obj + """ + raise NotImplementedError() + + def marshal(self): + raise NotImplementedError() + + @staticmethod + def cast(buf): + raise NotImplementedError() + + def build(self, builder): + raise NotImplementedError() + + def uncache(self): + """ + Resets the serialization cache. + """ + self._serialized = {} + + def serialize(self, serializer): + """ + Serialize this object into a wire level bytes representation and cache + the resulting bytes. If the cache already contains an entry for the given + serializer, return the cached representation directly. + + :param serializer: The wire level serializer to use. + :type serializer: An instance that implements :class:`autobahn.interfaces.ISerializer` + + :returns: The serialized bytes. + :rtype: bytes + """ + # only serialize if not cached .. + if serializer not in self._serialized: + if serializer.NAME == u'flatbuffers': + # flatbuffers get special treatment .. + builder = flatbuffers.Builder(1024) + + # this is the core method writing out this message (self) to a (new) flatbuffer + # FIXME: implement this method for all classes derived from Message + obj = self.build(builder) + + builder.Finish(obj) + buf = builder.Output() + self._serialized[serializer] = bytes(buf) + else: + # all other serializers first marshal() the object and then serialize the latter + self._serialized[serializer] = serializer.serialize(self.marshal()) + + # cache is filled now: return serialized, cached bytes + return self._serialized[serializer] + + +class Hello(Message): + """ + A WAMP ``HELLO`` message. + + Format: ``[HELLO, Realm|uri, Details|dict]`` + """ + + MESSAGE_TYPE = 1 + """ + The WAMP message code for this type of message. + """ + + __slots__ = ( + 'realm', + 'roles', + 'authmethods', + 'authid', + 'authrole', + 'authextra', + 'resumable', + 'resume_session', + 'resume_token', + ) + + def __init__(self, + realm, + roles, + authmethods=None, + authid=None, + authrole=None, + authextra=None, + resumable=None, + resume_session=None, + resume_token=None): + """ + + :param realm: The URI of the WAMP realm to join. + :type realm: str + + :param roles: The WAMP session roles and features to announce. + :type roles: dict of :class:`autobahn.wamp.role.RoleFeatures` + + :param authmethods: The authentication methods to announce. + :type authmethods: list of str or None + + :param authid: The authentication ID to announce. + :type authid: str or None + + :param authrole: The authentication role to announce. + :type authrole: str or None + + :param authextra: Application-specific "extra data" to be forwarded to the client. + :type authextra: dict or None + + :param resumable: Whether the client wants this to be a session that can be later resumed. + :type resumable: bool or None + + :param resume_session: The session the client would like to resume. + :type resume_session: int or None + + :param resume_token: The secure authorisation token to resume the session. + :type resume_token: str or None + """ + assert(realm is None or isinstance(realm, six.text_type)) + assert(type(roles) == dict) + assert(len(roles) > 0) + for role in roles: + assert(role in [u'subscriber', u'publisher', u'caller', u'callee']) + assert(isinstance(roles[role], autobahn.wamp.role.ROLE_NAME_TO_CLASS[role])) + if authmethods: + assert(type(authmethods) == list) + for authmethod in authmethods: + assert(type(authmethod) == six.text_type) + assert(authid is None or type(authid) == six.text_type) + assert(authrole is None or type(authrole) == six.text_type) + assert(authextra is None or type(authextra) == dict) + assert(resumable is None or type(resumable) == bool) + assert(resume_session is None or type(resume_session) == int) + assert(resume_token is None or type(resume_token) == six.text_type) + + Message.__init__(self) + self.realm = realm + self.roles = roles + self.authmethods = authmethods + self.authid = authid + self.authrole = authrole + self.authextra = authextra + self.resumable = resumable + self.resume_session = resume_session + self.resume_token = resume_token + + @staticmethod + def parse(wmsg): + """ + Verifies and parses an unserialized raw message into an actual WAMP message instance. + + :param wmsg: The unserialized raw message. + :type wmsg: list + + :returns: An instance of this class. + """ + # this should already be verified by WampSerializer.unserialize + assert(len(wmsg) > 0 and wmsg[0] == Hello.MESSAGE_TYPE) + + if len(wmsg) != 3: + raise ProtocolError("invalid message length {0} for HELLO".format(len(wmsg))) + + realm = check_or_raise_uri(wmsg[1], u"'realm' in HELLO", allow_none=True) + details = check_or_raise_extra(wmsg[2], u"'details' in HELLO") + + roles = {} + + if u'roles' not in details: + raise ProtocolError(u"missing mandatory roles attribute in options in HELLO") + + details_roles = check_or_raise_extra(details[u'roles'], u"'roles' in 'details' in HELLO") + + if len(details_roles) == 0: + raise ProtocolError(u"empty 'roles' in 'details' in HELLO") + + for role in details_roles: + if role not in [u'subscriber', u'publisher', u'caller', u'callee']: + raise ProtocolError("invalid role '{0}' in 'roles' in 'details' in HELLO".format(role)) + + role_cls = ROLE_NAME_TO_CLASS[role] + + details_role = check_or_raise_extra(details_roles[role], "role '{0}' in 'roles' in 'details' in HELLO".format(role)) + + if u'features' in details_role: + check_or_raise_extra(details_role[u'features'], "'features' in role '{0}' in 'roles' in 'details' in HELLO".format(role)) + + role_features = role_cls(**details_role[u'features']) + + else: + role_features = role_cls() + + roles[role] = role_features + + authmethods = None + if u'authmethods' in details: + details_authmethods = details[u'authmethods'] + if type(details_authmethods) != list: + raise ProtocolError("invalid type {0} for 'authmethods' detail in HELLO".format(type(details_authmethods))) + + for auth_method in details_authmethods: + if type(auth_method) != six.text_type: + raise ProtocolError("invalid type {0} for item in 'authmethods' detail in HELLO".format(type(auth_method))) + + authmethods = details_authmethods + + authid = None + if u'authid' in details: + details_authid = details[u'authid'] + if type(details_authid) != six.text_type: + raise ProtocolError("invalid type {0} for 'authid' detail in HELLO".format(type(details_authid))) + + authid = details_authid + + authrole = None + if u'authrole' in details: + details_authrole = details[u'authrole'] + if type(details_authrole) != six.text_type: + raise ProtocolError("invalid type {0} for 'authrole' detail in HELLO".format(type(details_authrole))) + + authrole = details_authrole + + authextra = None + if u'authextra' in details: + details_authextra = details[u'authextra'] + if type(details_authextra) != dict: + raise ProtocolError("invalid type {0} for 'authextra' detail in HELLO".format(type(details_authextra))) + + authextra = details_authextra + + resumable = None + if u'resumable' in details: + resumable = details[u'resumable'] + if type(resumable) != bool: + raise ProtocolError("invalid type {0} for 'resumable' detail in HELLO".format(type(resumable))) + + resume_session = None + if u'resume-session' in details: + resume_session = details[u'resume-session'] + if type(resume_session) != int: + raise ProtocolError("invalid type {0} for 'resume-session' detail in HELLO".format(type(resume_session))) + + resume_token = None + if u'resume-token' in details: + resume_token = details[u'resume-token'] + if type(resume_token) != six.text_type: + raise ProtocolError("invalid type {0} for 'resume-token' detail in HELLO".format(type(resume_token))) + else: + if resume_session: + raise ProtocolError("resume-token must be provided if resume-session is provided in HELLO") + + obj = Hello(realm, roles, authmethods, authid, authrole, authextra, resumable, resume_session, resume_token) + + return obj + + def marshal(self): + """ + Marshal this object into a raw message for subsequent serialization to bytes. + + :returns: The serialized raw message. + :rtype: list + """ + details = {u'roles': {}} + for role in self.roles.values(): + details[u'roles'][role.ROLE] = {} + for feature in role.__dict__: + if not feature.startswith('_') and feature != 'ROLE' and getattr(role, feature) is not None: + if u'features' not in details[u'roles'][role.ROLE]: + details[u'roles'][role.ROLE] = {u'features': {}} + details[u'roles'][role.ROLE][u'features'][six.u(feature)] = getattr(role, feature) + + if self.authmethods is not None: + details[u'authmethods'] = self.authmethods + + if self.authid is not None: + details[u'authid'] = self.authid + + if self.authrole is not None: + details[u'authrole'] = self.authrole + + if self.authextra is not None: + details[u'authextra'] = self.authextra + + if self.resumable is not None: + details[u'resumable'] = self.resumable + + if self.resume_session is not None: + details[u'resume-session'] = self.resume_session + + if self.resume_token is not None: + details[u'resume-token'] = self.resume_token + + return [Hello.MESSAGE_TYPE, self.realm, details] + + def __str__(self): + """ + Return a string representation of this message. + """ + return u"Hello(realm={}, roles={}, authmethods={}, authid={}, authrole={}, authextra={}, resumable={}, resume_session={}, resume_token={})".format(self.realm, self.roles, self.authmethods, self.authid, self.authrole, self.authextra, self.resumable, self.resume_session, self.resume_token) + + +class Welcome(Message): + """ + A WAMP ``WELCOME`` message. + + Format: ``[WELCOME, Session|id, Details|dict]`` + """ + + MESSAGE_TYPE = 2 + """ + The WAMP message code for this type of message. + """ + + __slots__ = ( + 'session', + 'roles', + 'realm', + 'authid', + 'authrole', + 'authmethod', + 'authprovider', + 'authextra', + 'resumed', + 'resumable', + 'resume_token', + 'custom', + ) + + def __init__(self, + session, + roles, + realm=None, + authid=None, + authrole=None, + authmethod=None, + authprovider=None, + authextra=None, + resumed=None, + resumable=None, + resume_token=None, + custom=None): + """ + + :param session: The WAMP session ID the other peer is assigned. + :type session: int + + :param roles: The WAMP roles to announce. + :type roles: dict of :class:`autobahn.wamp.role.RoleFeatures` + + :param realm: The effective realm the session is joined on. + :type realm: str or None + + :param authid: The authentication ID assigned. + :type authid: str or None + + :param authrole: The authentication role assigned. + :type authrole: str or None + + :param authmethod: The authentication method in use. + :type authmethod: str or None + + :param authprovider: The authentication provided in use. + :type authprovider: str or None + + :param authextra: Application-specific "extra data" to be forwarded to the client. + :type authextra: arbitrary or None + + :param resumed: Whether the session is a resumed one. + :type resumed: bool or None + + :param resumable: Whether this session can be resumed later. + :type resumable: bool or None + + :param resume_token: The secure authorisation token to resume the session. + :type resume_token: str or None + + :param custom: Implementation-specific "custom attributes" (`x_my_impl_attribute`) to be set. + :type custom: dict or None + """ + assert(type(session) in six.integer_types) + assert(type(roles) == dict) + assert(len(roles) > 0) + for role in roles: + assert(role in [u'broker', u'dealer']) + assert(isinstance(roles[role], autobahn.wamp.role.ROLE_NAME_TO_CLASS[role])) + assert(realm is None or type(realm) == six.text_type) + assert(authid is None or type(authid) == six.text_type) + assert(authrole is None or type(authrole) == six.text_type) + assert(authmethod is None or type(authmethod) == six.text_type) + assert(authprovider is None or type(authprovider) == six.text_type) + assert(authextra is None or type(authextra) == dict) + assert(resumed is None or type(resumed) == bool) + assert(resumable is None or type(resumable) == bool) + assert(resume_token is None or type(resume_token) == six.text_type) + assert(custom is None or type(custom) == dict) + if custom: + for k in custom: + assert(_CUSTOM_ATTRIBUTE.match(k)) + + Message.__init__(self) + self.session = session + self.roles = roles + self.realm = realm + self.authid = authid + self.authrole = authrole + self.authmethod = authmethod + self.authprovider = authprovider + self.authextra = authextra + self.resumed = resumed + self.resumable = resumable + self.resume_token = resume_token + self.custom = custom or {} + + @staticmethod + def parse(wmsg): + """ + Verifies and parses an unserialized raw message into an actual WAMP message instance. + + :param wmsg: The unserialized raw message. + :type wmsg: list + + :returns: An instance of this class. + """ + # this should already be verified by WampSerializer.unserialize + assert(len(wmsg) > 0 and wmsg[0] == Welcome.MESSAGE_TYPE) + + if len(wmsg) != 3: + raise ProtocolError("invalid message length {0} for WELCOME".format(len(wmsg))) + + session = check_or_raise_id(wmsg[1], u"'session' in WELCOME") + details = check_or_raise_extra(wmsg[2], u"'details' in WELCOME") + + # FIXME: tigher value checking (types, URIs etc) + realm = details.get(u'realm', None) + authid = details.get(u'authid', None) + authrole = details.get(u'authrole', None) + authmethod = details.get(u'authmethod', None) + authprovider = details.get(u'authprovider', None) + authextra = details.get(u'authextra', None) + + resumed = None + if u'resumed' in details: + resumed = details[u'resumed'] + if not type(resumed) == bool: + raise ProtocolError("invalid type {0} for 'resumed' detail in WELCOME".format(type(resumed))) + + resumable = None + if u'resumable' in details: + resumable = details[u'resumable'] + if not type(resumable) == bool: + raise ProtocolError("invalid type {0} for 'resumable' detail in WELCOME".format(type(resumable))) + + resume_token = None + if u'resume_token' in details: + resume_token = details[u'resume_token'] + if not type(resume_token) == six.text_type: + raise ProtocolError("invalid type {0} for 'resume_token' detail in WELCOME".format(type(resume_token))) + elif resumable: + raise ProtocolError("resume_token required when resumable is given in WELCOME") + + roles = {} + + if u'roles' not in details: + raise ProtocolError(u"missing mandatory roles attribute in options in WELCOME") + + details_roles = check_or_raise_extra(details['roles'], u"'roles' in 'details' in WELCOME") + + if len(details_roles) == 0: + raise ProtocolError(u"empty 'roles' in 'details' in WELCOME") + + for role in details_roles: + if role not in [u'broker', u'dealer']: + raise ProtocolError("invalid role '{0}' in 'roles' in 'details' in WELCOME".format(role)) + + role_cls = ROLE_NAME_TO_CLASS[role] + + details_role = check_or_raise_extra(details_roles[role], "role '{0}' in 'roles' in 'details' in WELCOME".format(role)) + + if u'features' in details_role: + check_or_raise_extra(details_role[u'features'], "'features' in role '{0}' in 'roles' in 'details' in WELCOME".format(role)) + + role_features = role_cls(**details_roles[role][u'features']) + + else: + role_features = role_cls() + + roles[role] = role_features + + custom = {} + for k in details: + if _CUSTOM_ATTRIBUTE.match(k): + custom[k] = details[k] + + obj = Welcome(session, roles, realm, authid, authrole, authmethod, authprovider, authextra, resumed, resumable, resume_token, custom) + + return obj + + def marshal(self): + """ + Marshal this object into a raw message for subsequent serialization to bytes. + + :returns: The serialized raw message. + :rtype: list + """ + details = {} + details.update(self.custom) + + if self.realm: + details[u'realm'] = self.realm + + if self.authid: + details[u'authid'] = self.authid + + if self.authrole: + details[u'authrole'] = self.authrole + + if self.authrole: + details[u'authmethod'] = self.authmethod + + if self.authprovider: + details[u'authprovider'] = self.authprovider + + if self.authextra: + details[u'authextra'] = self.authextra + + if self.resumed: + details[u'resumed'] = self.resumed + + if self.resumable: + details[u'resumable'] = self.resumable + + if self.resume_token: + details[u'resume_token'] = self.resume_token + + details[u'roles'] = {} + for role in self.roles.values(): + details[u'roles'][role.ROLE] = {} + for feature in role.__dict__: + if not feature.startswith('_') and feature != 'ROLE' and getattr(role, feature) is not None: + if u'features' not in details[u'roles'][role.ROLE]: + details[u'roles'][role.ROLE] = {u'features': {}} + details[u'roles'][role.ROLE][u'features'][six.u(feature)] = getattr(role, feature) + + return [Welcome.MESSAGE_TYPE, self.session, details] + + def __str__(self): + """ + Returns string representation of this message. + """ + return u"Welcome(session={}, roles={}, realm={}, authid={}, authrole={}, authmethod={}, authprovider={}, authextra={}, resumed={}, resumable={}, resume_token={})".format(self.session, self.roles, self.realm, self.authid, self.authrole, self.authmethod, self.authprovider, self.authextra, self.resumed, self.resumable, self.resume_token) + + +class Abort(Message): + """ + A WAMP ``ABORT`` message. + + Format: ``[ABORT, Details|dict, Reason|uri]`` + """ + + MESSAGE_TYPE = 3 + """ + The WAMP message code for this type of message. + """ + + __slots__ = ( + 'reason', + 'message', + ) + + def __init__(self, reason, message=None): + """ + + :param reason: WAMP or application error URI for aborting reason. + :type reason: str + + :param message: Optional human-readable closing message, e.g. for logging purposes. + :type message: str or None + """ + assert(type(reason) == six.text_type) + assert(message is None or type(message) == six.text_type) + + Message.__init__(self) + self.reason = reason + self.message = message + + @staticmethod + def parse(wmsg): + """ + Verifies and parses an unserialized raw message into an actual WAMP message instance. + + :param wmsg: The unserialized raw message. + :type wmsg: list + + :returns: An instance of this class. + """ + # this should already be verified by WampSerializer.unserialize + assert(len(wmsg) > 0 and wmsg[0] == Abort.MESSAGE_TYPE) + + if len(wmsg) != 3: + raise ProtocolError("invalid message length {0} for ABORT".format(len(wmsg))) + + details = check_or_raise_extra(wmsg[1], u"'details' in ABORT") + reason = check_or_raise_uri(wmsg[2], u"'reason' in ABORT") + + message = None + + if u'message' in details: + + details_message = details[u'message'] + if type(details_message) != six.text_type: + raise ProtocolError("invalid type {0} for 'message' detail in ABORT".format(type(details_message))) + + message = details_message + + obj = Abort(reason, message) + + return obj + + def marshal(self): + """ + Marshal this object into a raw message for subsequent serialization to bytes. + + :returns: The serialized raw message. + :rtype: list + """ + details = {} + if self.message: + details[u'message'] = self.message + + return [Abort.MESSAGE_TYPE, details, self.reason] + + def __str__(self): + """ + Returns string representation of this message. + """ + return u"Abort(message={0}, reason={1})".format(self.message, self.reason) + + +class Challenge(Message): + """ + A WAMP ``CHALLENGE`` message. + + Format: ``[CHALLENGE, Method|string, Extra|dict]`` + """ + + MESSAGE_TYPE = 4 + """ + The WAMP message code for this type of message. + """ + + __slots__ = ( + 'method', + 'extra', + ) + + def __init__(self, method, extra=None): + """ + + :param method: The authentication method. + :type method: str + + :param extra: Authentication method specific information. + :type extra: dict or None + """ + assert(type(method) == six.text_type) + assert(extra is None or type(extra) == dict) + + Message.__init__(self) + self.method = method + self.extra = extra or {} + + @staticmethod + def parse(wmsg): + """ + Verifies and parses an unserialized raw message into an actual WAMP message instance. + + :param wmsg: The unserialized raw message. + :type wmsg: list + + :returns: An instance of this class. + """ + # this should already be verified by WampSerializer.unserialize + assert(len(wmsg) > 0 and wmsg[0] == Challenge.MESSAGE_TYPE) + + if len(wmsg) != 3: + raise ProtocolError("invalid message length {0} for CHALLENGE".format(len(wmsg))) + + method = wmsg[1] + if type(method) != six.text_type: + raise ProtocolError("invalid type {0} for 'method' in CHALLENGE".format(type(method))) + + extra = check_or_raise_extra(wmsg[2], u"'extra' in CHALLENGE") + + obj = Challenge(method, extra) + + return obj + + def marshal(self): + """ + Marshal this object into a raw message for subsequent serialization to bytes. + + :returns: The serialized raw message. + :rtype: list + """ + return [Challenge.MESSAGE_TYPE, self.method, self.extra] + + def __str__(self): + """ + Returns string representation of this message. + """ + return u"Challenge(method={0}, extra={1})".format(self.method, self.extra) + + +class Authenticate(Message): + """ + A WAMP ``AUTHENTICATE`` message. + + Format: ``[AUTHENTICATE, Signature|string, Extra|dict]`` + """ + + MESSAGE_TYPE = 5 + """ + The WAMP message code for this type of message. + """ + + __slots__ = ( + 'signature', + 'extra', + ) + + def __init__(self, signature, extra=None): + """ + + :param signature: The signature for the authentication challenge. + :type signature: str + + :param extra: Authentication method specific information. + :type extra: dict or None + """ + assert(type(signature) == six.text_type) + assert(extra is None or type(extra) == dict) + + Message.__init__(self) + self.signature = signature + self.extra = extra or {} + + @staticmethod + def parse(wmsg): + """ + Verifies and parses an unserialized raw message into an actual WAMP message instance. + + :param wmsg: The unserialized raw message. + :type wmsg: list + + :returns: An instance of this class. + """ + # this should already be verified by WampSerializer.unserialize + assert(len(wmsg) > 0 and wmsg[0] == Authenticate.MESSAGE_TYPE) + + if len(wmsg) != 3: + raise ProtocolError("invalid message length {0} for AUTHENTICATE".format(len(wmsg))) + + signature = wmsg[1] + if type(signature) != six.text_type: + raise ProtocolError("invalid type {0} for 'signature' in AUTHENTICATE".format(type(signature))) + + extra = check_or_raise_extra(wmsg[2], u"'extra' in AUTHENTICATE") + + obj = Authenticate(signature, extra) + + return obj + + def marshal(self): + """ + Marshal this object into a raw message for subsequent serialization to bytes. + + :returns: The serialized raw message. + :rtype: list + """ + return [Authenticate.MESSAGE_TYPE, self.signature, self.extra] + + def __str__(self): + """ + Returns string representation of this message. + """ + return u"Authenticate(signature={0}, extra={1})".format(self.signature, self.extra) + + +class Goodbye(Message): + """ + A WAMP ``GOODBYE`` message. + + Format: ``[GOODBYE, Details|dict, Reason|uri]`` + """ + + MESSAGE_TYPE = 6 + """ + The WAMP message code for this type of message. + """ + + DEFAULT_REASON = u"wamp.close.normal" + """ + Default WAMP closing reason. + """ + + __slots__ = ( + 'reason', + 'message', + 'resumable', + ) + + def __init__(self, reason=DEFAULT_REASON, message=None, resumable=None): + """ + + :param reason: Optional WAMP or application error URI for closing reason. + :type reason: str + + :param message: Optional human-readable closing message, e.g. for logging purposes. + :type message: str or None + + :param resumable: From the server: Whether the session is able to be resumed (true) or destroyed (false). From the client: Whether it should be resumable (true) or destroyed (false). + :type resumable: bool or None + """ + assert(type(reason) == six.text_type) + assert(message is None or type(message) == six.text_type) + assert(resumable is None or type(resumable) == bool) + + Message.__init__(self) + self.reason = reason + self.message = message + self.resumable = resumable + + @staticmethod + def parse(wmsg): + """ + Verifies and parses an unserialized raw message into an actual WAMP message instance. + + :param wmsg: The unserialized raw message. + :type wmsg: list + + :returns: An instance of this class. + """ + # this should already be verified by WampSerializer.unserialize + assert(len(wmsg) > 0 and wmsg[0] == Goodbye.MESSAGE_TYPE) + + if len(wmsg) != 3: + raise ProtocolError("invalid message length {0} for GOODBYE".format(len(wmsg))) + + details = check_or_raise_extra(wmsg[1], u"'details' in GOODBYE") + reason = check_or_raise_uri(wmsg[2], u"'reason' in GOODBYE") + + message = None + resumable = None + + if u'message' in details: + + details_message = details[u'message'] + if type(details_message) != six.text_type: + raise ProtocolError("invalid type {0} for 'message' detail in GOODBYE".format(type(details_message))) + + message = details_message + + if u'resumable' in details: + resumable = details[u'resumable'] + if type(resumable) != bool: + raise ProtocolError("invalid type {0} for 'resumable' detail in GOODBYE".format(type(resumable))) + + obj = Goodbye(reason=reason, + message=message, + resumable=resumable) + + return obj + + def marshal(self): + """ + Marshal this object into a raw message for subsequent serialization to bytes. + + :returns: The serialized raw message. + :rtype: list + """ + details = {} + if self.message: + details[u'message'] = self.message + + if self.resumable: + details[u'resumable'] = self.resumable + + return [Goodbye.MESSAGE_TYPE, details, self.reason] + + def __str__(self): + """ + Returns string representation of this message. + """ + return u"Goodbye(message={}, reason={}, resumable={})".format(self.message, self.reason, self.resumable) + + +class Error(Message): + """ + A WAMP ``ERROR`` message. + + Formats: + + * ``[ERROR, REQUEST.Type|int, REQUEST.Request|id, Details|dict, Error|uri]`` + * ``[ERROR, REQUEST.Type|int, REQUEST.Request|id, Details|dict, Error|uri, Arguments|list]`` + * ``[ERROR, REQUEST.Type|int, REQUEST.Request|id, Details|dict, Error|uri, Arguments|list, ArgumentsKw|dict]`` + * ``[ERROR, REQUEST.Type|int, REQUEST.Request|id, Details|dict, Error|uri, Payload|binary]`` + """ + + MESSAGE_TYPE = 8 + """ + The WAMP message code for this type of message. + """ + + __slots__ = ( + 'request_type', + 'request', + 'error', + 'args', + 'kwargs', + 'payload', + 'enc_algo', + 'enc_key', + 'enc_serializer', + 'callee', + 'callee_authid', + 'callee_authrole', + 'forward_for', + ) + + def __init__(self, + request_type, + request, + error, + args=None, + kwargs=None, + payload=None, + enc_algo=None, + enc_key=None, + enc_serializer=None, + callee=None, + callee_authid=None, + callee_authrole=None, + forward_for=None): + """ + + :param request_type: The WAMP message type code for the original request. + :type request_type: int + + :param request: The WAMP request ID of the original request (`Call`, `Subscribe`, ...) this error occurred for. + :type request: int + + :param error: The WAMP or application error URI for the error that occurred. + :type error: str + + :param args: Positional values for application-defined exception. + Must be serializable using any serializers in use. + :type args: list or None + + :param kwargs: Keyword values for application-defined exception. + Must be serializable using any serializers in use. + :type kwargs: dict or None + + :param payload: Alternative, transparent payload. If given, ``args`` and ``kwargs`` must be left unset. + :type payload: bytes or None + + :param enc_algo: If using payload transparency, the encoding algorithm that was used to encode the payload. + :type enc_algo: str or None + + :param enc_key: If using payload transparency with an encryption algorithm, the payload encryption key. + :type enc_key: str or None + + :param enc_serializer: If using payload transparency, the payload object serializer that was used encoding the payload. + :type enc_serializer: str or None + + :param callee: The WAMP session ID of the effective callee that responded with the error. Only filled if callee is disclosed. + :type callee: None or int + + :param callee_authid: The WAMP authid of the responding callee. Only filled if callee is disclosed. + :type callee_authid: None or unicode + + :param callee_authrole: The WAMP authrole of the responding callee. Only filled if callee is disclosed. + :type callee_authrole: None or unicode + + :param forward_for: When this Error is forwarded for a client/callee (or from an intermediary router). + :type forward_for: list[dict] + """ + assert(type(request_type) in six.integer_types) + assert(type(request) in six.integer_types) + assert(type(error) == six.text_type) + assert(args is None or type(args) in [list, tuple]) + assert(kwargs is None or type(kwargs) == dict) + assert(payload is None or type(payload) == six.binary_type) + assert(payload is None or (payload is not None and args is None and kwargs is None)) + + assert(enc_algo is None or is_valid_enc_algo(enc_algo)) + assert((enc_algo is None and enc_key is None and enc_serializer is None) or (payload is not None and enc_algo is not None)) + assert(enc_key is None or type(enc_key) == six.text_type) + assert(enc_serializer is None or is_valid_enc_serializer(enc_serializer)) + + assert(callee is None or type(callee) in six.integer_types) + assert(callee_authid is None or type(callee_authid) == six.text_type) + assert(callee_authrole is None or type(callee_authrole) == six.text_type) + + assert(forward_for is None or type(forward_for) == list) + if forward_for: + for ff in forward_for: + assert type(ff) == dict + assert 'session' in ff and type(ff['session']) in six.integer_types + assert 'authid' in ff and (ff['authid'] is None or type(ff['authid']) == six.text_type) + assert 'authrole' in ff and type(ff['authrole']) == six.text_type + + Message.__init__(self) + self.request_type = request_type + self.request = request + self.error = error + self.args = args + self.kwargs = _validate_kwargs(kwargs) + self.payload = payload + + # payload transparency related knobs + self.enc_algo = enc_algo + self.enc_key = enc_key + self.enc_serializer = enc_serializer + + # effective callee that responded with the error + self.callee = callee + self.callee_authid = callee_authid + self.callee_authrole = callee_authrole + + # message forwarding + self.forward_for = forward_for + + @staticmethod + def parse(wmsg): + """ + Verifies and parses an unserialized raw message into an actual WAMP message instance. + + :param wmsg: The unserialized raw message. + :type wmsg: list + + :returns: An instance of this class. + """ + # this should already be verified by WampSerializer.unserialize + assert(len(wmsg) > 0 and wmsg[0] == Error.MESSAGE_TYPE) + + if len(wmsg) not in (5, 6, 7): + raise ProtocolError("invalid message length {0} for ERROR".format(len(wmsg))) + + request_type = wmsg[1] + if type(request_type) not in six.integer_types: + raise ProtocolError("invalid type {0} for 'request_type' in ERROR".format(request_type)) + + if request_type not in [Subscribe.MESSAGE_TYPE, + Unsubscribe.MESSAGE_TYPE, + Publish.MESSAGE_TYPE, + Register.MESSAGE_TYPE, + Unregister.MESSAGE_TYPE, + Call.MESSAGE_TYPE, + Invocation.MESSAGE_TYPE]: + raise ProtocolError("invalid value {0} for 'request_type' in ERROR".format(request_type)) + + request = check_or_raise_id(wmsg[2], u"'request' in ERROR") + details = check_or_raise_extra(wmsg[3], u"'details' in ERROR") + error = check_or_raise_uri(wmsg[4], u"'error' in ERROR") + + args = None + kwargs = None + payload = None + enc_algo = None + enc_key = None + enc_serializer = None + callee = None + callee_authid = None + callee_authrole = None + forward_for = None + + if len(wmsg) == 6 and type(wmsg[5]) == six.binary_type: + + payload = wmsg[5] + + enc_algo = details.get(u'enc_algo', None) + if enc_algo and not is_valid_enc_algo(enc_algo): + raise ProtocolError("invalid value {0} for 'enc_algo' detail in EVENT".format(enc_algo)) + + enc_key = details.get(u'enc_key', None) + if enc_key and type(enc_key) != six.text_type: + raise ProtocolError("invalid type {0} for 'enc_key' detail in EVENT".format(type(enc_key))) + + enc_serializer = details.get(u'enc_serializer', None) + if enc_serializer and not is_valid_enc_serializer(enc_serializer): + raise ProtocolError("invalid value {0} for 'enc_serializer' detail in EVENT".format(enc_serializer)) + + else: + if len(wmsg) > 5: + args = wmsg[5] + if args is not None and type(args) != list: + raise ProtocolError("invalid type {0} for 'args' in ERROR".format(type(args))) + + if len(wmsg) > 6: + kwargs = wmsg[6] + if type(kwargs) != dict: + raise ProtocolError("invalid type {0} for 'kwargs' in ERROR".format(type(kwargs))) + + if u'callee' in details: + + detail_callee = details[u'callee'] + if type(detail_callee) not in six.integer_types: + raise ProtocolError("invalid type {0} for 'callee' detail in ERROR".format(type(detail_callee))) + + callee = detail_callee + + if u'callee_authid' in details: + + detail_callee_authid = details[u'callee_authid'] + if type(detail_callee_authid) != six.text_type: + raise ProtocolError("invalid type {0} for 'callee_authid' detail in ERROR".format(type(detail_callee_authid))) + + callee_authid = detail_callee_authid + + if u'callee_authrole' in details: + + detail_callee_authrole = details[u'callee_authrole'] + if type(detail_callee_authrole) != six.text_type: + raise ProtocolError("invalid type {0} for 'callee_authrole' detail in ERROR".format(type(detail_callee_authrole))) + + callee_authrole = detail_callee_authrole + + if u'forward_for' in details: + forward_for = details[u'forward_for'] + valid = False + if type(forward_for) == list: + for ff in forward_for: + if type(ff) != dict: + break + if 'session' not in ff or type(ff['session']) not in six.integer_types: + break + if 'authid' not in ff or type(ff['authid']) != six.text_type: + break + if 'authrole' not in ff or type(ff['authrole']) != six.text_type: + break + valid = True + + if not valid: + raise ProtocolError("invalid type/value {0} for/within 'forward_for' option in ERROR") + + obj = Error(request_type, + request, + error, + args=args, + kwargs=kwargs, + payload=payload, + enc_algo=enc_algo, + enc_key=enc_key, + enc_serializer=enc_serializer, + callee=callee, + callee_authid=callee_authid, + callee_authrole=callee_authrole, + forward_for=forward_for) + + return obj + + def marshal(self): + """ + Marshal this object into a raw message for subsequent serialization to bytes. + + :returns: The serialized raw message. + :rtype: list + """ + details = {} + + if self.callee is not None: + details[u'callee'] = self.callee + if self.callee_authid is not None: + details[u'callee_authid'] = self.callee_authid + if self.callee_authrole is not None: + details[u'callee_authrole'] = self.callee_authrole + if self.forward_for is not None: + details[u'forward_for'] = self.forward_for + + if self.payload: + if self.enc_algo is not None: + details[u'enc_algo'] = self.enc_algo + if self.enc_key is not None: + details[u'enc_key'] = self.enc_key + if self.enc_serializer is not None: + details[u'enc_serializer'] = self.enc_serializer + return [self.MESSAGE_TYPE, self.request_type, self.request, details, self.error, self.payload] + else: + if self.kwargs: + return [self.MESSAGE_TYPE, self.request_type, self.request, details, self.error, self.args, self.kwargs] + elif self.args: + return [self.MESSAGE_TYPE, self.request_type, self.request, details, self.error, self.args] + else: + return [self.MESSAGE_TYPE, self.request_type, self.request, details, self.error] + + def __str__(self): + """ + Returns string representation of this message. + """ + return u"Error(request_type={0}, request={1}, error={2}, args={3}, kwargs={4}, enc_algo={5}, enc_key={6}, enc_serializer={7}, payload={8}, callee={9}, callee_authid={10}, callee_authrole={11}, forward_for={12})".format(self.request_type, self.request, self.error, self.args, self.kwargs, self.enc_algo, self.enc_key, self.enc_serializer, b2a(self.payload), self.callee, self.callee_authid, self.callee_authrole, self.forward_for) + + +class Publish(Message): + """ + A WAMP ``PUBLISH`` message. + + Formats: + + * ``[PUBLISH, Request|id, Options|dict, Topic|uri]`` + * ``[PUBLISH, Request|id, Options|dict, Topic|uri, Arguments|list]`` + * ``[PUBLISH, Request|id, Options|dict, Topic|uri, Arguments|list, ArgumentsKw|dict]`` + * ``[PUBLISH, Request|id, Options|dict, Topic|uri, Payload|binary]`` + """ + + MESSAGE_TYPE = 16 + """ + The WAMP message code for this type of message. + """ + + __slots__ = ( + # uint64 (key) + '_request', + + # string (required, uri) + '_topic', + + # [uint8] + '_args', + + # [uint8] + '_kwargs', + + # [uint8] + '_payload', + + # Payload => uint8 + '_enc_algo', + + # Serializer => uint8 + '_enc_serializer', + + # [uint8] + '_enc_key', + + # bool + '_acknowledge', + + # bool + '_exclude_me', + + # [uint64] + '_exclude', + + # [string] (principal) + '_exclude_authid', + + # [string] (principal) + '_exclude_authrole', + + # [uint64] + '_eligible', + + # [string] (principal) + '_eligible_authid', + + # [string] (principal) + '_eligible_authrole', + + # bool + '_retain', + + # [Principal] + '_forward_for', + ) + + def __init__(self, + request=None, + topic=None, + args=None, + kwargs=None, + payload=None, + acknowledge=None, + exclude_me=None, + exclude=None, + exclude_authid=None, + exclude_authrole=None, + eligible=None, + eligible_authid=None, + eligible_authrole=None, + retain=None, + enc_algo=None, + enc_key=None, + enc_serializer=None, + forward_for=None, + from_fbs=None): + """ + + :param request: The WAMP request ID of this request. + :type request: int + + :param topic: The WAMP or application URI of the PubSub topic the event should + be published to. + :type topic: str + + :param args: Positional values for application-defined event payload. + Must be serializable using any serializers in use. + :type args: list or tuple or None + + :param kwargs: Keyword values for application-defined event payload. + Must be serializable using any serializers in use. + :type kwargs: dict or None + + :param payload: Alternative, transparent payload. If given, ``args`` and ``kwargs`` must be left unset. + :type payload: bytes or None + + :param acknowledge: If True, acknowledge the publication with a success or + error response. + :type acknowledge: bool or None + + :param exclude_me: If ``True``, exclude the publisher from receiving the event, even + if he is subscribed (and eligible). + :type exclude_me: bool or None + + :param exclude: List of WAMP session IDs to exclude from receiving this event. + :type exclude: list of int or None + + :param exclude_authid: List of WAMP authids to exclude from receiving this event. + :type exclude_authid: list of str or None + + :param exclude_authrole: List of WAMP authroles to exclude from receiving this event. + :type exclude_authrole: list of str or None + + :param eligible: List of WAMP session IDs eligible to receive this event. + :type eligible: list of int or None + + :param eligible_authid: List of WAMP authids eligible to receive this event. + :type eligible_authid: list of str or None + + :param eligible_authrole: List of WAMP authroles eligible to receive this event. + :type eligible_authrole: list of str or None + + :param retain: If ``True``, request the broker retain this event. + :type retain: bool or None + + :param enc_algo: If using payload transparency, the encoding algorithm that was used to encode the payload. + :type enc_algo: str or None + + :param enc_key: If using payload transparency with an encryption algorithm, the payload encryption key. + :type enc_key: str or None + + :param enc_serializer: If using payload transparency, the payload object serializer that was used encoding the payload. + :type enc_serializer: str or None or None + + :param forward_for: When this Call is forwarded for a client (or from an intermediary router). + :type forward_for: list[dict] + """ + assert(request is None or type(request) in six.integer_types) + assert(topic is None or type(topic) == six.text_type) + assert(args is None or type(args) in [list, tuple, six.text_type, six.binary_type]) + assert(kwargs is None or type(kwargs) in [dict, six.text_type, six.binary_type]) + assert(payload is None or type(payload) == six.binary_type) + assert(payload is None or (payload is not None and args is None and kwargs is None)) + assert(acknowledge is None or type(acknowledge) == bool) + assert(retain is None or type(retain) == bool) + + # publisher exlusion and black-/whitelisting + assert(exclude_me is None or type(exclude_me) == bool) + + assert(exclude is None or type(exclude) == list) + if exclude: + for sessionid in exclude: + assert(type(sessionid) in six.integer_types) + + assert(exclude_authid is None or type(exclude_authid) == list) + if exclude_authid: + for authid in exclude_authid: + assert(type(authid) == six.text_type) + + assert(exclude_authrole is None or type(exclude_authrole) == list) + if exclude_authrole: + for authrole in exclude_authrole: + assert(type(authrole) == six.text_type) + + assert(eligible is None or type(eligible) == list) + if eligible: + for sessionid in eligible: + assert(type(sessionid) in six.integer_types) + + assert(eligible_authid is None or type(eligible_authid) == list) + if eligible_authid: + for authid in eligible_authid: + assert(type(authid) == six.text_type) + + assert(eligible_authrole is None or type(eligible_authrole) == list) + if eligible_authrole: + for authrole in eligible_authrole: + assert(type(authrole) == six.text_type) + + assert(enc_algo is None or is_valid_enc_algo(enc_algo)) + assert((enc_algo is None and enc_key is None and enc_serializer is None) or (payload is not None and enc_algo is not None)) + assert(enc_key is None or type(enc_key) == six.text_type) + assert(enc_serializer is None or is_valid_enc_serializer(enc_serializer)) + + assert(forward_for is None or type(forward_for) == list) + if forward_for: + for ff in forward_for: + assert type(ff) == dict + assert 'session' in ff and type(ff['session']) in six.integer_types + assert 'authid' in ff and (ff['authid'] is None or type(ff['authid']) == six.text_type) + assert 'authrole' in ff and type(ff['authrole']) == six.text_type + + Message.__init__(self, from_fbs=from_fbs) + self._request = request + self._topic = topic + self._args = args + self._kwargs = _validate_kwargs(kwargs) + self._payload = payload + self._acknowledge = acknowledge + + # publisher exlusion and black-/whitelisting + self._exclude_me = exclude_me + self._exclude = exclude + self._exclude_authid = exclude_authid + self._exclude_authrole = exclude_authrole + self._eligible = eligible + self._eligible_authid = eligible_authid + self._eligible_authrole = eligible_authrole + + # event retention + self._retain = retain + + # payload transparency related knobs + self._enc_algo = enc_algo + self._enc_key = enc_key + self._enc_serializer = enc_serializer + + # message forwarding + self._forward_for = forward_for + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if not Message.__eq__(self, other): + return False + if other.request != self.request: + return False + if other.topic != self.topic: + return False + if other.args != self.args: + return False + if other.kwargs != self.kwargs: + return False + if other.payload != self.payload: + return False + if other.acknowledge != self.acknowledge: + return False + if other.exclude_me != self.exclude_me: + return False + if other.exclude != self.exclude: + return False + if other.exclude_authid != self.exclude_authid: + return False + if other.exclude_authrole != self.exclude_authrole: + return False + if other.eligible != self.eligible: + return False + if other.eligible_authid != self.eligible_authid: + return False + if other.eligible_authrole != self.eligible_authrole: + return False + if other.retain != self.retain: + return False + if other.enc_algo != self.enc_algo: + return False + if other.enc_key != self.enc_key: + return False + if other.enc_serializer != self.enc_serializer: + return False + if other.forward_for != self.forward_for: + return False + return True + + def __ne__(self, other): + return not self.__eq__(other) + + @property + def request(self): + if self._request is None and self._from_fbs: + self._request = self._from_fbs.Request() + return self._request + + @request.setter + def request(self, value): + assert(value is None or type(value) in six.integer_types) + self._request = value + + @property + def topic(self): + if self._topic is None and self._from_fbs: + s = self._from_fbs.Topic() + if s: + self._topic = s.decode('utf8') + return self._topic + + @topic.setter + def topic(self, value): + assert value is None or type(value) == str + self._topic = value + + @property + def args(self): + if self._args is None and self._from_fbs: + if self._from_fbs.ArgsLength(): + self._args = cbor.loads(bytes(self._from_fbs.ArgsAsBytes())) + return self._args + + @args.setter + def args(self, value): + assert(value is None or type(value) in [list, tuple]) + self._args = value + + @property + def kwargs(self): + if self._kwargs is None and self._from_fbs: + if self._from_fbs.KwargsLength(): + self._kwargs = cbor.loads(bytes(self._from_fbs.KwargsAsBytes())) + return self._kwargs + + @kwargs.setter + def kwargs(self, value): + assert(value is None or type(value) == dict) + self._kwargs = value + + @property + def payload(self): + if self._payload is None and self._from_fbs: + if self._from_fbs.PayloadLength(): + self._payload = self._from_fbs.PayloadAsBytes() + return self._payload + + @payload.setter + def payload(self, value): + assert value is None or type(value) == bytes + self._payload = value + + @property + def acknowledge(self): + if self._acknowledge is None and self._from_fbs: + acknowledge = self._from_fbs.Acknowledge() + if acknowledge: + self._acknowledge = acknowledge + return self._acknowledge + + @acknowledge.setter + def acknowledge(self, value): + assert value is None or type(value) == bool + self._acknowledge = value + + @property + def exclude_me(self): + if self._exclude_me is None and self._from_fbs: + exclude_me = self._from_fbs.ExcludeMe() + if exclude_me is False: + self._exclude_me = exclude_me + return self._exclude_me + + @exclude_me.setter + def exclude_me(self, value): + assert value is None or type(value) == bool + self._exclude_me = value + + @property + def exclude(self): + if self._exclude is None and self._from_fbs: + if self._from_fbs.ExcludeLength(): + exclude = [] + for j in range(self._from_fbs.ExcludeLength()): + exclude.append(self._from_fbs.Exclude(j)) + self._exclude = exclude + return self._exclude + + @exclude.setter + def exclude(self, value): + assert value is None or type(value) == list + if value: + for x in value: + assert type(x) == int + self._exclude = value + + @property + def exclude_authid(self): + if self._exclude_authid is None and self._from_fbs: + if self._from_fbs.ExcludeAuthidLength(): + exclude_authid = [] + for j in range(self._from_fbs.ExcludeAuthidLength()): + exclude_authid.append(self._from_fbs.ExcludeAuthid(j).decode('utf8')) + self._exclude_authid = exclude_authid + return self._exclude_authid + + @exclude_authid.setter + def exclude_authid(self, value): + assert value is None or type(value) == list + if value: + for x in value: + assert type(x) == str + self._exclude_authid = value + + @property + def exclude_authrole(self): + if self._exclude_authrole is None and self._from_fbs: + if self._from_fbs.ExcludeAuthroleLength(): + exclude_authrole = [] + for j in range(self._from_fbs.ExcludeAuthroleLength()): + exclude_authrole.append(self._from_fbs.ExcludeAuthrole(j).decode('utf8')) + self._exclude_authrole = exclude_authrole + return self._exclude_authrole + + @exclude_authrole.setter + def exclude_authrole(self, value): + assert value is None or type(value) == list + if value: + for x in value: + assert type(x) == str + self._exclude_authrole = value + + @property + def eligible(self): + if self._eligible is None and self._from_fbs: + if self._from_fbs.EligibleLength(): + eligible = [] + for j in range(self._from_fbs.EligibleLength()): + eligible.append(self._from_fbs.Eligible(j)) + self._eligible = eligible + return self._eligible + + @eligible.setter + def eligible(self, value): + assert value is None or type(value) == list + if value: + for x in value: + assert type(x) == int + self._eligible = value + + @property + def eligible_authid(self): + if self._eligible_authid is None and self._from_fbs: + if self._from_fbs.EligibleAuthidLength(): + eligible_authid = [] + for j in range(self._from_fbs.EligibleAuthidLength()): + eligible_authid.append(self._from_fbs.EligibleAuthid(j).decode('utf8')) + self._eligible_authid = eligible_authid + return self._eligible_authid + + @eligible_authid.setter + def eligible_authid(self, value): + assert value is None or type(value) == list + if value: + for x in value: + assert type(x) == str + self._eligible_authid = value + + @property + def eligible_authrole(self): + if self._eligible_authrole is None and self._from_fbs: + if self._from_fbs.EligibleAuthroleLength(): + eligible_authrole = [] + for j in range(self._from_fbs.EligibleAuthroleLength()): + eligible_authrole.append(self._from_fbs.EligibleAuthrole(j).decode('utf8')) + self._eligible_authrole = eligible_authrole + return self._eligible_authrole + + @eligible_authrole.setter + def eligible_authrole(self, value): + assert value is None or type(value) == list + if value: + for x in value: + assert type(x) == str + self._eligible_authrole = value + + @property + def retain(self): + if self._retain is None and self._from_fbs: + retain = self._from_fbs.Retain() + if retain: + self._retain = retain + return self._retain + + @retain.setter + def retain(self, value): + assert value is None or type(value) == bool + self._retain = value + + @property + def enc_algo(self): + if self._enc_algo is None and self._from_fbs: + enc_algo = self._from_fbs.EncAlgo() + if enc_algo: + self._enc_algo = enc_algo + return self._enc_algo + + @enc_algo.setter + def enc_algo(self, value): + assert value is None or value in [ENC_ALGO_CRYPTOBOX, ENC_ALGO_MQTT, ENC_ALGO_XBR] + self._enc_algo = value + + @property + def enc_key(self): + if self._enc_key is None and self._from_fbs: + if self._from_fbs.EncKeyLength(): + self._enc_key = self._from_fbs.EncKeyAsBytes() + return self._enc_key + + @enc_key.setter + def enc_key(self, value): + assert value is None or type(value) == bytes + self._enc_key = value + + @property + def enc_serializer(self): + if self._enc_serializer is None and self._from_fbs: + enc_serializer = self._from_fbs.EncSerializer() + if enc_serializer: + self._enc_serializer = enc_serializer + return self._enc_serializer + + @enc_serializer.setter + def enc_serializer(self, value): + assert value is None or value in [ENC_SER_JSON, ENC_SER_MSGPACK, ENC_SER_CBOR, ENC_SER_UBJSON] + self._enc_serializer = value + + @property + def forward_for(self): + # FIXME + return self._forward_for + + @forward_for.setter + def forward_for(self, value): + # FIXME + self._forward_for = value + + @staticmethod + def cast(buf): + return Publish(from_fbs=message_fbs.Publish.GetRootAsPublish(buf, 0)) + + def build(self, builder): + + args = self.args + if args: + args = builder.CreateByteVector(cbor.dumps(args)) + + kwargs = self.kwargs + if kwargs: + kwargs = builder.CreateByteVector(cbor.dumps(kwargs)) + + payload = self.payload + if payload: + payload = builder.CreateByteVector(payload) + + topic = self.topic + if topic: + topic = builder.CreateString(topic) + + enc_key = self.enc_key + if enc_key: + enc_key = builder.CreateByteVector(enc_key) + + # exclude: [int] + exclude = self.exclude + if exclude: + message_fbs.PublishGen.PublishStartExcludeAuthidVector(builder, len(exclude)) + for session in reversed(exclude): + builder.PrependUint64(session) + exclude = builder.EndVector(len(exclude)) + + # exclude_authid: [string] + exclude_authid = self.exclude_authid + if exclude_authid: + _exclude_authid = [] + for authid in exclude_authid: + _exclude_authid.append(builder.CreateString(authid)) + message_fbs.PublishGen.PublishStartExcludeAuthidVector(builder, len(_exclude_authid)) + for o in reversed(_exclude_authid): + builder.PrependUOffsetTRelative(o) + exclude_authid = builder.EndVector(len(_exclude_authid)) + + # exclude_authrole: [string] + exclude_authrole = self.exclude_authrole + if exclude_authid: + _exclude_authrole = [] + for authrole in exclude_authrole: + _exclude_authrole.append(builder.CreateString(authrole)) + message_fbs.PublishGen.PublishStartExcludeAuthroleVector(builder, len(_exclude_authrole)) + for o in reversed(_exclude_authrole): + builder.PrependUOffsetTRelative(o) + exclude_authrole = builder.EndVector(len(_exclude_authrole)) + + # eligible: [int] + eligible = self.eligible + if eligible: + message_fbs.PublishGen.PublishStartEligibleAuthidVector(builder, len(eligible)) + for session in reversed(eligible): + builder.PrependUint64(session) + eligible = builder.EndVector(len(eligible)) + + # eligible_authid: [string] + eligible_authid = self.eligible_authid + if eligible_authid: + _eligible_authid = [] + for authid in eligible_authid: + _eligible_authid.append(builder.CreateString(authid)) + message_fbs.PublishGen.PublishStartEligibleAuthidVector(builder, len(_eligible_authid)) + for o in reversed(_eligible_authid): + builder.PrependUOffsetTRelative(o) + eligible_authid = builder.EndVector(len(_eligible_authid)) + + # eligible_authrole: [string] + eligible_authrole = self.eligible_authrole + if eligible_authrole: + _eligible_authrole = [] + for authrole in eligible_authrole: + _eligible_authrole.append(builder.CreateString(authrole)) + message_fbs.PublishGen.PublishStartEligibleAuthroleVector(builder, len(_eligible_authrole)) + for o in reversed(_eligible_authrole): + builder.PrependUOffsetTRelative(o) + eligible_authrole = builder.EndVector(len(_eligible_authrole)) + + # now start and build a new object .. + message_fbs.PublishGen.PublishStart(builder) + + if self.request is not None: + message_fbs.PublishGen.PublishAddRequest(builder, self.request) + + if topic: + message_fbs.PublishGen.PublishAddTopic(builder, topic) + + if args: + message_fbs.PublishGen.PublishAddArgs(builder, args) + if kwargs: + message_fbs.PublishGen.PublishAddKwargs(builder, kwargs) + if payload: + message_fbs.PublishGen.PublishAddPayload(builder, payload) + + if self.acknowledge is not None: + message_fbs.PublishGen.PublishAddAcknowledge(builder, self.acknowledge) + if self.retain is not None: + message_fbs.PublishGen.PublishAddRetain(builder, self.retain) + if self.exclude_me is not None: + message_fbs.PublishGen.PublishAddExcludeMe(builder, self.exclude_me) + + if exclude: + message_fbs.PublishGen.PublishAddExclude(builder, exclude) + if exclude_authid: + message_fbs.PublishGen.PublishAddExcludeAuthid(builder, exclude_authid) + if exclude_authrole: + message_fbs.PublishGen.PublishAddExcludeAuthrole(builder, exclude_authrole) + + if eligible: + message_fbs.PublishGen.PublishAddEligible(builder, eligible) + if eligible_authid: + message_fbs.PublishGen.PublishAddEligibleAuthid(builder, eligible_authid) + if eligible_authrole: + message_fbs.PublishGen.PublishAddEligibleAuthrole(builder, eligible_authrole) + + if self.enc_algo: + message_fbs.PublishGen.PublishAddEncAlgo(builder, self.enc_algo) + if enc_key: + message_fbs.PublishGen.PublishAddEncKey(builder, enc_key) + if self.enc_serializer: + message_fbs.PublishGen.PublishAddEncSerializer(builder, self.enc_serializer) + + # FIXME: add forward_for + + msg = message_fbs.PublishGen.PublishEnd(builder) + + message_fbs.Message.MessageStart(builder) + message_fbs.Message.MessageAddMsgType(builder, message_fbs.MessageType.PUBLISH) + message_fbs.Message.MessageAddMsg(builder, msg) + union_msg = message_fbs.Message.MessageEnd(builder) + + return union_msg + + @staticmethod + def parse(wmsg): + """ + Verifies and parses an unserialized raw message into an actual WAMP message instance. + + :param wmsg: The unserialized raw message. + :type wmsg: list + + :returns: An instance of this class. + """ + # this should already be verified by WampSerializer.unserialize + assert(len(wmsg) > 0 and wmsg[0] == Publish.MESSAGE_TYPE) + + if len(wmsg) not in (4, 5, 6): + raise ProtocolError("invalid message length {0} for PUBLISH".format(len(wmsg))) + + request = check_or_raise_id(wmsg[1], u"'request' in PUBLISH") + options = check_or_raise_extra(wmsg[2], u"'options' in PUBLISH") + topic = check_or_raise_uri(wmsg[3], u"'topic' in PUBLISH") + + args = None + kwargs = None + payload = None + + if len(wmsg) == 5 and type(wmsg[4]) in [six.text_type, six.binary_type]: + + payload = wmsg[4] + + enc_algo = options.get(u'enc_algo', None) + if enc_algo and not is_valid_enc_algo(enc_algo): + raise ProtocolError("invalid value {0} for 'enc_algo' option in PUBLISH".format(enc_algo)) + + enc_key = options.get(u'enc_key', None) + if enc_key and type(enc_key) != six.text_type: + raise ProtocolError("invalid type {0} for 'enc_key' option in PUBLISH".format(type(enc_key))) + + enc_serializer = options.get(u'enc_serializer', None) + if enc_serializer and not is_valid_enc_serializer(enc_serializer): + raise ProtocolError("invalid value {0} for 'enc_serializer' option in PUBLISH".format(enc_serializer)) + + else: + if len(wmsg) > 4: + args = wmsg[4] + if type(args) not in [list, six.text_type, six.binary_type]: + raise ProtocolError("invalid type {0} for 'args' in PUBLISH".format(type(args))) + + if len(wmsg) > 5: + kwargs = wmsg[5] + if type(kwargs) not in [dict, six.text_type, six.binary_type]: + raise ProtocolError("invalid type {0} for 'kwargs' in PUBLISH".format(type(kwargs))) + + enc_algo = None + enc_key = None + enc_serializer = None + + acknowledge = None + exclude_me = None + exclude = None + exclude_authid = None + exclude_authrole = None + eligible = None + eligible_authid = None + eligible_authrole = None + retain = None + forward_for = None + + if u'acknowledge' in options: + + option_acknowledge = options[u'acknowledge'] + if type(option_acknowledge) != bool: + raise ProtocolError("invalid type {0} for 'acknowledge' option in PUBLISH".format(type(option_acknowledge))) + + acknowledge = option_acknowledge + + if u'exclude_me' in options: + + option_exclude_me = options[u'exclude_me'] + if type(option_exclude_me) != bool: + raise ProtocolError("invalid type {0} for 'exclude_me' option in PUBLISH".format(type(option_exclude_me))) + + exclude_me = option_exclude_me + + if u'exclude' in options: + + option_exclude = options[u'exclude'] + if type(option_exclude) != list: + raise ProtocolError("invalid type {0} for 'exclude' option in PUBLISH".format(type(option_exclude))) + + for _sessionid in option_exclude: + if type(_sessionid) not in six.integer_types: + raise ProtocolError("invalid type {0} for value in 'exclude' option in PUBLISH".format(type(_sessionid))) + + exclude = option_exclude + + if u'exclude_authid' in options: + + option_exclude_authid = options[u'exclude_authid'] + if type(option_exclude_authid) != list: + raise ProtocolError("invalid type {0} for 'exclude_authid' option in PUBLISH".format(type(option_exclude_authid))) + + for _authid in option_exclude_authid: + if type(_authid) != six.text_type: + raise ProtocolError("invalid type {0} for value in 'exclude_authid' option in PUBLISH".format(type(_authid))) + + exclude_authid = option_exclude_authid + + if u'exclude_authrole' in options: + + option_exclude_authrole = options[u'exclude_authrole'] + if type(option_exclude_authrole) != list: + raise ProtocolError("invalid type {0} for 'exclude_authrole' option in PUBLISH".format(type(option_exclude_authrole))) + + for _authrole in option_exclude_authrole: + if type(_authrole) != six.text_type: + raise ProtocolError("invalid type {0} for value in 'exclude_authrole' option in PUBLISH".format(type(_authrole))) + + exclude_authrole = option_exclude_authrole + + if u'eligible' in options: + + option_eligible = options[u'eligible'] + if type(option_eligible) != list: + raise ProtocolError("invalid type {0} for 'eligible' option in PUBLISH".format(type(option_eligible))) + + for sessionId in option_eligible: + if type(sessionId) not in six.integer_types: + raise ProtocolError("invalid type {0} for value in 'eligible' option in PUBLISH".format(type(sessionId))) + + eligible = option_eligible + + if u'eligible_authid' in options: + + option_eligible_authid = options[u'eligible_authid'] + if type(option_eligible_authid) != list: + raise ProtocolError("invalid type {0} for 'eligible_authid' option in PUBLISH".format(type(option_eligible_authid))) + + for _authid in option_eligible_authid: + if type(_authid) != six.text_type: + raise ProtocolError("invalid type {0} for value in 'eligible_authid' option in PUBLISH".format(type(_authid))) + + eligible_authid = option_eligible_authid + + if u'eligible_authrole' in options: + + option_eligible_authrole = options[u'eligible_authrole'] + if type(option_eligible_authrole) != list: + raise ProtocolError("invalid type {0} for 'eligible_authrole' option in PUBLISH".format(type(option_eligible_authrole))) + + for _authrole in option_eligible_authrole: + if type(_authrole) != six.text_type: + raise ProtocolError("invalid type {0} for value in 'eligible_authrole' option in PUBLISH".format(type(_authrole))) + + eligible_authrole = option_eligible_authrole + + if u'retain' in options: + retain = options[u'retain'] + if type(retain) != bool: + raise ProtocolError("invalid type {0} for 'retain' option in PUBLISH".format(type(retain))) + + if u'forward_for' in options: + forward_for = options[u'forward_for'] + valid = False + if type(forward_for) == list: + for ff in forward_for: + if type(ff) != dict: + break + if 'session' not in ff or type(ff['session']) not in six.integer_types: + break + if 'authid' not in ff or type(ff['authid']) != six.text_type: + break + if 'authrole' not in ff or type(ff['authrole']) != six.text_type: + break + valid = True + + if not valid: + raise ProtocolError("invalid type/value {0} for/within 'forward_for' option in PUBLISH") + + obj = Publish(request, + topic, + args=args, + kwargs=kwargs, + payload=payload, + acknowledge=acknowledge, + exclude_me=exclude_me, + exclude=exclude, + exclude_authid=exclude_authid, + exclude_authrole=exclude_authrole, + eligible=eligible, + eligible_authid=eligible_authid, + eligible_authrole=eligible_authrole, + retain=retain, + enc_algo=enc_algo, + enc_key=enc_key, + enc_serializer=enc_serializer, + forward_for=forward_for) + + return obj + + def marshal_options(self): + options = {} + + if self.acknowledge is not None: + options[u'acknowledge'] = self.acknowledge + + if self.exclude_me is not None: + options[u'exclude_me'] = self.exclude_me + if self.exclude is not None: + options[u'exclude'] = self.exclude + if self.exclude_authid is not None: + options[u'exclude_authid'] = self.exclude_authid + if self.exclude_authrole is not None: + options[u'exclude_authrole'] = self.exclude_authrole + if self.eligible is not None: + options[u'eligible'] = self.eligible + if self.eligible_authid is not None: + options[u'eligible_authid'] = self.eligible_authid + if self.eligible_authrole is not None: + options[u'eligible_authrole'] = self.eligible_authrole + if self.retain is not None: + options[u'retain'] = self.retain + + if self.payload: + if self.enc_algo is not None: + options[u'enc_algo'] = self.enc_algo + if self.enc_key is not None: + options[u'enc_key'] = self.enc_key + if self.enc_serializer is not None: + options[u'enc_serializer'] = self.enc_serializer + + if self.forward_for is not None: + options[u'forward_for'] = self.forward_for + + return options + + def marshal(self): + """ + Marshal this object into a raw message for subsequent serialization to bytes. + + :returns: The serialized raw message. + :rtype: list + """ + options = self.marshal_options() + + if self.payload: + return [Publish.MESSAGE_TYPE, self.request, options, self.topic, self.payload] + else: + if self.kwargs: + return [Publish.MESSAGE_TYPE, self.request, options, self.topic, self.args, self.kwargs] + elif self.args: + return [Publish.MESSAGE_TYPE, self.request, options, self.topic, self.args] + else: + return [Publish.MESSAGE_TYPE, self.request, options, self.topic] + + def __str__(self): + """ + Returns string representation of this message. + """ + return u"Publish(request={}, topic={}, args={}, kwargs={}, acknowledge={}, exclude_me={}, exclude={}, exclude_authid={}, exclude_authrole={}, eligible={}, eligible_authid={}, eligible_authrole={}, retain={}, enc_algo={}, enc_key={}, enc_serializer={}, payload={}, forward_for={})".format(self.request, self.topic, self.args, self.kwargs, self.acknowledge, self.exclude_me, self.exclude, self.exclude_authid, self.exclude_authrole, self.eligible, self.eligible_authid, self.eligible_authrole, self.retain, self.enc_algo, self.enc_key, self.enc_serializer, b2a(self.payload), self.forward_for) + + +class Published(Message): + """ + A WAMP ``PUBLISHED`` message. + + Format: ``[PUBLISHED, PUBLISH.Request|id, Publication|id]`` + """ + + MESSAGE_TYPE = 17 + """ + The WAMP message code for this type of message. + """ + + __slots__ = ( + 'request', + 'publication', + ) + + def __init__(self, request, publication): + """ + + :param request: The request ID of the original `PUBLISH` request. + :type request: int + + :param publication: The publication ID for the published event. + :type publication: int + """ + assert(type(request) in six.integer_types) + assert(type(publication) in six.integer_types) + + Message.__init__(self) + self.request = request + self.publication = publication + + @staticmethod + def parse(wmsg): + """ + Verifies and parses an unserialized raw message into an actual WAMP message instance. + + :param wmsg: The unserialized raw message. + :type wmsg: list + + :returns: An instance of this class. + """ + # this should already be verified by WampSerializer.unserialize + assert(len(wmsg) > 0 and wmsg[0] == Published.MESSAGE_TYPE) + + if len(wmsg) != 3: + raise ProtocolError("invalid message length {0} for PUBLISHED".format(len(wmsg))) + + request = check_or_raise_id(wmsg[1], u"'request' in PUBLISHED") + publication = check_or_raise_id(wmsg[2], u"'publication' in PUBLISHED") + + obj = Published(request, publication) + + return obj + + def marshal(self): + """ + Marshal this object into a raw message for subsequent serialization to bytes. + + :returns: The serialized raw message. + :rtype: list + """ + return [Published.MESSAGE_TYPE, self.request, self.publication] + + def __str__(self): + """ + Returns string representation of this message. + """ + return u"Published(request={0}, publication={1})".format(self.request, self.publication) + + +class Subscribe(Message): + """ + A WAMP ``SUBSCRIBE`` message. + + Format: ``[SUBSCRIBE, Request|id, Options|dict, Topic|uri]`` + """ + + MESSAGE_TYPE = 32 + """ + The WAMP message code for this type of message. + """ + + MATCH_EXACT = u'exact' + MATCH_PREFIX = u'prefix' + MATCH_WILDCARD = u'wildcard' + + __slots__ = ( + 'request', + 'topic', + 'match', + 'get_retained', + 'forward_for', + ) + + def __init__(self, + request, + topic, + match=None, + get_retained=None, + forward_for=None): + """ + + :param request: The WAMP request ID of this request. + :type request: int + + :param topic: The WAMP or application URI of the PubSub topic to subscribe to. + :type topic: str + + :param match: The topic matching method to be used for the subscription. + :type match: str + + :param get_retained: Whether the client wants the retained message we may have along with the subscription. + :type get_retained: bool or None + + :param forward_for: When this Subscribe is forwarded over a router-to-router link, + or via an intermediary router. + :type forward_for: list[dict] + """ + assert(type(request) in six.integer_types) + assert(type(topic) == six.text_type) + assert(match is None or type(match) == six.text_type) + assert(match is None or match in [Subscribe.MATCH_EXACT, Subscribe.MATCH_PREFIX, Subscribe.MATCH_WILDCARD]) + assert(get_retained is None or type(get_retained) is bool) + assert(forward_for is None or type(forward_for) == list) + if forward_for: + for ff in forward_for: + assert type(ff) == dict + assert 'session' in ff and type(ff['session']) in six.integer_types + assert 'authid' in ff and (ff['authid'] is None or type(ff['authid']) == six.text_type) + assert 'authrole' in ff and type(ff['authrole']) == six.text_type + + Message.__init__(self) + self.request = request + self.topic = topic + self.match = match or Subscribe.MATCH_EXACT + self.get_retained = get_retained + self.forward_for = forward_for + + @staticmethod + def parse(wmsg): + """ + Verifies and parses an unserialized raw message into an actual WAMP message instance. + + :param wmsg: The unserialized raw message. + :type wmsg: list + + :returns: An instance of this class. + """ + # this should already be verified by WampSerializer.unserialize + assert(len(wmsg) > 0 and wmsg[0] == Subscribe.MESSAGE_TYPE) + + if len(wmsg) != 4: + raise ProtocolError("invalid message length {0} for SUBSCRIBE".format(len(wmsg))) + + request = check_or_raise_id(wmsg[1], u"'request' in SUBSCRIBE") + options = check_or_raise_extra(wmsg[2], u"'options' in SUBSCRIBE") + topic = check_or_raise_uri(wmsg[3], u"'topic' in SUBSCRIBE", allow_empty_components=True) + + match = Subscribe.MATCH_EXACT + get_retained = None + forward_for = None + + if u'match' in options: + + option_match = options[u'match'] + if type(option_match) != six.text_type: + raise ProtocolError("invalid type {0} for 'match' option in SUBSCRIBE".format(type(option_match))) + + if option_match not in [Subscribe.MATCH_EXACT, Subscribe.MATCH_PREFIX, Subscribe.MATCH_WILDCARD]: + raise ProtocolError("invalid value {0} for 'match' option in SUBSCRIBE".format(option_match)) + + match = option_match + + if u'get_retained' in options: + get_retained = options[u'get_retained'] + + if type(get_retained) != bool: + raise ProtocolError("invalid type {0} for 'get_retained' option in SUBSCRIBE".format(type(get_retained))) + + if u'forward_for' in options: + forward_for = options[u'forward_for'] + valid = False + if type(forward_for) == list: + for ff in forward_for: + if type(ff) != dict: + break + if 'session' not in ff or type(ff['session']) not in six.integer_types: + break + if 'authid' not in ff or type(ff['authid']) != six.text_type: + break + if 'authrole' not in ff or type(ff['authrole']) != six.text_type: + break + valid = True + + if not valid: + raise ProtocolError("invalid type/value {0} for/within 'forward_for' option in SUBSCRIBE") + + obj = Subscribe(request, topic, match=match, get_retained=get_retained, forward_for=forward_for) + + return obj + + def marshal_options(self): + options = {} + + if self.match and self.match != Subscribe.MATCH_EXACT: + options[u'match'] = self.match + + if self.get_retained is not None: + options[u'get_retained'] = self.get_retained + + if self.forward_for is not None: + options[u'forward_for'] = self.forward_for + + return options + + def marshal(self): + """ + Marshal this object into a raw message for subsequent serialization to bytes. + + :returns: The serialized raw message. + :rtype: list + """ + return [Subscribe.MESSAGE_TYPE, self.request, self.marshal_options(), self.topic] + + def __str__(self): + """ + Returns string representation of this message. + """ + return u"Subscribe(request={0}, topic={1}, match={2}, get_retained={3}, forward_for={4})".format(self.request, self.topic, self.match, self.get_retained, self.forward_for) + + +class Subscribed(Message): + """ + A WAMP ``SUBSCRIBED`` message. + + Format: ``[SUBSCRIBED, SUBSCRIBE.Request|id, Subscription|id]`` + """ + + MESSAGE_TYPE = 33 + """ + The WAMP message code for this type of message. + """ + + __slots__ = ( + 'request', + 'subscription', + ) + + def __init__(self, request, subscription): + """ + + :param request: The request ID of the original ``SUBSCRIBE`` request. + :type request: int + + :param subscription: The subscription ID for the subscribed topic (or topic pattern). + :type subscription: int + """ + assert(type(request) in six.integer_types) + assert(type(subscription) in six.integer_types) + + Message.__init__(self) + self.request = request + self.subscription = subscription + + @staticmethod + def parse(wmsg): + """ + Verifies and parses an unserialized raw message into an actual WAMP message instance. + + :param wmsg: The unserialized raw message. + :type wmsg: list + + :returns: An instance of this class. + """ + # this should already be verified by WampSerializer.unserialize + assert(len(wmsg) > 0 and wmsg[0] == Subscribed.MESSAGE_TYPE) + + if len(wmsg) != 3: + raise ProtocolError("invalid message length {0} for SUBSCRIBED".format(len(wmsg))) + + request = check_or_raise_id(wmsg[1], u"'request' in SUBSCRIBED") + subscription = check_or_raise_id(wmsg[2], u"'subscription' in SUBSCRIBED") + + obj = Subscribed(request, subscription) + + return obj + + def marshal(self): + """ + Marshal this object into a raw message for subsequent serialization to bytes. + + :returns: The serialized raw message. + :rtype: list + """ + return [Subscribed.MESSAGE_TYPE, self.request, self.subscription] + + def __str__(self): + """ + Returns string representation of this message. + """ + return u"Subscribed(request={0}, subscription={1})".format(self.request, self.subscription) + + +class Unsubscribe(Message): + """ + A WAMP ``UNSUBSCRIBE`` message. + + Formats: + + * ``[UNSUBSCRIBE, Request|id, SUBSCRIBED.Subscription|id]`` + * ``[UNSUBSCRIBE, Request|id, SUBSCRIBED.Subscription|id, Options|dict]`` + """ + + MESSAGE_TYPE = 34 + """ + The WAMP message code for this type of message. + """ + + __slots__ = ( + 'request', + 'subscription', + 'forward_for', + ) + + def __init__(self, request, subscription, forward_for=None): + """ + + :param request: The WAMP request ID of this request. + :type request: int + + :param subscription: The subscription ID for the subscription to unsubscribe from. + :type subscription: int + + :param forward_for: When this Unsubscribe is forwarded over a router-to-router link, + or via an intermediary router. + :type forward_for: list[dict] + """ + assert(type(request) in six.integer_types) + assert(type(subscription) in six.integer_types) + if forward_for: + for ff in forward_for: + assert type(ff) == dict + assert 'session' in ff and type(ff['session']) in six.integer_types + assert 'authid' in ff and (ff['authid'] is None or type(ff['authid']) == six.text_type) + assert 'authrole' in ff and type(ff['authrole']) == six.text_type + + Message.__init__(self) + self.request = request + self.subscription = subscription + self.forward_for = forward_for + + @staticmethod + def parse(wmsg): + """ + Verifies and parses an unserialized raw message into an actual WAMP message instance. + + :param wmsg: The unserialized raw message. + :type wmsg: list + + :returns: An instance of this class. + """ + # this should already be verified by WampSerializer.unserialize + assert(len(wmsg) > 0 and wmsg[0] == Unsubscribe.MESSAGE_TYPE) + + if len(wmsg) not in [3, 4]: + raise ProtocolError("invalid message length {0} for WAMP UNSUBSCRIBE".format(len(wmsg))) + + request = check_or_raise_id(wmsg[1], u"'request' in UNSUBSCRIBE") + subscription = check_or_raise_id(wmsg[2], u"'subscription' in UNSUBSCRIBE") + + options = None + if len(wmsg) > 3: + options = check_or_raise_extra(wmsg[3], u"'options' in UNSUBSCRIBE") + + forward_for = None + if options and u'forward_for' in options: + forward_for = options[u'forward_for'] + valid = False + if type(forward_for) == list: + for ff in forward_for: + if type(ff) != dict: + break + if 'session' not in ff or type(ff['session']) not in six.integer_types: + break + if 'authid' not in ff or type(ff['authid']) != six.text_type: + break + if 'authrole' not in ff or type(ff['authrole']) != six.text_type: + break + valid = True + + if not valid: + raise ProtocolError("invalid type/value {0} for/within 'forward_for' option in UNSUBSCRIBE") + + obj = Unsubscribe(request, subscription, forward_for=forward_for) + + return obj + + def marshal(self): + """ + Marshal this object into a raw message for subsequent serialization to bytes. + + :returns: The serialized raw message. + :rtype: list + """ + if self.forward_for: + options = { + u'forward_for': self.forward_for, + } + return [Unsubscribe.MESSAGE_TYPE, self.request, self.subscription, options] + else: + return [Unsubscribe.MESSAGE_TYPE, self.request, self.subscription] + + def __str__(self): + """ + Returns string representation of this message. + """ + return u"Unsubscribe(request={0}, subscription={1}, forward_for={2})".format(self.request, self.subscription, self.forward_for) + + +class Unsubscribed(Message): + """ + A WAMP ``UNSUBSCRIBED`` message. + + Formats: + + * ``[UNSUBSCRIBED, UNSUBSCRIBE.Request|id]`` + * ``[UNSUBSCRIBED, UNSUBSCRIBE.Request|id, Details|dict]`` + """ + + MESSAGE_TYPE = 35 + """ + The WAMP message code for this type of message. + """ + + __slots__ = ( + 'request', + 'subscription', + 'reason', + ) + + def __init__(self, request, subscription=None, reason=None): + """ + + :param request: The request ID of the original ``UNSUBSCRIBE`` request or + ``0`` is router triggered unsubscribe ("router revocation signaling"). + :type request: int + + :param subscription: If unsubscribe was actively triggered by router, the ID + of the subscription revoked. + :type subscription: int or None + + :param reason: The reason (an URI) for an active (router initiated) revocation. + :type reason: str or None. + """ + assert(type(request) in six.integer_types) + assert(subscription is None or type(subscription) in six.integer_types) + assert(reason is None or type(reason) == six.text_type) + assert((request != 0 and subscription is None) or (request == 0 and subscription != 0)) + + Message.__init__(self) + self.request = request + self.subscription = subscription + self.reason = reason + + @staticmethod + def parse(wmsg): + """ + Verifies and parses an unserialized raw message into an actual WAMP message instance. + + :param wmsg: The unserialized raw message. + :type wmsg: list + + :returns: An instance of this class. + """ + # this should already be verified by WampSerializer.unserialize + assert(len(wmsg) > 0 and wmsg[0] == Unsubscribed.MESSAGE_TYPE) + + if len(wmsg) not in [2, 3]: + raise ProtocolError("invalid message length {0} for UNSUBSCRIBED".format(len(wmsg))) + + request = check_or_raise_id(wmsg[1], u"'request' in UNSUBSCRIBED") + + subscription = None + reason = None + + if len(wmsg) > 2: + + details = check_or_raise_extra(wmsg[2], u"'details' in UNSUBSCRIBED") + + if u"subscription" in details: + details_subscription = details[u"subscription"] + if type(details_subscription) not in six.integer_types: + raise ProtocolError("invalid type {0} for 'subscription' detail in UNSUBSCRIBED".format(type(details_subscription))) + subscription = details_subscription + + if u"reason" in details: + reason = check_or_raise_uri(details[u"reason"], u"'reason' in UNSUBSCRIBED") + + obj = Unsubscribed(request, subscription, reason) + + return obj + + def marshal(self): + """ + Marshal this object into a raw message for subsequent serialization to bytes. + + :returns: The serialized raw message. + :rtype: list + """ + if self.reason is not None or self.subscription is not None: + details = {} + if self.reason is not None: + details[u"reason"] = self.reason + if self.subscription is not None: + details[u"subscription"] = self.subscription + return [Unsubscribed.MESSAGE_TYPE, self.request, details] + else: + return [Unsubscribed.MESSAGE_TYPE, self.request] + + def __str__(self): + """ + Returns string representation of this message. + """ + return u"Unsubscribed(request={0}, reason={1}, subscription={2})".format(self.request, self.reason, self.subscription) + + +class Event(Message): + """ + A WAMP ``EVENT`` message. + + Formats: + + * ``[EVENT, SUBSCRIBED.Subscription|id, PUBLISHED.Publication|id, Details|dict]`` + * ``[EVENT, SUBSCRIBED.Subscription|id, PUBLISHED.Publication|id, Details|dict, PUBLISH.Arguments|list]`` + * ``[EVENT, SUBSCRIBED.Subscription|id, PUBLISHED.Publication|id, Details|dict, PUBLISH.Arguments|list, PUBLISH.ArgumentsKw|dict]`` + * ``[EVENT, SUBSCRIBED.Subscription|id, PUBLISHED.Publication|id, Details|dict, PUBLISH.Payload|binary]`` + """ + + MESSAGE_TYPE = 36 + """ + The WAMP message code for this type of message. + """ + + __slots__ = ( + # uint64 + '_subscription', + + # uint64 + '_publication', + + # [uint8] + '_args', + + # [uint8] + '_kwargs', + + # [uint8] + '_payload', + + # Payload => uint8 + '_enc_algo', + + # Serializer => uint8 + '_enc_serializer', + + # [uint8] + '_enc_key', + + # uint64 + '_publisher', + + # string (principal) + '_publisher_authid', + + # string (principal) + '_publisher_authrole', + + # string (uri) + '_topic', + + # bool + '_retained', + + # bool - FIXME: rename to "acknowledge" + '_x_acknowledged_delivery', + + # [Principal] + '_forward_for', + ) + + def __init__(self, subscription=None, publication=None, args=None, kwargs=None, payload=None, + publisher=None, publisher_authid=None, publisher_authrole=None, topic=None, + retained=None, x_acknowledged_delivery=None, + enc_algo=None, enc_key=None, enc_serializer=None, forward_for=None, + from_fbs=None): + """ + + :param subscription: The subscription ID this event is dispatched under. + :type subscription: int + + :param publication: The publication ID of the dispatched event. + :type publication: int + + :param args: Positional values for application-defined exception. + Must be serializable using any serializers in use. + :type args: list or tuple or None + + :param kwargs: Keyword values for application-defined exception. + Must be serializable using any serializers in use. + :type kwargs: dict or None + + :param payload: Alternative, transparent payload. If given, ``args`` and ``kwargs`` must be left unset. + :type payload: bytes or None + + :param publisher: The WAMP session ID of the publisher. Only filled if publisher is disclosed. + :type publisher: None or int + + :param publisher_authid: The WAMP authid of the publisher. Only filled if publisher is disclosed. + :type publisher_authid: None or unicode + + :param publisher_authrole: The WAMP authrole of the publisher. Only filled if publisher is disclosed. + :type publisher_authrole: None or unicode + + :param topic: For pattern-based subscriptions, the event MUST contain the actual topic published to. + :type topic: str or None + + :param retained: Whether the message was retained by the broker on the topic, rather than just published. + :type retained: bool or None + + :param x_acknowledged_delivery: Whether this Event should be acknowledged. + :type x_acknowledged_delivery: bool or None + + :param enc_algo: If using payload transparency, the encoding algorithm that was used to encode the payload. + :type enc_algo: str or None + + :param enc_key: If using payload transparency with an encryption algorithm, the payload encryption key. + :type enc_key: str or None + + :param enc_serializer: If using payload transparency, the payload object serializer that was used encoding the payload. + :type enc_serializer: str or None + + :param forward_for: When this Event is forwarded for a client (or from an intermediary router). + :type forward_for: list[dict] + """ + assert(subscription is None or type(subscription) in six.integer_types) + assert(publication is None or type(publication) in six.integer_types) + assert(args is None or type(args) in [list, tuple]) + assert(kwargs is None or type(kwargs) == dict) + assert(payload is None or type(payload) == six.binary_type) + assert(payload is None or (payload is not None and args is None and kwargs is None)) + assert(publisher is None or type(publisher) in six.integer_types) + assert(publisher_authid is None or type(publisher_authid) == six.text_type) + assert(publisher_authrole is None or type(publisher_authrole) == six.text_type) + assert(topic is None or type(topic) == six.text_type) + assert(retained is None or type(retained) == bool) + assert(x_acknowledged_delivery is None or type(x_acknowledged_delivery) == bool) + assert(enc_algo is None or is_valid_enc_algo(enc_algo)) + assert((enc_algo is None and enc_key is None and enc_serializer is None) or (payload is not None and enc_algo is not None)) + assert(enc_key is None or type(enc_key) == six.text_type) + assert(enc_serializer is None or is_valid_enc_serializer(enc_serializer)) + + assert(forward_for is None or type(forward_for) == list) + if forward_for: + for ff in forward_for: + assert type(ff) == dict + assert 'session' in ff and type(ff['session']) in six.integer_types + assert 'authid' in ff and (ff['authid'] is None or type(ff['authid']) == six.text_type) + assert 'authrole' in ff and type(ff['authrole']) == six.text_type + + Message.__init__(self, from_fbs=from_fbs) + self._subscription = subscription + self._publication = publication + self._args = args + self._kwargs = _validate_kwargs(kwargs) + self._payload = payload + self._publisher = publisher + self._publisher_authid = publisher_authid + self._publisher_authrole = publisher_authrole + self._topic = topic + self._retained = retained + self._x_acknowledged_delivery = x_acknowledged_delivery + self._enc_algo = enc_algo + self._enc_key = enc_key + self._enc_serializer = enc_serializer + self._forward_for = forward_for + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if not Message.__eq__(self, other): + return False + if other.subscription != self.subscription: + return False + if other.publication != self.publication: + return False + if other.args != self.args: + return False + if other.kwargs != self.kwargs: + return False + if other.payload != self.payload: + return False + if other.publisher != self.publisher: + return False + if other.publisher_authid != self.publisher_authid: + return False + if other.publisher_authrole != self.publisher_authrole: + return False + if other.topic != self.topic: + return False + if other.retained != self.retained: + return False + if other.x_acknowledged_delivery != self.x_acknowledged_delivery: + return False + if other.enc_algo != self.enc_algo: + return False + if other.enc_key != self.enc_key: + return False + if other.enc_serializer != self.enc_serializer: + return False + if other.forward_for != self.forward_for: + return False + return True + + def __ne__(self, other): + return not self.__eq__(other) + + @property + def subscription(self): + if self._subscription is None and self._from_fbs: + self._subscription = self._from_fbs.Subscription() + return self._subscription + + @subscription.setter + def subscription(self, value): + assert(value is None or type(value) in six.integer_types) + self._subscription = value + + @property + def publication(self): + if self._publication is None and self._from_fbs: + self._publication = self._from_fbs.Publication() + return self._publication + + @publication.setter + def publication(self, value): + assert(value is None or type(value) in six.integer_types) + self._publication = value + + @property + def args(self): + if self._args is None and self._from_fbs: + if self._from_fbs.ArgsLength(): + self._args = cbor.loads(bytes(self._from_fbs.ArgsAsBytes())) + return self._args + + @args.setter + def args(self, value): + assert(value is None or type(value) in [list, tuple]) + self._args = value + + @property + def kwargs(self): + if self._kwargs is None and self._from_fbs: + if self._from_fbs.KwargsLength(): + self._kwargs = cbor.loads(bytes(self._from_fbs.KwargsAsBytes())) + return self._kwargs + + @kwargs.setter + def kwargs(self, value): + assert(value is None or type(value) == dict) + self._kwargs = value + + @property + def payload(self): + if self._payload is None and self._from_fbs: + if self._from_fbs.PayloadLength(): + self._payload = self._from_fbs.PayloadAsBytes() + return self._payload + + @payload.setter + def payload(self, value): + assert value is None or type(value) == bytes + self._payload = value + + @property + def publisher(self): + if self._publisher is None and self._from_fbs: + publisher = self._from_fbs.Publisher() + if publisher: + self._publisher = publisher + return self._publisher + + @publisher.setter + def publisher(self, value): + assert value is None or type(value) == int + self._publisher = value + + @property + def publisher_authid(self): + if self._publisher_authid is None and self._from_fbs: + s = self._from_fbs.PublisherAuthid() + if s: + self._publisher_authid = s.decode('utf8') + return self._publisher_authid + + @publisher_authid.setter + def publisher_authid(self, value): + assert value is None or type(value) == str + self._publisher_authid = value + + @property + def publisher_authrole(self): + if self._publisher_authrole is None and self._from_fbs: + s = self._from_fbs.PublisherAuthrole() + if s: + self._publisher_authrole = s.decode('utf8') + return self._publisher_authrole + + @publisher_authrole.setter + def publisher_authrole(self, value): + assert value is None or type(value) == str + self._publisher_authrole = value + + @property + def topic(self): + if self._topic is None and self._from_fbs: + s = self._from_fbs.Topic() + if s: + self._topic = s.decode('utf8') + return self._topic + + @topic.setter + def topic(self, value): + assert value is None or type(value) == str + self._topic = value + + @property + def retained(self): + if self._retained is None and self._from_fbs: + self._retained = self._from_fbs.Retained() + return self._retained + + @retained.setter + def retained(self, value): + assert value is None or type(value) == bool + self._retained = value + + @property + def x_acknowledged_delivery(self): + if self._x_acknowledged_delivery is None and self._from_fbs: + x_acknowledged_delivery = self._from_fbs.Acknowledge() + if x_acknowledged_delivery: + self._x_acknowledged_delivery = x_acknowledged_delivery + return self._x_acknowledged_delivery + + @x_acknowledged_delivery.setter + def x_acknowledged_delivery(self, value): + assert value is None or type(value) == bool + self._x_acknowledged_delivery = value + + @property + def enc_algo(self): + if self._enc_algo is None and self._from_fbs: + enc_algo = self._from_fbs.EncAlgo() + if enc_algo: + self._enc_algo = enc_algo + return self._enc_algo + + @enc_algo.setter + def enc_algo(self, value): + assert value is None or value in [ENC_ALGO_CRYPTOBOX, ENC_ALGO_MQTT, ENC_ALGO_XBR] + self._enc_algo = value + + @property + def enc_key(self): + if self._enc_key is None and self._from_fbs: + if self._from_fbs.EncKeyLength(): + self._enc_key = self._from_fbs.EncKeyAsBytes() + return self._enc_key + + @enc_key.setter + def enc_key(self, value): + assert value is None or type(value) == bytes + self._enc_key = value + + @property + def enc_serializer(self): + if self._enc_serializer is None and self._from_fbs: + enc_serializer = self._from_fbs.EncSerializer() + if enc_serializer: + self._enc_serializer = enc_serializer + return self._enc_serializer + + @enc_serializer.setter + def enc_serializer(self, value): + assert value is None or value in [ENC_SER_JSON, ENC_SER_MSGPACK, ENC_SER_CBOR, ENC_SER_UBJSON] + self._enc_serializer = value + + @property + def forward_for(self): + # FIXME + return self._forward_for + + @forward_for.setter + def forward_for(self, value): + # FIXME + self._forward_for = value + + @staticmethod + def cast(buf): + return Event(from_fbs=message_fbs.Event.GetRootAsEvent(buf, 0)) + + def build(self, builder): + + args = self.args + if args: + args = builder.CreateByteVector(cbor.dumps(args)) + + kwargs = self.kwargs + if kwargs: + kwargs = builder.CreateByteVector(cbor.dumps(kwargs)) + + payload = self.payload + if payload: + payload = builder.CreateByteVector(payload) + + publisher_authid = self.publisher_authid + if publisher_authid: + publisher_authid = builder.CreateString(publisher_authid) + + publisher_authrole = self.publisher_authrole + if publisher_authrole: + publisher_authrole = builder.CreateString(publisher_authrole) + + topic = self.topic + if topic: + topic = builder.CreateString(topic) + + enc_key = self.enc_key + if enc_key: + enc_key = builder.CreateByteVector(enc_key) + + message_fbs.EventGen.EventStart(builder) + + if self.subscription: + message_fbs.EventGen.EventAddSubscription(builder, self.subscription) + if self.publication: + message_fbs.EventGen.EventAddPublication(builder, self.publication) + + if args: + message_fbs.EventGen.EventAddArgs(builder, args) + if kwargs: + message_fbs.EventGen.EventAddKwargs(builder, kwargs) + if payload: + message_fbs.EventGen.EventAddPayload(builder, payload) + + if self.publisher: + message_fbs.EventGen.EventAddPublisher(builder, self.publisher) + if publisher_authid: + message_fbs.EventGen.EventAddPublisherAuthid(builder, publisher_authid) + if publisher_authrole: + message_fbs.EventGen.EventAddPublisherAuthrole(builder, publisher_authrole) + + if topic: + message_fbs.EventGen.EventAddTopic(builder, topic) + if self.retained is not None: + message_fbs.EventGen.EventAddRetained(builder, self.retained) + if self.x_acknowledged_delivery is not None: + message_fbs.EventGen.EventAddAcknowledge(builder, self.x_acknowledged_delivery) + + if self.enc_algo: + message_fbs.EventGen.EventAddEncAlgo(builder, self.enc_algo) + if enc_key: + message_fbs.EventGen.EventAddEncKey(builder, enc_key) + if self.enc_serializer: + message_fbs.EventGen.EventAddEncSerializer(builder, self.enc_serializer) + + # FIXME: add forward_for + + msg = message_fbs.EventGen.EventEnd(builder) + + message_fbs.Message.MessageStart(builder) + message_fbs.Message.MessageAddMsgType(builder, message_fbs.MessageType.EVENT) + message_fbs.Message.MessageAddMsg(builder, msg) + union_msg = message_fbs.Message.MessageEnd(builder) + + return union_msg + + @staticmethod + def parse(wmsg): + """ + Verifies and parses an unserialized raw message into an actual WAMP message instance. + + :param wmsg: The unserialized raw message. + :type wmsg: list + + :returns: An instance of this class. + """ + # this should already be verified by WampSerializer.unserialize + assert(len(wmsg) > 0 and wmsg[0] == Event.MESSAGE_TYPE) + + if len(wmsg) not in (4, 5, 6): + raise ProtocolError("invalid message length {0} for EVENT".format(len(wmsg))) + + subscription = check_or_raise_id(wmsg[1], u"'subscription' in EVENT") + publication = check_or_raise_id(wmsg[2], u"'publication' in EVENT") + details = check_or_raise_extra(wmsg[3], u"'details' in EVENT") + + args = None + kwargs = None + payload = None + enc_algo = None + enc_key = None + enc_serializer = None + + if len(wmsg) == 5 and type(wmsg[4]) == six.binary_type: + + payload = wmsg[4] + + enc_algo = details.get(u'enc_algo', None) + if enc_algo and not is_valid_enc_algo(enc_algo): + raise ProtocolError("invalid value {0} for 'enc_algo' detail in EVENT".format(enc_algo)) + + enc_key = details.get(u'enc_key', None) + if enc_key and type(enc_key) != six.text_type: + raise ProtocolError("invalid type {0} for 'enc_key' detail in EVENT".format(type(enc_key))) + + enc_serializer = details.get(u'enc_serializer', None) + if enc_serializer and not is_valid_enc_serializer(enc_serializer): + raise ProtocolError("invalid value {0} for 'enc_serializer' detail in EVENT".format(enc_serializer)) + + else: + if len(wmsg) > 4: + args = wmsg[4] + if args is not None and type(args) != list: + raise ProtocolError("invalid type {0} for 'args' in EVENT".format(type(args))) + if len(wmsg) > 5: + kwargs = wmsg[5] + if type(kwargs) != dict: + raise ProtocolError("invalid type {0} for 'kwargs' in EVENT".format(type(kwargs))) + + publisher = None + publisher_authid = None + publisher_authrole = None + topic = None + retained = None + forward_for = None + x_acknowledged_delivery = None + + if u'publisher' in details: + + detail_publisher = details[u'publisher'] + if type(detail_publisher) not in six.integer_types: + raise ProtocolError("invalid type {0} for 'publisher' detail in EVENT".format(type(detail_publisher))) + + publisher = detail_publisher + + if u'publisher_authid' in details: + + detail_publisher_authid = details[u'publisher_authid'] + if type(detail_publisher_authid) != six.text_type: + raise ProtocolError("invalid type {0} for 'publisher_authid' detail in EVENT".format(type(detail_publisher_authid))) + + publisher_authid = detail_publisher_authid + + if u'publisher_authrole' in details: + + detail_publisher_authrole = details[u'publisher_authrole'] + if type(detail_publisher_authrole) != six.text_type: + raise ProtocolError("invalid type {0} for 'publisher_authrole' detail in EVENT".format(type(detail_publisher_authrole))) + + publisher_authrole = detail_publisher_authrole + + if u'topic' in details: + + detail_topic = details[u'topic'] + if type(detail_topic) != six.text_type: + raise ProtocolError("invalid type {0} for 'topic' detail in EVENT".format(type(detail_topic))) + + topic = detail_topic + + if u'retained' in details: + retained = details[u'retained'] + if type(retained) != bool: + raise ProtocolError("invalid type {0} for 'retained' detail in EVENT".format(type(retained))) + + if u'x_acknowledged_delivery' in details: + x_acknowledged_delivery = details[u'x_acknowledged_delivery'] + if type(x_acknowledged_delivery) != bool: + raise ProtocolError("invalid type {0} for 'x_acknowledged_delivery' detail in EVENT".format(type(x_acknowledged_delivery))) + + if u'forward_for' in details: + forward_for = details[u'forward_for'] + valid = False + if type(forward_for) == list: + for ff in forward_for: + if type(ff) != dict: + break + if 'session' not in ff or type(ff['session']) not in six.integer_types: + break + if 'authid' not in ff or type(ff['authid']) != six.text_type: + break + if 'authrole' not in ff or type(ff['authrole']) != six.text_type: + break + valid = True + + if not valid: + raise ProtocolError("invalid type/value {0} for/within 'forward_for' option in EVENT") + + obj = Event(subscription, + publication, + args=args, + kwargs=kwargs, + payload=payload, + publisher=publisher, + publisher_authid=publisher_authid, + publisher_authrole=publisher_authrole, + topic=topic, + retained=retained, + x_acknowledged_delivery=x_acknowledged_delivery, + enc_algo=enc_algo, + enc_key=enc_key, + enc_serializer=enc_serializer, + forward_for=forward_for) + + return obj + + def marshal(self): + """ + Marshal this object into a raw message for subsequent serialization to bytes. + + :returns: The serialized raw message. + :rtype: list + """ + details = {} + + if self.publisher is not None: + details[u'publisher'] = self.publisher + + if self.publisher_authid is not None: + details[u'publisher_authid'] = self.publisher_authid + + if self.publisher_authrole is not None: + details[u'publisher_authrole'] = self.publisher_authrole + + if self.topic is not None: + details[u'topic'] = self.topic + + if self.retained is not None: + details[u'retained'] = self.retained + + if self.x_acknowledged_delivery is not None: + details[u'x_acknowledged_delivery'] = self.x_acknowledged_delivery + + if self.forward_for is not None: + details[u'forward_for'] = self.forward_for + + if self.payload: + if self.enc_algo is not None: + details[u'enc_algo'] = self.enc_algo + if self.enc_key is not None: + details[u'enc_key'] = self.enc_key + if self.enc_serializer is not None: + details[u'enc_serializer'] = self.enc_serializer + return [Event.MESSAGE_TYPE, self.subscription, self.publication, details, self.payload] + else: + if self.kwargs: + return [Event.MESSAGE_TYPE, self.subscription, self.publication, details, self.args, self.kwargs] + elif self.args: + return [Event.MESSAGE_TYPE, self.subscription, self.publication, details, self.args] + else: + return [Event.MESSAGE_TYPE, self.subscription, self.publication, details] + + def __str__(self): + """ + Returns string representation of this message. + """ + return u"Event(subscription={}, publication={}, args={}, kwargs={}, publisher={}, publisher_authid={}, publisher_authrole={}, topic={}, retained={}, enc_algo={}, enc_key={}, enc_serializer={}, payload={}, forward_for={})".format(self.subscription, self.publication, self.args, self.kwargs, self.publisher, self.publisher_authid, self.publisher_authrole, self.topic, self.retained, self.enc_algo, self.enc_key, self.enc_serializer, b2a(self.payload), self.forward_for) + + +class EventReceived(Message): + """ + A WAMP ``EVENT_RECEIVED`` message. + + Format: ``[EVENT_RECEIVED, EVENT.Publication|id]`` + """ + + # NOTE: Implementation-specific message! Should be 37 on ratification. + MESSAGE_TYPE = 337 + """ + The WAMP message code for this type of message. + """ + + __slots__ = ( + 'publication', + ) + + def __init__(self, publication): + """ + + :param publication: The publication ID for the sent event. + :type publication: int + """ + assert(type(publication) in six.integer_types) + + Message.__init__(self) + self.publication = publication + + @staticmethod + def parse(wmsg): + """ + Verifies and parses an unserialized raw message into an actual WAMP message instance. + + :param wmsg: The unserialized raw message. + :type wmsg: list + + :returns: An instance of this class. + """ + # this should already be verified by WampSerializer.unserialize + assert(len(wmsg) > 0 and wmsg[0] == EventReceived.MESSAGE_TYPE) + + if len(wmsg) != 2: + raise ProtocolError("invalid message length {0} for EVENT_RECEIVED".format(len(wmsg))) + + publication = check_or_raise_id(wmsg[1], u"'publication' in EVENT_RECEIVED") + + obj = EventReceived(publication) + + return obj + + def marshal(self): + """ + Marshal this object into a raw message for subsequent serialization to bytes. + + :returns: The serialized raw message. + :rtype: list + """ + return [EventReceived.MESSAGE_TYPE, self.publication] + + def __str__(self): + """ + Returns string representation of this message. + """ + return u"EventReceived(publication={})".format(self.publication) + + +class Call(Message): + """ + A WAMP ``CALL`` message. + + Formats: + + * ``[CALL, Request|id, Options|dict, Procedure|uri]`` + * ``[CALL, Request|id, Options|dict, Procedure|uri, Arguments|list]`` + * ``[CALL, Request|id, Options|dict, Procedure|uri, Arguments|list, ArgumentsKw|dict]`` + * ``[CALL, Request|id, Options|dict, Procedure|uri, Payload|binary]`` + """ + + MESSAGE_TYPE = 48 + """ + The WAMP message code for this type of message. + """ + + __slots__ = ( + 'request', + 'procedure', + 'args', + 'kwargs', + 'payload', + 'timeout', + 'receive_progress', + 'enc_algo', + 'enc_key', + 'enc_serializer', + 'caller', + 'caller_authid', + 'caller_authrole', + 'forward_for', + ) + + def __init__(self, + request, + procedure, + args=None, + kwargs=None, + payload=None, + timeout=None, + receive_progress=None, + enc_algo=None, + enc_key=None, + enc_serializer=None, + caller=None, + caller_authid=None, + caller_authrole=None, + forward_for=None): + """ + + :param request: The WAMP request ID of this request. + :type request: int + + :param procedure: The WAMP or application URI of the procedure which should be called. + :type procedure: str + + :param args: Positional values for application-defined call arguments. + Must be serializable using any serializers in use. + :type args: list or tuple or None + + :param kwargs: Keyword values for application-defined call arguments. + Must be serializable using any serializers in use. + :type kwargs: dict or None + + :param payload: Alternative, transparent payload. If given, ``args`` and ``kwargs`` must be left unset. + :type payload: bytes or None + + :param timeout: If present, let the callee automatically cancel + the call after this ms. + :type timeout: int or None + + :param receive_progress: If ``True``, indicates that the caller wants to receive + progressive call results. + :type receive_progress: bool or None + + :param enc_algo: If using payload transparency, the encoding algorithm that was used to encode the payload. + :type enc_algo: str or None + + :param enc_key: If using payload transparency with an encryption algorithm, the payload encryption key. + :type enc_key: str or None + + :param enc_serializer: If using payload transparency, the payload object serializer that was used encoding the payload. + :type enc_serializer: str or None + + :param caller: The WAMP session ID of the caller. Only filled if caller is disclosed. + :type caller: None or int + + :param caller_authid: The WAMP authid of the caller. Only filled if caller is disclosed. + :type caller_authid: None or unicode + + :param caller_authrole: The WAMP authrole of the caller. Only filled if caller is disclosed. + :type caller_authrole: None or unicode + + :param forward_for: When this Publish is forwarded for a client (or from an intermediary router). + :type forward_for: list[dict] + """ + assert(type(request) in six.integer_types) + assert(type(procedure) == six.text_type) + assert(args is None or type(args) in [list, tuple]) + assert(kwargs is None or type(kwargs) == dict) + assert(payload is None or type(payload) == six.binary_type) + assert(payload is None or (payload is not None and args is None and kwargs is None)) + assert(timeout is None or type(timeout) in six.integer_types) + assert(receive_progress is None or type(receive_progress) == bool) + + # payload transparency related knobs + assert(enc_algo is None or is_valid_enc_algo(enc_algo)) + assert(enc_key is None or type(enc_key) == six.text_type) + assert(enc_serializer is None or is_valid_enc_serializer(enc_serializer)) + assert((enc_algo is None and enc_key is None and enc_serializer is None) or (payload is not None and enc_algo is not None)) + + assert(caller is None or type(caller) in six.integer_types) + assert(caller_authid is None or type(caller_authid) == six.text_type) + assert(caller_authrole is None or type(caller_authrole) == six.text_type) + + assert(forward_for is None or type(forward_for) == list) + if forward_for: + for ff in forward_for: + assert type(ff) == dict + assert 'session' in ff and type(ff['session']) in six.integer_types + assert 'authid' in ff and (ff['authid'] is None or type(ff['authid']) == six.text_type) + assert 'authrole' in ff and type(ff['authrole']) == six.text_type + + Message.__init__(self) + self.request = request + self.procedure = procedure + self.args = args + self.kwargs = _validate_kwargs(kwargs) + self.payload = payload + self.timeout = timeout + self.receive_progress = receive_progress + + # payload transparency related knobs + self.enc_algo = enc_algo + self.enc_key = enc_key + self.enc_serializer = enc_serializer + + # message forwarding + self.caller = caller + self.caller_authid = caller_authid + self.caller_authrole = caller_authrole + self.forward_for = forward_for + + @staticmethod + def parse(wmsg): + """ + Verifies and parses an unserialized raw message into an actual WAMP message instance. + + :param wmsg: The unserialized raw message. + :type wmsg: list + + :returns: An instance of this class. + """ + # this should already be verified by WampSerializer.unserialize + assert(len(wmsg) > 0 and wmsg[0] == Call.MESSAGE_TYPE) + + if len(wmsg) not in (4, 5, 6): + raise ProtocolError("invalid message length {0} for CALL".format(len(wmsg))) + + request = check_or_raise_id(wmsg[1], u"'request' in CALL") + options = check_or_raise_extra(wmsg[2], u"'options' in CALL") + procedure = check_or_raise_uri(wmsg[3], u"'procedure' in CALL") + + args = None + kwargs = None + payload = None + enc_algo = None + enc_key = None + enc_serializer = None + + if len(wmsg) == 5 and type(wmsg[4]) in [six.text_type, six.binary_type]: + + payload = wmsg[4] + + enc_algo = options.get(u'enc_algo', None) + if enc_algo and not is_valid_enc_algo(enc_algo): + raise ProtocolError("invalid value {0} for 'enc_algo' detail in CALL".format(enc_algo)) + + enc_key = options.get(u'enc_key', None) + if enc_key and type(enc_key) != six.text_type: + raise ProtocolError("invalid type {0} for 'enc_key' detail in CALL".format(type(enc_key))) + + enc_serializer = options.get(u'enc_serializer', None) + if enc_serializer and not is_valid_enc_serializer(enc_serializer): + raise ProtocolError("invalid value {0} for 'enc_serializer' detail in CALL".format(enc_serializer)) + + else: + if len(wmsg) > 4: + args = wmsg[4] + if args is not None and type(args) != list: + raise ProtocolError("invalid type {0} for 'args' in CALL".format(type(args))) + + if len(wmsg) > 5: + kwargs = wmsg[5] + if type(kwargs) != dict: + raise ProtocolError("invalid type {0} for 'kwargs' in CALL".format(type(kwargs))) + + timeout = None + receive_progress = None + caller = None + caller_authid = None + caller_authrole = None + forward_for = None + + if u'timeout' in options: + + option_timeout = options[u'timeout'] + if type(option_timeout) not in six.integer_types: + raise ProtocolError("invalid type {0} for 'timeout' option in CALL".format(type(option_timeout))) + + if option_timeout < 0: + raise ProtocolError("invalid value {0} for 'timeout' option in CALL".format(option_timeout)) + + timeout = option_timeout + + if u'receive_progress' in options: + + option_receive_progress = options[u'receive_progress'] + if type(option_receive_progress) != bool: + raise ProtocolError("invalid type {0} for 'receive_progress' option in CALL".format(type(option_receive_progress))) + + receive_progress = option_receive_progress + + if u'caller' in options: + + option_caller = options[u'caller'] + if type(option_caller) not in six.integer_types: + raise ProtocolError("invalid type {0} for 'caller' detail in CALL".format(type(option_caller))) + + caller = option_caller + + if u'caller_authid' in options: + + option_caller_authid = options[u'caller_authid'] + if type(option_caller_authid) != six.text_type: + raise ProtocolError("invalid type {0} for 'caller_authid' detail in CALL".format(type(option_caller_authid))) + + caller_authid = option_caller_authid + + if u'caller_authrole' in options: + + option_caller_authrole = options[u'caller_authrole'] + if type(option_caller_authrole) != six.text_type: + raise ProtocolError("invalid type {0} for 'caller_authrole' detail in CALL".format(type(option_caller_authrole))) + + caller_authrole = option_caller_authrole + + if u'forward_for' in options: + forward_for = options[u'forward_for'] + valid = False + if type(forward_for) == list: + for ff in forward_for: + if type(ff) != dict: + break + if 'session' not in ff or type(ff['session']) not in six.integer_types: + break + if 'authid' not in ff or type(ff['authid']) != six.text_type: + break + if 'authrole' not in ff or type(ff['authrole']) != six.text_type: + break + valid = True + + if not valid: + raise ProtocolError("invalid type/value {0} for/within 'forward_for' option in CALL") + + obj = Call(request, + procedure, + args=args, + kwargs=kwargs, + payload=payload, + timeout=timeout, + receive_progress=receive_progress, + enc_algo=enc_algo, + enc_key=enc_key, + enc_serializer=enc_serializer, + caller=caller, + caller_authid=caller_authid, + caller_authrole=caller_authrole, + forward_for=forward_for) + + return obj + + def marshal_options(self): + options = {} + + if self.timeout is not None: + options[u'timeout'] = self.timeout + + if self.receive_progress is not None: + options[u'receive_progress'] = self.receive_progress + + if self.payload: + if self.enc_algo is not None: + options[u'enc_algo'] = self.enc_algo + if self.enc_key is not None: + options[u'enc_key'] = self.enc_key + if self.enc_serializer is not None: + options[u'enc_serializer'] = self.enc_serializer + + if self.caller is not None: + options[u'caller'] = self.caller + if self.caller_authid is not None: + options[u'caller_authid'] = self.caller_authid + if self.caller_authrole is not None: + options[u'caller_authrole'] = self.caller_authrole + + if self.forward_for is not None: + options[u'forward_for'] = self.forward_for + + return options + + def marshal(self): + """ + Marshal this object into a raw message for subsequent serialization to bytes. + + :returns: The serialized raw message. + :rtype: list + """ + options = self.marshal_options() + + if self.payload: + return [Call.MESSAGE_TYPE, self.request, options, self.procedure, self.payload] + else: + if self.kwargs: + return [Call.MESSAGE_TYPE, self.request, options, self.procedure, self.args, self.kwargs] + elif self.args: + return [Call.MESSAGE_TYPE, self.request, options, self.procedure, self.args] + else: + return [Call.MESSAGE_TYPE, self.request, options, self.procedure] + + def __str__(self): + """ + Returns string representation of this message. + """ + return u"Call(request={}, procedure={}, args={}, kwargs={}, timeout={}, receive_progress={}, enc_algo={}, enc_key={}, enc_serializer={}, payload={}, caller={}, caller_authid={}, caller_authrole={}, forward_for={})".format(self.request, self.procedure, self.args, self.kwargs, self.timeout, self.receive_progress, self.enc_algo, self.enc_key, self.enc_serializer, b2a(self.payload), self.caller, self.caller_authid, self.caller_authrole, self.forward_for) + + +class Cancel(Message): + """ + A WAMP ``CANCEL`` message. + + Format: ``[CANCEL, CALL.Request|id, Options|dict]`` + + See: https://wamp-proto.org/static/rfc/draft-oberstet-hybi-crossbar-wamp.html#rfc.section.14.3.4 + """ + + MESSAGE_TYPE = 49 + """ + The WAMP message code for this type of message. + """ + + SKIP = u'skip' + KILL = u'kill' + KILLNOWAIT = u'killnowait' + + __slots__ = ( + 'request', + 'mode', + 'forward_for', + ) + + def __init__(self, request, mode=None, forward_for=None): + """ + + :param request: The WAMP request ID of the original `CALL` to cancel. + :type request: int + + :param mode: Specifies how to cancel the call (``"skip"``, ``"killnowait"`` or ``"kill"``). + :type mode: str or None + + :param forward_for: When this Cancel is forwarded for a client (or from an intermediary router). + :type forward_for: list[dict] + """ + assert(type(request) in six.integer_types) + assert(mode is None or type(mode) == six.text_type) + assert(mode in [None, self.SKIP, self.KILLNOWAIT, self.KILL]) + assert(forward_for is None or type(forward_for) == list) + + if forward_for: + for ff in forward_for: + assert type(ff) == dict + assert 'session' in ff and type(ff['session']) in six.integer_types + assert 'authid' in ff and (ff['authid'] is None or type(ff['authid']) == six.text_type) + assert 'authrole' in ff and type(ff['authrole']) == six.text_type + + Message.__init__(self) + self.request = request + self.mode = mode + + # message forwarding + self.forward_for = forward_for + + @staticmethod + def parse(wmsg): + """ + Verifies and parses an unserialized raw message into an actual WAMP message instance. + + :param wmsg: The unserialized raw message. + :type wmsg: list + + :returns: An instance of this class. + """ + # this should already be verified by WampSerializer.unserialize + assert(len(wmsg) > 0 and wmsg[0] == Cancel.MESSAGE_TYPE) + + if len(wmsg) != 3: + raise ProtocolError("invalid message length {0} for CANCEL".format(len(wmsg))) + + request = check_or_raise_id(wmsg[1], u"'request' in CANCEL") + options = check_or_raise_extra(wmsg[2], u"'options' in CANCEL") + + # options + # + mode = None + forward_for = None + + if u'mode' in options: + + option_mode = options[u'mode'] + if type(option_mode) != six.text_type: + raise ProtocolError("invalid type {0} for 'mode' option in CANCEL".format(type(option_mode))) + + if option_mode not in [Cancel.SKIP, Cancel.KILLNOWAIT, Cancel.KILL]: + raise ProtocolError("invalid value '{0}' for 'mode' option in CANCEL".format(option_mode)) + + mode = option_mode + + if u'forward_for' in options: + forward_for = options[u'forward_for'] + valid = False + if type(forward_for) == list: + for ff in forward_for: + if type(ff) != dict: + break + if 'session' not in ff or type(ff['session']) not in six.integer_types: + break + if 'authid' not in ff or type(ff['authid']) != six.text_type: + break + if 'authrole' not in ff or type(ff['authrole']) != six.text_type: + break + valid = True + + if not valid: + raise ProtocolError("invalid type/value {0} for/within 'forward_for' option in CANCEL") + + obj = Cancel(request, mode=mode, forward_for=forward_for) + + return obj + + def marshal(self): + """ + Marshal this object into a raw message for subsequent serialization to bytes. + + :returns: The serialized raw message. + :rtype: list + """ + options = {} + + if self.mode is not None: + options[u'mode'] = self.mode + if self.forward_for is not None: + options[u'forward_for'] = self.forward_for + + return [Cancel.MESSAGE_TYPE, self.request, options] + + def __str__(self): + """ + Returns string representation of this message. + """ + return u"Cancel(request={0}, mode={1})".format(self.request, self.mode) + + +class Result(Message): + """ + A WAMP ``RESULT`` message. + + Formats: + + * ``[RESULT, CALL.Request|id, Details|dict]`` + * ``[RESULT, CALL.Request|id, Details|dict, YIELD.Arguments|list]`` + * ``[RESULT, CALL.Request|id, Details|dict, YIELD.Arguments|list, YIELD.ArgumentsKw|dict]`` + * ``[RESULT, CALL.Request|id, Details|dict, Payload|binary]`` + """ + + MESSAGE_TYPE = 50 + """ + The WAMP message code for this type of message. + """ + + __slots__ = ( + 'request', + 'args', + 'kwargs', + 'payload', + 'progress', + 'enc_algo', + 'enc_key', + 'enc_serializer', + 'callee', + 'callee_authid', + 'callee_authrole', + 'forward_for', + ) + + def __init__(self, + request, + args=None, + kwargs=None, + payload=None, + progress=None, + enc_algo=None, + enc_key=None, + enc_serializer=None, + callee=None, + callee_authid=None, + callee_authrole=None, + forward_for=None): + """ + + :param request: The request ID of the original `CALL` request. + :type request: int + + :param args: Positional values for application-defined event payload. + Must be serializable using any serializers in use. + :type args: list or tuple or None + + :param kwargs: Keyword values for application-defined event payload. + Must be serializable using any serializers in use. + :type kwargs: dict or None + + :param payload: Alternative, transparent payload. If given, ``args`` and ``kwargs`` must be left unset. + :type payload: bytes or None + + :param progress: If ``True``, this result is a progressive call result, and subsequent + results (or a final error) will follow. + :type progress: bool or None + + :param enc_algo: If using payload transparency, the encoding algorithm that was used to encode the payload. + :type enc_algo: str or None + + :param enc_key: If using payload transparency with an encryption algorithm, the payload encryption key. + :type enc_key: str or None + + :param enc_serializer: If using payload transparency, the payload object serializer that was used encoding the payload. + :type enc_serializer: str or None + + :param callee: The WAMP session ID of the effective callee that responded with the result. Only filled if callee is disclosed. + :type callee: None or int + + :param callee_authid: The WAMP authid of the responding callee. Only filled if callee is disclosed. + :type callee_authid: None or unicode + + :param callee_authrole: The WAMP authrole of the responding callee. Only filled if callee is disclosed. + :type callee_authrole: None or unicode + + :param forward_for: When this Result is forwarded for a client/callee (or from an intermediary router). + :type forward_for: list[dict] + """ + assert(type(request) in six.integer_types) + assert(args is None or type(args) in [list, tuple]) + assert(kwargs is None or type(kwargs) == dict) + assert(payload is None or type(payload) == six.binary_type) + assert(payload is None or (payload is not None and args is None and kwargs is None)) + assert(progress is None or type(progress) == bool) + + assert(enc_algo is None or is_valid_enc_algo(enc_algo)) + assert(enc_key is None or type(enc_key) == six.text_type) + assert(enc_serializer is None or is_valid_enc_serializer(enc_serializer)) + assert((enc_algo is None and enc_key is None and enc_serializer is None) or (payload is not None and enc_algo is not None)) + + assert(callee is None or type(callee) in six.integer_types) + assert(callee_authid is None or type(callee_authid) == six.text_type) + assert(callee_authrole is None or type(callee_authrole) == six.text_type) + + assert(forward_for is None or type(forward_for) == list) + if forward_for: + for ff in forward_for: + assert type(ff) == dict + assert 'session' in ff and type(ff['session']) in six.integer_types + assert 'authid' in ff and (ff['authid'] is None or type(ff['authid']) == six.text_type) + assert 'authrole' in ff and type(ff['authrole']) == six.text_type + + Message.__init__(self) + self.request = request + self.args = args + self.kwargs = _validate_kwargs(kwargs) + self.payload = payload + self.progress = progress + + # payload transparency related knobs + self.enc_algo = enc_algo + self.enc_key = enc_key + self.enc_serializer = enc_serializer + + # effective callee that responded with the result + self.callee = callee + self.callee_authid = callee_authid + self.callee_authrole = callee_authrole + + # message forwarding + self.forward_for = forward_for + + @staticmethod + def parse(wmsg): + """ + Verifies and parses an unserialized raw message into an actual WAMP message instance. + + :param wmsg: The unserialized raw message. + :type wmsg: list + + :returns: An instance of this class. + """ + # this should already be verified by WampSerializer.unserialize + assert(len(wmsg) > 0 and wmsg[0] == Result.MESSAGE_TYPE) + + if len(wmsg) not in (3, 4, 5): + raise ProtocolError("invalid message length {0} for RESULT".format(len(wmsg))) + + request = check_or_raise_id(wmsg[1], u"'request' in RESULT") + details = check_or_raise_extra(wmsg[2], u"'details' in RESULT") + + args = None + kwargs = None + payload = None + progress = None + enc_algo = None + enc_key = None + enc_serializer = None + callee = None + callee_authid = None + callee_authrole = None + forward_for = None + + if len(wmsg) == 4 and type(wmsg[3]) in [six.text_type, six.binary_type]: + + payload = wmsg[3] + + enc_algo = details.get(u'enc_algo', None) + if enc_algo and not is_valid_enc_algo(enc_algo): + raise ProtocolError("invalid value {0} for 'enc_algo' detail in RESULT".format(enc_algo)) + + enc_key = details.get(u'enc_key', None) + if enc_key and type(enc_key) != six.text_type: + raise ProtocolError("invalid type {0} for 'enc_key' detail in RESULT".format(type(enc_key))) + + enc_serializer = details.get(u'enc_serializer', None) + if enc_serializer and not is_valid_enc_serializer(enc_serializer): + raise ProtocolError("invalid value {0} for 'enc_serializer' detail in RESULT".format(enc_serializer)) + + else: + if len(wmsg) > 3: + args = wmsg[3] + if args is not None and type(args) != list: + raise ProtocolError("invalid type {0} for 'args' in RESULT".format(type(args))) + + if len(wmsg) > 4: + kwargs = wmsg[4] + if type(kwargs) != dict: + raise ProtocolError("invalid type {0} for 'kwargs' in RESULT".format(type(kwargs))) + + if u'progress' in details: + + detail_progress = details[u'progress'] + if type(detail_progress) != bool: + raise ProtocolError("invalid type {0} for 'progress' option in RESULT".format(type(detail_progress))) + + progress = detail_progress + + if u'callee' in details: + + detail_callee = details[u'callee'] + if type(detail_callee) not in six.integer_types: + raise ProtocolError("invalid type {0} for 'callee' detail in RESULT".format(type(detail_callee))) + + callee = detail_callee + + if u'callee_authid' in details: + + detail_callee_authid = details[u'callee_authid'] + if type(detail_callee_authid) != six.text_type: + raise ProtocolError("invalid type {0} for 'callee_authid' detail in RESULT".format(type(detail_callee_authid))) + + callee_authid = detail_callee_authid + + if u'callee_authrole' in details: + + detail_callee_authrole = details[u'callee_authrole'] + if type(detail_callee_authrole) != six.text_type: + raise ProtocolError("invalid type {0} for 'callee_authrole' detail in RESULT".format(type(detail_callee_authrole))) + + callee_authrole = detail_callee_authrole + + if u'forward_for' in details: + forward_for = details[u'forward_for'] + valid = False + if type(forward_for) == list: + for ff in forward_for: + if type(ff) != dict: + break + if 'session' not in ff or type(ff['session']) not in six.integer_types: + break + if 'authid' not in ff or type(ff['authid']) != six.text_type: + break + if 'authrole' not in ff or type(ff['authrole']) != six.text_type: + break + valid = True + + if not valid: + raise ProtocolError("invalid type/value {0} for/within 'forward_for' option in RESULT") + + obj = Result(request, + args=args, + kwargs=kwargs, + payload=payload, + progress=progress, + enc_algo=enc_algo, + enc_key=enc_key, + enc_serializer=enc_serializer, + callee=callee, + callee_authid=callee_authid, + callee_authrole=callee_authrole, + forward_for=forward_for) + + return obj + + def marshal(self): + """ + Marshal this object into a raw message for subsequent serialization to bytes. + + :returns: The serialized raw message. + :rtype: list + """ + details = {} + + if self.progress is not None: + details[u'progress'] = self.progress + + if self.callee is not None: + details[u'callee'] = self.callee + if self.callee_authid is not None: + details[u'callee_authid'] = self.callee_authid + if self.callee_authrole is not None: + details[u'callee_authrole'] = self.callee_authrole + if self.forward_for is not None: + details[u'forward_for'] = self.forward_for + + if self.payload: + if self.enc_algo is not None: + details[u'enc_algo'] = self.enc_algo + if self.enc_key is not None: + details[u'enc_key'] = self.enc_key + if self.enc_serializer is not None: + details[u'enc_serializer'] = self.enc_serializer + return [Result.MESSAGE_TYPE, self.request, details, self.payload] + else: + if self.kwargs: + return [Result.MESSAGE_TYPE, self.request, details, self.args, self.kwargs] + elif self.args: + return [Result.MESSAGE_TYPE, self.request, details, self.args] + else: + return [Result.MESSAGE_TYPE, self.request, details] + + def __str__(self): + """ + Returns string representation of this message. + """ + return u"Result(request={0}, args={1}, kwargs={2}, progress={3}, enc_algo={4}, enc_key={5}, enc_serializer={6}, payload={7}, callee={8}, callee_authid={9}, callee_authrole={10}, forward_for={11})".format(self.request, self.args, self.kwargs, self.progress, self.enc_algo, self.enc_key, self.enc_serializer, b2a(self.payload), self.callee, self.callee_authid, self.callee_authrole, self.forward_for) + + +class Register(Message): + """ + A WAMP ``REGISTER`` message. + + Format: ``[REGISTER, Request|id, Options|dict, Procedure|uri]`` + """ + + MESSAGE_TYPE = 64 + """ + The WAMP message code for this type of message. + """ + + MATCH_EXACT = u'exact' + MATCH_PREFIX = u'prefix' + MATCH_WILDCARD = u'wildcard' + + INVOKE_SINGLE = u'single' + INVOKE_FIRST = u'first' + INVOKE_LAST = u'last' + INVOKE_ROUNDROBIN = u'roundrobin' + INVOKE_RANDOM = u'random' + INVOKE_ALL = u'all' + + __slots__ = ( + 'request', + 'procedure', + 'match', + 'invoke', + 'concurrency', + 'force_reregister', + 'forward_for', + ) + + def __init__(self, + request, + procedure, + match=None, + invoke=None, + concurrency=None, + force_reregister=None, + forward_for=None): + """ + + :param request: The WAMP request ID of this request. + :type request: int + + :param procedure: The WAMP or application URI of the RPC endpoint provided. + :type procedure: str + + :param match: The procedure matching policy to be used for the registration. + :type match: str + + :param invoke: The procedure invocation policy to be used for the registration. + :type invoke: str + + :param concurrency: The (maximum) concurrency to be used for the registration. + :type concurrency: int + + :param forward_for: When this Register is forwarded over a router-to-router link, + or via an intermediary router. + :type forward_for: list[dict] + """ + assert(type(request) in six.integer_types) + assert(type(procedure) == six.text_type) + assert(match is None or type(match) == six.text_type) + assert(match is None or match in [Register.MATCH_EXACT, Register.MATCH_PREFIX, Register.MATCH_WILDCARD]) + assert(invoke is None or type(invoke) == six.text_type) + assert(invoke is None or invoke in [Register.INVOKE_SINGLE, Register.INVOKE_FIRST, Register.INVOKE_LAST, Register.INVOKE_ROUNDROBIN, Register.INVOKE_RANDOM]) + assert(concurrency is None or (type(concurrency) in six.integer_types and concurrency > 0)) + assert force_reregister in [None, True, False] + assert(forward_for is None or type(forward_for) == list) + if forward_for: + for ff in forward_for: + assert type(ff) == dict + assert 'session' in ff and type(ff['session']) in six.integer_types + assert 'authid' in ff and (ff['authid'] is None or type(ff['authid']) == six.text_type) + assert 'authrole' in ff and type(ff['authrole']) == six.text_type + + Message.__init__(self) + self.request = request + self.procedure = procedure + self.match = match or Register.MATCH_EXACT + self.invoke = invoke or Register.INVOKE_SINGLE + self.concurrency = concurrency + self.force_reregister = force_reregister + self.forward_for = forward_for + + @staticmethod + def parse(wmsg): + """ + Verifies and parses an unserialized raw message into an actual WAMP message instance. + + :param wmsg: The unserialized raw message. + :type wmsg: list + + :returns: An instance of this class. + """ + # this should already be verified by WampSerializer.unserialize + assert(len(wmsg) > 0 and wmsg[0] == Register.MESSAGE_TYPE) + + if len(wmsg) != 4: + raise ProtocolError("invalid message length {0} for REGISTER".format(len(wmsg))) + + request = check_or_raise_id(wmsg[1], u"'request' in REGISTER") + options = check_or_raise_extra(wmsg[2], u"'options' in REGISTER") + + match = Register.MATCH_EXACT + invoke = Register.INVOKE_SINGLE + concurrency = None + force_reregister = None + forward_for = None + + if u'match' in options: + + option_match = options[u'match'] + if type(option_match) != six.text_type: + raise ProtocolError("invalid type {0} for 'match' option in REGISTER".format(type(option_match))) + + if option_match not in [Register.MATCH_EXACT, Register.MATCH_PREFIX, Register.MATCH_WILDCARD]: + raise ProtocolError("invalid value {0} for 'match' option in REGISTER".format(option_match)) + + match = option_match + + if match == Register.MATCH_EXACT: + allow_empty_components = False + allow_last_empty = False + + elif match == Register.MATCH_PREFIX: + allow_empty_components = False + allow_last_empty = True + + elif match == Register.MATCH_WILDCARD: + allow_empty_components = True + allow_last_empty = False + + else: + raise Exception("logic error") + + procedure = check_or_raise_uri(wmsg[3], u"'procedure' in REGISTER", allow_empty_components=allow_empty_components, allow_last_empty=allow_last_empty) + + if u'invoke' in options: + + option_invoke = options[u'invoke'] + if type(option_invoke) != six.text_type: + raise ProtocolError("invalid type {0} for 'invoke' option in REGISTER".format(type(option_invoke))) + + if option_invoke not in [Register.INVOKE_SINGLE, Register.INVOKE_FIRST, Register.INVOKE_LAST, Register.INVOKE_ROUNDROBIN, Register.INVOKE_RANDOM]: + raise ProtocolError("invalid value {0} for 'invoke' option in REGISTER".format(option_invoke)) + + invoke = option_invoke + + if u'concurrency' in options: + + options_concurrency = options[u'concurrency'] + if type(options_concurrency) not in six.integer_types: + raise ProtocolError("invalid type {0} for 'concurrency' option in REGISTER".format(type(options_concurrency))) + + if options_concurrency < 1: + raise ProtocolError("invalid value {0} for 'concurrency' option in REGISTER".format(options_concurrency)) + + concurrency = options_concurrency + + options_reregister = options.get(u'force_reregister', None) + if options_reregister not in [True, False, None]: + raise ProtocolError( + "invalid type {0} for 'force_reregister option in REGISTER".format( + type(options_reregister) + ) + ) + if options_reregister is not None: + force_reregister = options_reregister + + if u'forward_for' in options: + forward_for = options[u'forward_for'] + valid = False + if type(forward_for) == list: + for ff in forward_for: + if type(ff) != dict: + break + if 'session' not in ff or type(ff['session']) not in six.integer_types: + break + if 'authid' not in ff or type(ff['authid']) != six.text_type: + break + if 'authrole' not in ff or type(ff['authrole']) != six.text_type: + break + valid = True + + if not valid: + raise ProtocolError("invalid type/value {0} for/within 'forward_for' option in REGISTER") + + obj = Register(request, procedure, match=match, invoke=invoke, concurrency=concurrency, + force_reregister=force_reregister, forward_for=forward_for) + + return obj + + def marshal_options(self): + options = {} + + if self.match and self.match != Register.MATCH_EXACT: + options[u'match'] = self.match + + if self.invoke and self.invoke != Register.INVOKE_SINGLE: + options[u'invoke'] = self.invoke + + if self.concurrency: + options[u'concurrency'] = self.concurrency + + if self.force_reregister is not None: + options[u'force_reregister'] = self.force_reregister + + if self.forward_for is not None: + options[u'forward_for'] = self.forward_for + + return options + + def marshal(self): + """ + Marshal this object into a raw message for subsequent serialization to bytes. + + :returns: The serialized raw message. + :rtype: list + """ + return [Register.MESSAGE_TYPE, self.request, self.marshal_options(), self.procedure] + + def __str__(self): + """ + Returns string representation of this message. + """ + return u"Register(request={0}, procedure={1}, match={2}, invoke={3}, concurrency={4}, force_reregister={5}, forward_for={6})".format(self.request, self.procedure, self.match, self.invoke, self.concurrency, self.force_reregister, self.forward_for) + + +class Registered(Message): + """ + A WAMP ``REGISTERED`` message. + + Format: ``[REGISTERED, REGISTER.Request|id, Registration|id]`` + """ + + MESSAGE_TYPE = 65 + """ + The WAMP message code for this type of message. + """ + + __slots__ = ( + 'request', + 'registration', + ) + + def __init__(self, request, registration): + """ + + :param request: The request ID of the original ``REGISTER`` request. + :type request: int + + :param registration: The registration ID for the registered procedure (or procedure pattern). + :type registration: int + """ + assert(type(request) in six.integer_types) + assert(type(registration) in six.integer_types) + + Message.__init__(self) + self.request = request + self.registration = registration + + @staticmethod + def parse(wmsg): + """ + Verifies and parses an unserialized raw message into an actual WAMP message instance. + + :param wmsg: The unserialized raw message. + :type wmsg: list + + :returns: An instance of this class. + """ + # this should already be verified by WampSerializer.unserialize + assert(len(wmsg) > 0 and wmsg[0] == Registered.MESSAGE_TYPE) + + if len(wmsg) != 3: + raise ProtocolError("invalid message length {0} for REGISTERED".format(len(wmsg))) + + request = check_or_raise_id(wmsg[1], u"'request' in REGISTERED") + registration = check_or_raise_id(wmsg[2], u"'registration' in REGISTERED") + + obj = Registered(request, registration) + + return obj + + def marshal(self): + """ + Marshal this object into a raw message for subsequent serialization to bytes. + + :returns: The serialized raw message. + :rtype: list + """ + return [Registered.MESSAGE_TYPE, self.request, self.registration] + + def __str__(self): + """ + Returns string representation of this message. + """ + return u"Registered(request={0}, registration={1})".format(self.request, self.registration) + + +class Unregister(Message): + """ + A WAMP `UNREGISTER` message. + + Formats: + + * ``[UNREGISTER, Request|id, REGISTERED.Registration|id]`` + * ``[UNREGISTER, Request|id, REGISTERED.Registration|id, Options|dict]`` + """ + + MESSAGE_TYPE = 66 + """ + The WAMP message code for this type of message. + """ + + __slots__ = ( + 'request', + 'registration', + 'forward_for', + ) + + def __init__(self, request, registration, forward_for=None): + """ + + :param request: The WAMP request ID of this request. + :type request: int + + :param registration: The registration ID for the registration to unregister. + :type registration: int + + :param forward_for: When this Unregister is forwarded over a router-to-router link, + or via an intermediary router. + :type forward_for: list[dict] + """ + assert(type(request) in six.integer_types) + assert(type(registration) in six.integer_types) + + Message.__init__(self) + self.request = request + self.registration = registration + self.forward_for = forward_for + + @staticmethod + def parse(wmsg): + """ + Verifies and parses an unserialized raw message into an actual WAMP message instance. + + :param wmsg: The unserialized raw message. + :type wmsg: list + + :returns: An instance of this class. + """ + # this should already be verified by WampSerializer.unserialize + assert(len(wmsg) > 0 and wmsg[0] == Unregister.MESSAGE_TYPE) + + if len(wmsg) not in [3, 4]: + raise ProtocolError("invalid message length {0} for WAMP UNREGISTER".format(len(wmsg))) + + request = check_or_raise_id(wmsg[1], u"'request' in UNREGISTER") + registration = check_or_raise_id(wmsg[2], u"'registration' in UNREGISTER") + + options = None + if len(wmsg) > 3: + options = check_or_raise_extra(wmsg[3], u"'options' in UNREGISTER") + + forward_for = None + if options and u'forward_for' in options: + forward_for = options[u'forward_for'] + valid = False + if type(forward_for) == list: + for ff in forward_for: + if type(ff) != dict: + break + if 'session' not in ff or type(ff['session']) not in six.integer_types: + break + if 'authid' not in ff or type(ff['authid']) != six.text_type: + break + if 'authrole' not in ff or type(ff['authrole']) != six.text_type: + break + valid = True + + if not valid: + raise ProtocolError("invalid type/value {0} for/within 'forward_for' option in UNREGISTER") + + obj = Unregister(request, registration, forward_for=forward_for) + + return obj + + def marshal(self): + """ + Marshal this object into a raw message for subsequent serialization to bytes. + + :returns: The serialized raw message. + :rtype: list + """ + if self.forward_for: + options = { + u'forward_for': self.forward_for, + } + return [Unregister.MESSAGE_TYPE, self.request, self.registration, options] + else: + return [Unregister.MESSAGE_TYPE, self.request, self.registration] + + def __str__(self): + """ + Returns string representation of this message. + """ + return u"Unregister(request={0}, registration={1})".format(self.request, self.registration) + + +class Unregistered(Message): + """ + A WAMP ``UNREGISTERED`` message. + + Formats: + + * ``[UNREGISTERED, UNREGISTER.Request|id]`` + * ``[UNREGISTERED, UNREGISTER.Request|id, Details|dict]`` + """ + + MESSAGE_TYPE = 67 + """ + The WAMP message code for this type of message. + """ + + __slots__ = ( + 'request', + 'registration', + 'reason', + ) + + def __init__(self, request, registration=None, reason=None): + """ + + :param request: The request ID of the original ``UNREGISTER`` request. + :type request: int + + :param registration: If unregister was actively triggered by router, the ID + of the registration revoked. + :type registration: int or None + + :param reason: The reason (an URI) for revocation. + :type reason: str or None. + """ + assert(type(request) in six.integer_types) + assert(registration is None or type(registration) in six.integer_types) + assert(reason is None or type(reason) == six.text_type) + assert((request != 0 and registration is None) or (request == 0 and registration != 0)) + + Message.__init__(self) + self.request = request + self.registration = registration + self.reason = reason + + @staticmethod + def parse(wmsg): + """ + Verifies and parses an unserialized raw message into an actual WAMP message instance. + + :param wmsg: The unserialized raw message. + :type wmsg: list + + :returns: An instance of this class. + """ + # this should already be verified by WampSerializer.unserialize + assert(len(wmsg) > 0 and wmsg[0] == Unregistered.MESSAGE_TYPE) + + if len(wmsg) not in [2, 3]: + raise ProtocolError("invalid message length {0} for UNREGISTERED".format(len(wmsg))) + + request = check_or_raise_id(wmsg[1], u"'request' in UNREGISTERED") + + registration = None + reason = None + + if len(wmsg) > 2: + + details = check_or_raise_extra(wmsg[2], u"'details' in UNREGISTERED") + + if u"registration" in details: + details_registration = details[u"registration"] + if type(details_registration) not in six.integer_types: + raise ProtocolError("invalid type {0} for 'registration' detail in UNREGISTERED".format(type(details_registration))) + registration = details_registration + + if u"reason" in details: + reason = check_or_raise_uri(details[u"reason"], u"'reason' in UNREGISTERED") + + obj = Unregistered(request, registration, reason) + + return obj + + def marshal(self): + """ + Marshal this object into a raw message for subsequent serialization to bytes. + + :returns: The serialized raw message. + :rtype: list + """ + if self.reason is not None or self.registration is not None: + details = {} + if self.reason is not None: + details[u"reason"] = self.reason + if self.registration is not None: + details[u"registration"] = self.registration + return [Unregistered.MESSAGE_TYPE, self.request, details] + else: + return [Unregistered.MESSAGE_TYPE, self.request] + + def __str__(self): + """ + Returns string representation of this message. + """ + return u"Unregistered(request={0}, reason={1}, registration={2})".format(self.request, self.reason, self.registration) + + +class Invocation(Message): + """ + A WAMP ``INVOCATION`` message. + + Formats: + + * ``[INVOCATION, Request|id, REGISTERED.Registration|id, Details|dict]`` + * ``[INVOCATION, Request|id, REGISTERED.Registration|id, Details|dict, CALL.Arguments|list]`` + * ``[INVOCATION, Request|id, REGISTERED.Registration|id, Details|dict, CALL.Arguments|list, CALL.ArgumentsKw|dict]`` + * ``[INVOCATION, Request|id, REGISTERED.Registration|id, Details|dict, Payload|binary]`` + """ + + MESSAGE_TYPE = 68 + """ + The WAMP message code for this type of message. + """ + + __slots__ = ( + 'request', + 'registration', + 'args', + 'kwargs', + 'payload', + 'timeout', + 'receive_progress', + 'caller', + 'caller_authid', + 'caller_authrole', + 'procedure', + 'enc_algo', + 'enc_key', + 'enc_serializer', + 'forward_for', + ) + + def __init__(self, + request, + registration, + args=None, + kwargs=None, + payload=None, + timeout=None, + receive_progress=None, + caller=None, + caller_authid=None, + caller_authrole=None, + procedure=None, + enc_algo=None, + enc_key=None, + enc_serializer=None, + forward_for=None): + """ + + :param request: The WAMP request ID of this request. + :type request: int + + :param registration: The registration ID of the endpoint to be invoked. + :type registration: int + + :param args: Positional values for application-defined event payload. + Must be serializable using any serializers in use. + :type args: list or tuple or None + + :param kwargs: Keyword values for application-defined event payload. + Must be serializable using any serializers in use. + :type kwargs: dict or None + + :param payload: Alternative, transparent payload. If given, ``args`` and ``kwargs`` must be left unset. + :type payload: bytes or None + + :param timeout: If present, let the callee automatically cancels + the invocation after this ms. + :type timeout: int or None + + :param receive_progress: Indicates if the callee should produce progressive results. + :type receive_progress: bool or None + + :param caller: The WAMP session ID of the caller. Only filled if caller is disclosed. + :type caller: None or int + + :param caller_authid: The WAMP authid of the caller. Only filled if caller is disclosed. + :type caller_authid: None or unicode + + :param caller_authrole: The WAMP authrole of the caller. Only filled if caller is disclosed. + :type caller_authrole: None or unicode + + :param procedure: For pattern-based registrations, the invocation MUST include the actual procedure being called. + :type procedure: str or None + + :param enc_algo: If using payload transparency, the encoding algorithm that was used to encode the payload. + :type enc_algo: str or None + + :param enc_key: If using payload transparency with an encryption algorithm, the payload encryption key. + :type enc_key: str or None + + :param enc_serializer: If using payload transparency, the payload object serializer that was used encoding the payload. + :type enc_serializer: str or None + + :param forward_for: When this Call is forwarded for a client (or from an intermediary router). + :type forward_for: list[dict] + """ + assert(type(request) in six.integer_types) + assert(type(registration) in six.integer_types) + assert(args is None or type(args) in [list, tuple]) + assert(kwargs is None or type(kwargs) == dict) + assert(payload is None or type(payload) == six.binary_type) + assert(payload is None or (payload is not None and args is None and kwargs is None)) + assert(timeout is None or type(timeout) in six.integer_types) + assert(receive_progress is None or type(receive_progress) == bool) + assert(caller is None or type(caller) in six.integer_types) + assert(caller_authid is None or type(caller_authid) == six.text_type) + assert(caller_authrole is None or type(caller_authrole) == six.text_type) + assert(procedure is None or type(procedure) == six.text_type) + assert(enc_algo is None or is_valid_enc_algo(enc_algo)) + assert(enc_key is None or type(enc_key) == six.text_type) + assert(enc_serializer is None or is_valid_enc_serializer(enc_serializer)) + assert((enc_algo is None and enc_key is None and enc_serializer is None) or (payload is not None and enc_algo is not None)) + + assert(forward_for is None or type(forward_for) == list) + if forward_for: + for ff in forward_for: + assert type(ff) == dict + assert 'session' in ff and type(ff['session']) in six.integer_types + assert 'authid' in ff and (ff['authid'] is None or type(ff['authid']) == six.text_type) + assert 'authrole' in ff and type(ff['authrole']) == six.text_type + + Message.__init__(self) + self.request = request + self.registration = registration + self.args = args + self.kwargs = _validate_kwargs(kwargs) + self.payload = payload + self.timeout = timeout + self.receive_progress = receive_progress + self.caller = caller + self.caller_authid = caller_authid + self.caller_authrole = caller_authrole + self.procedure = procedure + self.enc_algo = enc_algo + self.enc_key = enc_key + self.enc_serializer = enc_serializer + + # message forwarding + self.forward_for = forward_for + + @staticmethod + def parse(wmsg): + """ + Verifies and parses an unserialized raw message into an actual WAMP message instance. + + :param wmsg: The unserialized raw message. + :type wmsg: list + + :returns: An instance of this class. + """ + # this should already be verified by WampSerializer.unserialize + assert(len(wmsg) > 0 and wmsg[0] == Invocation.MESSAGE_TYPE) + + if len(wmsg) not in (4, 5, 6): + raise ProtocolError("invalid message length {0} for INVOCATION".format(len(wmsg))) + + request = check_or_raise_id(wmsg[1], u"'request' in INVOCATION") + registration = check_or_raise_id(wmsg[2], u"'registration' in INVOCATION") + details = check_or_raise_extra(wmsg[3], u"'details' in INVOCATION") + + args = None + kwargs = None + payload = None + enc_algo = None + enc_key = None + enc_serializer = None + + if len(wmsg) == 5 and type(wmsg[4]) == six.binary_type: + + payload = wmsg[4] + + enc_algo = details.get(u'enc_algo', None) + if enc_algo and not is_valid_enc_algo(enc_algo): + raise ProtocolError("invalid value {0} for 'enc_algo' detail in INVOCATION".format(enc_algo)) + + enc_key = details.get(u'enc_key', None) + if enc_key and type(enc_key) != six.text_type: + raise ProtocolError("invalid type {0} for 'enc_key' detail in INVOCATION".format(type(enc_key))) + + enc_serializer = details.get(u'enc_serializer', None) + if enc_serializer and not is_valid_enc_serializer(enc_serializer): + raise ProtocolError("invalid value {0} for 'enc_serializer' detail in INVOCATION".format(enc_serializer)) + + else: + if len(wmsg) > 4: + args = wmsg[4] + if args is not None and type(args) != list: + raise ProtocolError("invalid type {0} for 'args' in INVOCATION".format(type(args))) + + if len(wmsg) > 5: + kwargs = wmsg[5] + if type(kwargs) != dict: + raise ProtocolError("invalid type {0} for 'kwargs' in INVOCATION".format(type(kwargs))) + + timeout = None + receive_progress = None + caller = None + caller_authid = None + caller_authrole = None + procedure = None + forward_for = None + + if u'timeout' in details: + + detail_timeout = details[u'timeout'] + if type(detail_timeout) not in six.integer_types: + raise ProtocolError("invalid type {0} for 'timeout' detail in INVOCATION".format(type(detail_timeout))) + + if detail_timeout < 0: + raise ProtocolError("invalid value {0} for 'timeout' detail in INVOCATION".format(detail_timeout)) + + timeout = detail_timeout + + if u'receive_progress' in details: + + detail_receive_progress = details[u'receive_progress'] + if type(detail_receive_progress) != bool: + raise ProtocolError("invalid type {0} for 'receive_progress' detail in INVOCATION".format(type(detail_receive_progress))) + + receive_progress = detail_receive_progress + + if u'caller' in details: + + detail_caller = details[u'caller'] + if type(detail_caller) not in six.integer_types: + raise ProtocolError("invalid type {0} for 'caller' detail in INVOCATION".format(type(detail_caller))) + + caller = detail_caller + + if u'caller_authid' in details: + + detail_caller_authid = details[u'caller_authid'] + if type(detail_caller_authid) != six.text_type: + raise ProtocolError("invalid type {0} for 'caller_authid' detail in INVOCATION".format(type(detail_caller_authid))) + + caller_authid = detail_caller_authid + + if u'caller_authrole' in details: + + detail_caller_authrole = details[u'caller_authrole'] + if type(detail_caller_authrole) != six.text_type: + raise ProtocolError("invalid type {0} for 'caller_authrole' detail in INVOCATION".format(type(detail_caller_authrole))) + + caller_authrole = detail_caller_authrole + + if u'procedure' in details: + + detail_procedure = details[u'procedure'] + if type(detail_procedure) != six.text_type: + raise ProtocolError("invalid type {0} for 'procedure' detail in INVOCATION".format(type(detail_procedure))) + + procedure = detail_procedure + + if u'forward_for' in details: + forward_for = details[u'forward_for'] + valid = False + if type(forward_for) == list: + for ff in forward_for: + if type(ff) != dict: + break + if 'session' not in ff or type(ff['session']) not in six.integer_types: + break + if 'authid' not in ff or type(ff['authid']) != six.text_type: + break + if 'authrole' not in ff or type(ff['authrole']) != six.text_type: + break + valid = True + + if not valid: + raise ProtocolError("invalid type/value {0} for/within 'forward_for' option in INVOCATION") + + obj = Invocation(request, + registration, + args=args, + kwargs=kwargs, + payload=payload, + timeout=timeout, + receive_progress=receive_progress, + caller=caller, + caller_authid=caller_authid, + caller_authrole=caller_authrole, + procedure=procedure, + enc_algo=enc_algo, + enc_key=enc_key, + enc_serializer=enc_serializer, + forward_for=forward_for) + + return obj + + def marshal(self): + """ + Marshal this object into a raw message for subsequent serialization to bytes. + + :returns: The serialized raw message. + :rtype: list + """ + options = {} + + if self.timeout is not None: + options[u'timeout'] = self.timeout + + if self.receive_progress is not None: + options[u'receive_progress'] = self.receive_progress + + if self.caller is not None: + options[u'caller'] = self.caller + + if self.caller_authid is not None: + options[u'caller_authid'] = self.caller_authid + + if self.caller_authrole is not None: + options[u'caller_authrole'] = self.caller_authrole + + if self.procedure is not None: + options[u'procedure'] = self.procedure + + if self.forward_for is not None: + options[u'forward_for'] = self.forward_for + + if self.payload: + if self.enc_algo is not None: + options[u'enc_algo'] = self.enc_algo + if self.enc_key is not None: + options[u'enc_key'] = self.enc_key + if self.enc_serializer is not None: + options[u'enc_serializer'] = self.enc_serializer + return [Invocation.MESSAGE_TYPE, self.request, self.registration, options, self.payload] + else: + if self.kwargs: + return [Invocation.MESSAGE_TYPE, self.request, self.registration, options, self.args, self.kwargs] + elif self.args: + return [Invocation.MESSAGE_TYPE, self.request, self.registration, options, self.args] + else: + return [Invocation.MESSAGE_TYPE, self.request, self.registration, options] + + def __str__(self): + """ + Returns string representation of this message. + """ + return u"Invocation(request={0}, registration={1}, args={2}, kwargs={3}, timeout={4}, receive_progress={5}, caller={6}, caller_authid={7}, caller_authrole={8}, procedure={9}, enc_algo={10}, enc_key={11}, enc_serializer={12}, payload={13})".format(self.request, self.registration, self.args, self.kwargs, self.timeout, self.receive_progress, self.caller, self.caller_authid, self.caller_authrole, self.procedure, self.enc_algo, self.enc_key, self.enc_serializer, b2a(self.payload)) + + +class Interrupt(Message): + """ + A WAMP ``INTERRUPT`` message. + + Format: ``[INTERRUPT, INVOCATION.Request|id, Options|dict]`` + + See: https://wamp-proto.org/static/rfc/draft-oberstet-hybi-crossbar-wamp.html#rfc.section.14.3.4 + """ + + MESSAGE_TYPE = 69 + """ + The WAMP message code for this type of message. + """ + + KILL = u'kill' + KILLNOWAIT = u'killnowait' + + __slots__ = ( + 'request', + 'mode', + 'reason', + 'forward_for', + ) + + def __init__(self, request, mode=None, reason=None, forward_for=None): + """ + + :param request: The WAMP request ID of the original ``INVOCATION`` to interrupt. + :type request: int + + :param mode: Specifies how to interrupt the invocation (``"killnowait"`` or ``"kill"``). + With ``"kill"``, the router will wait for the callee to return an ERROR before + proceeding (sending back an ERROR to the original caller). With ``"killnowait"`` the + router will immediately proceed (on the caller side returning an ERROR) - but still + expects the callee to send an ERROR to conclude the message exchange for the inflight + call. + :type mode: str or None + + :param reason: The reason (an URI) for the invocation interrupt, eg actively + triggered by the caller (``"wamp.error.canceled"`` - ApplicationError.CANCELED) or + passively because of timeout (``"wamp.error.timeout"`` - ApplicationError.TIMEOUT). + :type reason: str or None. + + :param forward_for: When this Call is forwarded for a client (or from an intermediary router). + :type forward_for: list[dict] + """ + assert(type(request) in six.integer_types) + assert(mode is None or type(mode) == six.text_type) + assert(mode is None or mode in [self.KILL, self.KILLNOWAIT]) + assert(reason is None or type(reason) == six.text_type) + + assert(forward_for is None or type(forward_for) == list) + if forward_for: + for ff in forward_for: + assert type(ff) == dict + assert 'session' in ff and type(ff['session']) in six.integer_types + assert 'authid' in ff and (ff['authid'] is None or type(ff['authid']) == six.text_type) + assert 'authrole' in ff and type(ff['authrole']) == six.text_type + + Message.__init__(self) + self.request = request + self.mode = mode + self.reason = reason + + # message forwarding + self.forward_for = forward_for + + @staticmethod + def parse(wmsg): + """ + Verifies and parses an unserialized raw message into an actual WAMP message instance. + + :param wmsg: The unserialized raw message. + :type wmsg: list + + :returns: An instance of this class. + """ + # this should already be verified by WampSerializer.unserialize + assert(len(wmsg) > 0 and wmsg[0] == Interrupt.MESSAGE_TYPE) + + if len(wmsg) != 3: + raise ProtocolError("invalid message length {0} for INTERRUPT".format(len(wmsg))) + + request = check_or_raise_id(wmsg[1], u"'request' in INTERRUPT") + options = check_or_raise_extra(wmsg[2], u"'options' in INTERRUPT") + + # options + # + mode = None + reason = None + forward_for = None + + if u'mode' in options: + + option_mode = options[u'mode'] + if type(option_mode) != six.text_type: + raise ProtocolError("invalid type {0} for 'mode' option in INTERRUPT".format(type(option_mode))) + + if option_mode not in [Interrupt.KILL, Interrupt.KILLNOWAIT]: + raise ProtocolError("invalid value '{0}' for 'mode' option in INTERRUPT".format(option_mode)) + + mode = option_mode + + if u'reason' in options: + reason = check_or_raise_uri(options[u'reason'], u'"reason" in INTERRUPT') + + if u'forward_for' in options: + forward_for = options[u'forward_for'] + valid = False + if type(forward_for) == list: + for ff in forward_for: + if type(ff) != dict: + break + if 'session' not in ff or type(ff['session']) not in six.integer_types: + break + if 'authid' not in ff or type(ff['authid']) != six.text_type: + break + if 'authrole' not in ff or type(ff['authrole']) != six.text_type: + break + valid = True + + if not valid: + raise ProtocolError("invalid type/value {0} for/within 'forward_for' option in INTERRUPT") + + obj = Interrupt(request, mode=mode, reason=reason, forward_for=forward_for) + + return obj + + def marshal(self): + """ + Marshal this object into a raw message for subsequent serialization to bytes. + + :returns: The serialized raw message. + :rtype: list + """ + options = {} + + if self.mode is not None: + options[u'mode'] = self.mode + + if self.reason is not None: + options[u'reason'] = self.reason + + if self.forward_for is not None: + options[u'forward_for'] = self.forward_for + + return [Interrupt.MESSAGE_TYPE, self.request, options] + + def __str__(self): + """ + Returns string representation of this message. + """ + return u"Interrupt(request={0}, mode={1}, reason={2})".format(self.request, self.mode, self.reason) + + +class Yield(Message): + """ + A WAMP ``YIELD`` message. + + Formats: + + * ``[YIELD, INVOCATION.Request|id, Options|dict]`` + * ``[YIELD, INVOCATION.Request|id, Options|dict, Arguments|list]`` + * ``[YIELD, INVOCATION.Request|id, Options|dict, Arguments|list, ArgumentsKw|dict]`` + * ``[YIELD, INVOCATION.Request|id, Options|dict, Payload|binary]`` + """ + + MESSAGE_TYPE = 70 + """ + The WAMP message code for this type of message. + """ + + __slots__ = ( + 'request', + 'args', + 'kwargs', + 'payload', + 'progress', + 'enc_algo', + 'enc_key', + 'enc_serializer', + 'callee', + 'callee_authid', + 'callee_authrole', + 'forward_for', + ) + + def __init__(self, + request, + args=None, + kwargs=None, + payload=None, + progress=None, + enc_algo=None, + enc_key=None, + enc_serializer=None, + callee=None, + callee_authid=None, + callee_authrole=None, + forward_for=None): + """ + + :param request: The WAMP request ID of the original call. + :type request: int + + :param args: Positional values for application-defined event payload. + Must be serializable using any serializers in use. + :type args: list or tuple or None + + :param kwargs: Keyword values for application-defined event payload. + Must be serializable using any serializers in use. + :type kwargs: dict or None + + :param payload: Alternative, transparent payload. If given, ``args`` and ``kwargs`` must be left unset. + :type payload: bytes or None + + :param progress: If ``True``, this result is a progressive invocation result, and subsequent + results (or a final error) will follow. + :type progress: bool or None + + :param enc_algo: If using payload transparency, the encoding algorithm that was used to encode the payload. + :type enc_algo: str or None + + :param enc_key: If using payload transparency with an encryption algorithm, the payload encryption key. + :type enc_key: str or None + + :param enc_serializer: If using payload transparency, the payload object serializer that was used encoding the payload. + :type enc_serializer: str or None + + :param callee: The WAMP session ID of the effective callee that responded with the error. Only filled if callee is disclosed. + :type callee: None or int + + :param callee_authid: The WAMP authid of the responding callee. Only filled if callee is disclosed. + :type callee_authid: None or unicode + + :param callee_authrole: The WAMP authrole of the responding callee. Only filled if callee is disclosed. + :type callee_authrole: None or unicode + + :param forward_for: When this Call is forwarded for a client (or from an intermediary router). + :type forward_for: list[dict] + """ + assert(type(request) in six.integer_types) + assert(args is None or type(args) in [list, tuple]) + assert(kwargs is None or type(kwargs) == dict) + assert(payload is None or type(payload) == six.binary_type) + assert(payload is None or (payload is not None and args is None and kwargs is None)) + assert(progress is None or type(progress) == bool) + assert(enc_algo is None or is_valid_enc_algo(enc_algo)) + assert((enc_algo is None and enc_key is None and enc_serializer is None) or (payload is not None and enc_algo is not None)) + assert(enc_key is None or type(enc_key) == six.text_type) + assert(enc_serializer is None or is_valid_enc_serializer(enc_serializer)) + + assert(callee is None or type(callee) in six.integer_types) + assert(callee_authid is None or type(callee_authid) == six.text_type) + assert(callee_authrole is None or type(callee_authrole) == six.text_type) + + assert(forward_for is None or type(forward_for) == list) + if forward_for: + for ff in forward_for: + assert type(ff) == dict + assert 'session' in ff and type(ff['session']) in six.integer_types + assert 'authid' in ff and (ff['authid'] is None or type(ff['authid']) == six.text_type) + assert 'authrole' in ff and type(ff['authrole']) == six.text_type + + Message.__init__(self) + self.request = request + self.args = args + self.kwargs = _validate_kwargs(kwargs) + self.payload = payload + self.progress = progress + self.enc_algo = enc_algo + self.enc_key = enc_key + self.enc_serializer = enc_serializer + + # effective callee that responded with the result + self.callee = callee + self.callee_authid = callee_authid + self.callee_authrole = callee_authrole + + # message forwarding + self.forward_for = forward_for + + @staticmethod + def parse(wmsg): + """ + Verifies and parses an unserialized raw message into an actual WAMP message instance. + + :param wmsg: The unserialized raw message. + :type wmsg: list + + :returns: An instance of this class. + """ + # this should already be verified by WampSerializer.unserialize + assert(len(wmsg) > 0 and wmsg[0] == Yield.MESSAGE_TYPE) + + if len(wmsg) not in (3, 4, 5): + raise ProtocolError("invalid message length {0} for YIELD".format(len(wmsg))) + + request = check_or_raise_id(wmsg[1], u"'request' in YIELD") + options = check_or_raise_extra(wmsg[2], u"'options' in YIELD") + + args = None + kwargs = None + payload = None + enc_algo = None + enc_key = None + enc_serializer = None + + if len(wmsg) == 4 and type(wmsg[3]) == six.binary_type: + + payload = wmsg[3] + + enc_algo = options.get(u'enc_algo', None) + if enc_algo and not is_valid_enc_algo(enc_algo): + raise ProtocolError("invalid value {0} for 'enc_algo' detail in YIELD".format(enc_algo)) + + enc_key = options.get(u'enc_key', None) + if enc_key and type(enc_key) != six.text_type: + raise ProtocolError("invalid type {0} for 'enc_key' detail in YIELD".format(type(enc_key))) + + enc_serializer = options.get(u'enc_serializer', None) + if enc_serializer and not is_valid_enc_serializer(enc_serializer): + raise ProtocolError("invalid value {0} for 'enc_serializer' detail in YIELD".format(enc_serializer)) + + else: + if len(wmsg) > 3: + args = wmsg[3] + if args is not None and type(args) != list: + raise ProtocolError("invalid type {0} for 'args' in YIELD".format(type(args))) + + if len(wmsg) > 4: + kwargs = wmsg[4] + if type(kwargs) != dict: + raise ProtocolError("invalid type {0} for 'kwargs' in YIELD".format(type(kwargs))) + + progress = None + callee = None + callee_authid = None + callee_authrole = None + forward_for = None + + if u'progress' in options: + + option_progress = options[u'progress'] + if type(option_progress) != bool: + raise ProtocolError("invalid type {0} for 'progress' option in YIELD".format(type(option_progress))) + + progress = option_progress + + if u'callee' in options: + + option_callee = options[u'callee'] + if type(option_callee) not in six.integer_types: + raise ProtocolError("invalid type {0} for 'callee' detail in YIELD".format(type(option_callee))) + + callee = option_callee + + if u'callee_authid' in options: + + option_callee_authid = options[u'callee_authid'] + if type(option_callee_authid) != six.text_type: + raise ProtocolError("invalid type {0} for 'callee_authid' detail in YIELD".format(type(option_callee_authid))) + + callee_authid = option_callee_authid + + if u'callee_authrole' in options: + + option_callee_authrole = options[u'callee_authrole'] + if type(option_callee_authrole) != six.text_type: + raise ProtocolError("invalid type {0} for 'callee_authrole' detail in YIELD".format(type(option_callee_authrole))) + + callee_authrole = option_callee_authrole + + if u'forward_for' in options: + forward_for = options[u'forward_for'] + valid = False + if type(forward_for) == list: + for ff in forward_for: + if type(ff) != dict: + break + if 'session' not in ff or type(ff['session']) not in six.integer_types: + break + if 'authid' not in ff or type(ff['authid']) != six.text_type: + break + if 'authrole' not in ff or type(ff['authrole']) != six.text_type: + break + valid = True + + if not valid: + raise ProtocolError("invalid type/value {0} for/within 'forward_for' option in YIELD") + + obj = Yield(request, + args=args, + kwargs=kwargs, + payload=payload, + progress=progress, + enc_algo=enc_algo, + enc_key=enc_key, + enc_serializer=enc_serializer, + callee=callee, + callee_authid=callee_authid, + callee_authrole=callee_authrole, + forward_for=forward_for) + + return obj + + def marshal(self): + """ + Marshal this object into a raw message for subsequent serialization to bytes. + + :returns: The serialized raw message. + :rtype: list + """ + options = {} + + if self.progress is not None: + options[u'progress'] = self.progress + + if self.callee is not None: + options[u'callee'] = self.callee + if self.callee_authid is not None: + options[u'callee_authid'] = self.callee_authid + if self.callee_authrole is not None: + options[u'callee_authrole'] = self.callee_authrole + if self.forward_for is not None: + options[u'forward_for'] = self.forward_for + + if self.payload: + if self.enc_algo is not None: + options[u'enc_algo'] = self.enc_algo + if self.enc_key is not None: + options[u'enc_key'] = self.enc_key + if self.enc_serializer is not None: + options[u'enc_serializer'] = self.enc_serializer + return [Yield.MESSAGE_TYPE, self.request, options, self.payload] + else: + if self.kwargs: + return [Yield.MESSAGE_TYPE, self.request, options, self.args, self.kwargs] + elif self.args: + return [Yield.MESSAGE_TYPE, self.request, options, self.args] + else: + return [Yield.MESSAGE_TYPE, self.request, options] + + def __str__(self): + """ + Returns string representation of this message. + """ + return u"Yield(request={0}, args={1}, kwargs={2}, progress={3}, enc_algo={4}, enc_key={5}, enc_serializer={6}, payload={7}, callee={8}, callee_authid={9}, callee_authrole={10}, forward_for={11})".format(self.request, self.args, self.kwargs, self.progress, self.enc_algo, self.enc_key, self.enc_serializer, b2a(self.payload), self.callee, self.callee_authid, self.callee_authrole, self.forward_for) diff --git a/venv/lib/python3.7/site-packages/autobahn/wamp/protocol.py b/venv/lib/python3.7/site-packages/autobahn/wamp/protocol.py new file mode 100644 index 0000000..fb326df --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/wamp/protocol.py @@ -0,0 +1,1958 @@ +############################################################################### +# +# The MIT License (MIT) +# +# Copyright (c) Crossbar.io Technologies GmbH +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +############################################################################### + +from __future__ import absolute_import + +import six +import txaio +import inspect +from functools import reduce + +from autobahn import wamp +from autobahn.util import public, IdGenerator, ObservableMixin +from autobahn.wamp import uri +from autobahn.wamp import message +from autobahn.wamp import types +from autobahn.wamp import role +from autobahn.wamp import exception +from autobahn.wamp.exception import ApplicationError, ProtocolError, SessionNotReady, SerializationError +from autobahn.wamp.interfaces import ISession, IPayloadCodec, IAuthenticator # noqa +from autobahn.wamp.types import SessionDetails, CloseDetails, EncodedPayload +from autobahn.exception import PayloadExceededError +from autobahn.wamp.request import \ + Publication, \ + Subscription, \ + Handler, \ + Registration, \ + Endpoint, \ + PublishRequest, \ + SubscribeRequest, \ + UnsubscribeRequest, \ + CallRequest, \ + InvocationRequest, \ + RegisterRequest, \ + UnregisterRequest + + +def is_method_or_function(f): + return inspect.ismethod(f) or inspect.isfunction(f) + + +class BaseSession(ObservableMixin): + """ + WAMP session base class. + + This class implements :class:`autobahn.wamp.interfaces.ISession`. + """ + + log = txaio.make_logger() + + def __init__(self): + """ + + """ + self.set_valid_events( + valid_events=[ + 'join', # right before onJoin runs + 'leave', # after onLeave has run + 'ready', # after onJoin and all 'join' listeners have completed + 'connect', # right before onConnect + 'disconnect', # right after onDisconnect + ] + ) + + # this is for marshalling traceback from exceptions thrown in user + # code within WAMP error messages (that is, when invoking remoted + # procedures) + self.traceback_app = False + + # mapping of exception classes to WAMP error URIs + self._ecls_to_uri_pat = {} + + # mapping of WAMP error URIs to exception classes + self._uri_to_ecls = { + ApplicationError.INVALID_PAYLOAD: SerializationError, + ApplicationError.PAYLOAD_SIZE_EXCEEDED: PayloadExceededError, + } + + # session authentication information + self._realm = None + self._session_id = None + self._authid = None + self._authrole = None + self._authmethod = None + self._authprovider = None + + # payload transparency codec + self._payload_codec = None + + # generator for WAMP request IDs + self._request_id_gen = IdGenerator() + + @property + def realm(self): + return self._realm + + @property + def session_id(self): + return self._session_id + + @property + def authid(self): + return self._authid + + @property + def authrole(self): + return self._authrole + + @property + def authmethod(self): + return self._authmethod + + @property + def authprovider(self): + return self._authprovider + + def define(self, exception, error=None): + """ + Implements :func:`autobahn.wamp.interfaces.ISession.define` + """ + if error is None: + assert(hasattr(exception, '_wampuris')) + self._ecls_to_uri_pat[exception] = exception._wampuris + self._uri_to_ecls[exception._wampuris[0].uri()] = exception + else: + assert(not hasattr(exception, '_wampuris')) + self._ecls_to_uri_pat[exception] = [uri.Pattern(six.u(error), uri.Pattern.URI_TARGET_HANDLER)] + self._uri_to_ecls[six.u(error)] = exception + + def _message_from_exception(self, request_type, request, exc, tb=None, enc_algo=None): + """ + Create a WAMP error message from an exception. + + :param request_type: The request type this WAMP error message is for. + :type request_type: int + + :param request: The request ID this WAMP error message is for. + :type request: int + + :param exc: The exception. + :type exc: Instance of :class:`Exception` or subclass thereof. + + :param tb: Optional traceback. If present, it'll be included with the WAMP error message. + :type tb: list or None + """ + args = None + if hasattr(exc, 'args'): + args = list(exc.args) # make sure tuples are made into lists + + kwargs = None + if hasattr(exc, 'kwargs'): + kwargs = exc.kwargs + + if kwargs and six.PY2: + kwargs = { + k.decode('utf8'): v + for k, v in kwargs.iteritems() + } + + if tb: + if kwargs: + kwargs[u'traceback'] = tb + else: + kwargs = {u'traceback': tb} + + if isinstance(exc, exception.ApplicationError): + error = exc.error if type(exc.error) == six.text_type else six.u(exc.error) + else: + if exc.__class__ in self._ecls_to_uri_pat: + error = self._ecls_to_uri_pat[exc.__class__][0]._uri + else: + error = u"wamp.error.runtime_error" + + encoded_payload = None + if self._payload_codec: + encoded_payload = self._payload_codec.encode(False, error, args, kwargs) + + if encoded_payload: + msg = message.Error(request_type, + request, + error, + payload=encoded_payload.payload, + enc_algo=encoded_payload.enc_algo, + enc_key=encoded_payload.enc_key, + enc_serializer=encoded_payload.enc_serializer) + else: + msg = message.Error(request_type, + request, + error, + args, + kwargs) + + return msg + + def _exception_from_message(self, msg): + """ + Create a user (or generic) exception from a WAMP error message. + + :param msg: A WAMP error message. + :type msg: instance of :class:`autobahn.wamp.message.Error` + """ + + # FIXME: + # 1. map to ecls based on error URI wildcard/prefix + # 2. extract additional args/kwargs from error URI + + exc = None + enc_err = None + + if msg.enc_algo: + + if not self._payload_codec: + log_msg = u"received encoded payload, but no payload codec active" + self.log.warn(log_msg) + enc_err = ApplicationError(ApplicationError.ENC_NO_PAYLOAD_CODEC, log_msg, enc_algo=msg.enc_algo) + else: + try: + encoded_payload = EncodedPayload(msg.payload, msg.enc_algo, msg.enc_serializer, msg.enc_key) + decrypted_error, msg.args, msg.kwargs = self._payload_codec.decode(True, msg.error, encoded_payload) + except Exception as e: + self.log.warn("failed to decrypt application payload 1: {err}", err=e) + enc_err = ApplicationError( + ApplicationError.ENC_DECRYPT_ERROR, + u"failed to decrypt application payload 1: {}".format(e), + enc_algo=msg.enc_algo, + ) + else: + if msg.error != decrypted_error: + self.log.warn( + u"URI within encrypted payload ('{decrypted_error}') does not match the envelope ('{error}')", + decrypted_error=decrypted_error, + error=msg.error, + ) + enc_err = ApplicationError( + ApplicationError.ENC_TRUSTED_URI_MISMATCH, + u"URI within encrypted payload ('{}') does not match the envelope ('{}')".format(decrypted_error, msg.error), + enc_algo=msg.enc_algo, + ) + + if enc_err: + return enc_err + + if msg.error in self._uri_to_ecls: + ecls = self._uri_to_ecls[msg.error] + try: + # the following might fail, eg. TypeError when + # signature of exception constructor is incompatible + # with args/kwargs or when the exception constructor raises + if msg.kwargs: + if msg.args: + exc = ecls(*msg.args, **msg.kwargs) + else: + exc = ecls(**msg.kwargs) + else: + if msg.args: + exc = ecls(*msg.args) + else: + exc = ecls() + except Exception: + try: + self.onUserError( + txaio.create_failure(), + "While re-constructing exception", + ) + except: + pass + + if not exc: + # the following ctor never fails .. + if msg.kwargs: + if msg.args: + exc = exception.ApplicationError(msg.error, *msg.args, **msg.kwargs) + else: + exc = exception.ApplicationError(msg.error, **msg.kwargs) + else: + if msg.args: + exc = exception.ApplicationError(msg.error, *msg.args) + else: + exc = exception.ApplicationError(msg.error) + + # FIXME: cleanup and integate into ctors above + if hasattr(exc, 'enc_algo'): + exc.enc_algo = msg.enc_algo + if hasattr(exc, 'callee'): + exc.callee = msg.callee + if hasattr(exc, 'callee_authid'): + exc.callee_authid = msg.callee_authid + if hasattr(exc, 'callee_authrole'): + exc.callee_authrole = msg.callee_authrole + if hasattr(exc, 'forward_for'): + exc.forward_for = msg.forward_for + + return exc + + +@public +class ApplicationSession(BaseSession): + """ + WAMP endpoint session. + """ + + def __init__(self, config=None): + """ + Implements :func:`autobahn.wamp.interfaces.ISession` + """ + BaseSession.__init__(self) + self.config = config or types.ComponentConfig(realm=u"realm1") + + # set client role features supported and announced + self._session_roles = role.DEFAULT_CLIENT_ROLES + + self._transport = None + self._session_id = None + self._realm = None + + self._goodbye_sent = False + self._transport_is_closing = False + + # outstanding requests + self._publish_reqs = {} + self._subscribe_reqs = {} + self._unsubscribe_reqs = {} + self._call_reqs = {} + self._register_reqs = {} + self._unregister_reqs = {} + + # subscriptions in place + self._subscriptions = {} + + # registrations in place + self._registrations = {} + + # incoming invocations + self._invocations = {} + + @public + def set_payload_codec(self, payload_codec): + """ + Implements :func:`autobahn.wamp.interfaces.ISession.set_payload_codec` + """ + assert(payload_codec is None or isinstance(payload_codec, IPayloadCodec)) + self._payload_codec = payload_codec + + @public + def get_payload_codec(self): + """ + Implements :func:`autobahn.wamp.interfaces.ISession.get_payload_codec` + """ + return self._payload_codec + + @public + def onOpen(self, transport): + """ + Implements :func:`autobahn.wamp.interfaces.ITransportHandler.onOpen` + """ + self._transport = transport + d = self.fire('connect', self, transport) + txaio.add_callbacks( + d, None, + lambda fail: self._swallow_error(fail, "While notifying 'connect'") + ) + txaio.add_callbacks( + d, + lambda _: txaio.as_future(self.onConnect), + lambda fail: self._swallow_error(fail, "While calling 'onConnect'") + ) + + @public + def onConnect(self): + """ + Implements :func:`autobahn.wamp.interfaces.ISession.onConnect` + """ + self.join(self.config.realm) + + @public + def join(self, + realm, + authmethods=None, + authid=None, + authrole=None, + authextra=None, + resumable=None, + resume_session=None, + resume_token=None): + """ + Implements :func:`autobahn.wamp.interfaces.ISession.join` + """ + assert(realm is None or type(realm) == six.text_type) + assert(authmethods is None or type(authmethods) == list) + if type(authmethods) == list: + for authmethod in authmethods: + assert(type(authmethod) == six.text_type) + assert(authid is None or type(authid) == six.text_type) + assert(authrole is None or type(authrole) == six.text_type) + assert(authextra is None or type(authextra) == dict) + + if self._session_id: + raise Exception("already joined") + + # store the realm requested by client, though this might be overwritten later, + # when realm redirection kicks in + self._realm = realm + + # closing handshake state + self._goodbye_sent = False + + # send HELLO message to router + msg = message.Hello(realm=realm, + roles=self._session_roles, + authmethods=authmethods, + authid=authid, + authrole=authrole, + authextra=authextra, + resumable=resumable, + resume_session=resume_session, + resume_token=resume_token) + self._transport.send(msg) + + @public + def disconnect(self): + """ + Implements :func:`autobahn.wamp.interfaces.ISession.disconnect` + """ + if self._transport: + self._transport.close() + + @public + def is_connected(self): + """ + Implements :func:`autobahn.wamp.interfaces.ISession.is_connected` + """ + return self._transport is not None + + @public + def is_attached(self): + """ + Implements :func:`autobahn.wamp.interfaces.ISession.is_attached` + """ + return self._transport is not None and self._session_id is not None + + @public + def onUserError(self, fail, msg): + """ + Implements :func:`autobahn.wamp.interfaces.ISession.onUserError` + """ + if isinstance(fail.value, exception.ApplicationError): + self.log.warn('{klass}.onUserError(): "{msg}"', + klass=self.__class__.__name__, + msg=fail.value.error_message()) + else: + self.log.error( + '{klass}.onUserError(): "{msg}"\n{traceback}', + klass=self.__class__.__name__, + msg=msg, + traceback=txaio.failure_format_traceback(fail), + ) + + def _swallow_error(self, fail, msg): + ''' + This is an internal generic error-handler for errors encountered + when calling down to on*() handlers that can reasonably be + expected to be overridden in user code. + + Note that it *cancels* the error, so use with care! + + Specifically, this should *never* be added to the errback + chain for a Deferred/coroutine that will make it out to user + code. + ''' + try: + self.onUserError(fail, msg) + except Exception: + self.log.error( + "Internal error: {tb}", + tb=txaio.failure_format_traceback(txaio.create_failure()), + ) + return None + + def onMessage(self, msg): + """ + Implements :func:`autobahn.wamp.interfaces.ITransportHandler.onMessage` + """ + + if self._session_id is None: + + # the first message must be WELCOME, ABORT or CHALLENGE .. + if isinstance(msg, message.Welcome): + + # before we let user code see the session -- that is, + # before we fire "join" -- we give authentication + # instances a chance to abort the session. Usually + # this would be for "mutual authentication" + # scenarios. For example, WAMP-SCRAM uses this to + # confirm the server-signature + d = txaio.as_future(self.onWelcome, msg) + + def success(res): + if res is not None: + self.log.info("Session denied by onWelcome") + reply = message.Abort( + u"wamp.error.cannot_authenticate", u"{0}".format(res) + ) + self._transport.send(reply) + return + + if msg.realm: + self._realm = msg.realm + self._session_id = msg.session + self._authid = msg.authid + self._authrole = msg.authrole + self._authmethod = msg.authmethod + self._authprovider = msg.authprovider + self._router_roles = msg.roles + + details = SessionDetails( + realm=self._realm, + session=self._session_id, + authid=self._authid, + authrole=self._authrole, + authmethod=self._authmethod, + authprovider=self._authprovider, + authextra=msg.authextra, + serializer=self._transport._serializer.SERIALIZER_ID, + resumed=msg.resumed, + resumable=msg.resumable, + resume_token=msg.resume_token, + ) + # firing 'join' *before* running onJoin, so that + # the idiom where you "do stuff" in onJoin -- + # possibly including self.leave() -- works + # properly. Besides, there's "ready" that fires + # after 'join' and onJoin have all completed... + d = self.fire('join', self, details) + # add a logging errback first, which will ignore any + # errors from fire() + txaio.add_callbacks( + d, None, + lambda e: self._swallow_error(e, "While notifying 'join'") + ) + # this should run regardless + txaio.add_callbacks( + d, + lambda _: txaio.as_future(self.onJoin, details), + None + ) + # ignore any errors from onJoin (XXX or, should that be fatal?) + txaio.add_callbacks( + d, None, + lambda e: self._swallow_error(e, "While firing onJoin") + ) + # this instance is now "ready"... + txaio.add_callbacks( + d, + lambda _: self.fire('ready', self), + None + ) + # ignore any errors from 'ready' + txaio.add_callbacks( + d, None, + lambda e: self._swallow_error(e, "While notifying 'ready'") + ) + + def error(e): + reply = message.Abort( + u"wamp.error.cannot_authenticate", u"Error calling onWelcome handler" + ) + self._transport.send(reply) + return self._swallow_error(e, "While firing onWelcome") + txaio.add_callbacks(d, success, error) + + elif isinstance(msg, message.Abort): + # fire callback and close the transport + details = types.CloseDetails(msg.reason, msg.message) + d = txaio.as_future(self.onLeave, details) + + def success(arg): + # XXX also: handle async + d = self.fire('leave', self, details) + + def return_arg(_): + return arg + + def _error(e): + return self._swallow_error(e, "While firing 'leave' event") + txaio.add_callbacks(d, return_arg, _error) + return d + + def _error(e): + return self._swallow_error(e, "While firing onLeave") + txaio.add_callbacks(d, success, _error) + + elif isinstance(msg, message.Challenge): + + challenge = types.Challenge(msg.method, msg.extra) + d = txaio.as_future(self.onChallenge, challenge) + + def success(signature): + if signature is None: + raise Exception('onChallenge user callback did not return a signature') + if type(signature) == six.binary_type: + signature = signature.decode('utf8') + if type(signature) != six.text_type: + raise Exception('signature must be unicode (was {})'.format(type(signature))) + reply = message.Authenticate(signature) + self._transport.send(reply) + + def error(err): + self.onUserError(err, "Authentication failed") + reply = message.Abort(u"wamp.error.cannot_authenticate", u"{0}".format(err.value)) + self._transport.send(reply) + # fire callback and close the transport + details = types.CloseDetails(reply.reason, reply.message) + d = txaio.as_future(self.onLeave, details) + + def success(arg): + # XXX also: handle async + self.fire('leave', self, details) + return arg + + def _error(e): + return self._swallow_error(e, "While firing onLeave") + txaio.add_callbacks(d, success, _error) + # switching to the callback chain, effectively + # cancelling error (which we've now handled) + return d + + txaio.add_callbacks(d, success, error) + + else: + raise ProtocolError("Received {0} message, and session is not yet established".format(msg.__class__)) + + else: + # self._session_id != None (aka "session established") + if isinstance(msg, message.Goodbye): + if not self._goodbye_sent: + # the peer wants to close: send GOODBYE reply + reply = message.Goodbye() + self._transport.send(reply) + + self._session_id = None + + # fire callback and close the transport + details = types.CloseDetails(msg.reason, msg.message) + d = txaio.as_future(self.onLeave, details) + + def success(arg): + # XXX also: handle async + self.fire('leave', self, details) + return arg + + def _error(e): + errmsg = 'While firing onLeave for reason "{0}" and message "{1}"'.format(msg.reason, msg.message) + return self._swallow_error(e, errmsg) + txaio.add_callbacks(d, success, _error) + + elif isinstance(msg, message.Event): + + if msg.subscription in self._subscriptions: + + # fire all event handlers on subscription .. + for subscription in self._subscriptions[msg.subscription]: + + handler = subscription.handler + topic = msg.topic or subscription.topic + + if msg.enc_algo: + # FIXME: behavior in error cases (no keyring, decrypt issues, URI mismatch, ..) + if not self._payload_codec: + self.log.warn("received encoded payload with enc_algo={enc_algo}, but no payload codec active - ignoring encoded payload!", enc_algo=msg.enc_algo) + return + else: + try: + encoded_payload = EncodedPayload(msg.payload, msg.enc_algo, msg.enc_serializer, msg.enc_key) + decoded_topic, msg.args, msg.kwargs = self._payload_codec.decode(False, topic, encoded_payload) + except Exception as e: + self.log.warn("failed to decode application payload encoded with enc_algo={enc_algo}: {error}", error=e, enc_algo=msg.enc_algo) + return + else: + if topic != decoded_topic: + self.log.warn("envelope topic URI does not match encoded one") + return + + invoke_args = (handler.obj,) if handler.obj else tuple() + if msg.args: + invoke_args = invoke_args + tuple(msg.args) + invoke_kwargs = msg.kwargs if msg.kwargs else dict() + + if handler.details_arg: + invoke_kwargs[handler.details_arg] = types.EventDetails(subscription, msg.publication, publisher=msg.publisher, publisher_authid=msg.publisher_authid, publisher_authrole=msg.publisher_authrole, topic=topic, retained=msg.retained, enc_algo=msg.enc_algo, forward_for=msg.forward_for) + + # FIXME: https://github.com/crossbario/autobahn-python/issues/764 + def _success(_): + # Acknowledged Events -- only if we got the details header and + # the broker advertised it + if msg.x_acknowledged_delivery and self._router_roles["broker"].x_acknowledged_event_delivery: + if self._transport: + response = message.EventReceived(msg.publication) + self._transport.send(response) + else: + self.log.warn("successfully processed event with acknowledged delivery, but could not send ACK, since the transport was lost in the meantime") + + def _error(e): + errmsg = 'While firing {0} subscribed under {1}.'.format( + handler.fn, msg.subscription) + return self._swallow_error(e, errmsg) + + future = txaio.as_future(handler.fn, *invoke_args, **invoke_kwargs) + txaio.add_callbacks(future, _success, _error) + + else: + raise ProtocolError("EVENT received for non-subscribed subscription ID {0}".format(msg.subscription)) + + elif isinstance(msg, message.Published): + + if msg.request in self._publish_reqs: + + # get and pop outstanding publish request + publish_request = self._publish_reqs.pop(msg.request) + + # create a new publication object + publication = Publication(msg.publication, was_encrypted=publish_request.was_encrypted) + + # resolve deferred/future for publishing successfully + txaio.resolve(publish_request.on_reply, publication) + else: + raise ProtocolError("PUBLISHED received for non-pending request ID {0}".format(msg.request)) + + elif isinstance(msg, message.Subscribed): + + if msg.request in self._subscribe_reqs: + + # get and pop outstanding subscribe request + request = self._subscribe_reqs.pop(msg.request) + + # create new handler subscription list for subscription ID if not yet tracked + if msg.subscription not in self._subscriptions: + self._subscriptions[msg.subscription] = [] + + subscription = Subscription(msg.subscription, request.topic, self, request.handler) + + # add handler to existing subscription + self._subscriptions[msg.subscription].append(subscription) + + # resolve deferred/future for subscribing successfully + txaio.resolve(request.on_reply, subscription) + else: + raise ProtocolError("SUBSCRIBED received for non-pending request ID {0}".format(msg.request)) + + elif isinstance(msg, message.Unsubscribed): + + if msg.request in self._unsubscribe_reqs: + + # get and pop outstanding subscribe request + request = self._unsubscribe_reqs.pop(msg.request) + + # if the subscription still exists, mark as inactive and remove .. + if request.subscription_id in self._subscriptions: + for subscription in self._subscriptions[request.subscription_id]: + subscription.active = False + del self._subscriptions[request.subscription_id] + + # resolve deferred/future for unsubscribing successfully + txaio.resolve(request.on_reply, 0) + else: + raise ProtocolError("UNSUBSCRIBED received for non-pending request ID {0}".format(msg.request)) + + elif isinstance(msg, message.Result): + + if msg.request in self._call_reqs: + + call_request = self._call_reqs[msg.request] + proc = call_request.procedure + enc_err = None + + if msg.enc_algo: + + if not self._payload_codec: + log_msg = u"received encoded payload, but no payload codec active" + self.log.warn(log_msg) + enc_err = ApplicationError(ApplicationError.ENC_NO_PAYLOAD_CODEC, log_msg) + else: + try: + encoded_payload = EncodedPayload(msg.payload, msg.enc_algo, msg.enc_serializer, msg.enc_key) + decrypted_proc, msg.args, msg.kwargs = self._payload_codec.decode(True, proc, encoded_payload) + except Exception as e: + self.log.warn( + "failed to decrypt application payload 1: {err}", + err=e, + ) + enc_err = ApplicationError( + ApplicationError.ENC_DECRYPT_ERROR, + u"failed to decrypt application payload 1: {}".format(e), + ) + else: + if proc != decrypted_proc: + self.log.warn( + "URI within encrypted payload ('{decrypted_proc}') does not match the envelope ('{proc}')", + decrypted_proc=decrypted_proc, + proc=proc, + ) + enc_err = ApplicationError( + ApplicationError.ENC_TRUSTED_URI_MISMATCH, + u"URI within encrypted payload ('{}') does not match the envelope ('{}')".format(decrypted_proc, proc), + ) + + if msg.progress: + # process progressive call result + + if call_request.options.on_progress: + if enc_err: + self.onUserError(enc_err, "could not deliver progressive call result, because payload decryption failed") + else: + kw = msg.kwargs or dict() + args = msg.args or tuple() + + def _error(fail): + self.onUserError(fail, "While firing on_progress") + + if call_request.options and call_request.options.details: + prog_d = txaio.as_future(call_request.options.on_progress, + types.CallResult(*msg.args, + callee=msg.callee, + callee_authid=msg.callee_authid, + callee_authrole=msg.callee_authrole, + forward_for=msg.forward_for, + **msg.kwargs)) + else: + prog_d = txaio.as_future(call_request.options.on_progress, + *args, + **kw) + + txaio.add_callbacks(prog_d, None, _error) + + else: + # process final call result + + # drop original request + del self._call_reqs[msg.request] + + # user callback that gets fired + on_reply = call_request.on_reply + + # above might already have rejected, so we guard .. + if enc_err: + txaio.reject(on_reply, enc_err) + else: + if msg.kwargs or (call_request.options and call_request.options.details): + kwargs = msg.kwargs or {} + if msg.args: + res = types.CallResult(*msg.args, + callee=msg.callee, + callee_authid=msg.callee_authid, + callee_authrole=msg.callee_authrole, + forward_for=msg.forward_for, + **kwargs) + else: + res = types.CallResult(callee=msg.callee, + callee_authid=msg.callee_authid, + callee_authrole=msg.callee_authrole, + forward_for=msg.forward_for, + **kwargs) + txaio.resolve(on_reply, res) + else: + if msg.args: + if len(msg.args) > 1: + res = types.CallResult(*msg.args) + txaio.resolve(on_reply, res) + else: + txaio.resolve(on_reply, msg.args[0]) + else: + txaio.resolve(on_reply, None) + else: + raise ProtocolError("RESULT received for non-pending request ID {0}".format(msg.request)) + + elif isinstance(msg, message.Invocation): + + if msg.request in self._invocations: + + raise ProtocolError("INVOCATION received for request ID {0} already invoked".format(msg.request)) + + else: + + if msg.registration not in self._registrations: + + raise ProtocolError("INVOCATION received for non-registered registration ID {0}".format(msg.registration)) + + else: + registration = self._registrations[msg.registration] + endpoint = registration.endpoint + proc = msg.procedure or registration.procedure + enc_err = None + + if msg.enc_algo: + if not self._payload_codec: + log_msg = u"received encrypted INVOCATION payload, but no keyring active" + self.log.warn(log_msg) + enc_err = ApplicationError(ApplicationError.ENC_NO_PAYLOAD_CODEC, log_msg) + else: + try: + encoded_payload = EncodedPayload(msg.payload, msg.enc_algo, msg.enc_serializer, msg.enc_key) + decrypted_proc, msg.args, msg.kwargs = self._payload_codec.decode(False, proc, encoded_payload) + except Exception as e: + self.log.warn( + "failed to decrypt INVOCATION payload: {err}", + err=e, + ) + enc_err = ApplicationError( + ApplicationError.ENC_DECRYPT_ERROR, + "failed to decrypt INVOCATION payload: {}".format(e), + ) + else: + if proc != decrypted_proc: + self.log.warn( + "URI within encrypted INVOCATION payload ('{decrypted_proc}') " + "does not match the envelope ('{proc}')", + decrypted_proc=decrypted_proc, + proc=proc, + ) + enc_err = ApplicationError( + ApplicationError.ENC_TRUSTED_URI_MISMATCH, + u"URI within encrypted INVOCATION payload ('{}') does not match the envelope ('{}')".format(decrypted_proc, proc), + ) + + if enc_err: + # when there was a problem decrypting the INVOCATION payload, we obviously can't invoke + # the endpoint, but return and + reply = self._message_from_exception(message.Invocation.MESSAGE_TYPE, msg.request, enc_err) + self._transport.send(reply) + + else: + + if endpoint.obj is not None: + invoke_args = (endpoint.obj,) + else: + invoke_args = tuple() + + if msg.args: + invoke_args = invoke_args + tuple(msg.args) + + invoke_kwargs = msg.kwargs if msg.kwargs else dict() + + if endpoint.details_arg: + + if msg.receive_progress: + + def progress(*args, **kwargs): + assert(args is None or type(args) in (list, tuple)) + assert(kwargs is None or type(kwargs) == dict) + + if kwargs and six.PY2: + kwargs = { + k.decode('utf8'): v + for k, v in kwargs.iteritems() + } + + encoded_payload = None + if msg.enc_algo: + if not self._payload_codec: + raise Exception(u"trying to send encrypted payload, but no keyring active") + encoded_payload = self._payload_codec.encode(False, proc, args, kwargs) + + if encoded_payload: + progress_msg = message.Yield(msg.request, + payload=encoded_payload.payload, + progress=True, + enc_algo=encoded_payload.enc_algo, + enc_key=encoded_payload.enc_key, + enc_serializer=encoded_payload.enc_serializer) + else: + progress_msg = message.Yield(msg.request, + args=args, + kwargs=kwargs, + progress=True) + + self._transport.send(progress_msg) + else: + progress = None + + invoke_kwargs[endpoint.details_arg] = types.CallDetails(registration, + progress=progress, + caller=msg.caller, + caller_authid=msg.caller_authid, + caller_authrole=msg.caller_authrole, + procedure=proc, + enc_algo=msg.enc_algo) + + on_reply = txaio.as_future(endpoint.fn, *invoke_args, **invoke_kwargs) + + def success(res): + del self._invocations[msg.request] + + encoded_payload = None + if msg.enc_algo: + if not self._payload_codec: + log_msg = u"trying to send encrypted payload, but no keyring active" + self.log.warn(log_msg) + else: + try: + if isinstance(res, types.CallResult): + encoded_payload = self._payload_codec.encode(False, proc, res.results, res.kwresults) + else: + encoded_payload = self._payload_codec.encode(False, proc, [res]) + except Exception as e: + self.log.warn( + "failed to encrypt application payload: {err}", + err=e, + ) + + if encoded_payload: + if isinstance(res, types.CallResult): + reply = message.Yield(msg.request, + payload=encoded_payload.payload, + enc_algo=encoded_payload.enc_algo, + enc_key=encoded_payload.enc_key, + enc_serializer=encoded_payload.enc_serializer, + callee=res.callee, + callee_authid=res.callee_authid, + callee_authrole=res.callee_authrole, + forward_for=res.forward_for) + else: + reply = message.Yield(msg.request, + payload=encoded_payload.payload, + enc_algo=encoded_payload.enc_algo, + enc_key=encoded_payload.enc_key, + enc_serializer=encoded_payload.enc_serializer) + else: + if isinstance(res, types.CallResult): + reply = message.Yield(msg.request, + args=res.results, + kwargs=res.kwresults, + callee=res.callee, + callee_authid=res.callee_authid, + callee_authrole=res.callee_authrole, + forward_for=res.forward_for) + else: + reply = message.Yield(msg.request, + args=[res]) + + if self._transport is None: + self.log.debug('Skipping result of "{}", request {} because transport disconnected.'.format(registration.procedure, msg.request)) + return + + try: + self._transport.send(reply) + except SerializationError as e: + # the application-level payload returned from the invoked procedure can't be serialized + reply = message.Error(message.Invocation.MESSAGE_TYPE, msg.request, ApplicationError.INVALID_PAYLOAD, + args=[u'success return value from invoked procedure "{0}" could not be serialized: {1}'.format(registration.procedure, e)]) + self._transport.send(reply) + except PayloadExceededError as e: + # the application-level payload returned from the invoked procedure, when serialized and framed + # for the transport, exceeds the transport message/frame size limit + reply = message.Error(message.Invocation.MESSAGE_TYPE, msg.request, ApplicationError.PAYLOAD_SIZE_EXCEEDED, + args=[u'success return value from invoked procedure "{0}" exceeds transport size limit: {1}'.format(registration.procedure, e)]) + self._transport.send(reply) + + def error(err): + del self._invocations[msg.request] + + errmsg = txaio.failure_message(err) + + try: + self.onUserError(err, errmsg) + except: + pass + + formatted_tb = None + if self.traceback_app: + formatted_tb = txaio.failure_format_traceback(err) + + reply = self._message_from_exception( + message.Invocation.MESSAGE_TYPE, + msg.request, + err.value, + formatted_tb, + msg.enc_algo + ) + + try: + self._transport.send(reply) + except SerializationError as e: + # the application-level payload returned from the invoked procedure can't be serialized + reply = message.Error(message.Invocation.MESSAGE_TYPE, msg.request, ApplicationError.INVALID_PAYLOAD, + args=[u'error return value from invoked procedure "{0}" could not be serialized: {1}'.format(registration.procedure, e)]) + self._transport.send(reply) + except PayloadExceededError as e: + # the application-level payload returned from the invoked procedure, when serialized and framed + # for the transport, exceeds the transport message/frame size limit + reply = message.Error(message.Invocation.MESSAGE_TYPE, msg.request, ApplicationError.PAYLOAD_SIZE_EXCEEDED, + args=[u'success return value from invoked procedure "{0}" exceeds transport size limit: {1}'.format(registration.procedure, e)]) + self._transport.send(reply) + + # we have handled the error, so we eat it + return None + + self._invocations[msg.request] = InvocationRequest(msg.request, on_reply) + + txaio.add_callbacks(on_reply, success, error) + + elif isinstance(msg, message.Interrupt): + + if msg.request not in self._invocations: + # raise ProtocolError("INTERRUPT received for non-pending invocation {0}".format(msg.request)) + self.log.debug('INTERRUPT received for non-pending invocation {request}', request=msg.request) + else: + invoked = self._invocations[msg.request] + # this will result in a CancelledError which will + # be captured by the error handler around line 979 + # to delete the invocation.. + txaio.cancel(invoked.on_reply) + + elif isinstance(msg, message.Registered): + + if msg.request in self._register_reqs: + + # get and pop outstanding register request + request = self._register_reqs.pop(msg.request) + + # create new registration if not yet tracked + if msg.registration not in self._registrations: + registration = Registration(self, msg.registration, request.procedure, request.endpoint) + self._registrations[msg.registration] = registration + else: + raise ProtocolError("REGISTERED received for already existing registration ID {0}".format(msg.registration)) + + txaio.resolve(request.on_reply, registration) + else: + raise ProtocolError("REGISTERED received for non-pending request ID {0}".format(msg.request)) + + elif isinstance(msg, message.Unregistered): + + if msg.request == 0: + # this is a forced un-register either from a call + # to the wamp.* meta-api or the force_reregister + # option + try: + reg = self._registrations[msg.registration] + except KeyError: + raise ProtocolError( + "UNREGISTERED received for non-existant registration" + " ID {0}".format(msg.registration) + ) + self.log.info( + u"Router unregistered procedure '{proc}' with ID {id}", + proc=reg.procedure, + id=msg.registration, + ) + elif msg.request in self._unregister_reqs: + + # get and pop outstanding subscribe request + request = self._unregister_reqs.pop(msg.request) + + # if the registration still exists, mark as inactive and remove .. + if request.registration_id in self._registrations: + self._registrations[request.registration_id].active = False + del self._registrations[request.registration_id] + + # resolve deferred/future for unregistering successfully + txaio.resolve(request.on_reply) + else: + raise ProtocolError("UNREGISTERED received for non-pending request ID {0}".format(msg.request)) + + elif isinstance(msg, message.Error): + + # remove outstanding request and get the reply deferred/future + on_reply = None + + # ERROR reply to CALL + if msg.request_type == message.Call.MESSAGE_TYPE and msg.request in self._call_reqs: + on_reply = self._call_reqs.pop(msg.request).on_reply + + # ERROR reply to PUBLISH + elif msg.request_type == message.Publish.MESSAGE_TYPE and msg.request in self._publish_reqs: + on_reply = self._publish_reqs.pop(msg.request).on_reply + + # ERROR reply to SUBSCRIBE + elif msg.request_type == message.Subscribe.MESSAGE_TYPE and msg.request in self._subscribe_reqs: + on_reply = self._subscribe_reqs.pop(msg.request).on_reply + + # ERROR reply to UNSUBSCRIBE + elif msg.request_type == message.Unsubscribe.MESSAGE_TYPE and msg.request in self._unsubscribe_reqs: + on_reply = self._unsubscribe_reqs.pop(msg.request).on_reply + + # ERROR reply to REGISTER + elif msg.request_type == message.Register.MESSAGE_TYPE and msg.request in self._register_reqs: + on_reply = self._register_reqs.pop(msg.request).on_reply + + # ERROR reply to UNREGISTER + elif msg.request_type == message.Unregister.MESSAGE_TYPE and msg.request in self._unregister_reqs: + on_reply = self._unregister_reqs.pop(msg.request).on_reply + + if on_reply: + if not txaio.is_called(on_reply): + txaio.reject(on_reply, self._exception_from_message(msg)) + else: + raise ProtocolError("WampAppSession.onMessage(): ERROR received for non-pending request_type {0} and request ID {1}".format(msg.request_type, msg.request)) + + else: + + raise ProtocolError("Unexpected message {0}".format(msg.__class__)) + + @public + def onClose(self, wasClean): + """ + Implements :func:`autobahn.wamp.interfaces.ITransportHandler.onClose` + """ + self._transport = None + + if self._session_id: + # fire callback and close the transport + details = types.CloseDetails( + reason=types.CloseDetails.REASON_TRANSPORT_LOST, + message=u'WAMP transport was lost without closing the session {} before'.format(self._session_id), + ) + d = txaio.as_future(self.onLeave, details) + + def success(arg): + # XXX also: handle async + self.fire('leave', self, details) + return arg + + def _error(e): + return self._swallow_error(e, "While firing onLeave") + txaio.add_callbacks(d, success, _error) + + self._session_id = None + + d = txaio.as_future(self.onDisconnect) + + def success(arg): + # XXX do we care about returning 'arg' properly? + return self.fire('disconnect', self, was_clean=wasClean) + + def _error(e): + return self._swallow_error(e, "While firing onDisconnect") + txaio.add_callbacks(d, success, _error) + + @public + def onChallenge(self, challenge): + """ + Implements :func:`autobahn.wamp.interfaces.ISession.onChallenge` + """ + raise Exception("received authentication challenge, but onChallenge not implemented") + + @public + def onJoin(self, details): + """ + Implements :func:`autobahn.wamp.interfaces.ISession.onJoin` + """ + + @public + def onWelcome(self, msg): + """ + Implements :func:`autobahn.wamp.interfaces.ISession.onWelcome` + """ + + def _errback_outstanding_requests(self, exc): + """ + Errback any still outstanding requests with exc. + """ + d = txaio.create_future_success(None) + all_requests = [ + self._publish_reqs, + self._subscribe_reqs, + self._unsubscribe_reqs, + self._call_reqs, + self._register_reqs, + self._unregister_reqs + ] + outstanding = [] + for requests in all_requests: + outstanding.extend(requests.values()) + requests.clear() + + if outstanding: + self.log.info( + 'Cancelling {count} outstanding requests', + count=len(outstanding), + ) + for request in outstanding: + self.log.debug( + 'cleaning up outstanding {request_type} request {request_id}, ' + 'firing errback on user handler {request_on_reply}', + request_on_reply=request.on_reply, + request_id=request.request_id, + request_type=request.__class__.__name__, + ) + if not txaio.is_called(request.on_reply): + txaio.reject(request.on_reply, exc) + + # wait for any async-ness in the error handlers for on_reply + txaio.add_callbacks(d, lambda _: request.on_reply, lambda _: request.on_reply) + return d + + @public + def onLeave(self, details): + """ + Implements :func:`autobahn.wamp.interfaces.ISession.onLeave` + """ + if details.reason != CloseDetails.REASON_DEFAULT: + self.log.warn('session closed with reason {reason} [{message}]', reason=details.reason, message=details.message) + + # fire ApplicationError on any currently outstanding requests + exc = ApplicationError(details.reason, details.message) + d = self._errback_outstanding_requests(exc) + + def disconnect(_): + if self._transport: + self.disconnect() + txaio.add_callbacks(d, disconnect, disconnect) + return d + + @public + def leave(self, reason=None, message=None): + """ + Implements :func:`autobahn.wamp.interfaces.ISession.leave` + """ + if not self._session_id: + raise SessionNotReady(u"session hasn't joined a realm") + + if not self._goodbye_sent: + if not reason: + reason = u"wamp.close.normal" + msg = wamp.message.Goodbye(reason=reason, message=message) + self._transport.send(msg) + self._goodbye_sent = True + else: + self.log.warn('session was already requested to leave - not sending GOODBYE again') + + is_closed = self._transport is None or self._transport.is_closed + + return is_closed + + @public + def onDisconnect(self): + """ + Implements :func:`autobahn.wamp.interfaces.ISession.onDisconnect` + """ + # fire TransportLost on any _still_ outstanding requests + # (these should have been already cleaned up in onLeave() - when + # this actually has fired) + exc = exception.TransportLost() + self._errback_outstanding_requests(exc) + + @public + def publish(self, topic, *args, **kwargs): + """ + Implements :func:`autobahn.wamp.interfaces.IPublisher.publish` + """ + assert(type(topic) == six.text_type) + assert(args is None or type(args) in (list, tuple)) + assert(kwargs is None or type(kwargs) == dict) + + message.check_or_raise_uri(topic, + message='{}.publish()'.format(self.__class__.__name__), + strict=False, + allow_empty_components=False, + allow_none=False) + + options = kwargs.pop('options', None) + if options and not isinstance(options, types.PublishOptions): + raise Exception("options must be of type a.w.t.PublishOptions") + + if kwargs and six.PY2: + kwargs = { + k.decode('utf8'): v + for k, v in kwargs.iteritems() + } + + if not self._transport: + raise exception.TransportLost() + + request_id = self._request_id_gen.next() + + encoded_payload = None + if self._payload_codec: + encoded_payload = self._payload_codec.encode(True, topic, args, kwargs) + + if encoded_payload: + if options: + msg = message.Publish(request_id, + topic, + payload=encoded_payload.payload, + enc_algo=encoded_payload.enc_algo, + enc_key=encoded_payload.enc_key, + enc_serializer=encoded_payload.enc_serializer, + **options.message_attr()) + else: + msg = message.Publish(request_id, + topic, + payload=encoded_payload.payload, + enc_algo=encoded_payload.enc_algo, + enc_key=encoded_payload.enc_key, + enc_serializer=encoded_payload.enc_serializer) + else: + if options: + msg = message.Publish(request_id, + topic, + args=args, + kwargs=kwargs, + **options.message_attr()) + else: + msg = message.Publish(request_id, + topic, + args=args, + kwargs=kwargs) + + if options: + if options.correlation_id is not None: + msg.correlation_id = options.correlation_id + if options.correlation_uri is not None: + msg.correlation_uri = options.correlation_uri + if options.correlation_is_anchor is not None: + msg.correlation_is_anchor = options.correlation_is_anchor + if options.correlation_is_last is not None: + msg.correlation_is_last = options.correlation_is_last + + if options and options.acknowledge: + # only acknowledged publications expect a reply .. + on_reply = txaio.create_future() + self._publish_reqs[request_id] = PublishRequest(request_id, on_reply, was_encrypted=(encoded_payload is not None)) + else: + on_reply = None + + try: + # Notes: + # + # * this might raise autobahn.wamp.exception.SerializationError + # when the user payload cannot be serialized + # * we have to setup a PublishRequest() in _publish_reqs _before_ + # calling transpor.send(), because a mock- or side-by-side transport + # will immediately lead on an incoming WAMP message in onMessage() + # + self._transport.send(msg) + except Exception as e: + if request_id in self._publish_reqs: + del self._publish_reqs[request_id] + raise e + + return on_reply + + @public + def subscribe(self, handler, topic=None, options=None): + """ + Implements :func:`autobahn.wamp.interfaces.ISubscriber.subscribe` + """ + assert((callable(handler) and topic is not None) or hasattr(handler, '__class__')) + assert(topic is None or type(topic) == six.text_type) + assert(options is None or isinstance(options, types.SubscribeOptions)) + + if not self._transport: + raise exception.TransportLost() + + def _subscribe(obj, fn, topic, options): + message.check_or_raise_uri(topic, + message='{}.subscribe()'.format(self.__class__.__name__), + strict=False, + allow_empty_components=True, + allow_none=False) + + request_id = self._request_id_gen.next() + on_reply = txaio.create_future() + handler_obj = Handler(fn, obj, options.details_arg if options else None) + self._subscribe_reqs[request_id] = SubscribeRequest(request_id, topic, on_reply, handler_obj) + + if options: + msg = message.Subscribe(request_id, topic, **options.message_attr()) + else: + msg = message.Subscribe(request_id, topic) + + if options: + if options.correlation_id is not None: + msg.correlation_id = options.correlation_id + if options.correlation_uri is not None: + msg.correlation_uri = options.correlation_uri + if options.correlation_is_anchor is not None: + msg.correlation_is_anchor = options.correlation_is_anchor + if options.correlation_is_last is not None: + msg.correlation_is_last = options.correlation_is_last + + self._transport.send(msg) + return on_reply + + if callable(handler): + # subscribe a single handler + return _subscribe(None, handler, topic, options) + + else: + + # subscribe all methods on an object decorated with "wamp.subscribe" + on_replies = [] + for k in inspect.getmembers(handler.__class__, is_method_or_function): + proc = k[1] + if "_wampuris" in proc.__dict__: + for pat in proc.__dict__["_wampuris"]: + if pat.is_handler(): + _uri = pat.uri() + subopts = pat.options or options + if subopts is None: + if pat.uri_type == uri.Pattern.URI_TYPE_WILDCARD: + subopts = types.SubscribeOptions(match=u"wildcard") + else: + subopts = types.SubscribeOptions(match=u"exact") + on_replies.append(_subscribe(handler, proc, _uri, subopts)) + + # XXX needs coverage + return txaio.gather(on_replies, consume_exceptions=True) + + def _unsubscribe(self, subscription): + """ + Called from :meth:`autobahn.wamp.protocol.Subscription.unsubscribe` + """ + assert(isinstance(subscription, Subscription)) + assert subscription.active + assert(subscription.id in self._subscriptions) + assert(subscription in self._subscriptions[subscription.id]) + + if not self._transport: + raise exception.TransportLost() + + # remove handler subscription and mark as inactive + self._subscriptions[subscription.id].remove(subscription) + subscription.active = False + + # number of handler subscriptions left .. + scount = len(self._subscriptions[subscription.id]) + + if scount == 0: + # if the last handler was removed, unsubscribe from broker .. + request_id = self._request_id_gen.next() + + on_reply = txaio.create_future() + self._unsubscribe_reqs[request_id] = UnsubscribeRequest(request_id, on_reply, subscription.id) + + msg = message.Unsubscribe(request_id, subscription.id) + + self._transport.send(msg) + return on_reply + else: + # there are still handlers active on the subscription! + return txaio.create_future_success(scount) + + @public + def call(self, procedure, *args, **kwargs): + """ + Implements :func:`autobahn.wamp.interfaces.ICaller.call` + """ + assert(type(procedure) == six.text_type) + assert(args is None or type(args) in (list, tuple)) + assert(kwargs is None or type(kwargs) == dict) + + message.check_or_raise_uri(procedure, + message='{}.call()'.format(self.__class__.__name__), + strict=False, + allow_empty_components=False, + allow_none=False) + + options = kwargs.pop('options', None) + if options and not isinstance(options, types.CallOptions): + raise Exception("options must be of type a.w.t.CallOptions") + + if kwargs and six.PY2: + kwargs = { + k.decode('utf8'): v + for k, v in kwargs.iteritems() + } + + if not self._transport: + raise exception.TransportLost() + + request_id = self._request_id_gen.next() + + encoded_payload = None + if self._payload_codec: + try: + encoded_payload = self._payload_codec.encode(True, procedure, args, kwargs) + except: + self.log.failure() + raise + + if encoded_payload: + if options: + msg = message.Call(request_id, + procedure, + payload=encoded_payload.payload, + enc_algo=encoded_payload.enc_algo, + enc_key=encoded_payload.enc_key, + enc_serializer=encoded_payload.enc_serializer, + **options.message_attr()) + else: + msg = message.Call(request_id, + procedure, + payload=encoded_payload.payload, + enc_algo=encoded_payload.enc_algo, + enc_key=encoded_payload.enc_key, + enc_serializer=encoded_payload.enc_serializer) + else: + if options: + msg = message.Call(request_id, + procedure, + args=args, + kwargs=kwargs, + **options.message_attr()) + else: + msg = message.Call(request_id, + procedure, + args=args, + kwargs=kwargs) + + if options: + if options.correlation_id is not None: + msg.correlation_id = options.correlation_id + if options.correlation_uri is not None: + msg.correlation_uri = options.correlation_uri + if options.correlation_is_anchor is not None: + msg.correlation_is_anchor = options.correlation_is_anchor + if options.correlation_is_last is not None: + msg.correlation_is_last = options.correlation_is_last + + def canceller(d): + cancel_msg = message.Cancel(request_id) + self._transport.send(cancel_msg) + # since we announced support for cancelling, we should + # definitely get an Error back for our Cancel which will + # clean up this invocation + + on_reply = txaio.create_future(canceller=canceller) + self._call_reqs[request_id] = CallRequest(request_id, procedure, on_reply, options) + + try: + # Notes: + # + # * this might raise autobahn.wamp.exception.SerializationError + # when the user payload cannot be serialized + # * we have to setup a CallRequest() in _call_reqs _before_ + # calling transpor.send(), because a mock- or side-by-side transport + # will immediately lead on an incoming WAMP message in onMessage() + # + self._transport.send(msg) + except: + if request_id in self._call_reqs: + del self._call_reqs[request_id] + raise + + return on_reply + + @public + def register(self, endpoint, procedure=None, options=None, prefix=None): + """ + Implements :func:`autobahn.wamp.interfaces.ICallee.register` + """ + assert((callable(endpoint) and procedure is not None) or hasattr(endpoint, '__class__')) + assert(procedure is None or type(procedure) == six.text_type) + assert(options is None or isinstance(options, types.RegisterOptions)) + assert prefix is None or isinstance(prefix, six.text_type) + + if not self._transport: + raise exception.TransportLost() + + def _register(obj, fn, procedure, options): + message.check_or_raise_uri(procedure, + message='{}.register()'.format(self.__class__.__name__), + strict=False, + allow_empty_components=True, + allow_none=False) + + request_id = self._request_id_gen.next() + on_reply = txaio.create_future() + endpoint_obj = Endpoint(fn, obj, options.details_arg if options else None) + if prefix is not None: + procedure = u"{}{}".format(prefix, procedure) + self._register_reqs[request_id] = RegisterRequest(request_id, on_reply, procedure, endpoint_obj) + + if options: + msg = message.Register(request_id, procedure, **options.message_attr()) + else: + msg = message.Register(request_id, procedure) + + if options: + if options.correlation_id is not None: + msg.correlation_id = options.correlation_id + if options.correlation_uri is not None: + msg.correlation_uri = options.correlation_uri + if options.correlation_is_anchor is not None: + msg.correlation_is_anchor = options.correlation_is_anchor + if options.correlation_is_last is not None: + msg.correlation_is_last = options.correlation_is_last + + self._transport.send(msg) + return on_reply + + if callable(endpoint): + + # register a single callable + return _register(None, endpoint, procedure, options) + + else: + + # register all methods on an object decorated with "wamp.register" + on_replies = [] + for k in inspect.getmembers(endpoint.__class__, is_method_or_function): + proc = k[1] + if "_wampuris" in proc.__dict__: + for pat in proc.__dict__["_wampuris"]: + if pat.is_endpoint(): + _uri = pat.uri() + regopts = pat.options or options + on_replies.append(_register(endpoint, proc, _uri, regopts)) + + # XXX needs coverage + return txaio.gather(on_replies, consume_exceptions=True) + + def _unregister(self, registration): + """ + Called from :meth:`autobahn.wamp.protocol.Registration.unregister` + """ + assert(isinstance(registration, Registration)) + assert registration.active + assert(registration.id in self._registrations) + + if not self._transport: + raise exception.TransportLost() + + request_id = self._request_id_gen.next() + + on_reply = txaio.create_future() + self._unregister_reqs[request_id] = UnregisterRequest(request_id, on_reply, registration.id) + + msg = message.Unregister(request_id, registration.id) + + self._transport.send(msg) + return on_reply + + +class _SessionShim(ApplicationSession): + """ + shim that lets us present pep8 API for user-classes to override, + but also backwards-compatible for existing code using + ApplicationSession "directly". + + **NOTE:** this is not public or intended for use; you should import + either :class:`autobahn.asyncio.wamp.Session` or + :class:`autobahn.twisted.wamp.Session` depending on which async + framework you're using. + """ + + #: name -> IAuthenticator + _authenticators = None + + def onJoin(self, details): + return self.on_join(details) + + def onConnect(self): + if self._authenticators: + # authid, authrole *must* match across all authenticators + # (checked in add_authenticator) so these lists are either + # [None] or [None, 'some_authid'] + authid = [x._args.get('authid', None) for x in self._authenticators.values()][-1] + authrole = [x._args.get('authrole', None) for x in self._authenticators.values()][-1] + # we need a "merged" authextra here because we can send a + # list of acceptable authmethods, but only a single + # authextra dict + authextra = self._merged_authextra() + self.join( + self.config.realm, + authmethods=list(self._authenticators.keys()), + authid=authid or u'public', + authrole=authrole or u'default', + authextra=authextra, + ) + else: + self.on_connect() + + def onChallenge(self, challenge): + try: + authenticator = self._authenticators[challenge.method] + except KeyError: + raise RuntimeError( + "Received challenge for unknown authmethod '{}'".format( + challenge.method + ) + ) + return authenticator.on_challenge(self, challenge) + + def onWelcome(self, msg): + if msg.authmethod is None or self._authenticators is None: + # no authentication + return + try: + authenticator = self._authenticators[msg.authmethod] + except KeyError: + raise RuntimeError( + "Received onWelcome for unknown authmethod '{}'".format( + msg.authmethod + ) + ) + return authenticator.on_welcome(self, msg.authextra) + + def onLeave(self, details): + return self.on_leave(details) + + def onDisconnect(self): + return self.on_disconnect() + + # experimental authentication API + + def add_authenticator(self, authenticator): + assert isinstance(authenticator, IAuthenticator) + if self._authenticators is None: + self._authenticators = {} + + # before adding this authenticator we need to validate that + # it's consistent with any other authenticators we may have -- + # for example, they must all agree on "authid" etc because + # .join() only takes one value for all of those. + + def at_most_one(name): + uni = set([ + a._args[name] + for a in list(self._authenticators.values()) + [authenticator] + if name in a._args + ]) + if len(uni) > 1: + raise ValueError( + "Inconsistent {}s: {}".format( + name, + ' '.join(uni), + ) + ) + + # all authids must match + at_most_one('authid') + + # all authroles must match + at_most_one('authrole') + + # can we do anything else other than merge all authextra keys? + # here we check that any duplicate keys have the same values + authextra = authenticator.authextra + merged = self._merged_authextra() + for k, v in merged.items(): + if k in authextra and authextra[k] != v: + raise ValueError( + "Inconsistent authextra values for '{}': '{}' vs '{}'".format( + k, v, authextra[k], + ) + ) + + # validation complete, add it + self._authenticators[authenticator.name] = authenticator + + def _merged_authextra(self): + """ + internal helper + + :returns: a single 'authextra' dict, consisting of all keys + from any authenticator's authextra. + + Note that when the authenticator was added, we already checked + that any keys it does contain has the same value as any + existing authextra. + """ + authextras = [a.authextra for a in self._authenticators.values()] + + def extract_keys(x, y): + return x | set(y.keys()) + + unique_keys = reduce(extract_keys, authextras, set()) + + def first_value_for(k): + """ + for anything already in self._authenticators, we checked + that it has the same value for any keys in its authextra -- + so here we just extract the first one + """ + for authextra in authextras: + if k in authextra: + return authextra[k] + # "can't" happen + raise ValueError( + "No values for '{}'".format(k) + ) + + return { + k: first_value_for(k) + for k in unique_keys + } + + # these are the actual "new API" methods (i.e. snake_case) + # + + def on_join(self, details): + pass + + def on_leave(self, details): + self.disconnect() + + def on_connect(self): + self.join(self.config.realm) + + def on_disconnect(self): + pass + + +# ISession.register collides with the abc.ABCMeta.register method +# ISession.register(ApplicationSession) + + +class ApplicationSessionFactory(object): + """ + WAMP endpoint session factory. + """ + + session = ApplicationSession + """ + WAMP application session class to be used in this factory. + """ + + def __init__(self, config=None): + """ + + :param config: The default component configuration. + :type config: instance of :class:`autobahn.wamp.types.ComponentConfig` + """ + self.config = config or types.ComponentConfig(realm=u"realm1") + + def __call__(self): + """ + Creates a new WAMP application session. + + :returns: -- An instance of the WAMP application session class as + given by `self.session`. + """ + session = self.session(self.config) + session.factory = self + return session diff --git a/venv/lib/python3.7/site-packages/autobahn/wamp/test/test_cryptobox.py b/venv/lib/python3.7/site-packages/autobahn/wamp/test/test_cryptobox.py new file mode 100644 index 0000000..74e785b --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/wamp/test/test_cryptobox.py @@ -0,0 +1,39 @@ +############################################################################### +# +# The MIT License (MIT) +# +# Copyright (c) Crossbar.io Technologies GmbH +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +############################################################################### + +from __future__ import absolute_import + +from autobahn.wamp import cryptobox + +import unittest + + +@unittest.skipIf(not cryptobox.HAS_CRYPTOBOX, 'no cryptobox support present') +class TestCryptoBox(unittest.TestCase): + + def test_create_keyring(self): + kr = cryptobox.KeyRing() + assert kr diff --git a/venv/lib/python3.7/site-packages/autobahn/wamp/test/test_cryptosign.py b/venv/lib/python3.7/site-packages/autobahn/wamp/test/test_cryptosign.py new file mode 100644 index 0000000..ebf3768 --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/wamp/test/test_cryptosign.py @@ -0,0 +1,127 @@ +############################################################################### +# +# The MIT License (MIT) +# +# Copyright (c) Crossbar.io Technologies GmbH +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +############################################################################### + +from __future__ import absolute_import + +import hashlib +import os + +from mock import Mock + +import txaio + +if os.environ.get('USE_TWISTED', False): + txaio.use_twisted() +elif os.environ.get('USE_ASYNCIO', False): + txaio.use_asyncio() +else: + raise Exception('no networking framework selected') + +from autobahn.wamp.cryptosign import _makepad, HAS_CRYPTOSIGN +from autobahn.wamp import types +from autobahn.wamp.auth import create_authenticator + +if HAS_CRYPTOSIGN: + from autobahn.wamp.cryptosign import SigningKey + from nacl.encoding import HexEncoder + +import tempfile + +import unittest + +keybody = '''-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW +QyNTUxOQAAACAa38i/4dNWFuZN/72QAJbyOwZvkUyML/u2b2B1uW4RbQAAAJj4FLyB+BS8 +gQAAAAtzc2gtZWQyNTUxOQAAACAa38i/4dNWFuZN/72QAJbyOwZvkUyML/u2b2B1uW4RbQ +AAAEBNV9l6aPVVaWYgpthJwM5YJWhRjXKet1PcfHMt4oBFEBrfyL/h01YW5k3/vZAAlvI7 +Bm+RTIwv+7ZvYHW5bhFtAAAAFXNvbWV1c2VyQGZ1bmt0aGF0LmNvbQ== +-----END OPENSSH PRIVATE KEY-----''' + +pubkey = '''ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJVp3hjHwIQyEladzd8mFcf0YSXcmyKS3qMLB7VqTQKm someuser@example.com +''' + + +@unittest.skipIf(not HAS_CRYPTOSIGN, 'nacl library not present') +class TestAuth(unittest.TestCase): + + def setUp(self): + self.key = SigningKey.from_ssh_data(keybody) + self.privkey_hex = self.key._key.encode(encoder=HexEncoder) + m = hashlib.sha256() + m.update("some TLS message".encode()) + self.channel_id = m.digest() + + def test_valid(self): + session = Mock() + session._transport.get_channel_id = Mock(return_value=self.channel_id) + challenge = types.Challenge(u"ticket", dict(challenge="ff" * 32)) + signed = yield self.key.sign_challenge(session, challenge) + self.assertEqual( + u'9b6f41540c9b95b4b7b281c3042fa9c54cef43c842d62ea3fd6030fcb66e70b3e80d49d44c29d1635da9348d02ec93f3ed1ef227dfb59a07b580095c2b82f80f9d16ca518aa0c2b707f2b2a609edeca73bca8dd59817a633f35574ac6fd80d00', + signed.result, + ) + + def test_authenticator(self): + authenticator = create_authenticator( + u"cryptosign", + authid="someone", + privkey=self.privkey_hex, + ) + session = Mock() + session._transport.get_channel_id = Mock(return_value=self.channel_id) + challenge = types.Challenge(u"cryptosign", dict(challenge="ff" * 32)) + reply = yield authenticator.on_challenge(session, challenge) + self.assertEqual( + reply.result, + u'9b6f41540c9b95b4b7b281c3042fa9c54cef43c842d62ea3fd6030fcb66e70b3e80d49d44c29d1635da9348d02ec93f3ed1ef227dfb59a07b580095c2b82f80f9d16ca518aa0c2b707f2b2a609edeca73bca8dd59817a633f35574ac6fd80d00', + ) + + +class TestKey(unittest.TestCase): + + def test_pad(self): + self.assertEqual(_makepad(0), '') + self.assertEqual(_makepad(2), '\x01\x02') + self.assertEqual(_makepad(3), '\x01\x02\x03') + + @unittest.skipIf(not HAS_CRYPTOSIGN, 'nacl library not present') + def test_key(self): + with tempfile.NamedTemporaryFile('w+t') as fp: + fp.write(keybody) + fp.seek(0) + + key = SigningKey.from_ssh_key(fp.name) + self.assertEqual(key.public_key(), '1adfc8bfe1d35616e64dffbd900096f23b066f914c8c2ffbb66f6075b96e116d') + + @unittest.skipIf(not HAS_CRYPTOSIGN, 'nacl library not present') + def test_pubkey(self): + with tempfile.NamedTemporaryFile('w+t') as fp: + fp.write(pubkey) + fp.seek(0) + + key = SigningKey.from_ssh_key(fp.name) + self.assertEqual(key.public_key(), '9569de18c7c0843212569dcddf2615c7f46125dc9b2292dea30b07b56a4d02a6') + self.assertEqual(key.comment(), 'someuser@example.com') diff --git a/venv/lib/python3.7/site-packages/autobahn/wamp/test/test_uri_pattern.py b/venv/lib/python3.7/site-packages/autobahn/wamp/test/test_uri_pattern.py new file mode 100644 index 0000000..bb189db --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/wamp/test/test_uri_pattern.py @@ -0,0 +1,580 @@ +############################################################################### +# +# The MIT License (MIT) +# +# Copyright (c) Crossbar.io Technologies GmbH +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +############################################################################### + +from __future__ import absolute_import + +from autobahn import wamp +from autobahn.wamp.uri import Pattern, RegisterOptions, SubscribeOptions + +import unittest + + +class TestUris(unittest.TestCase): + + def test_invalid_uris(self): + for u in [u"", + u"com.myapp..update", + u"com.myapp.<123:int>.update", + u"com.myapp.<:product>.update", + u"com.myapp..update", + u"com.myapp..update", + ]: + self.assertRaises(Exception, Pattern, u, Pattern.URI_TARGET_ENDPOINT) + + def test_valid_uris(self): + for u in [u"com.myapp.proc1", + u"123", + u"com.myapp..update", + u"com.myapp...list" + u"com.myapp.something..update" + ]: + p = Pattern(u, Pattern.URI_TARGET_ENDPOINT) + self.assertIsInstance(p, Pattern) + + def test_parse_uris(self): + tests = [ + (u"com.myapp..update", [ + (u"com.myapp.0.update", {u'product': 0}), + (u"com.myapp.123456.update", {u'product': 123456}), + (u"com.myapp.aaa.update", None), + (u"com.myapp..update", None), + (u"com.myapp.0.delete", None), + ] + ), + (u"com.myapp..update", [ + (u"com.myapp.box.update", {u'product': u'box'}), + (u"com.myapp.123456.update", {u'product': u'123456'}), + (u"com.myapp..update", None), + ] + ), + (u"com.myapp..update", [ + (u"com.myapp.0.update", {u'product': u'0'}), + (u"com.myapp.abc.update", {u'product': u'abc'}), + (u"com.myapp..update", None), + ] + ), + (u"com.myapp...list", [ + (u"com.myapp.cosmetic.shampoo.list", {u'category': u'cosmetic', u'subcategory': u'shampoo'}), + (u"com.myapp...list", None), + (u"com.myapp.cosmetic..list", None), + (u"com.myapp..shampoo.list", None), + ] + ) + ] + for test in tests: + pat = Pattern(test[0], Pattern.URI_TARGET_ENDPOINT) + for ptest in test[1]: + uri = ptest[0] + kwargs_should = ptest[1] + if kwargs_should is not None: + args_is, kwargs_is = pat.match(uri) + self.assertEqual(kwargs_is, kwargs_should) + else: + self.assertRaises(Exception, pat.match, uri) + + +class TestDecorators(unittest.TestCase): + + def test_decorate_endpoint(self): + + @wamp.register(u"com.calculator.square") + def square(_): + """Do nothing.""" + + self.assertTrue(hasattr(square, '_wampuris')) + self.assertTrue(type(square._wampuris) == list) + self.assertEqual(len(square._wampuris), 1) + self.assertIsInstance(square._wampuris[0], Pattern) + self.assertTrue(square._wampuris[0].is_endpoint()) + self.assertFalse(square._wampuris[0].is_handler()) + self.assertFalse(square._wampuris[0].is_exception()) + self.assertEqual(square._wampuris[0].uri(), u"com.calculator.square") + self.assertEqual(square._wampuris[0]._type, Pattern.URI_TYPE_EXACT) + + @wamp.register(u"com.myapp.product..update") + def update_product(product=None, label=None): + """Do nothing.""" + + self.assertTrue(hasattr(update_product, '_wampuris')) + self.assertTrue(type(update_product._wampuris) == list) + self.assertEqual(len(update_product._wampuris), 1) + self.assertIsInstance(update_product._wampuris[0], Pattern) + self.assertTrue(update_product._wampuris[0].is_endpoint()) + self.assertFalse(update_product._wampuris[0].is_handler()) + self.assertFalse(update_product._wampuris[0].is_exception()) + self.assertEqual(update_product._wampuris[0].uri(), u"com.myapp.product..update") + self.assertEqual(update_product._wampuris[0]._type, Pattern.URI_TYPE_WILDCARD) + + @wamp.register(u"com.myapp...update") + def update(category=None, cid=None): + """Do nothing.""" + + self.assertTrue(hasattr(update, '_wampuris')) + self.assertTrue(type(update._wampuris) == list) + self.assertEqual(len(update._wampuris), 1) + self.assertIsInstance(update._wampuris[0], Pattern) + self.assertTrue(update._wampuris[0].is_endpoint()) + self.assertFalse(update._wampuris[0].is_handler()) + self.assertFalse(update._wampuris[0].is_exception()) + self.assertEqual(update._wampuris[0].uri(), u"com.myapp...update") + self.assertEqual(update._wampuris[0]._type, Pattern.URI_TYPE_WILDCARD) + + @wamp.register(u"com.myapp.circle.", + RegisterOptions(match=u"wildcard", details_arg="details")) + def circle(name=None, details=None): + """ Do nothing. """ + + self.assertTrue(hasattr(circle, '_wampuris')) + self.assertTrue(type(circle._wampuris) == list) + self.assertEqual(len(circle._wampuris), 1) + self.assertIsInstance(circle._wampuris[0], Pattern) + self.assertIsInstance(circle._wampuris[0].options, RegisterOptions) + self.assertEqual(circle._wampuris[0].options.match, u"wildcard") + self.assertEqual(circle._wampuris[0].options.details_arg, "details") + self.assertTrue(circle._wampuris[0].is_endpoint()) + self.assertFalse(circle._wampuris[0].is_handler()) + self.assertFalse(circle._wampuris[0].is_exception()) + self.assertEqual(circle._wampuris[0].uri(), u"com.myapp.circle.") + self.assertEqual(circle._wampuris[0]._type, Pattern.URI_TYPE_WILDCARD) + + @wamp.register(u"com.myapp.something..update", + RegisterOptions(match=u"wildcard", details_arg="details")) + def something(dynamic=None, details=None): + """ Do nothing. """ + self.assertTrue(hasattr(something, '_wampuris')) + self.assertTrue(type(something._wampuris) == list) + self.assertEqual(len(something._wampuris), 1) + self.assertIsInstance(something._wampuris[0], Pattern) + self.assertIsInstance(something._wampuris[0].options, RegisterOptions) + self.assertEqual(something._wampuris[0].options.match, u"wildcard") + self.assertEqual(something._wampuris[0].options.details_arg, "details") + self.assertTrue(something._wampuris[0].is_endpoint()) + self.assertFalse(something._wampuris[0].is_handler()) + self.assertFalse(something._wampuris[0].is_exception()) + self.assertEqual(something._wampuris[0].uri(), u"com.myapp.something..update") + self.assertEqual(something._wampuris[0]._type, Pattern.URI_TYPE_WILDCARD) + + def test_decorate_handler(self): + + @wamp.subscribe(u"com.myapp.on_shutdown") + def on_shutdown(): + """Do nothing.""" + + self.assertTrue(hasattr(on_shutdown, '_wampuris')) + self.assertTrue(type(on_shutdown._wampuris) == list) + self.assertEqual(len(on_shutdown._wampuris), 1) + self.assertIsInstance(on_shutdown._wampuris[0], Pattern) + self.assertFalse(on_shutdown._wampuris[0].is_endpoint()) + self.assertTrue(on_shutdown._wampuris[0].is_handler()) + self.assertFalse(on_shutdown._wampuris[0].is_exception()) + self.assertEqual(on_shutdown._wampuris[0].uri(), u"com.myapp.on_shutdown") + self.assertEqual(on_shutdown._wampuris[0]._type, Pattern.URI_TYPE_EXACT) + + @wamp.subscribe(u"com.myapp.product..on_update") + def on_product_update(product=None, label=None): + """Do nothing.""" + + self.assertTrue(hasattr(on_product_update, '_wampuris')) + self.assertTrue(type(on_product_update._wampuris) == list) + self.assertEqual(len(on_product_update._wampuris), 1) + self.assertIsInstance(on_product_update._wampuris[0], Pattern) + self.assertFalse(on_product_update._wampuris[0].is_endpoint()) + self.assertTrue(on_product_update._wampuris[0].is_handler()) + self.assertFalse(on_product_update._wampuris[0].is_exception()) + self.assertEqual(on_product_update._wampuris[0].uri(), u"com.myapp.product..on_update") + self.assertEqual(on_product_update._wampuris[0]._type, Pattern.URI_TYPE_WILDCARD) + + @wamp.subscribe(u"com.myapp...on_update") + def on_update(category=None, cid=None, label=None): + """Do nothing.""" + + self.assertTrue(hasattr(on_update, '_wampuris')) + self.assertTrue(type(on_update._wampuris) == list) + self.assertEqual(len(on_update._wampuris), 1) + self.assertIsInstance(on_update._wampuris[0], Pattern) + self.assertFalse(on_update._wampuris[0].is_endpoint()) + self.assertTrue(on_update._wampuris[0].is_handler()) + self.assertFalse(on_update._wampuris[0].is_exception()) + self.assertEqual(on_update._wampuris[0].uri(), u"com.myapp...on_update") + self.assertEqual(on_update._wampuris[0]._type, Pattern.URI_TYPE_WILDCARD) + + @wamp.subscribe(u"com.myapp.on.", + SubscribeOptions(match=u"wildcard", details_arg="details")) + def on_event(event=None, details=None): + """ Do nothing. """ + + self.assertTrue(hasattr(on_event, '_wampuris')) + self.assertTrue(type(on_event._wampuris) == list) + self.assertEqual(len(on_event._wampuris), 1) + self.assertIsInstance(on_event._wampuris[0], Pattern) + self.assertIsInstance(on_event._wampuris[0].options, SubscribeOptions) + self.assertEqual(on_event._wampuris[0].options.match, u"wildcard") + self.assertEqual(on_event._wampuris[0].options.details_arg, "details") + self.assertFalse(on_event._wampuris[0].is_endpoint()) + self.assertTrue(on_event._wampuris[0].is_handler()) + self.assertFalse(on_event._wampuris[0].is_exception()) + self.assertEqual(on_event._wampuris[0].uri(), u"com.myapp.on.") + self.assertEqual(on_event._wampuris[0]._type, Pattern.URI_TYPE_WILDCARD) + + def test_decorate_exception(self): + + @wamp.error(u"com.myapp.error") + class AppError(Exception): + """Do nothing.""" + + self.assertTrue(hasattr(AppError, '_wampuris')) + self.assertTrue(type(AppError._wampuris) == list) + self.assertEqual(len(AppError._wampuris), 1) + self.assertIsInstance(AppError._wampuris[0], Pattern) + self.assertFalse(AppError._wampuris[0].is_endpoint()) + self.assertFalse(AppError._wampuris[0].is_handler()) + self.assertTrue(AppError._wampuris[0].is_exception()) + self.assertEqual(AppError._wampuris[0].uri(), u"com.myapp.error") + self.assertEqual(AppError._wampuris[0]._type, Pattern.URI_TYPE_EXACT) + + @wamp.error(u"com.myapp.product..product_inactive") + class ProductInactiveError(Exception): + """Do nothing.""" + + self.assertTrue(hasattr(ProductInactiveError, '_wampuris')) + self.assertTrue(type(ProductInactiveError._wampuris) == list) + self.assertEqual(len(ProductInactiveError._wampuris), 1) + self.assertIsInstance(ProductInactiveError._wampuris[0], Pattern) + self.assertFalse(ProductInactiveError._wampuris[0].is_endpoint()) + self.assertFalse(ProductInactiveError._wampuris[0].is_handler()) + self.assertTrue(ProductInactiveError._wampuris[0].is_exception()) + self.assertEqual(ProductInactiveError._wampuris[0].uri(), u"com.myapp.product..product_inactive") + self.assertEqual(ProductInactiveError._wampuris[0]._type, Pattern.URI_TYPE_WILDCARD) + + @wamp.error(u"com.myapp...inactive") + class ObjectInactiveError(Exception): + """Do nothing.""" + + self.assertTrue(hasattr(ObjectInactiveError, '_wampuris')) + self.assertTrue(type(ObjectInactiveError._wampuris) == list) + self.assertEqual(len(ObjectInactiveError._wampuris), 1) + self.assertIsInstance(ObjectInactiveError._wampuris[0], Pattern) + self.assertFalse(ObjectInactiveError._wampuris[0].is_endpoint()) + self.assertFalse(ObjectInactiveError._wampuris[0].is_handler()) + self.assertTrue(ObjectInactiveError._wampuris[0].is_exception()) + self.assertEqual(ObjectInactiveError._wampuris[0].uri(), u"com.myapp...inactive") + self.assertEqual(ObjectInactiveError._wampuris[0]._type, Pattern.URI_TYPE_WILDCARD) + + def test_match_decorated_endpoint(self): + + @wamp.register(u"com.calculator.square") + def square(x): + return x + + args, kwargs = square._wampuris[0].match(u"com.calculator.square") + self.assertEqual(square(666, **kwargs), 666) + + @wamp.register(u"com.myapp.product..update") + def update_product(product=None, label=None): + return product, label + + args, kwargs = update_product._wampuris[0].match(u"com.myapp.product.123456.update") + kwargs['label'] = "foobar" + self.assertEqual(update_product(**kwargs), (123456, "foobar")) + + @wamp.register(u"com.myapp...update") + def update(category=None, cid=None, label=None): + return category, cid, label + + args, kwargs = update._wampuris[0].match(u"com.myapp.product.123456.update") + kwargs['label'] = "foobar" + self.assertEqual(update(**kwargs), ("product", 123456, "foobar")) + + def test_match_decorated_handler(self): + + @wamp.subscribe(u"com.myapp.on_shutdown") + def on_shutdown(): + pass + + args, kwargs = on_shutdown._wampuris[0].match(u"com.myapp.on_shutdown") + self.assertEqual(on_shutdown(**kwargs), None) + + @wamp.subscribe(u"com.myapp.product..on_update") + def on_product_update(product=None, label=None): + return product, label + + args, kwargs = on_product_update._wampuris[0].match(u"com.myapp.product.123456.on_update") + kwargs['label'] = "foobar" + self.assertEqual(on_product_update(**kwargs), (123456, "foobar")) + + @wamp.subscribe(u"com.myapp...on_update") + def on_update(category=None, cid=None, label=None): + return category, cid, label + + args, kwargs = on_update._wampuris[0].match(u"com.myapp.product.123456.on_update") + kwargs['label'] = "foobar" + self.assertEqual(on_update(**kwargs), ("product", 123456, "foobar")) + + def test_match_decorated_exception(self): + + @wamp.error(u"com.myapp.error") + class AppError(Exception): + + def __init__(self, msg): + Exception.__init__(self, msg) + + def __eq__(self, other): + return self.__class__ == other.__class__ and \ + self.args == other.args + + args, kwargs = AppError._wampuris[0].match(u"com.myapp.error") + # noinspection PyArgumentList + self.assertEqual(AppError(u"fuck", **kwargs), AppError(u"fuck")) + + @wamp.error(u"com.myapp.product..product_inactive") + class ProductInactiveError(Exception): + + def __init__(self, msg, product=None): + Exception.__init__(self, msg) + self.product = product + + def __eq__(self, other): + return self.__class__ == other.__class__ and \ + self.args == other.args and \ + self.product == other.product + + args, kwargs = ProductInactiveError._wampuris[0].match(u"com.myapp.product.123456.product_inactive") + self.assertEqual(ProductInactiveError("fuck", **kwargs), ProductInactiveError("fuck", 123456)) + + @wamp.error(u"com.myapp...inactive") + class ObjectInactiveError(Exception): + + def __init__(self, msg, category=None, product=None): + Exception.__init__(self, msg) + self.category = category + self.product = product + + def __eq__(self, other): + return self.__class__ == other.__class__ and \ + self.args == other.args and \ + self.category == other.category and \ + self.product == other.product + + args, kwargs = ObjectInactiveError._wampuris[0].match(u"com.myapp.product.123456.inactive") + self.assertEqual(ObjectInactiveError("fuck", **kwargs), ObjectInactiveError("fuck", "product", 123456)) + + +class KwException(Exception): + def __init__(self, *args, **kwargs): + Exception.__init__(self, *args) + self.kwargs = kwargs + +# what if the WAMP error message received +# contains args/kwargs that cannot be +# consumed by the constructor of the exception +# class defined for the WAMP error URI? + +# 1. we can bail out (but we are already signaling an error) +# 2. we can require a generic constructor +# 3. we can map only unconsumed args/kwargs to generic attributes +# 4. we can silently drop unconsumed args/kwargs + + +class MockSession(object): + + def __init__(self): + self._ecls_to_uri_pat = {} + self._uri_to_ecls = {} + + def define(self, exception, error=None): + if error is None: + assert(hasattr(exception, '_wampuris')) + self._ecls_to_uri_pat[exception] = exception._wampuris + self._uri_to_ecls[exception._wampuris[0].uri()] = exception + else: + assert(not hasattr(exception, '_wampuris')) + self._ecls_to_uri_pat[exception] = [Pattern(error, Pattern.URI_TARGET_HANDLER)] + self._uri_to_ecls[error] = exception + + def map_error(self, error, args=None, kwargs=None): + + # FIXME: + # 1. map to ecls based on error URI wildcard/prefix + # 2. extract additional args/kwargs from error URI + + if error in self._uri_to_ecls: + ecls = self._uri_to_ecls[error] + try: + # the following might fail, eg. TypeError when + # signature of exception constructor is incompatible + # with args/kwargs or when the exception constructor raises + if kwargs: + if args: + exc = ecls(*args, **kwargs) + else: + exc = ecls(**kwargs) + else: + if args: + exc = ecls(*args) + else: + exc = ecls() + except Exception: + # FIXME: log e + exc = KwException(error, *args, **kwargs) + else: + # this never fails + args = args or [] + kwargs = kwargs or {} + exc = KwException(error, *args, **kwargs) + return exc + + +class TestDecoratorsAdvanced(unittest.TestCase): + + def test_decorate_exception_non_exception(self): + + def test(): + # noinspection PyUnusedLocal + @wamp.error(u"com.test.error") + class Foo(object): + pass + + self.assertRaises(Exception, test) + + def test_decorate_endpoint_multiple(self): + + # noinspection PyUnusedLocal + @wamp.register(u"com.oldapp.oldproc") + @wamp.register(u"com.calculator.square") + def square(x): + """Do nothing.""" + + self.assertTrue(hasattr(square, '_wampuris')) + self.assertTrue(type(square._wampuris) == list) + self.assertEqual(len(square._wampuris), 2) + + for i in range(2): + self.assertIsInstance(square._wampuris[i], Pattern) + self.assertTrue(square._wampuris[i].is_endpoint()) + self.assertFalse(square._wampuris[i].is_handler()) + self.assertFalse(square._wampuris[i].is_exception()) + self.assertEqual(square._wampuris[i]._type, Pattern.URI_TYPE_EXACT) + + self.assertEqual(square._wampuris[0].uri(), u"com.calculator.square") + self.assertEqual(square._wampuris[1].uri(), u"com.oldapp.oldproc") + + def test_marshal_decorated_exception(self): + + @wamp.error(u"com.myapp.error") + class AppError(Exception): + pass + + try: + raise AppError("fuck") + except Exception as e: + self.assertEqual(e._wampuris[0].uri(), u"com.myapp.error") + + @wamp.error(u"com.myapp.product..product_inactive") + class ProductInactiveError(Exception): + + def __init__(self, msg, product=None): + Exception.__init__(self, msg) + self.product = product + + try: + raise ProductInactiveError("fuck", 123456) + except Exception as e: + self.assertEqual(e._wampuris[0].uri(), u"com.myapp.product..product_inactive") + + session = MockSession() + session.define(AppError) + + def test_define_exception_undecorated(self): + + session = MockSession() + + class AppError(Exception): + pass + + # defining an undecorated exception requires + # an URI to be provided + self.assertRaises(Exception, session.define, AppError) + + session.define(AppError, u"com.myapp.error") + + exc = session.map_error(u"com.myapp.error") + self.assertIsInstance(exc, AppError) + + def test_define_exception_decorated(self): + + session = MockSession() + + @wamp.error(u"com.myapp.error") + class AppError(Exception): + pass + + # when defining a decorated exception + # an URI must not be provided + self.assertRaises(Exception, session.define, AppError, u"com.myapp.error") + + session.define(AppError) + + exc = session.map_error(u"com.myapp.error") + self.assertIsInstance(exc, AppError) + + def test_map_exception_undefined(self): + + session = MockSession() + + exc = session.map_error(u"com.myapp.error") + self.assertIsInstance(exc, Exception) + + def test_map_exception_args(self): + + session = MockSession() + + @wamp.error(u"com.myapp.error") + class AppError(Exception): + pass + + @wamp.error(u"com.myapp.error.product_inactive") + class ProductInactiveError(Exception): + def __init__(self, product=None): + self.product = product + + # define exceptions in mock session + session.define(AppError) + session.define(ProductInactiveError) + + for test in [ + # (u"com.myapp.foo.error", [], {}, KwException), + (u"com.myapp.error", [], {}, AppError), + (u"com.myapp.error", ["you are doing it wrong"], {}, AppError), + (u"com.myapp.error", ["you are doing it wrong", 1, 2, 3], {}, AppError), + + (u"com.myapp.error.product_inactive", [], {}, ProductInactiveError), + (u"com.myapp.error.product_inactive", [], {"product": 123456}, ProductInactiveError), + ]: + error, args, kwargs, ecls = test + exc = session.map_error(error, args, kwargs) + + self.assertIsInstance(exc, ecls) + self.assertEqual(list(exc.args), args) diff --git a/venv/lib/python3.7/site-packages/autobahn/wamp/types.py b/venv/lib/python3.7/site-packages/autobahn/wamp/types.py new file mode 100644 index 0000000..04767c8 --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/wamp/types.py @@ -0,0 +1,1371 @@ +############################################################################### +# +# The MIT License (MIT) +# +# Copyright (c) Crossbar.io Technologies GmbH +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +############################################################################### + +from __future__ import absolute_import + +import six + +from autobahn.util import public + +from autobahn.wamp.request import Subscription, Registration + + +__all__ = ( + 'ComponentConfig', + 'HelloReturn', + 'Accept', + 'Deny', + 'Challenge', + 'HelloDetails', + 'SessionDetails', + 'SessionIdent', + 'CloseDetails', + 'SubscribeOptions', + 'EventDetails', + 'PublishOptions', + 'RegisterOptions', + 'CallDetails', + 'CallOptions', + 'CallResult', + 'EncodedPayload' +) + + +@public +class ComponentConfig(object): + """ + WAMP application component configuration. An instance of this class is + provided to the constructor of :class:`autobahn.wamp.protocol.ApplicationSession`. + """ + + __slots__ = ( + 'realm', + 'extra', + 'keyring', + 'controller', + 'shared', + 'runner', + ) + + def __init__(self, realm=None, extra=None, keyring=None, controller=None, shared=None, runner=None): + """ + + :param realm: The realm the session would like to join or ``None`` to let the router + auto-decide the realm (if the router is configured and allowing to do so). + :type realm: str + + :param extra: Optional user-supplied object with extra configuration. + This can be any object you like, and is accessible in your + `ApplicationSession` subclass via `self.config.extra`. `dict` is + a good default choice. Important: if the component is to be hosted + by Crossbar.io, the supplied value must be JSON serializable. + :type extra: arbitrary + + :param keyring: A mapper from WAMP URIs to "from"/"to" Ed25519 keys. When using + WAMP end-to-end encryption, application payload is encrypted using a + symmetric message key, which in turn is encrypted using the "to" URI (topic being + published to or procedure being called) public key and the "from" URI + private key. In both cases, the key for the longest matching URI is used. + :type keyring: obj implementing IKeyRing or None + + :param controller: A WAMP ApplicationSession instance that holds a session to + a controlling entity. This optional feature needs to be supported by a WAMP + component hosting run-time. + :type controller: instance of ApplicationSession or None + + :param shared: A dict object to exchange user information or hold user objects shared + between components run under the same controlling entity. This optional feature + needs to be supported by a WAMP component hosting run-time. Use with caution, as using + this feature can introduce coupling between components. A valid use case would be + to hold a shared database connection pool. + :type shared: dict or None + + :param runner: Instance of ApplicationRunner when run under this. + :type runner: :class:`autobahn.twisted.wamp.ApplicationRunner` + """ + assert(realm is None or type(realm) == six.text_type) + # assert(keyring is None or ...) # FIXME + + self.realm = realm + self.extra = extra + self.keyring = keyring + self.controller = controller + self.shared = shared + self.runner = runner + + def __str__(self): + return u"ComponentConfig(realm=<{}>, extra={}, keyring={}, controller={}, shared={}, runner={})".format(self.realm, self.extra, self.keyring, self.controller, self.shared, self.runner) + + +@public +class HelloReturn(object): + """ + Base class for ``HELLO`` return information. + """ + + +@public +class Accept(HelloReturn): + """ + Information to accept a ``HELLO``. + """ + + __slots__ = ( + 'realm', + 'authid', + 'authrole', + 'authmethod', + 'authprovider', + 'authextra', + ) + + def __init__(self, realm=None, authid=None, authrole=None, authmethod=None, authprovider=None, authextra=None): + """ + + :param realm: The realm the client is joined to. + :type realm: str + + :param authid: The authentication ID the client is assigned, e.g. ``"joe"`` or ``"joe@example.com"``. + :type authid: str + + :param authrole: The authentication role the client is assigned, e.g. ``"anonymous"``, ``"user"`` or ``"com.myapp.user"``. + :type authrole: str + + :param authmethod: The authentication method that was used to authenticate the client, e.g. ``"cookie"`` or ``"wampcra"``. + :type authmethod: str + + :param authprovider: The authentication provider that was used to authenticate the client, e.g. ``"mozilla-persona"``. + :type authprovider: str + + :param authextra: Application-specific authextra to be forwarded to the client in `WELCOME.details.authextra`. + :type authextra: dict + """ + assert(realm is None or type(realm) == six.text_type) + assert(authid is None or type(authid) == six.text_type) + assert(authrole is None or type(authrole) == six.text_type) + assert(authmethod is None or type(authmethod) == six.text_type) + assert(authprovider is None or type(authprovider) == six.text_type) + assert(authextra is None or type(authextra) == dict) + + self.realm = realm + self.authid = authid + self.authrole = authrole + self.authmethod = authmethod + self.authprovider = authprovider + self.authextra = authextra + + def __str__(self): + return u"Accept(realm=<{}>, authid=<{}>, authrole=<{}>, authmethod={}, authprovider={}, authextra={})".format(self.realm, self.authid, self.authrole, self.authmethod, self.authprovider, self.authextra) + + +@public +class Deny(HelloReturn): + """ + Information to deny a ``HELLO``. + """ + + __slots__ = ( + 'reason', + 'message', + ) + + def __init__(self, reason=u'wamp.error.not_authorized', message=None): + """ + + :param reason: The reason of denying the authentication (an URI, e.g. ``u'wamp.error.not_authorized'``) + :type reason: str + + :param message: A human readable message (for logging purposes). + :type message: str + """ + assert(type(reason) == six.text_type) + assert(message is None or type(message) == six.text_type) + + self.reason = reason + self.message = message + + def __str__(self): + return u"Deny(reason=<{}>, message='{}')".format(self.reason, self.message) + + +@public +class Challenge(HelloReturn): + """ + Information to challenge the client upon ``HELLO``. + """ + + __slots__ = ( + 'method', + 'extra', + ) + + def __init__(self, method, extra=None): + """ + + :param method: The authentication method for the challenge (e.g. ``"wampcra"``). + :type method: str + + :param extra: Any extra information for the authentication challenge. This is + specific to the authentication method. + :type extra: dict + """ + assert(type(method) == six.text_type) + assert(extra is None or type(extra) == dict) + + self.method = method + self.extra = extra or {} + + def __str__(self): + return u"Challenge(method={}, extra={})".format(self.method, self.extra) + + +@public +class HelloDetails(object): + """ + Provides details of a WAMP session while still attaching. + """ + + __slots__ = ( + 'realm', + 'authmethods', + 'authid', + 'authrole', + 'authextra', + 'session_roles', + 'pending_session', + 'resumable', + 'resume_session', + 'resume_token', + ) + + def __init__(self, realm=None, authmethods=None, authid=None, authrole=None, authextra=None, session_roles=None, pending_session=None, resumable=None, resume_session=None, resume_token=None): + """ + + :param realm: The realm the client wants to join. + :type realm: str or None + + :param authmethods: The authentication methods the client is willing to perform. + :type authmethods: list of str or None + + :param authid: The authid the client wants to authenticate as. + :type authid: str or None + + :param authrole: The authrole the client wants to authenticate as. + :type authrole: str or None + + :param authextra: Any extra information the specific authentication method requires the client to send. + :type authextra: arbitrary or None + + :param session_roles: The WAMP session roles and features by the connecting client. + :type session_roles: dict or None + + :param pending_session: The session ID the session will get once successfully attached. + :type pending_session: int or None + + :param resumable: + :type resumable: bool or None + + :param resume_session: The session the client would like to resume. + :type resume_session: int or None + + :param resume_token: The secure authorisation token to resume the session. + :type resume_token: str or None + """ + assert(realm is None or type(realm) == six.text_type) + assert(authmethods is None or (type(authmethods) == list and all(type(x) == six.text_type for x in authmethods))) + assert(authid is None or type(authid) == six.text_type) + assert(authrole is None or type(authrole) == six.text_type) + assert(authextra is None or type(authextra) == dict) + # assert(session_roles is None or ...) # FIXME + assert(pending_session is None or type(pending_session) in six.integer_types) + assert(resumable is None or type(resumable) == bool) + assert(resume_session is None or type(resume_session) == int) + assert(resume_token is None or type(resume_token) == six.text_type) + + self.realm = realm + self.authmethods = authmethods + self.authid = authid + self.authrole = authrole + self.authextra = authextra + self.session_roles = session_roles + self.pending_session = pending_session + self.resumable = resumable + self.resume_session = resume_session + self.resume_token = resume_token + + def __str__(self): + return u"HelloDetails(realm=<{}>, authmethods={}, authid=<{}>, authrole=<{}>, authextra={}, session_roles={}, pending_session={}, resumable={}, resume_session={}, resume_token={})".format(self.realm, self.authmethods, self.authid, self.authrole, self.authextra, self.session_roles, self.pending_session, self.resumable, self.resume_session, self.resume_token) + + +@public +class SessionDetails(object): + """ + Provides details for a WAMP session upon open. + + .. seealso:: :func:`autobahn.wamp.interfaces.ISession.onJoin` + """ + + __slots__ = ( + 'realm', + 'session', + 'authid', + 'authrole', + 'authmethod', + 'authprovider', + 'authextra', + 'serializer', + 'resumed', + 'resumable', + 'resume_token', + ) + + def __init__(self, realm, session, authid=None, authrole=None, authmethod=None, authprovider=None, authextra=None, + serializer=None, resumed=None, resumable=None, resume_token=None): + """ + + :param realm: The realm this WAMP session is attached to. + :type realm: str + + :param session: WAMP session ID of this session. + :type session: int + + :param resumed: Whether the session is a resumed one. + :type resumed: bool or None + + :param resumable: Whether this session can be resumed later. + :type resumable: bool or None + + :param resume_token: The secure authorisation token to resume the session. + :type resume_token: str or None + """ + assert(type(realm) == six.text_type) + assert(type(session) in six.integer_types) + assert(authid is None or type(authid) == six.text_type) + assert(authrole is None or type(authrole) == six.text_type) + assert(authmethod is None or type(authmethod) == six.text_type) + assert(authprovider is None or type(authprovider) == six.text_type) + assert(authextra is None or type(authextra) == dict) + assert(serializer is None or type(serializer) == six.text_type) + assert(resumed is None or type(resumed) == bool) + assert(resumable is None or type(resumable) == bool) + assert(resume_token is None or type(resume_token) == six.text_type) + + self.realm = realm + self.session = session + self.authid = authid + self.authrole = authrole + self.authmethod = authmethod + self.authprovider = authprovider + self.authextra = authextra + self.serializer = serializer + self.resumed = resumed + self.resumable = resumable + self.resume_token = resume_token + + def marshal(self): + obj = { + u'realm': self.realm, + u'session': self.session, + u'authid': self.authid, + u'authrole': self.authrole, + u'authmethod': self.authmethod, + u'authprovider': self.authprovider, + u'authextra': self.authextra, + u'serializer': self.serializer, + u'resumed': self.resumed, + u'resumable': self.resumable, + u'resume_token': self.resume_token + } + return obj + + def __str__(self): + return u""" +SessionDetails(realm=<{}>, + session={}, + authid=<{}>, + authrole=<{}>, + authmethod={}, + authprovider={}, + authextra={}, + serializer=<{}>, + resumed={}, + resumable={}, + resume_token={})""".format(self.realm, self.session, self.authid, self.authrole, self.authmethod, self.authprovider, self.authextra, self.serializer, self.resumed, self.resumable, self.resume_token) + + +@public +class SessionIdent(object): + """ + WAMP session identification information. + + A WAMP session joined on a realm on a WAMP router is identified technically + by its session ID (``session``) already. + + The permissions the session has are tied to the WAMP authentication role (``authrole``). + + The subject behind the session, eg the user or the application component is identified + by the WAMP authentication ID (``authid``). One session is always authenticated under/as + one specific ``authid``, but a given ``authid`` might have zero, one or many sessions + joined on a router at the same time. + """ + + __slots__ = ( + 'session', + 'authid', + 'authrole', + ) + + def __init__(self, session=None, authid=None, authrole=None): + """ + + :param session: WAMP session ID of the session. + :type session: int + + :param authid: The WAMP authid of the session. + :type authid: str + + :param authrole: The WAMP authrole of the session. + :type authrole: str + """ + assert(session is None or type(session) in six.integer_types) + assert(authid is None or type(authid) == six.text_type) + assert(type(authrole) == six.text_type) + + self.session = session + self.authid = authid + self.authrole = authrole + + def __str__(self): + return u"SessionIdent(session={}, authid={}, authrole={})".format(self.session, self.authid, self.authrole) + + def marshal(self): + obj = { + u'session': self.session, + u'authid': self.authid, + u'authrole': self.authrole, + } + return obj + + @staticmethod + def from_calldetails(call_details): + """ + Create a new session identification object from the caller information + in the call details provided. + + :param call_details: Details of a WAMP call. + :type call_details: :class:`autobahn.wamp.types.CallDetails` + + :returns: New session identification object. + :rtype: :class:`autobahn.wamp.types.SessionIdent` + """ + assert isinstance(call_details, CallDetails) + + if call_details.forward_for: + caller = call_details.forward_for[0] + session_ident = SessionIdent(caller['session'], + caller['authid'], + caller['authrole']) + else: + session_ident = SessionIdent(call_details.caller, + call_details.caller_authid, + call_details.caller_authrole) + return session_ident + + @staticmethod + def from_eventdetails(event_details): + """ + Create a new session identification object from the publisher information + in the event details provided. + + :param event_details: Details of a WAMP event. + :type event_details: :class:`autobahn.wamp.types.EventDetails` + + :returns: New session identification object. + :rtype: :class:`autobahn.wamp.types.SessionIdent` + """ + assert isinstance(event_details, EventDetails) + + if event_details.forward_for: + publisher = event_details.forward_for[0] + session_ident = SessionIdent(publisher['session'], + publisher['authid'], + publisher['authrole']) + else: + session_ident = SessionIdent(event_details.publisher, + event_details.publisher_authid, + event_details.publisher_authrole) + return session_ident + + +@public +class CloseDetails(object): + """ + Provides details for a WAMP session upon close. + + .. seealso:: :func:`autobahn.wamp.interfaces.ISession.onLeave` + """ + REASON_DEFAULT = u"wamp.close.normal" + REASON_TRANSPORT_LOST = u"wamp.close.transport_lost" + + __slots__ = ( + 'reason', + 'message', + ) + + def __init__(self, reason=None, message=None): + """ + + :param reason: The close reason (an URI, e.g. ``wamp.close.normal``) + :type reason: str + + :param message: Closing log message. + :type message: str + """ + assert(reason is None or type(reason) == six.text_type) + assert(message is None or type(message) == six.text_type) + + self.reason = reason + self.message = message + + def marshal(self): + obj = { + u'reason': self.reason, + u'message': self.message + } + return obj + + def __str__(self): + return u"CloseDetails(reason=<{}>, message='{}')".format(self.reason, self.message) + + +@public +class SubscribeOptions(object): + """ + Used to provide options for subscribing in + :func:`autobahn.wamp.interfaces.ISubscriber.subscribe`. + """ + + __slots__ = ( + 'match', + 'details', + 'details_arg', + 'get_retained', + 'forward_for', + 'correlation_id', + 'correlation_uri', + 'correlation_is_anchor', + 'correlation_is_last', + ) + + def __init__(self, match=None, details=None, details_arg=None, forward_for=None, get_retained=None, + correlation_id=None, correlation_uri=None, correlation_is_anchor=None, + correlation_is_last=None): + """ + + :param match: The topic matching method to be used for the subscription. + :type match: str + + :param details: When invoking the handler, provide event details in a keyword + parameter ``details``. + :type details: bool + + :param details_arg: DEPCREATED (use "details" flag). When invoking the handler + provide event details in this keyword argument to the callable. + :type details_arg: str + + :param get_retained: Whether the client wants the retained message we may have along with the subscription. + :type get_retained: bool or None + """ + assert(match is None or (type(match) == six.text_type and match in [u'exact', u'prefix', u'wildcard'])) + assert(details is None or (type(details) == bool and details_arg is None)) + assert(details_arg is None or type(details_arg) == str) # yes, "str" is correct here, since this is about Python identifiers! + assert(get_retained is None or type(get_retained) is bool) + + assert(forward_for is None or type(forward_for) == list) + if forward_for: + for ff in forward_for: + assert type(ff) == dict + assert 'session' in ff and type(ff['session']) in six.integer_types + assert 'authid' in ff and (ff['authid'] is None or type(ff['authid']) == six.text_type) + assert 'authrole' in ff and type(ff['authrole']) == six.text_type + + self.match = match + + # FIXME: this is for backwards compat, but we'll deprecate it in the future + self.details = details + if details: + self.details_arg = 'details' + else: + self.details_arg = details_arg + + self.get_retained = get_retained + self.forward_for = forward_for + + self.correlation_id = correlation_id + self.correlation_uri = correlation_uri + self.correlation_is_anchor = correlation_is_anchor + self.correlation_is_last = correlation_is_last + + def message_attr(self): + """ + Returns options dict as sent within WAMP messages. + """ + options = {} + + if self.match is not None: + options[u'match'] = self.match + + if self.get_retained is not None: + options[u'get_retained'] = self.get_retained + + if self.forward_for is not None: + options[u'forward_for'] = self.forward_for + + return options + + def __str__(self): + return u"SubscribeOptions(match={}, details={}, details_arg={}, get_retained={}, forward_for={})".format(self.match, self.details, self.details_arg, self.get_retained, self.forward_for) + + +@public +class EventDetails(object): + """ + Provides details on an event when calling an event handler + previously registered. + """ + + __slots__ = ( + 'subscription', + 'publication', + 'publisher', + 'publisher_authid', + 'publisher_authrole', + 'topic', + 'retained', + 'enc_algo', + 'forward_for', + ) + + def __init__(self, subscription, publication, publisher=None, publisher_authid=None, publisher_authrole=None, + topic=None, retained=None, enc_algo=None, forward_for=None): + """ + + :param subscription: The (client side) subscription object on which this event is delivered. + :type subscription: instance of :class:`autobahn.wamp.request.Subscription` + + :param publication: The publication ID of the event (always present). + :type publication: int + + :param publisher: The WAMP session ID of the original publisher of this event. + Only filled when publisher is disclosed. + :type publisher: None or int + + :param publisher_authid: The WAMP authid of the original publisher of this event. + Only filled when publisher is disclosed. + :type publisher_authid: str or None + + :param publisher_authrole: The WAMP authrole of the original publisher of this event. + Only filled when publisher is disclosed. + :type publisher_authrole: str or None + + :param topic: For pattern-based subscriptions, the actual topic URI being published to. + Only filled for pattern-based subscriptions. + :type topic: str or None + + :param retained: Whether the message was retained by the broker on the topic, rather than just published. + :type retained: bool or None + + :param enc_algo: Payload encryption algorithm that + was in use (currently, either ``None`` or ``u'cryptobox'``). + :type enc_algo: str or None + + :param forward_for: When this Event is forwarded for a client (or from an intermediary router). + :type forward_for: list[dict] + """ + assert(isinstance(subscription, Subscription)) + assert(type(publication) in six.integer_types) + assert(publisher is None or type(publisher) in six.integer_types) + assert(publisher_authid is None or type(publisher_authid) == six.text_type) + assert(publisher_authrole is None or type(publisher_authrole) == six.text_type) + assert(topic is None or type(topic) == six.text_type) + assert(retained is None or type(retained) is bool) + assert(enc_algo is None or type(enc_algo) == six.text_type) + assert(forward_for is None or type(forward_for) == list) + if forward_for: + for ff in forward_for: + assert type(ff) == dict + assert 'session' in ff and type(ff['session']) in six.integer_types + assert 'authid' in ff and (ff['authid'] is None or type(ff['authid']) == six.text_type) + assert 'authrole' in ff and type(ff['authrole']) == six.text_type + + self.subscription = subscription + self.publication = publication + self.publisher = publisher + self.publisher_authid = publisher_authid + self.publisher_authrole = publisher_authrole + self.topic = topic + self.retained = retained + self.enc_algo = enc_algo + self.forward_for = forward_for + + def __str__(self): + return u"EventDetails(subscription={}, publication={}, publisher={}, publisher_authid={}, publisher_authrole={}, topic=<{}>, retained={}, enc_algo={}, forward_for={})".format(self.subscription, self.publication, self.publisher, self.publisher_authid, self.publisher_authrole, self.topic, self.retained, self.enc_algo, self.forward_for) + + +@public +class PublishOptions(object): + """ + Used to provide options for subscribing in + :func:`autobahn.wamp.interfaces.IPublisher.publish`. + """ + + __slots__ = ( + 'acknowledge', + 'exclude_me', + 'exclude', + 'exclude_authid', + 'exclude_authrole', + 'eligible', + 'eligible_authid', + 'eligible_authrole', + 'retain', + 'forward_for', + 'correlation_id', + 'correlation_uri', + 'correlation_is_anchor', + 'correlation_is_last', + ) + + def __init__(self, + acknowledge=None, + exclude_me=None, + exclude=None, + exclude_authid=None, + exclude_authrole=None, + eligible=None, + eligible_authid=None, + eligible_authrole=None, + retain=None, + forward_for=None, + correlation_id=None, + correlation_uri=None, + correlation_is_anchor=None, + correlation_is_last=None): + """ + + :param acknowledge: If ``True``, acknowledge the publication with a success or + error response. + :type acknowledge: bool + + :param exclude_me: If ``True``, exclude the publisher from receiving the event, even + if he is subscribed (and eligible). + :type exclude_me: bool or None + + :param exclude: A single WAMP session ID or a list thereof to exclude from receiving this event. + :type exclude: int or list of int or None + + :param exclude_authid: A single WAMP authid or a list thereof to exclude from receiving this event. + :type exclude_authid: str or list of str or None + + :param exclude_authrole: A single WAMP authrole or a list thereof to exclude from receiving this event. + :type exclude_authrole: list of str or None + + :param eligible: A single WAMP session ID or a list thereof eligible to receive this event. + :type eligible: int or list of int or None + + :param eligible_authid: A single WAMP authid or a list thereof eligible to receive this event. + :type eligible_authid: str or list of str or None + + :param eligible_authrole: A single WAMP authrole or a list thereof eligible to receive this event. + :type eligible_authrole: str or list of str or None + + :param retain: If ``True``, request the broker retain this event. + :type retain: bool or None + + :param forward_for: When this Event is forwarded for a client (or from an intermediary router). + :type forward_for: list[dict] + """ + assert(acknowledge is None or type(acknowledge) == bool) + assert(exclude_me is None or type(exclude_me) == bool) + assert(exclude is None or type(exclude) in six.integer_types or (type(exclude) == list and all(type(x) in six.integer_types for x in exclude))) + assert(exclude_authid is None or type(exclude_authid) == six.text_type or (type(exclude_authid) == list and all(type(x) == six.text_type for x in exclude_authid))) + assert(exclude_authrole is None or type(exclude_authrole) == six.text_type or (type(exclude_authrole) == list and all(type(x) == six.text_type for x in exclude_authrole))) + assert(eligible is None or type(eligible) in six.integer_types or (type(eligible) == list and all(type(x) in six.integer_types for x in eligible))) + assert(eligible_authid is None or type(eligible_authid) == six.text_type or (type(eligible_authid) == list and all(type(x) == six.text_type for x in eligible_authid))) + assert(eligible_authrole is None or type(eligible_authrole) == six.text_type or (type(eligible_authrole) == list and all(type(x) == six.text_type for x in eligible_authrole))) + assert(retain is None or type(retain) == bool) + + assert(forward_for is None or type(forward_for) == list), 'forward_for, when present, must have list type - was {}'.format(type(forward_for)) + if forward_for: + for ff in forward_for: + assert type(ff) == dict, 'forward_for must be type dict - was {}'.format(type(ff)) + assert 'session' in ff, 'forward_for must have session attribute' + assert type(ff['session']) in six.integer_types, 'forward_for.session must have integer type - was {}'.format(type(ff['session'])) + assert 'authid' in ff, 'forward_for must have authid attributed' + assert type(ff['authid']) == six.text_type, 'forward_for.authid must have str type - was {}'.format(type(ff['authid'])) + assert 'authrole' in ff, 'forward_for must have authrole attribute' + assert type(ff['authrole']) == six.text_type, 'forward_for.authrole must have str type - was {}'.format(type(ff['authrole'])) + + self.acknowledge = acknowledge + self.exclude_me = exclude_me + self.exclude = exclude + self.exclude_authid = exclude_authid + self.exclude_authrole = exclude_authrole + self.eligible = eligible + self.eligible_authid = eligible_authid + self.eligible_authrole = eligible_authrole + self.retain = retain + self.forward_for = forward_for + + self.correlation_id = correlation_id + self.correlation_uri = correlation_uri + self.correlation_is_anchor = correlation_is_anchor + self.correlation_is_last = correlation_is_last + + def message_attr(self): + """ + Returns options dict as sent within WAMP messages. + """ + options = {} + + if self.acknowledge is not None: + options[u'acknowledge'] = self.acknowledge + + if self.exclude_me is not None: + options[u'exclude_me'] = self.exclude_me + + if self.exclude is not None: + options[u'exclude'] = self.exclude if type(self.exclude) == list else [self.exclude] + + if self.exclude_authid is not None: + options[u'exclude_authid'] = self.exclude_authid if type(self.exclude_authid) == list else [self.exclude_authid] + + if self.exclude_authrole is not None: + options[u'exclude_authrole'] = self.exclude_authrole if type(self.exclude_authrole) == list else [self.exclude_authrole] + + if self.eligible is not None: + options[u'eligible'] = self.eligible if type(self.eligible) == list else [self.eligible] + + if self.eligible_authid is not None: + options[u'eligible_authid'] = self.eligible_authid if type(self.eligible_authid) == list else [self.eligible_authid] + + if self.eligible_authrole is not None: + options[u'eligible_authrole'] = self.eligible_authrole if type(self.eligible_authrole) == list else [self.eligible_authrole] + + if self.retain is not None: + options[u'retain'] = self.retain + + if self.forward_for is not None: + options[u'forward_for'] = self.forward_for + + return options + + def __str__(self): + return u"PublishOptions(acknowledge={}, exclude_me={}, exclude={}, exclude_authid={}, exclude_authrole={}, eligible={}, eligible_authid={}, eligible_authrole={}, retain={}, forward_for={})".format(self.acknowledge, self.exclude_me, self.exclude, self.exclude_authid, self.exclude_authrole, self.eligible, self.eligible_authid, self.eligible_authrole, self.retain, self.forward_for) + + +@public +class RegisterOptions(object): + """ + Used to provide options for registering in + :func:`autobahn.wamp.interfaces.ICallee.register`. + """ + + __slots__ = ( + 'match', + 'invoke', + 'concurrency', + 'force_reregister', + 'forward_for', + 'details', + 'details_arg', + 'correlation_id', + 'correlation_uri', + 'correlation_is_anchor', + 'correlation_is_last', + ) + + def __init__(self, match=None, invoke=None, concurrency=None, force_reregister=None, forward_for=None, + details=None, details_arg=None, correlation_id=None, correlation_uri=None, + correlation_is_anchor=None, correlation_is_last=None): + """ + :param match: Type of matching to use on the URI (`exact`, `prefix` or `wildcard`) + + :param invoke: Type of invoke mechanism to use (`single`, `first`, `last`, `roundrobin`, `random`) + + :param concurrency: if used, the number of times a particular + endpoint may be called concurrently (e.g. if this is 3, and + there are already 3 calls in-progress a 4th call will receive + an error) + + :param details_arg: When invoking the endpoint, provide call details + in this keyword argument to the callable. + :type details_arg: str + + :param details: When invoking the endpoint, provide call details in a keyword + parameter ``details``. + :type details: bool + + :param details_arg: DEPCREATED (use "details" flag). When invoking the endpoint, + provide call details in this keyword argument to the callable. + :type details_arg: str + + :param force_reregister: if True, any other session that has + already registered this URI will be 'kicked out' and this + session will become the one that's registered (the previous + session must have used `force_reregister=True` as well) + :type force_reregister: bool + + :param forward_for: When this Register is forwarded over a router-to-router link, + or via an intermediary router. + :type forward_for: list[dict] + """ + assert(match is None or (type(match) == six.text_type and match in [u'exact', u'prefix', u'wildcard'])) + assert(invoke is None or (type(invoke) == six.text_type and invoke in [u'single', u'first', u'last', u'roundrobin', u'random'])) + assert(concurrency is None or (type(concurrency) in six.integer_types and concurrency > 0)) + assert(details is None or (type(details) == bool and details_arg is None)) + assert(details_arg is None or type(details_arg) == str) # yes, "str" is correct here, since this is about Python identifiers! + assert force_reregister in [None, True, False] + + assert(forward_for is None or type(forward_for) == list) + if forward_for: + for ff in forward_for: + assert type(ff) == dict + assert 'session' in ff and type(ff['session']) in six.integer_types + assert 'authid' in ff and (ff['authid'] is None or type(ff['authid']) == six.text_type) + assert 'authrole' in ff and type(ff['authrole']) == six.text_type + + self.match = match + self.invoke = invoke + self.concurrency = concurrency + self.force_reregister = force_reregister + self.forward_for = forward_for + + # FIXME: this is for backwards compat, but we'll deprecate it in the future + self.details = details + if details: + self.details_arg = 'details' + else: + self.details_arg = details_arg + + self.correlation_id = correlation_id + self.correlation_uri = correlation_uri + self.correlation_is_anchor = correlation_is_anchor + self.correlation_is_last = correlation_is_last + + def message_attr(self): + """ + Returns options dict as sent within WAMP messages. + """ + options = {} + + if self.match is not None: + options[u'match'] = self.match + + if self.invoke is not None: + options[u'invoke'] = self.invoke + + if self.concurrency is not None: + options[u'concurrency'] = self.concurrency + + if self.force_reregister is not None: + options[u'force_reregister'] = self.force_reregister + + if self.forward_for is not None: + options[u'forward_for'] = self.forward_for + + return options + + def __str__(self): + return u"RegisterOptions(match={}, invoke={}, concurrency={}, details={}, details_arg={}, force_reregister={}, forward_for={})".format(self.match, self.invoke, self.concurrency, self.details, self.details_arg, self.force_reregister, self.forward_for) + + +@public +class CallDetails(object): + """ + Provides details on a call when an endpoint previously + registered is being called and opted to receive call details. + """ + + __slots__ = ( + 'registration', + 'progress', + 'caller', + 'caller_authid', + 'caller_authrole', + 'procedure', + 'enc_algo', + 'forward_for', + ) + + def __init__(self, registration, progress=None, caller=None, caller_authid=None, + caller_authrole=None, procedure=None, enc_algo=None, forward_for=None): + """ + + :param registration: The (client side) registration object this invocation is delivered on. + :type registration: instance of :class:`autobahn.wamp.request.Registration` + + :param progress: A callable that will receive progressive call results. + :type progress: callable or None + + :param caller: The WAMP session ID of the caller, if the latter is disclosed. + Only filled when caller is disclosed. + :type caller: int or None + + :param caller_authid: The WAMP authid of the original caller of this event. + Only filled when caller is disclosed. + :type caller_authid: str or None + + :param caller_authrole: The WAMP authrole of the original caller of this event. + Only filled when caller is disclosed. + :type caller_authrole: str or None + + :param procedure: For pattern-based registrations, the actual procedure URI being called. + :type procedure: str or None + + :param enc_algo: Payload encryption algorithm that + was in use (currently, either `None` or `"cryptobox"`). + :type enc_algo: str or None + + :param forward_for: When this Call is forwarded for a client (or from an intermediary router). + :type forward_for: list[dict] + """ + assert(isinstance(registration, Registration)) + assert(progress is None or callable(progress)) + assert(caller is None or type(caller) in six.integer_types) + assert(caller_authid is None or type(caller_authid) == six.text_type) + assert(caller_authrole is None or type(caller_authrole) == six.text_type) + assert(procedure is None or type(procedure) == six.text_type) + assert(enc_algo is None or type(enc_algo) == six.text_type) + + assert(forward_for is None or type(forward_for) == list) + if forward_for: + for ff in forward_for: + assert type(ff) == dict + assert 'session' in ff and type(ff['session']) in six.integer_types + assert 'authid' in ff and (ff['authid'] is None or type(ff['authid']) == six.text_type) + assert 'authrole' in ff and type(ff['authrole']) == six.text_type + + self.registration = registration + self.progress = progress + self.caller = caller + self.caller_authid = caller_authid + self.caller_authrole = caller_authrole + self.procedure = procedure + self.enc_algo = enc_algo + self.forward_for = forward_for + + def __str__(self): + return u"CallDetails(registration={}, progress={}, caller={}, caller_authid={}, caller_authrole={}, procedure=<{}>, enc_algo={}, forward_for={})".format(self.registration, self.progress, self.caller, self.caller_authid, self.caller_authrole, self.procedure, self.enc_algo, self.forward_for) + + +@public +class CallOptions(object): + """ + Used to provide options for calling with :func:`autobahn.wamp.interfaces.ICaller.call`. + """ + + __slots__ = ( + 'on_progress', + 'timeout', + 'caller', + 'caller_authid', + 'caller_authrole', + 'forward_for', + 'correlation_id', + 'correlation_uri', + 'correlation_is_anchor', + 'correlation_is_last', + 'details', + ) + + def __init__(self, + on_progress=None, + timeout=None, + caller=None, + caller_authid=None, + caller_authrole=None, + forward_for=None, + correlation_id=None, + correlation_uri=None, + correlation_is_anchor=None, + correlation_is_last=None, + details=None): + """ + + :param on_progress: A callback that will be called when the remote endpoint + called yields interim call progress results. + :type on_progress: callable + + :param timeout: Time in seconds after which the call should be automatically canceled. + :type timeout: float + + :param forward_for: When this Call is forwarded for a client (or from an intermediary router). + :type forward_for: list[dict] + """ + assert(on_progress is None or callable(on_progress)) + assert(timeout is None or (type(timeout) in list(six.integer_types) + [float] and timeout > 0)) + assert(details is None or type(details) == bool) + assert(caller is None or type(caller) in six.integer_types) + assert(caller_authid is None or type(caller_authid) == six.text_type) + assert(caller_authrole is None or type(caller_authrole) == six.text_type) + assert(forward_for is None or type(forward_for) == list) + if forward_for: + for ff in forward_for: + assert type(ff) == dict + assert 'session' in ff and type(ff['session']) in six.integer_types + assert 'authid' in ff and (ff['authid'] is None or type(ff['authid']) == six.text_type) + assert 'authrole' in ff and type(ff['authrole']) == six.text_type + + self.on_progress = on_progress + self.timeout = timeout + + self.caller = caller + self.caller_authid = caller_authid + self.caller_authrole = caller_authrole + self.forward_for = forward_for + + self.details = details + self.correlation_id = correlation_id + self.correlation_uri = correlation_uri + self.correlation_is_anchor = correlation_is_anchor + self.correlation_is_last = correlation_is_last + + def message_attr(self): + """ + Returns options dict as sent within WAMP messages. + """ + options = {} + + # note: only some attributes are actually forwarded to the WAMP CALL message, while + # other attributes are for client-side/client-internal use only + + if self.timeout is not None: + options[u'timeout'] = self.timeout + + if self.on_progress is not None: + options[u'receive_progress'] = True + + if self.forward_for is not None: + options[u'forward_for'] = self.forward_for + + if self.caller is not None: + options[u'caller'] = self.caller + + if self.caller_authid is not None: + options[u'caller_authid'] = self.caller_authid + + if self.caller_authrole is not None: + options[u'caller_authrole'] = self.caller_authrole + + return options + + def __str__(self): + return u"CallOptions(on_progress={}, timeout={}, caller={}, caller_authid={}, caller_authrole={}, forward_for={}, details={})".format(self.on_progress, self.timeout, self.caller, self.caller_authid, self.caller_authrole, self.forward_for, self.details) + + +@public +class CallResult(object): + """ + Wrapper for remote procedure call results that contain multiple positional + return values or keyword-based return values. + """ + + __slots__ = ( + 'results', + 'kwresults', + 'enc_algo', + 'callee', + 'callee_authid', + 'callee_authrole', + 'forward_for', + ) + + def __init__(self, *results, **kwresults): + """ + + :param results: The positional result values. + :type results: list + + :param kwresults: The keyword result values. + :type kwresults: dict + """ + enc_algo = kwresults.pop('enc_algo', None) + assert(enc_algo is None or type(enc_algo) == six.text_type) + + callee = kwresults.pop('callee', None) + callee_authid = kwresults.pop('callee_authid', None) + callee_authrole = kwresults.pop('callee_authrole', None) + + assert callee is None or type(callee) in six.integer_types + assert callee_authid is None or type(callee_authid) == six.text_type + assert callee_authrole is None or type(callee_authrole) == six.text_type + + forward_for = kwresults.pop('forward_for', None) + assert(forward_for is None or type(forward_for) == list) + if forward_for: + for ff in forward_for: + assert type(ff) == dict + assert 'session' in ff and type(ff['session']) in six.integer_types + assert 'authid' in ff and (ff['authid'] is None or type(ff['authid']) == six.text_type) + assert 'authrole' in ff and type(ff['authrole']) == six.text_type + + self.enc_algo = enc_algo + self.callee = callee + self.callee_authid = callee_authid + self.callee_authrole = callee_authrole + self.forward_for = forward_for + self.results = results + self.kwresults = kwresults + + def __str__(self): + return u"CallResult(results={}, kwresults={}, enc_algo={}, callee={}, callee_authid={}, callee_authrole={}, forward_for={})".format(self.results, self.kwresults, self.enc_algo, self.callee, self.callee_authid, self.callee_authrole, self.forward_for) + + +@public +class EncodedPayload(object): + """ + Wrapper holding an encoded application payload when using WAMP payload transparency. + """ + + __slots__ = ( + 'payload', + 'enc_algo', + 'enc_serializer', + 'enc_key' + ) + + def __init__(self, payload, enc_algo, enc_serializer=None, enc_key=None): + """ + + :param payload: The encoded application payload. + :type payload: bytes + + :param enc_algo: The payload transparency algorithm identifier to check. + :type enc_algo: str + + :param enc_serializer: The payload transparency serializer identifier to check. + :type enc_serializer: str + + :param enc_key: If using payload transparency with an encryption algorithm, the payload encryption key. + :type enc_key: str or None + """ + assert(type(payload) == six.binary_type) + assert(type(enc_algo) == six.text_type) + assert(enc_serializer is None or type(enc_serializer) == six.text_type) + assert(enc_key is None or type(enc_key) == six.text_type) + + self.payload = payload + self.enc_algo = enc_algo + self.enc_serializer = enc_serializer + self.enc_key = enc_key + + +class IPublication(object): + """ + Represents a publication of an event. This is used with acknowledged publications. + """ + + def id(self): + """ + The WAMP publication ID for this publication. + """ + + +class ISubscription(object): + """ + Represents a subscription to a topic. + """ + + def id(self): + """ + The WAMP subscription ID for this subscription. + """ + + def active(self): + """ + Flag indicating if subscription is active. + """ + + def unsubscribe(self): + """ + Unsubscribe this subscription that was previously created from + :func:`autobahn.wamp.interfaces.ISubscriber.subscribe`. + + After a subscription has been unsubscribed successfully, no events + will be routed to the event handler anymore. + + Returns an instance of :tx:`twisted.internet.defer.Deferred` (when + running on **Twisted**) or an instance of :py:class:`asyncio.Future` + (when running on **asyncio**). + + - If the unsubscription succeeds, the returned Deferred/Future will + *resolve* (with no return value). + + - If the unsubscription fails, the returned Deferred/Future will *reject* + with an instance of :class:`autobahn.wamp.exception.ApplicationError`. + + :returns: A Deferred/Future for the unsubscription + :rtype: instance(s) of :tx:`twisted.internet.defer.Deferred` / :py:class:`asyncio.Future` + """ + + +class IRegistration(object): + """ + Represents a registration of an endpoint. + """ + + def id(self): + """ + The WAMP registration ID for this registration. + """ + + def active(self): + """ + Flag indicating if registration is active. + """ + + def unregister(self): + """ + Unregister this registration that was previously created from + :func:`autobahn.wamp.interfaces.ICallee.register`. + + After a registration has been unregistered successfully, no calls + will be routed to the endpoint anymore. + + Returns an instance of :tx:`twisted.internet.defer.Deferred` (when + running on **Twisted**) or an instance of :py:class:`asyncio.Future` + (when running on **asyncio**). + + - If the unregistration succeeds, the returned Deferred/Future will + *resolve* (with no return value). + + - If the unregistration fails, the returned Deferred/Future will be rejected + with an instance of :class:`autobahn.wamp.exception.ApplicationError`. + + :returns: A Deferred/Future for the unregistration + :rtype: instance(s) of :tx:`twisted.internet.defer.Deferred` / :py:class:`asyncio.Future` + """ diff --git a/venv/lib/python3.7/site-packages/autobahn/wamp/websocket.py b/venv/lib/python3.7/site-packages/autobahn/wamp/websocket.py new file mode 100644 index 0000000..aab1ed7 --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/wamp/websocket.py @@ -0,0 +1,296 @@ +############################################################################### +# +# The MIT License (MIT) +# +# Copyright (c) Crossbar.io Technologies GmbH +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +############################################################################### + +from __future__ import absolute_import + +import traceback + +from autobahn.websocket import protocol +from autobahn.websocket.types import ConnectionDeny +from autobahn.wamp.interfaces import ITransport +from autobahn.wamp.exception import ProtocolError, SerializationError, TransportLost + +__all__ = ('WampWebSocketServerProtocol', + 'WampWebSocketClientProtocol', + 'WampWebSocketServerFactory', + 'WampWebSocketClientFactory') + + +class WampWebSocketProtocol(object): + """ + Base class for WAMP-over-WebSocket transport mixins. + """ + + _session = None # default; self.session is set in onOpen + + def _bailout(self, code, reason=None): + self.log.debug('Failing WAMP-over-WebSocket transport: code={code}, reason="{reason}"', code=code, reason=reason) + self._fail_connection(code, reason) + + def onOpen(self): + """ + Callback from :func:`autobahn.websocket.interfaces.IWebSocketChannel.onOpen` + """ + # WebSocket connection established. Now let the user WAMP session factory + # create a new WAMP session and fire off session open callback. + try: + self._session = self.factory._factory() + self._session.onOpen(self) + except Exception as e: + self.log.critical("{tb}", tb=traceback.format_exc()) + reason = u'WAMP Internal Error ({0})'.format(e) + self._bailout(protocol.WebSocketProtocol.CLOSE_STATUS_CODE_INTERNAL_ERROR, reason=reason) + + def onClose(self, wasClean, code, reason): + """ + Callback from :func:`autobahn.websocket.interfaces.IWebSocketChannel.onClose` + """ + # WAMP session might never have been established in the first place .. guard this! + self._onclose_reason = reason + if self._session is not None: + # WebSocket connection lost - fire off the WAMP + # session close callback + # noinspection PyBroadException + try: + self.log.debug('WAMP-over-WebSocket transport lost: wasClean={wasClean}, code={code}, reason="{reason}"', wasClean=wasClean, code=code, reason=reason) + self._session.onClose(wasClean) + except Exception: + self.log.critical("{tb}", tb=traceback.format_exc()) + self._session = None + + def onMessage(self, payload, isBinary): + """ + Callback from :func:`autobahn.websocket.interfaces.IWebSocketChannel.onMessage` + """ + try: + for msg in self._serializer.unserialize(payload, isBinary): + self.log.trace( + "WAMP RECV: message={message}, session={session}, authid={authid}", + authid=self._session._authid, + session=self._session._session_id, + message=msg, + ) + self._session.onMessage(msg) + + except ProtocolError as e: + self.log.critical("{tb}", tb=traceback.format_exc()) + reason = u'WAMP Protocol Error ({0})'.format(e) + self._bailout(protocol.WebSocketProtocol.CLOSE_STATUS_CODE_PROTOCOL_ERROR, reason=reason) + + except Exception as e: + self.log.critical("{tb}", tb=traceback.format_exc()) + reason = u'WAMP Internal Error ({0})'.format(e) + self._bailout(protocol.WebSocketProtocol.CLOSE_STATUS_CODE_INTERNAL_ERROR, reason=reason) + + def send(self, msg): + """ + Implements :func:`autobahn.wamp.interfaces.ITransport.send` + """ + if self.isOpen(): + try: + self.log.trace( + "WAMP SEND: message={message}, session={session}, authid={authid}", + authid=self._session._authid, + session=self._session._session_id, + message=msg, + ) + payload, isBinary = self._serializer.serialize(msg) + except Exception as e: + self.log.error("WAMP message serialization error: {}".format(e)) + # all exceptions raised from above should be serialization errors .. + raise SerializationError(u"WAMP message serialization error: {0}".format(e)) + else: + self.sendMessage(payload, isBinary) + else: + raise TransportLost() + + def isOpen(self): + """ + Implements :func:`autobahn.wamp.interfaces.ITransport.isOpen` + """ + return self._session is not None + + def close(self): + """ + Implements :func:`autobahn.wamp.interfaces.ITransport.close` + """ + if self.isOpen(): + self.sendClose(protocol.WebSocketProtocol.CLOSE_STATUS_CODE_NORMAL) + else: + raise TransportLost() + + def abort(self): + """ + Implements :func:`autobahn.wamp.interfaces.ITransport.abort` + """ + if self.isOpen(): + self._bailout(protocol.WebSocketProtocol.CLOSE_STATUS_CODE_GOING_AWAY) + else: + raise TransportLost() + + +ITransport.register(WampWebSocketProtocol) + + +def parseSubprotocolIdentifier(subprotocol): + try: + s = subprotocol.split(u'.') + if s[0] != u'wamp': + raise Exception(u'WAMP WebSocket subprotocol identifier must start with "wamp", not "{}"'.format(s[0])) + version = int(s[1]) + serializerId = u'.'.join(s[2:]) + return version, serializerId + except: + return None, None + + +class WampWebSocketServerProtocol(WampWebSocketProtocol): + """ + Mixin for WAMP-over-WebSocket server transports. + """ + + STRICT_PROTOCOL_NEGOTIATION = True + + def onConnect(self, request): + """ + Callback from :func:`autobahn.websocket.interfaces.IWebSocketChannel.onConnect` + """ + headers = {} + for subprotocol in request.protocols: + version, serializerId = parseSubprotocolIdentifier(subprotocol) + if version == 2 and serializerId in self.factory._serializers.keys(): + self._serializer = self.factory._serializers[serializerId] + return subprotocol, headers + + if self.STRICT_PROTOCOL_NEGOTIATION: + raise ConnectionDeny(ConnectionDeny.BAD_REQUEST, u'This server only speaks WebSocket subprotocols {}'.format(u', '.join(self.factory.protocols))) + else: + # assume wamp.2.json + self._serializer = self.factory._serializers[u'json'] + return None, headers + + +class WampWebSocketClientProtocol(WampWebSocketProtocol): + """ + Mixin for WAMP-over-WebSocket client transports. + """ + + STRICT_PROTOCOL_NEGOTIATION = True + + def onConnect(self, response): + """ + Callback from :func:`autobahn.websocket.interfaces.IWebSocketChannel.onConnect` + """ + if response.protocol not in self.factory.protocols: + if self.STRICT_PROTOCOL_NEGOTIATION: + raise Exception(u'The server does not speak any of the WebSocket subprotocols {} we requested.'.format(u', '.join(self.factory.protocols))) + else: + # assume wamp.2.json + serializerId = u'json' + else: + version, serializerId = parseSubprotocolIdentifier(response.protocol) + + self._serializer = self.factory._serializers[serializerId] + + +class WampWebSocketFactory(object): + """ + Base class for WAMP-over-WebSocket transport factory mixins. + """ + + def __init__(self, factory, serializers=None): + """ + Ctor. + + :param factory: A callable that produces instances that implement + :class:`autobahn.wamp.interfaces.ITransportHandler` + :type factory: callable + + :param serializers: A list of WAMP serializers to use (or None for default + serializers). Serializers must implement + :class:`autobahn.wamp.interfaces.ISerializer`. + :type serializers: list + """ + if callable(factory): + self._factory = factory + else: + self._factory = lambda: factory + + if serializers is None: + serializers = [] + + # try CBOR WAMP serializer + try: + from autobahn.wamp.serializer import CBORSerializer + serializers.append(CBORSerializer(batched=True)) + serializers.append(CBORSerializer()) + except ImportError: + pass + + # try MsgPack WAMP serializer + try: + from autobahn.wamp.serializer import MsgPackSerializer + serializers.append(MsgPackSerializer(batched=True)) + serializers.append(MsgPackSerializer()) + except ImportError: + pass + + # try UBJSON WAMP serializer + try: + from autobahn.wamp.serializer import UBJSONSerializer + serializers.append(UBJSONSerializer(batched=True)) + serializers.append(UBJSONSerializer()) + except ImportError: + pass + + # try JSON WAMP serializer + try: + from autobahn.wamp.serializer import JsonSerializer + serializers.append(JsonSerializer(batched=True)) + serializers.append(JsonSerializer()) + except ImportError: + pass + + if not serializers: + raise Exception(u'Could not import any WAMP serializer') + + self._serializers = {} + for ser in serializers: + self._serializers[ser.SERIALIZER_ID] = ser + + self._protocols = [u'wamp.2.{}'.format(ser.SERIALIZER_ID) for ser in serializers] + + +class WampWebSocketServerFactory(WampWebSocketFactory): + """ + Mixin for WAMP-over-WebSocket server transport factories. + """ + + +class WampWebSocketClientFactory(WampWebSocketFactory): + """ + Mixin for WAMP-over-WebSocket client transport factories. + """ diff --git a/venv/lib/python3.7/site-packages/autobahn/websocket/compress_bzip2.py b/venv/lib/python3.7/site-packages/autobahn/websocket/compress_bzip2.py new file mode 100644 index 0000000..63fe271 --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/websocket/compress_bzip2.py @@ -0,0 +1,448 @@ +############################################################################### +# +# The MIT License (MIT) +# +# Copyright (c) Crossbar.io Technologies GmbH +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +############################################################################### + +from __future__ import absolute_import + +import bz2 + +from autobahn.websocket.compress_base import PerMessageCompressOffer, \ + PerMessageCompressOfferAccept, \ + PerMessageCompressResponse, \ + PerMessageCompressResponseAccept, \ + PerMessageCompress + +__all__ = ( + 'PerMessageBzip2Mixin', + 'PerMessageBzip2Offer', + 'PerMessageBzip2OfferAccept', + 'PerMessageBzip2Response', + 'PerMessageBzip2ResponseAccept', + 'PerMessageBzip2', +) + + +class PerMessageBzip2Mixin(object): + """ + Mixin class for this extension. + """ + + EXTENSION_NAME = "permessage-bzip2" + """ + Name of this WebSocket extension. + """ + + COMPRESS_LEVEL_PERMISSIBLE_VALUES = [1, 2, 3, 4, 5, 6, 7, 8, 9] + """ + Permissible value for compression level parameter. + """ + + +class PerMessageBzip2Offer(PerMessageCompressOffer, PerMessageBzip2Mixin): + """ + Set of extension parameters for `permessage-bzip2` WebSocket extension + offered by a client to a server. + """ + + @classmethod + def parse(cls, params): + """ + Parses a WebSocket extension offer for `permessage-bzip2` provided by a client to a server. + + :param params: Output from :func:`autobahn.websocket.WebSocketProtocol._parseExtensionsHeader`. + :type params: list + + :returns: object -- A new instance of :class:`autobahn.compress.PerMessageBzip2Offer`. + """ + # extension parameter defaults + accept_max_compress_level = False + request_max_compress_level = 0 + + # verify/parse client ("client-to-server direction") parameters of permessage-bzip2 offer + for p in params: + + if len(params[p]) > 1: + raise Exception("multiple occurrence of extension parameter '%s' for extension '%s'" % (p, cls.EXTENSION_NAME)) + + val = params[p][0] + + if p == 'client_max_compress_level': + # noinspection PySimplifyBooleanCheck + if val is not True: + raise Exception("illegal extension parameter value '%s' for parameter '%s' of extension '%s'" % (val, p, cls.EXTENSION_NAME)) + else: + accept_max_compress_level = True + + elif p == 'server_max_compress_level': + try: + val = int(val) + except: + raise Exception("illegal extension parameter value '%s' for parameter '%s' of extension '%s'" % (val, p, cls.EXTENSION_NAME)) + if val not in PerMessageBzip2Mixin.COMPRESS_LEVEL_PERMISSIBLE_VALUES: + raise Exception("illegal extension parameter value '%s' for parameter '%s' of extension '%s'" % (val, p, cls.EXTENSION_NAME)) + else: + request_max_compress_level = val + + else: + raise Exception("illegal extension parameter '%s' for extension '%s'" % (p, cls.EXTENSION_NAME)) + + offer = cls(accept_max_compress_level, + request_max_compress_level) + return offer + + def __init__(self, + accept_max_compress_level=True, + request_max_compress_level=0): + """ + Constructor. + + :param accept_max_compress_level: Iff true, client accepts "maximum compression level" parameter. + :type accept_max_compress_level: bool + :param request_max_compress_level: Iff non-zero, client requests given "maximum compression level" - must be 1-9. + :type request_max_compress_level: int + """ + if type(accept_max_compress_level) != bool: + raise Exception("invalid type %s for accept_max_compress_level" % type(accept_max_compress_level)) + + self.accept_max_compress_level = accept_max_compress_level + + if request_max_compress_level != 0 and request_max_compress_level not in self.COMPRESS_LEVEL_PERMISSIBLE_VALUES: + raise Exception("invalid value %s for request_max_compress_level - permissible values %s" % (request_max_compress_level, self.COMPRESS_LEVEL_PERMISSIBLE_VALUES)) + + self.request_max_compress_level = request_max_compress_level + + def get_extension_string(self): + """ + Returns the WebSocket extension configuration string as sent to the server. + + :returns: PMCE configuration string. + :rtype: str + """ + pmce_string = self.EXTENSION_NAME + if self.accept_max_compress_level: + pmce_string += "; client_max_compress_level" + if self.request_max_compress_level != 0: + pmce_string += "; server_max_compress_level=%d" % self.request_max_compress_level + return pmce_string + + def __json__(self): + """ + Returns a JSON serializable object representation. + + :returns: JSON serializable representation. + :rtype: dict + """ + return {'extension': self.EXTENSION_NAME, + 'accept_max_compress_level': self.accept_max_compress_level, + 'request_max_compress_level': self.request_max_compress_level} + + def __repr__(self): + """ + Returns Python object representation that can be eval'ed to reconstruct the object. + + :returns: Python string representation. + :rtype: str + """ + return "PerMessageBzip2Offer(accept_max_compress_level = %s, request_max_compress_level = %s)" % (self.accept_max_compress_level, self.request_max_compress_level) + + +class PerMessageBzip2OfferAccept(PerMessageCompressOfferAccept, PerMessageBzip2Mixin): + """ + Set of parameters with which to accept an `permessage-bzip2` offer + from a client by a server. + """ + + def __init__(self, + offer, + request_max_compress_level=0, + compress_level=None): + """ + Constructor. + + :param offer: The offer being accepted. + :type offer: Instance of :class:`autobahn.compress.PerMessageBzip2Offer`. + :param request_max_compress_level: Iff non-zero, server requests given "maximum compression level" - must be 1-9. + :type request_max_compress_level: int + :param compress_level: Override server ("server-to-client direction") compress level (this must be compatible with offer). + :type compress_level: int + """ + if not isinstance(offer, PerMessageBzip2Offer): + raise Exception("invalid type %s for offer" % type(offer)) + + self.offer = offer + + if request_max_compress_level != 0 and request_max_compress_level not in self.COMPRESS_LEVEL_PERMISSIBLE_VALUES: + raise Exception("invalid value %s for request_max_compress_level - permissible values %s" % (request_max_compress_level, self.COMPRESS_LEVEL_PERMISSIBLE_VALUES)) + + if request_max_compress_level != 0 and not offer.accept_max_compress_level: + raise Exception("invalid value %s for request_max_compress_level - feature unsupported by client" % request_max_compress_level) + + self.request_max_compress_level = request_max_compress_level + + if compress_level is not None: + if compress_level not in self.COMPRESS_LEVEL_PERMISSIBLE_VALUES: + raise Exception("invalid value %s for compress_level - permissible values %s" % (compress_level, self.COMPRESS_LEVEL_PERMISSIBLE_VALUES)) + + if offer.request_max_compress_level != 0 and compress_level > offer.request_max_compress_level: + raise Exception("invalid value %s for compress_level - client requested lower maximum value" % compress_level) + + self.compress_level = compress_level + + def get_extension_string(self): + """ + Returns the WebSocket extension configuration string as sent to the server. + + :returns: PMCE configuration string. + :rtype: str + """ + pmce_string = self.EXTENSION_NAME + if self.offer.request_max_compress_level != 0: + pmce_string += "; server_max_compress_level=%d" % self.offer.request_max_compress_level + if self.request_max_compress_level != 0: + pmce_string += "; client_max_compress_level=%d" % self.request_max_compress_level + return pmce_string + + def __json__(self): + """ + Returns a JSON serializable object representation. + + :returns: JSON serializable representation. + :rtype: dict + """ + return {'extension': self.EXTENSION_NAME, + 'offer': self.offer.__json__(), + 'request_max_compress_level': self.request_max_compress_level, + 'compress_level': self.compress_level} + + def __repr__(self): + """ + Returns Python object representation that can be eval'ed to reconstruct the object. + + :returns: Python string representation. + :rtype: str + """ + return "PerMessageBzip2Accept(offer = %s, request_max_compress_level = %s, compress_level = %s)" % (self.offer.__repr__(), self.request_max_compress_level, self.compress_level) + + +class PerMessageBzip2Response(PerMessageCompressResponse, PerMessageBzip2Mixin): + """ + Set of parameters for `permessage-bzip2` responded by server. + """ + + @classmethod + def parse(cls, params): + """ + Parses a WebSocket extension response for `permessage-bzip2` provided by a server to a client. + + :param params: Output from :func:`autobahn.websocket.WebSocketProtocol._parseExtensionsHeader`. + :type params: list + + :returns: A new instance of :class:`autobahn.compress.PerMessageBzip2Response`. + :rtype: obj + """ + client_max_compress_level = 0 + server_max_compress_level = 0 + + for p in params: + + if len(params[p]) > 1: + raise Exception("multiple occurrence of extension parameter '%s' for extension '%s'" % (p, cls.EXTENSION_NAME)) + + val = params[p][0] + + if p == 'client_max_compress_level': + try: + val = int(val) + except: + raise Exception("illegal extension parameter value '%s' for parameter '%s' of extension '%s'" % (val, p, cls.EXTENSION_NAME)) + if val not in PerMessageBzip2Mixin.COMPRESS_LEVEL_PERMISSIBLE_VALUES: + raise Exception("illegal extension parameter value '%s' for parameter '%s' of extension '%s'" % (val, p, cls.EXTENSION_NAME)) + else: + client_max_compress_level = val + + elif p == 'server_max_compress_level': + try: + val = int(val) + except: + raise Exception("illegal extension parameter value '%s' for parameter '%s' of extension '%s'" % (val, p, cls.EXTENSION_NAME)) + if val not in PerMessageBzip2Mixin.COMPRESS_LEVEL_PERMISSIBLE_VALUES: + raise Exception("illegal extension parameter value '%s' for parameter '%s' of extension '%s'" % (val, p, cls.EXTENSION_NAME)) + else: + server_max_compress_level = val + + else: + raise Exception("illegal extension parameter '%s' for extension '%s'" % (p, cls.EXTENSION_NAME)) + + response = cls(client_max_compress_level, + server_max_compress_level) + return response + + def __init__(self, + client_max_compress_level, + server_max_compress_level): + self.client_max_compress_level = client_max_compress_level + self.server_max_compress_level = server_max_compress_level + + def __json__(self): + """ + Returns a JSON serializable object representation. + + :returns: JSON serializable representation. + :rtype: dict + """ + return {'extension': self.EXTENSION_NAME, + 'client_max_compress_level': self.client_max_compress_level, + 'server_max_compress_level': self.server_max_compress_level} + + def __repr__(self): + """ + Returns Python object representation that can be eval'ed to reconstruct the object. + + :returns: Python string representation. + :rtype: str + """ + return "PerMessageBzip2Response(client_max_compress_level = %s, server_max_compress_level = %s)" % (self.client_max_compress_level, self.server_max_compress_level) + + +class PerMessageBzip2ResponseAccept(PerMessageCompressResponseAccept, PerMessageBzip2Mixin): + """ + Set of parameters with which to accept an `permessage-bzip2` response + from a server by a client. + """ + + def __init__(self, + response, + compress_level=None): + """ + + :param response: The response being accepted. + :type response: Instance of :class:`autobahn.compress.PerMessageBzip2Response`. + :param compress_level: Override client ("client-to-server direction") compress level (this must be compatible with response). + :type compress_level: int + """ + if not isinstance(response, PerMessageBzip2Response): + raise Exception("invalid type %s for response" % type(response)) + + self.response = response + + if compress_level is not None: + if compress_level not in self.COMPRESS_LEVEL_PERMISSIBLE_VALUES: + raise Exception("invalid value %s for compress_level - permissible values %s" % (compress_level, self.COMPRESS_LEVEL_PERMISSIBLE_VALUES)) + + if response.client_max_compress_level != 0 and compress_level > response.client_max_compress_level: + raise Exception("invalid value %s for compress_level - server requested lower maximum value" % compress_level) + + self.compress_level = compress_level + + def __json__(self): + """ + Returns a JSON serializable object representation. + + :returns: JSON serializable representation. + :rtype: dict + """ + return {'extension': self.EXTENSION_NAME, + 'response': self.response.__json__(), + 'compress_level': self.compress_level} + + def __repr__(self): + """ + Returns Python object representation that can be eval'ed to reconstruct the object. + + :returns: Python string representation. + :rtype: str + """ + return "PerMessageBzip2ResponseAccept(response = %s, compress_level = %s)" % (self.response.__repr__(), self.compress_level) + + +class PerMessageBzip2(PerMessageCompress, PerMessageBzip2Mixin): + """ + `permessage-bzip2` WebSocket extension processor. + """ + DEFAULT_COMPRESS_LEVEL = 9 + + @classmethod + def create_from_response_accept(cls, is_server, accept): + pmce = cls(is_server, + accept.response.server_max_compress_level, + accept.compress_level if accept.compress_level is not None else accept.response.client_max_compress_level) + return pmce + + @classmethod + def create_from_offer_accept(cls, is_server, accept): + pmce = cls(is_server, + accept.compress_level if accept.compress_level is not None else accept.offer.request_max_compress_level, + accept.request_max_compress_level) + return pmce + + def __init__(self, + is_server, + server_max_compress_level, + client_max_compress_level): + self._isServer = is_server + self._compressor = None + self._decompressor = None + + self.server_max_compress_level = server_max_compress_level if server_max_compress_level != 0 else self.DEFAULT_COMPRESS_LEVEL + self.client_max_compress_level = client_max_compress_level if client_max_compress_level != 0 else self.DEFAULT_COMPRESS_LEVEL + + def __json__(self): + return {'extension': self.EXTENSION_NAME, + 'isServer': self._isServer, + 'server_max_compress_level': self.server_max_compress_level, + 'client_max_compress_level': self.client_max_compress_level} + + def __repr__(self): + return "PerMessageBzip2(isServer = %s, server_max_compress_level = %s, client_max_compress_level = %s)" % (self._isServer, self.server_max_compress_level, self.client_max_compress_level) + + def start_compress_message(self): + if self._isServer: + if self._compressor is None: + self._compressor = bz2.BZ2Compressor(self.server_max_compress_level) + else: + if self._compressor is None: + self._compressor = bz2.BZ2Compressor(self.client_max_compress_level) + + def compress_message_data(self, data): + return self._compressor.compress(data) + + def end_compress_message(self): + data = self._compressor.flush() + + # there seems to be no "flush without close stream", and after + # full flush, compressor must not be reused + self._compressor = None + + return data + + def start_decompress_message(self): + if self._decompressor is None: + self._decompressor = bz2.BZ2Decompressor() + + def decompress_message_data(self, data): + return self._decompressor.decompress(data) + + def end_decompress_message(self): + self._decompressor = None diff --git a/venv/lib/python3.7/site-packages/autobahn/websocket/compress_snappy.py b/venv/lib/python3.7/site-packages/autobahn/websocket/compress_snappy.py new file mode 100644 index 0000000..7233f80 --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/websocket/compress_snappy.py @@ -0,0 +1,429 @@ +############################################################################### +# +# The MIT License (MIT) +# +# Copyright (c) Crossbar.io Technologies GmbH +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +############################################################################### + +from __future__ import absolute_import + +import snappy + +from autobahn.websocket.compress_base import PerMessageCompressOffer, \ + PerMessageCompressOfferAccept, \ + PerMessageCompressResponse, \ + PerMessageCompressResponseAccept, \ + PerMessageCompress + +__all__ = ( + 'PerMessageSnappyMixin', + 'PerMessageSnappyOffer', + 'PerMessageSnappyOfferAccept', + 'PerMessageSnappyResponse', + 'PerMessageSnappyResponseAccept', + 'PerMessageSnappy', +) + + +class PerMessageSnappyMixin(object): + """ + Mixin class for this extension. + """ + + EXTENSION_NAME = "permessage-snappy" + """ + Name of this WebSocket extension. + """ + + +class PerMessageSnappyOffer(PerMessageCompressOffer, PerMessageSnappyMixin): + """ + Set of extension parameters for `permessage-snappy` WebSocket extension + offered by a client to a server. + """ + + @classmethod + def parse(cls, params): + """ + Parses a WebSocket extension offer for `permessage-snappy` provided by a client to a server. + + :param params: Output from :func:`autobahn.websocket.WebSocketProtocol._parseExtensionsHeader`. + :type params: list + + :returns: A new instance of :class:`autobahn.compress.PerMessageSnappyOffer`. + :rtype: obj + """ + # extension parameter defaults + accept_no_context_takeover = False + request_no_context_takeover = False + + # verify/parse client ("client-to-server direction") parameters of permessage-snappy offer + for p in params: + + if len(params[p]) > 1: + raise Exception("multiple occurrence of extension parameter '%s' for extension '%s'" % (p, cls.EXTENSION_NAME)) + + val = params[p][0] + + if p == 'client_no_context_takeover': + # noinspection PySimplifyBooleanCheck + if val is not True: + raise Exception("illegal extension parameter value '%s' for parameter '%s' of extension '%s'" % (val, p, cls.EXTENSION_NAME)) + else: + accept_no_context_takeover = True + + elif p == 'server_no_context_takeover': + # noinspection PySimplifyBooleanCheck + if val is not True: + raise Exception("illegal extension parameter value '%s' for parameter '%s' of extension '%s'" % (val, p, cls.EXTENSION_NAME)) + else: + request_no_context_takeover = True + + else: + raise Exception("illegal extension parameter '%s' for extension '%s'" % (p, cls.EXTENSION_NAME)) + + offer = cls(accept_no_context_takeover, + request_no_context_takeover) + return offer + + def __init__(self, + accept_no_context_takeover=True, + request_no_context_takeover=False): + """ + + :param accept_no_context_takeover: Iff true, client accepts "no context takeover" feature. + :type accept_no_context_takeover: bool + :param request_no_context_takeover: Iff true, client request "no context takeover" feature. + :type request_no_context_takeover: bool + """ + if type(accept_no_context_takeover) != bool: + raise Exception("invalid type %s for accept_no_context_takeover" % type(accept_no_context_takeover)) + + self.accept_no_context_takeover = accept_no_context_takeover + + if type(request_no_context_takeover) != bool: + raise Exception("invalid type %s for request_no_context_takeover" % type(request_no_context_takeover)) + + self.request_no_context_takeover = request_no_context_takeover + + def get_extension_string(self): + """ + Returns the WebSocket extension configuration string as sent to the server. + + :returns: PMCE configuration string. + :rtype: str + """ + pmce_string = self.EXTENSION_NAME + if self.accept_no_context_takeover: + pmce_string += "; client_no_context_takeover" + if self.request_no_context_takeover: + pmce_string += "; server_no_context_takeover" + return pmce_string + + def __json__(self): + """ + Returns a JSON serializable object representation. + + :returns: JSON serializable representation. + :rtype: dict + """ + return {'extension': self.EXTENSION_NAME, + 'accept_no_context_takeover': self.accept_no_context_takeover, + 'request_no_context_takeover': self.request_no_context_takeover} + + def __repr__(self): + """ + Returns Python object representation that can be eval'ed to reconstruct the object. + + :returns: Python string representation. + :rtype: str + """ + return "PerMessageSnappyOffer(accept_no_context_takeover = %s, request_no_context_takeover = %s)" % (self.accept_no_context_takeover, self.request_no_context_takeover) + + +class PerMessageSnappyOfferAccept(PerMessageCompressOfferAccept, PerMessageSnappyMixin): + """ + Set of parameters with which to accept an `permessage-snappy` offer + from a client by a server. + """ + + def __init__(self, + offer, + request_no_context_takeover=False, + no_context_takeover=None): + """ + + :param offer: The offer being accepted. + :type offer: Instance of :class:`autobahn.compress.PerMessageSnappyOffer`. + :param request_no_context_takeover: Iff true, server request "no context takeover" feature. + :type request_no_context_takeover: bool + :param no_context_takeover: Override server ("server-to-client direction") context takeover (this must be compatible with offer). + :type no_context_takeover: bool + """ + if not isinstance(offer, PerMessageSnappyOffer): + raise Exception("invalid type %s for offer" % type(offer)) + + self.offer = offer + + if type(request_no_context_takeover) != bool: + raise Exception("invalid type %s for request_no_context_takeover" % type(request_no_context_takeover)) + + if request_no_context_takeover and not offer.accept_no_context_takeover: + raise Exception("invalid value %s for request_no_context_takeover - feature unsupported by client" % request_no_context_takeover) + + self.request_no_context_takeover = request_no_context_takeover + + if no_context_takeover is not None: + if type(no_context_takeover) != bool: + raise Exception("invalid type %s for no_context_takeover" % type(no_context_takeover)) + + if offer.request_no_context_takeover and not no_context_takeover: + raise Exception("invalid value %s for no_context_takeover - client requested feature" % no_context_takeover) + + self.no_context_takeover = no_context_takeover + + def get_extension_string(self): + """ + Returns the WebSocket extension configuration string as sent to the server. + + :returns: PMCE configuration string. + :rtype: str + """ + pmce_string = self.EXTENSION_NAME + if self.offer.request_no_context_takeover: + pmce_string += "; server_no_context_takeover" + if self.request_no_context_takeover: + pmce_string += "; client_no_context_takeover" + return pmce_string + + def __json__(self): + """ + Returns a JSON serializable object representation. + + :returns: JSON serializable representation. + :rtype: dict + """ + return {'extension': self.EXTENSION_NAME, + 'offer': self.offer.__json__(), + 'request_no_context_takeover': self.request_no_context_takeover, + 'no_context_takeover': self.no_context_takeover} + + def __repr__(self): + """ + Returns Python object representation that can be eval'ed to reconstruct the object. + + :returns: Python string representation. + :rtype: str + """ + return "PerMessageSnappyAccept(offer = %s, request_no_context_takeover = %s, no_context_takeover = %s)" % (self.offer.__repr__(), self.request_no_context_takeover, self.no_context_takeover) + + +class PerMessageSnappyResponse(PerMessageCompressResponse, PerMessageSnappyMixin): + """ + Set of parameters for `permessage-snappy` responded by server. + """ + + @classmethod + def parse(cls, params): + """ + Parses a WebSocket extension response for `permessage-snappy` provided by a server to a client. + + :param params: Output from :func:`autobahn.websocket.WebSocketProtocol._parseExtensionsHeader`. + :type params: list + + :returns: A new instance of :class:`autobahn.compress.PerMessageSnappyResponse`. + :rtype: obj + """ + client_no_context_takeover = False + server_no_context_takeover = False + + for p in params: + + if len(params[p]) > 1: + raise Exception("multiple occurrence of extension parameter '%s' for extension '%s'" % (p, cls.EXTENSION_NAME)) + + val = params[p][0] + + if p == 'client_no_context_takeover': + # noinspection PySimplifyBooleanCheck + if val is not True: + raise Exception("illegal extension parameter value '%s' for parameter '%s' of extension '%s'" % (val, p, cls.EXTENSION_NAME)) + else: + client_no_context_takeover = True + + elif p == 'server_no_context_takeover': + # noinspection PySimplifyBooleanCheck + if val is not True: + raise Exception("illegal extension parameter value '%s' for parameter '%s' of extension '%s'" % (val, p, cls.EXTENSION_NAME)) + else: + server_no_context_takeover = True + + else: + raise Exception("illegal extension parameter '%s' for extension '%s'" % (p, cls.EXTENSION_NAME)) + + response = cls(client_no_context_takeover, + server_no_context_takeover) + return response + + def __init__(self, + client_no_context_takeover, + server_no_context_takeover): + self.client_no_context_takeover = client_no_context_takeover + self.server_no_context_takeover = server_no_context_takeover + + def __json__(self): + """ + Returns a JSON serializable object representation. + + :returns: JSON serializable representation. + :rtype: dict + """ + return {'extension': self.EXTENSION_NAME, + 'client_no_context_takeover': self.client_no_context_takeover, + 'server_no_context_takeover': self.server_no_context_takeover} + + def __repr__(self): + """ + Returns Python object representation that can be eval'ed to reconstruct the object. + + :returns: Python string representation. + :rtype: str + """ + return "PerMessageSnappyResponse(client_no_context_takeover = %s, server_no_context_takeover = %s)" % (self.client_no_context_takeover, self.server_no_context_takeover) + + +class PerMessageSnappyResponseAccept(PerMessageCompressResponseAccept, PerMessageSnappyMixin): + """ + Set of parameters with which to accept an `permessage-snappy` response + from a server by a client. + """ + + def __init__(self, + response, + no_context_takeover=None): + """ + + :param response: The response being accepted. + :type response: Instance of :class:`autobahn.compress.PerMessageSnappyResponse`. + :param no_context_takeover: Override client ("client-to-server direction") context takeover (this must be compatible with response). + :type no_context_takeover: bool + """ + if not isinstance(response, PerMessageSnappyResponse): + raise Exception("invalid type %s for response" % type(response)) + + self.response = response + + if no_context_takeover is not None: + if type(no_context_takeover) != bool: + raise Exception("invalid type %s for no_context_takeover" % type(no_context_takeover)) + + if response.client_no_context_takeover and not no_context_takeover: + raise Exception("invalid value %s for no_context_takeover - server requested feature" % no_context_takeover) + + self.no_context_takeover = no_context_takeover + + def __json__(self): + """ + Returns a JSON serializable object representation. + + :returns: JSON serializable representation. + :rtype: dict + """ + return {'extension': self.EXTENSION_NAME, + 'response': self.response.__json__(), + 'no_context_takeover': self.no_context_takeover} + + def __repr__(self): + """ + Returns Python object representation that can be eval'ed to reconstruct the object. + + :returns: Python string representation. + :rtype: str + """ + return "PerMessageSnappyResponseAccept(response = %s, no_context_takeover = %s)" % (self.response.__repr__(), self.no_context_takeover) + + +class PerMessageSnappy(PerMessageCompress, PerMessageSnappyMixin): + """ + `permessage-snappy` WebSocket extension processor. + """ + + @classmethod + def create_from_response_accept(cls, is_server, accept): + pmce = cls(is_server, + accept.response.server_no_context_takeover, + accept.no_context_takeover if accept.no_context_takeover is not None else accept.response.client_no_context_takeover) + return pmce + + @classmethod + def create_from_offer_accept(cls, is_server, accept): + pmce = cls(is_server, + accept.no_context_takeover if accept.no_context_takeover is not None else accept.offer.request_no_context_takeover, + accept.request_no_context_takeover) + return pmce + + def __init__(self, + is_server, + server_no_context_takeover, + client_no_context_takeover): + self._is_server = is_server + self.server_no_context_takeover = server_no_context_takeover + self.client_no_context_takeover = client_no_context_takeover + + self._compressor = None + self._decompressor = None + + def __json__(self): + return {'extension': self.EXTENSION_NAME, + 'server_no_context_takeover': self.server_no_context_takeover, + 'client_no_context_takeover': self.client_no_context_takeover} + + def __repr__(self): + return "PerMessageSnappy(is_server = %s, server_no_context_takeover = %s, client_no_context_takeover = %s)" % (self._is_server, self.server_no_context_takeover, self.client_no_context_takeover) + + def start_compress_message(self): + if self._is_server: + if self._compressor is None or self.server_no_context_takeover: + self._compressor = snappy.StreamCompressor() + else: + if self._compressor is None or self.client_no_context_takeover: + self._compressor = snappy.StreamCompressor() + + def compress_message_data(self, data): + return self._compressor.add_chunk(data) + + def end_compress_message(self): + return b"" + + def start_decompress_message(self): + if self._is_server: + if self._decompressor is None or self.client_no_context_takeover: + self._decompressor = snappy.StreamDecompressor() + else: + if self._decompressor is None or self.server_no_context_takeover: + self._decompressor = snappy.StreamDecompressor() + + def decompress_message_data(self, data): + return self._decompressor.decompress(data) + + def end_decompress_message(self): + pass diff --git a/venv/lib/python3.7/site-packages/autobahn/xbr/_interfaces.py b/venv/lib/python3.7/site-packages/autobahn/xbr/_interfaces.py new file mode 100644 index 0000000..71e0365 --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/xbr/_interfaces.py @@ -0,0 +1,188 @@ +############################################################################### +# +# The MIT License (MIT) +# +# Copyright (c) Crossbar.io Technologies GmbH +# +# 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. +# +############################################################################### + +import abc +import six + + +@six.add_metaclass(abc.ABCMeta) +class IMarketMaker(object): + """ + XBR Market Maker interface. + """ + + @abc.abstractmethod + def status(self, details): + """ + + :param details: + :return: + """ + + @abc.abstractmethod + def offer(self, key_id, price, details): + """ + + :param key_id: + :param price: + :param details: + :return: + """ + + @abc.abstractmethod + def revoke(self, key_id, details): + """ + + :param key_id: + :param details: + :return: + """ + + @abc.abstractmethod + def quote(self, key_id, details): + """ + + :param key_id: + :param details: + :return: + """ + + @abc.abstractmethod + def buy(self, channel_id, channel_seq, buyer_pubkey, datakey_id, amount, balance, signature, details): + """ + + :param channel_id: + :param channel_seq: + :param buyer_pubkey: + :param datakey_id: + :param amount: + :param balance: + :param signature: + :param details: + :return: + """ + + @abc.abstractmethod + def get_payment_channels(self, address, details): + """ + + :param address: + :param details: + :return: + """ + + @abc.abstractmethod + def get_payment_channel(self, channel_id, details): + """ + + :param channel_id: + :param details: + :return: + """ + + +@six.add_metaclass(abc.ABCMeta) +class IProvider(object): + """ + XBR Provider interface. + """ + + @abc.abstractmethod + def sell(self, key_id, buyer_pubkey, amount_paid, post_balance, signature, details): + """ + + :param key_id: + :param buyer_pubkey: + :param amount_paid: + :param post_balance: + :param signature: + :param details: + :return: + """ + + +@six.add_metaclass(abc.ABCMeta) +class IConsumer(object): + """ + XBR Consumer interface. + """ + + +@six.add_metaclass(abc.ABCMeta) +class ISeller(object): + """ + XBR Seller interface. + """ + + @abc.abstractmethod + async def start(self, session): + """ + + :param session: + :return: + """ + + @abc.abstractmethod + async def wrap(self, uri, payload): + """ + + :param uri: + :param payload: + :return: + """ + + +@six.add_metaclass(abc.ABCMeta) +class IBuyer(object): + """ + XBR Buyer interface. + """ + + @abc.abstractmethod + async def start(self, session): + """ + Start buying keys over the provided session. + + :param session: WAMP session that allows to talk to the XBR Market Maker. + """ + + @abc.abstractmethod + async def unwrap(self, key_id, enc_ser, ciphertext): + """ + Decrypt and deserialize received XBR payload. + + :param key_id: The ID of the datakey the payload is encrypted with. + :type key_id: bytes + + :param enc_ser: The serializer that was used for serializing the payload. One of ``cbor``, ``json``, ``msgpack``, ``ubjson``. + :type enc_ser: str + + :param ciphertext: The encrypted payload to unwrap. + :type ciphertext: bytes + + :returns: The unwrapped application payload. + :rtype: object + """ diff --git a/venv/lib/python3.7/site-packages/autobahn/xbr/_mnemonic.py b/venv/lib/python3.7/site-packages/autobahn/xbr/_mnemonic.py new file mode 100644 index 0000000..3881a0d --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/xbr/_mnemonic.py @@ -0,0 +1,162 @@ +############################################################################### +# +# The MIT License (MIT) +# +# Copyright (c) 2018 Luis Teixeira +# - copied & modified from https://github.com/vergl4s/ethereum-mnemonic-utils +# +# 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. +# +############################################################################### + +import hashlib +import hmac +import struct + +from base58 import b58encode_check +from ecdsa.curves import SECP256k1 + +BIP39_PBKDF2_ROUNDS = 2048 +BIP39_SALT_MODIFIER = "mnemonic" +BIP32_PRIVDEV = 0x80000000 +BIP32_CURVE = SECP256k1 +BIP32_SEED_MODIFIER = b'Bitcoin seed' + +# https://github.com/ethereum/EIPs/issues/84#issuecomment-528213145 +LEDGER_ETH_DERIVATION_PATH = "m/44'/60'/0'/0" + + +def mnemonic_to_bip39seed(mnemonic, passphrase): + """ BIP39 seed from a mnemonic key. + Logic adapted from https://github.com/trezor/python-mnemonic. """ + mnemonic = bytes(mnemonic, 'utf8') + salt = bytes(BIP39_SALT_MODIFIER + passphrase, 'utf8') + return hashlib.pbkdf2_hmac('sha512', mnemonic, salt, BIP39_PBKDF2_ROUNDS) + + +def bip39seed_to_bip32masternode(seed): + """ BIP32 master node derivation from a bip39 seed. + Logic adapted from https://github.com/satoshilabs/slips/blob/master/slip-0010/testvectors.py. """ + h = hmac.new(BIP32_SEED_MODIFIER, seed, hashlib.sha512).digest() + key, chain_code = h[:32], h[32:] + return key, chain_code + + +def derive_public_key(private_key): + """ Public key from a private key. + Logic adapted from https://github.com/satoshilabs/slips/blob/master/slip-0010/testvectors.py. """ + + Q = int.from_bytes(private_key, byteorder='big') * BIP32_CURVE.generator + xstr = Q.x().to_bytes(32, byteorder='big') + parity = Q.y() & 1 + return (2 + parity).to_bytes(1, byteorder='big') + xstr + + +def derive_bip32childkey(parent_key, parent_chain_code, i): + """ Derives a child key from an existing key, i is current derivation parameter. + Logic adapted from https://github.com/satoshilabs/slips/blob/master/slip-0010/testvectors.py. """ + + assert len(parent_key) == 32 + assert len(parent_chain_code) == 32 + k = parent_chain_code + if (i & BIP32_PRIVDEV) != 0: + key = b'\x00' + parent_key + else: + key = derive_public_key(parent_key) + d = key + struct.pack('>L', i) + while True: + h = hmac.new(k, d, hashlib.sha512).digest() + key, chain_code = h[:32], h[32:] + a = int.from_bytes(key, byteorder='big') + b = int.from_bytes(parent_key, byteorder='big') + key = (a + b) % BIP32_CURVE.order + if a < BIP32_CURVE.order and key != 0: + key = key.to_bytes(32, byteorder='big') + break + d = b'\x01' + h[32:] + struct.pack('>L', i) + + return key, chain_code + + +def fingerprint(public_key): + """ BIP32 fingerprint formula, used to get b58 serialized key. """ + + return hashlib.new('ripemd160', hashlib.sha256(public_key).digest()).digest()[:4] + + +def b58xprv(parent_fingerprint, private_key, chain, depth, childnr): + """ Private key b58 serialization format. """ + + raw = (b'\x04\x88\xad\xe4' + bytes(chr(depth), 'utf-8') + parent_fingerprint + childnr.to_bytes( + 4, byteorder='big') + chain + b'\x00' + private_key) + + return b58encode_check(raw) + + +def b58xpub(parent_fingerprint, public_key, chain, depth, childnr): + """ Public key b58 serialization format. """ + + raw = (b'\x04\x88\xb2\x1e' + bytes(chr(depth), 'utf-8') + parent_fingerprint + childnr.to_bytes( + 4, byteorder='big') + chain + public_key) + + return b58encode_check(raw) + + +def parse_derivation_path(str_derivation_path): + """ Parses a derivation path such as "m/44'/60/0'/0" and returns + list of integers for each element in path. """ + + path = [] + if str_derivation_path[0:2] != 'm/': + raise ValueError("Can't recognize derivation path. It should look like \"m/44'/60/0'/0\".") + + for i in str_derivation_path.lstrip('m/').split('/'): + if "'" in i: + path.append(BIP32_PRIVDEV + int(i[:-1])) + else: + path.append(int(i)) + return path + + +def mnemonic_to_private_key(mnemonic, str_derivation_path=LEDGER_ETH_DERIVATION_PATH, passphrase=""): + """ Performs all convertions to get a private key from a mnemonic sentence, including: + + BIP39 mnemonic to seed + BIP32 seed to master key + BIP32 child derivation of a path provided + + Parameters: + mnemonic -- seed wordlist, usually with 24 words, that is used for ledger wallet backup + str_derivation_path -- string that directs BIP32 key derivation, defaults to path + used by ledger ETH wallet + + """ + + derivation_path = parse_derivation_path(str_derivation_path) + + bip39seed = mnemonic_to_bip39seed(mnemonic, passphrase) + + master_private_key, master_chain_code = bip39seed_to_bip32masternode(bip39seed) + + private_key, chain_code = master_private_key, master_chain_code + + for i in derivation_path: + private_key, chain_code = derive_bip32childkey(private_key, chain_code, i) + + return private_key diff --git a/venv/lib/python3.7/site-packages/autobahn/xbr/_util.py b/venv/lib/python3.7/site-packages/autobahn/xbr/_util.py new file mode 100644 index 0000000..05b38e5 --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/xbr/_util.py @@ -0,0 +1,218 @@ +############################################################################### +# +# The MIT License (MIT) +# +# Copyright (c) Crossbar.io Technologies GmbH +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +############################################################################### + +from binascii import a2b_hex + +import click +import web3 +from py_eth_sig_utils import signing + +_EIP712_SIG_LEN = 32 + 32 + 1 + + +def unpack_uint128(data): + assert data is None or type(data) == bytes, 'data must by bytes, was {}'.format(type(data)) + if data and type(data) == bytes: + assert len(data) == 16, 'data must be bytes[16], but was bytes[{}]'.format(len(data)) + + if data: + return web3.Web3.toInt(data) + else: + return 0 + + +def pack_uint128(value): + assert value is None or (type(value) == int and value >= 0 and value < 2**128) + + if value: + data = web3.Web3.toBytes(value) + return b'\x00' * (16 - len(data)) + data + else: + return b'\x00' * 16 + + +# FIXME: possibly use https://eth-abi.readthedocs.io/en/stable/decoding.html + +def unpack_uint256(data): + assert data is None or type(data) == bytes, 'data must by bytes, was {}'.format(type(data)) + if data and type(data) == bytes: + assert len(data) == 32, 'data must be bytes[32], but was bytes[{}]'.format(len(data)) + + if data: + return int(web3.Web3.toInt(data)) + else: + return 0 + + +def pack_uint256(value): + assert value is None or (type(value) == int and value >= 0 and value < 2**256), 'value must be uint256, but was {}'.format(value) + + if value: + data = web3.Web3.toBytes(value) + return b'\x00' * (32 - len(data)) + data + else: + return b'\x00' * 32 + + +def hl(text, bold=True, color='yellow'): + if not isinstance(text, str): + text = '{}'.format(text) + return click.style(text, fg=color, bold=bold) + + +def _create_eip712_data(verifying_adr, channel_adr, channel_seq, balance, is_final): + assert type(verifying_adr) == bytes and len(verifying_adr) == 20 + assert type(channel_adr) == bytes and len(channel_adr) == 20 + assert type(channel_seq) == int + assert type(balance) == int + assert type(is_final) == bool + + data = { + 'types': { + 'EIP712Domain': [ + {'name': 'name', 'type': 'string'}, + {'name': 'version', 'type': 'string'}, + {'name': 'chainId', 'type': 'uint256'}, + {'name': 'verifyingContract', 'type': 'address'}, + ], + 'ChannelClose': [ + # The channel contract address. + {'name': 'channel_adr', 'type': 'address'}, + + # Channel off-chain transaction sequence number. + {'name': 'channel_seq', 'type': 'uint32'}, + + # Balance remaining in after the transaction. + {'name': 'balance', 'type': 'uint256'}, + + # Transaction is marked as final. + {'name': 'is_final', 'type': 'bool'}, + ], + }, + 'primaryType': 'ChannelClose', + 'domain': { + 'name': 'XBR', + 'version': '1', + 'chainId': 1, + 'verifyingContract': verifying_adr, + }, + 'message': { + 'channel_adr': channel_adr, + 'channel_seq': channel_seq, + 'balance': balance, + 'is_final': is_final + }, + } + + return data + + +def sign_eip712_data(eth_privkey, channel_adr, channel_seq, balance, is_final=False): + """ + + :param eth_privkey: Ethereum address of buyer (a raw 20 bytes Ethereum address). + :type eth_privkey: bytes + + :param channel_adr: Channel contract address. + :type channel_adr: bytes + + :param channel_seq: Payment channel off-chain transaction sequence number. + :type channel_seq: int + + :param balance: Balance remaining in the payment/paying channel after buying/selling the key. + :type balance: int + + :param is_final: Flag to indicate the transaction is considered final. + :type is_final: bool + + :return: The signature according to EIP712 (32+32+1 raw bytes). + :rtype: bytes + """ + assert type(eth_privkey) == bytes and len(eth_privkey) == 32 + assert type(channel_adr) == bytes and len(channel_adr) == 20 + assert type(channel_seq) == int and channel_seq > 0 + assert type(balance) == int and balance >= 0 + assert type(is_final) == bool + + verifying_adr = a2b_hex('0x254dffcd3277C0b1660F6d42EFbB754edaBAbC2B'[2:]) + + # make a private key object from the raw private key bytes + # pkey = eth_keys.keys.PrivateKey(eth_privkey) + + # get the canonical address of the account + # eth_adr = web3.Web3.toChecksumAddress(pkey.public_key.to_canonical_address()) + # eth_adr = pkey.public_key.to_canonical_address() + + # create EIP712 typed data object + data = _create_eip712_data(verifying_adr, channel_adr, channel_seq, balance, is_final) + + # FIXME: this fails on PyPy (but ot on CPy!) with + # Unknown format b'%M\xff\xcd2w\xc0\xb1f\x0fmB\xef\xbbuN\xda\xba\xbc+', attempted to normalize to 0x254dffcd3277c0b1660f6d42efbb754edababc2b + _args = signing.sign_typed_data(data, eth_privkey) + + signature = signing.v_r_s_to_signature(*_args) + assert len(signature) == _EIP712_SIG_LEN + + return signature + + +def recover_eip712_signer(channel_adr, channel_seq, balance, is_final, signature): + """ + Recover the signer address the given EIP712 signature was signed with. + + :param channel_adr: Channel contract address. + :type channel_adr: bytes + + :param channel_seq: Payment channel off-chain transaction sequence number. + :type channel_seq: int + + :param balance: Balance remaining in the payment/paying channel after buying/selling the key. + :type balance: int + + :param is_final: Flag to indicate the transaction is considered final. + :type is_final: bool + + :param signature: The EIP712 (32+32+1 raw bytes) signature to verify. + :type signature: bytes + + :return: The (computed) signer address the signature was signed with. + :rtype: bytes + """ + assert type(channel_adr) == bytes and len(channel_adr) == 20 + assert type(channel_seq) == int + assert type(balance) == int + assert type(is_final) == bool + assert type(signature) == bytes and len(signature) == _EIP712_SIG_LEN + + verifying_adr = a2b_hex('0x254dffcd3277C0b1660F6d42EFbB754edaBAbC2B'[2:]) + + # recreate EIP712 typed data object + data = _create_eip712_data(verifying_adr, channel_adr, channel_seq, balance, is_final) + + # this returns the signer (checksummed) address as a string, eg "0xE11BA2b4D45Eaed5996Cd0823791E0C93114882d" + signer_address = signing.recover_typed_data(data, *signing.signature_to_v_r_s(signature)) + + return a2b_hex(signer_address[2:]) diff --git a/venv/lib/python3.7/site-packages/autobahn/xbr/contracts/ERC20.json b/venv/lib/python3.7/site-packages/autobahn/xbr/contracts/ERC20.json new file mode 100644 index 0000000..28454cc --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/xbr/contracts/ERC20.json @@ -0,0 +1,11052 @@ +{ + "contractName": "ERC20", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "from", + "type": "address" + }, + { + "indexed": true, + "name": "to", + "type": "address" + }, + { + "indexed": false, + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "constant": true, + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "recipient", + "type": "address" + }, + { + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "owner", + "type": "address" + }, + { + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "spender", + "type": "address" + }, + { + "name": "value", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "sender", + "type": "address" + }, + { + "name": "recipient", + "type": "address" + }, + { + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "spender", + "type": "address" + }, + { + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "spender", + "type": "address" + }, + { + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } + ], + "metadata": "{\"compiler\":{\"version\":\"0.5.2+commit.1df8f40c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"spender\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"sender\",\"type\":\"address\"},{\"name\":\"recipient\",\"type\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"spender\",\"type\":\"address\"},{\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"spender\",\"type\":\"address\"},{\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"}],\"devdoc\":{\"details\":\"Implementation of the `IERC20` interface. * This implementation is agnostic to the way tokens are created. This means that a supply mechanism has to be added in a derived contract using `_mint`. For a generic mechanism see `ERC20Mintable`. * *For a detailed writeup see our guide [How to implement supply mechanisms](https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226).* * We have followed general OpenZeppelin guidelines: functions revert instead of returning `false` on failure. This behavior is nonetheless conventional and does not conflict with the expectations of ERC20 applications. * Additionally, an `Approval` event is emitted on calls to `transferFrom`. This allows applications to reconstruct the allowance for all accounts just by listening to said events. Other implementations of the EIP may not emit these events, as it isn't required by the specification. * Finally, the non-standard `decreaseAllowance` and `increaseAllowance` functions have been added to mitigate the well-known issues around setting allowances. See `IERC20.approve`.\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See `IERC20.allowance`.\"},\"approve(address,uint256)\":{\"details\":\"See `IERC20.approve`. * Requirements: * - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See `IERC20.balanceOf`.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. * This is an alternative to `approve` that can be used as a mitigation for problems described in `IERC20.approve`. * Emits an `Approval` event indicating the updated allowance. * Requirements: * - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. * This is an alternative to `approve` that can be used as a mitigation for problems described in `IERC20.approve`. * Emits an `Approval` event indicating the updated allowance. * Requirements: * - `spender` cannot be the zero address.\"},\"totalSupply()\":{\"details\":\"See `IERC20.totalSupply`.\"},\"transfer(address,uint256)\":{\"details\":\"See `IERC20.transfer`. * Requirements: * - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See `IERC20.transferFrom`. * Emits an `Approval` event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of `ERC20`; * Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `value`. - the caller must have allowance for `sender`'s tokens of at least `amount`.\"}}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\":\"ERC20\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x4ccf2d7b51873db1ccfd54ca2adae5eac3b184f9699911ed4490438419f1c690\",\"urls\":[\"bzzr://1604f5b6d6e916c154efd8c6720cda069e5ba32dfa0a9dedf2b42e5b02d07f89\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x852793a3c2f86d336a683b30d688ec3dcfc57451af5a2bf5975cda3b7191a901\",\"urls\":[\"bzzr://07fb42206812a17c1f71e548cfa5cec6f9aa1ae0ca5df870718ca4aa9759d1a5\"]},\"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x90e8c2521653bbb1768b05889c5760031e688d9cd361f167489b89215e201b95\",\"urls\":[\"bzzr://aa8b45b57edafc3d67bc5d916327ea16807fae33f753ca163ae0c4061b789766\"]}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610710806100206000396000f3fe608060405234801561001057600080fd5b50600436106100a5576000357c01000000000000000000000000000000000000000000000000000000009004806370a082311161007857806370a0823114610166578063a457c2d71461018c578063a9059cbb146101b8578063dd62ed3e146101e4576100a5565b8063095ea7b3146100aa57806318160ddd146100ea57806323b872dd14610104578063395093511461013a575b600080fd5b6100d6600480360360408110156100c057600080fd5b50600160a060020a038135169060200135610212565b604080519115158252519081900360200190f35b6100f2610228565b60408051918252519081900360200190f35b6100d66004803603606081101561011a57600080fd5b50600160a060020a0381358116916020810135909116906040013561022e565b6100d66004803603604081101561015057600080fd5b50600160a060020a038135169060200135610285565b6100f26004803603602081101561017c57600080fd5b5035600160a060020a03166102c1565b6100d6600480360360408110156101a257600080fd5b50600160a060020a0381351690602001356102dc565b6100d6600480360360408110156101ce57600080fd5b50600160a060020a038135169060200135610318565b6100f2600480360360408110156101fa57600080fd5b50600160a060020a0381358116916020013516610325565b600061021f338484610350565b50600192915050565b60025490565b600061023b848484610446565b600160a060020a03841660009081526001602090815260408083203380855292529091205461027b918691610276908663ffffffff61059216565b610350565b5060019392505050565b336000818152600160209081526040808320600160a060020a0387168452909152812054909161021f918590610276908663ffffffff6105f216565b600160a060020a031660009081526020819052604090205490565b336000818152600160209081526040808320600160a060020a0387168452909152812054909161021f918590610276908663ffffffff61059216565b600061021f338484610446565b600160a060020a03918216600090815260016020908152604080832093909416825291909152205490565b600160a060020a038316151561039a5760405160e560020a62461bcd0281526004018080602001828103825260248152602001806106c16024913960400191505060405180910390fd5b600160a060020a03821615156103e45760405160e560020a62461bcd02815260040180806020018281038252602281526020018061067a6022913960400191505060405180910390fd5b600160a060020a03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b600160a060020a03831615156104905760405160e560020a62461bcd02815260040180806020018281038252602581526020018061069c6025913960400191505060405180910390fd5b600160a060020a03821615156104da5760405160e560020a62461bcd0281526004018080602001828103825260238152602001806106576023913960400191505060405180910390fd5b600160a060020a038316600090815260208190526040902054610503908263ffffffff61059216565b600160a060020a038085166000908152602081905260408082209390935590841681522054610538908263ffffffff6105f216565b600160a060020a038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000828211156105ec576040805160e560020a62461bcd02815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60008282018381101561064f576040805160e560020a62461bcd02815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b939250505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373a165627a7a72305820d508fef87366948927f9a8d179b6e30108f6468136cc4c57105c9d5c35238b740029", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a5576000357c01000000000000000000000000000000000000000000000000000000009004806370a082311161007857806370a0823114610166578063a457c2d71461018c578063a9059cbb146101b8578063dd62ed3e146101e4576100a5565b8063095ea7b3146100aa57806318160ddd146100ea57806323b872dd14610104578063395093511461013a575b600080fd5b6100d6600480360360408110156100c057600080fd5b50600160a060020a038135169060200135610212565b604080519115158252519081900360200190f35b6100f2610228565b60408051918252519081900360200190f35b6100d66004803603606081101561011a57600080fd5b50600160a060020a0381358116916020810135909116906040013561022e565b6100d66004803603604081101561015057600080fd5b50600160a060020a038135169060200135610285565b6100f26004803603602081101561017c57600080fd5b5035600160a060020a03166102c1565b6100d6600480360360408110156101a257600080fd5b50600160a060020a0381351690602001356102dc565b6100d6600480360360408110156101ce57600080fd5b50600160a060020a038135169060200135610318565b6100f2600480360360408110156101fa57600080fd5b50600160a060020a0381358116916020013516610325565b600061021f338484610350565b50600192915050565b60025490565b600061023b848484610446565b600160a060020a03841660009081526001602090815260408083203380855292529091205461027b918691610276908663ffffffff61059216565b610350565b5060019392505050565b336000818152600160209081526040808320600160a060020a0387168452909152812054909161021f918590610276908663ffffffff6105f216565b600160a060020a031660009081526020819052604090205490565b336000818152600160209081526040808320600160a060020a0387168452909152812054909161021f918590610276908663ffffffff61059216565b600061021f338484610446565b600160a060020a03918216600090815260016020908152604080832093909416825291909152205490565b600160a060020a038316151561039a5760405160e560020a62461bcd0281526004018080602001828103825260248152602001806106c16024913960400191505060405180910390fd5b600160a060020a03821615156103e45760405160e560020a62461bcd02815260040180806020018281038252602281526020018061067a6022913960400191505060405180910390fd5b600160a060020a03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b600160a060020a03831615156104905760405160e560020a62461bcd02815260040180806020018281038252602581526020018061069c6025913960400191505060405180910390fd5b600160a060020a03821615156104da5760405160e560020a62461bcd0281526004018080602001828103825260238152602001806106576023913960400191505060405180910390fd5b600160a060020a038316600090815260208190526040902054610503908263ffffffff61059216565b600160a060020a038085166000908152602081905260408082209390935590841681522054610538908263ffffffff6105f216565b600160a060020a038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000828211156105ec576040805160e560020a62461bcd02815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60008282018381101561064f576040805160e560020a62461bcd02815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b939250505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373a165627a7a72305820d508fef87366948927f9a8d179b6e30108f6468136cc4c57105c9d5c35238b740029", + "sourceMap": "1232:6578:10:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1232:6578:10;;;;;;;", + "deployedSourceMap": "1232:6578:10:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1232:6578:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2453:145;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2453:145:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;1514:89;;;:::i;:::-;;;;;;;;;;;;;;;;3055:252;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;3055:252:10;;;;;;;;;;;;;;;;;:::i;3702:203::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;3702:203:10;;;;;;;;:::i;1661:108::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1661:108:10;-1:-1:-1;;;;;1661:108:10;;:::i;4392:213::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;4392:213:10;;;;;;;;:::i;1972:153::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1972:153:10;;;;;;;;:::i;2183:132::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2183:132:10;;;;;;;;;;:::i;2453:145::-;2518:4;2534:36;2543:10;2555:7;2564:5;2534:8;:36::i;:::-;-1:-1:-1;2587:4:10;2453:145;;;;:::o;1514:89::-;1584:12;;1514:89;:::o;3055:252::-;3144:4;3160:36;3170:6;3178:9;3189:6;3160:9;:36::i;:::-;-1:-1:-1;;;;;3235:19:10;;;;;;:11;:19;;;;;;;;3223:10;3235:31;;;;;;;;;3206:73;;3215:6;;3235:43;;3271:6;3235:43;:35;:43;:::i;:::-;3206:8;:73::i;:::-;-1:-1:-1;3296:4:10;3055:252;;;;;:::o;3702:203::-;3807:10;3782:4;3828:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;3828:32:10;;;;;;;;;;3782:4;;3798:79;;3819:7;;3828:48;;3865:10;3828:48;:36;:48;:::i;1661:108::-;-1:-1:-1;;;;;1744:18:10;1718:7;1744:18;;;;;;;;;;;;1661:108::o;4392:213::-;4502:10;4477:4;4523:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;4523:32:10;;;;;;;;;;4477:4;;4493:84;;4514:7;;4523:53;;4560:15;4523:53;:36;:53;:::i;1972:153::-;2041:4;2057:40;2067:10;2079:9;2090:6;2057:9;:40::i;2183:132::-;-1:-1:-1;;;;;2281:18:10;;;2255:7;2281:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;2183:132::o;7117:329::-;-1:-1:-1;;;;;7209:19:10;;;;7201:68;;;;-1:-1:-1;;;;;7201:68:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7287:21:10;;;;7279:68;;;;-1:-1:-1;;;;;7279:68:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7358:18:10;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:35;;;7408:31;;;;;;;;;;;;;;;;;7117:329;;;:::o;5079:422::-;-1:-1:-1;;;;;5176:20:10;;;;5168:70;;;;-1:-1:-1;;;;;5168:70:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5256:23:10;;;;5248:71;;;;-1:-1:-1;;;;;5248:71:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5350:17:10;;:9;:17;;;;;;;;;;;:29;;5372:6;5350:29;:21;:29;:::i;:::-;-1:-1:-1;;;;;5330:17:10;;;:9;:17;;;;;;;;;;;:49;;;;5412:20;;;;;;;:32;;5437:6;5412:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;5389:20:10;;;:9;:20;;;;;;;;;;;;:55;;;;5459:35;;;;;;;5389:20;;5459:35;;;;;;;;;;;;;5079:422;;;:::o;1274:179:9:-;1332:7;1359:6;;;;1351:49;;;;;-1:-1:-1;;;;;1351:49:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1422:5:9;;;1274:179::o;834:176::-;892:7;923:5;;;946:6;;;;938:46;;;;;-1:-1:-1;;;;;938:46:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;1002:1;834:176;-1:-1:-1;;;834:176:9:o", + "source": "pragma solidity ^0.5.0;\n\nimport \"./IERC20.sol\";\nimport \"../../math/SafeMath.sol\";\n\n/**\n * @dev Implementation of the `IERC20` interface.\n *\n * This implementation is agnostic to the way tokens are created. This means\n * that a supply mechanism has to be added in a derived contract using `_mint`.\n * For a generic mechanism see `ERC20Mintable`.\n *\n * *For a detailed writeup see our guide [How to implement supply\n * mechanisms](https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226).*\n *\n * We have followed general OpenZeppelin guidelines: functions revert instead\n * of returning `false` on failure. This behavior is nonetheless conventional\n * and does not conflict with the expectations of ERC20 applications.\n *\n * Additionally, an `Approval` event is emitted on calls to `transferFrom`.\n * This allows applications to reconstruct the allowance for all accounts just\n * by listening to said events. Other implementations of the EIP may not emit\n * these events, as it isn't required by the specification.\n *\n * Finally, the non-standard `decreaseAllowance` and `increaseAllowance`\n * functions have been added to mitigate the well-known issues around setting\n * allowances. See `IERC20.approve`.\n */\ncontract ERC20 is IERC20 {\n using SafeMath for uint256;\n\n mapping (address => uint256) private _balances;\n\n mapping (address => mapping (address => uint256)) private _allowances;\n\n uint256 private _totalSupply;\n\n /**\n * @dev See `IERC20.totalSupply`.\n */\n function totalSupply() public view returns (uint256) {\n return _totalSupply;\n }\n\n /**\n * @dev See `IERC20.balanceOf`.\n */\n function balanceOf(address account) public view returns (uint256) {\n return _balances[account];\n }\n\n /**\n * @dev See `IERC20.transfer`.\n *\n * Requirements:\n *\n * - `recipient` cannot be the zero address.\n * - the caller must have a balance of at least `amount`.\n */\n function transfer(address recipient, uint256 amount) public returns (bool) {\n _transfer(msg.sender, recipient, amount);\n return true;\n }\n\n /**\n * @dev See `IERC20.allowance`.\n */\n function allowance(address owner, address spender) public view returns (uint256) {\n return _allowances[owner][spender];\n }\n\n /**\n * @dev See `IERC20.approve`.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n */\n function approve(address spender, uint256 value) public returns (bool) {\n _approve(msg.sender, spender, value);\n return true;\n }\n\n /**\n * @dev See `IERC20.transferFrom`.\n *\n * Emits an `Approval` event indicating the updated allowance. This is not\n * required by the EIP. See the note at the beginning of `ERC20`;\n *\n * Requirements:\n * - `sender` and `recipient` cannot be the zero address.\n * - `sender` must have a balance of at least `value`.\n * - the caller must have allowance for `sender`'s tokens of at least\n * `amount`.\n */\n function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) {\n _transfer(sender, recipient, amount);\n _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount));\n return true;\n }\n\n /**\n * @dev Atomically increases the allowance granted to `spender` by the caller.\n *\n * This is an alternative to `approve` that can be used as a mitigation for\n * problems described in `IERC20.approve`.\n *\n * Emits an `Approval` event indicating the updated allowance.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n */\n function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {\n _approve(msg.sender, spender, _allowances[msg.sender][spender].add(addedValue));\n return true;\n }\n\n /**\n * @dev Atomically decreases the allowance granted to `spender` by the caller.\n *\n * This is an alternative to `approve` that can be used as a mitigation for\n * problems described in `IERC20.approve`.\n *\n * Emits an `Approval` event indicating the updated allowance.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n * - `spender` must have allowance for the caller of at least\n * `subtractedValue`.\n */\n function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {\n _approve(msg.sender, spender, _allowances[msg.sender][spender].sub(subtractedValue));\n return true;\n }\n\n /**\n * @dev Moves tokens `amount` from `sender` to `recipient`.\n *\n * This is internal function is equivalent to `transfer`, and can be used to\n * e.g. implement automatic token fees, slashing mechanisms, etc.\n *\n * Emits a `Transfer` event.\n *\n * Requirements:\n *\n * - `sender` cannot be the zero address.\n * - `recipient` cannot be the zero address.\n * - `sender` must have a balance of at least `amount`.\n */\n function _transfer(address sender, address recipient, uint256 amount) internal {\n require(sender != address(0), \"ERC20: transfer from the zero address\");\n require(recipient != address(0), \"ERC20: transfer to the zero address\");\n\n _balances[sender] = _balances[sender].sub(amount);\n _balances[recipient] = _balances[recipient].add(amount);\n emit Transfer(sender, recipient, amount);\n }\n\n /** @dev Creates `amount` tokens and assigns them to `account`, increasing\n * the total supply.\n *\n * Emits a `Transfer` event with `from` set to the zero address.\n *\n * Requirements\n *\n * - `to` cannot be the zero address.\n */\n function _mint(address account, uint256 amount) internal {\n require(account != address(0), \"ERC20: mint to the zero address\");\n\n _totalSupply = _totalSupply.add(amount);\n _balances[account] = _balances[account].add(amount);\n emit Transfer(address(0), account, amount);\n }\n\n /**\n * @dev Destoys `amount` tokens from `account`, reducing the\n * total supply.\n *\n * Emits a `Transfer` event with `to` set to the zero address.\n *\n * Requirements\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens.\n */\n function _burn(address account, uint256 value) internal {\n require(account != address(0), \"ERC20: burn from the zero address\");\n\n _totalSupply = _totalSupply.sub(value);\n _balances[account] = _balances[account].sub(value);\n emit Transfer(account, address(0), value);\n }\n\n /**\n * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.\n *\n * This is internal function is equivalent to `approve`, and can be used to\n * e.g. set automatic allowances for certain subsystems, etc.\n *\n * Emits an `Approval` event.\n *\n * Requirements:\n *\n * - `owner` cannot be the zero address.\n * - `spender` cannot be the zero address.\n */\n function _approve(address owner, address spender, uint256 value) internal {\n require(owner != address(0), \"ERC20: approve from the zero address\");\n require(spender != address(0), \"ERC20: approve to the zero address\");\n\n _allowances[owner][spender] = value;\n emit Approval(owner, spender, value);\n }\n\n /**\n * @dev Destoys `amount` tokens from `account`.`amount` is then deducted\n * from the caller's allowance.\n *\n * See `_burn` and `_approve`.\n */\n function _burnFrom(address account, uint256 amount) internal {\n _burn(account, amount);\n _approve(account, msg.sender, _allowances[account][msg.sender].sub(amount));\n }\n}\n", + "sourcePath": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol", + "ast": { + "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol", + "exportedSymbols": { + "ERC20": [ + 3520 + ] + }, + "id": 3521, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 3125, + "literals": [ + "solidity", + "^", + "0.5", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "0:23:10" + }, + { + "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/IERC20.sol", + "file": "./IERC20.sol", + "id": 3126, + "nodeType": "ImportDirective", + "scope": 3521, + "sourceUnit": 3648, + "src": "25:22:10", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "openzeppelin-solidity/contracts/math/SafeMath.sol", + "file": "../../math/SafeMath.sol", + "id": 3127, + "nodeType": "ImportDirective", + "scope": 3521, + "sourceUnit": 3124, + "src": "48:33:10", + "symbolAliases": [], + "unitAlias": "" + }, + { + "baseContracts": [ + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 3128, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 3647, + "src": "1250:6:10", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3647", + "typeString": "contract IERC20" + } + }, + "id": 3129, + "nodeType": "InheritanceSpecifier", + "src": "1250:6:10" + } + ], + "contractDependencies": [ + 3647 + ], + "contractKind": "contract", + "documentation": "@dev Implementation of the `IERC20` interface.\n * This implementation is agnostic to the way tokens are created. This means\nthat a supply mechanism has to be added in a derived contract using `_mint`.\nFor a generic mechanism see `ERC20Mintable`.\n * *For a detailed writeup see our guide [How to implement supply\nmechanisms](https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226).*\n * We have followed general OpenZeppelin guidelines: functions revert instead\nof returning `false` on failure. This behavior is nonetheless conventional\nand does not conflict with the expectations of ERC20 applications.\n * Additionally, an `Approval` event is emitted on calls to `transferFrom`.\nThis allows applications to reconstruct the allowance for all accounts just\nby listening to said events. Other implementations of the EIP may not emit\nthese events, as it isn't required by the specification.\n * Finally, the non-standard `decreaseAllowance` and `increaseAllowance`\nfunctions have been added to mitigate the well-known issues around setting\nallowances. See `IERC20.approve`.", + "fullyImplemented": true, + "id": 3520, + "linearizedBaseContracts": [ + 3520, + 3647 + ], + "name": "ERC20", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 3132, + "libraryName": { + "contractScope": null, + "id": 3130, + "name": "SafeMath", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 3123, + "src": "1269:8:10", + "typeDescriptions": { + "typeIdentifier": "t_contract$_SafeMath_$3123", + "typeString": "library SafeMath" + } + }, + "nodeType": "UsingForDirective", + "src": "1263:27:10", + "typeName": { + "id": 3131, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1282:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + { + "constant": false, + "id": 3136, + "name": "_balances", + "nodeType": "VariableDeclaration", + "scope": 3520, + "src": "1296:46:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "typeName": { + "id": 3135, + "keyType": { + "id": 3133, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1305:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "1296:28:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "valueType": { + "id": 3134, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1316:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + "value": null, + "visibility": "private" + }, + { + "constant": false, + "id": 3142, + "name": "_allowances", + "nodeType": "VariableDeclaration", + "scope": 3520, + "src": "1349:69:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + }, + "typeName": { + "id": 3141, + "keyType": { + "id": 3137, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1358:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "1349:49:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + }, + "valueType": { + "id": 3140, + "keyType": { + "id": 3138, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1378:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "1369:28:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "valueType": { + "id": 3139, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1389:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + } + }, + "value": null, + "visibility": "private" + }, + { + "constant": false, + "id": 3144, + "name": "_totalSupply", + "nodeType": "VariableDeclaration", + "scope": 3520, + "src": "1425:28:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3143, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1425:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "private" + }, + { + "body": { + "id": 3151, + "nodeType": "Block", + "src": "1567:36:10", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 3149, + "name": "_totalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3144, + "src": "1584:12:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 3148, + "id": 3150, + "nodeType": "Return", + "src": "1577:19:10" + } + ] + }, + "documentation": "@dev See `IERC20.totalSupply`.", + "id": 3152, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "totalSupply", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3145, + "nodeType": "ParameterList", + "parameters": [], + "src": "1534:2:10" + }, + "returnParameters": { + "id": 3148, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3147, + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3152, + "src": "1558:7:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3146, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1558:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1557:9:10" + }, + "scope": 3520, + "src": "1514:89:10", + "stateMutability": "view", + "superFunction": 3585, + "visibility": "public" + }, + { + "body": { + "id": 3163, + "nodeType": "Block", + "src": "1727:42:10", + "statements": [ + { + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 3159, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3136, + "src": "1744:9:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3161, + "indexExpression": { + "argumentTypes": null, + "id": 3160, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3154, + "src": "1754:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1744:18:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 3158, + "id": 3162, + "nodeType": "Return", + "src": "1737:25:10" + } + ] + }, + "documentation": "@dev See `IERC20.balanceOf`.", + "id": 3164, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "balanceOf", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3155, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3154, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 3164, + "src": "1680:15:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3153, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1680:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1679:17:10" + }, + "returnParameters": { + "id": 3158, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3157, + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3164, + "src": "1718:7:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3156, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1718:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1717:9:10" + }, + "scope": 3520, + "src": "1661:108:10", + "stateMutability": "view", + "superFunction": 3592, + "visibility": "public" + }, + { + "body": { + "id": 3182, + "nodeType": "Block", + "src": "2047:78:10", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 3174, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3662, + "src": "2067:3:10", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 3175, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "2067:10:10", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "argumentTypes": null, + "id": 3176, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3166, + "src": "2079:9:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 3177, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3168, + "src": "2090:6:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3173, + "name": "_transfer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3363, + "src": "2057:9:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 3178, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2057:40:10", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3179, + "nodeType": "ExpressionStatement", + "src": "2057:40:10" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 3180, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2114:4:10", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 3172, + "id": 3181, + "nodeType": "Return", + "src": "2107:11:10" + } + ] + }, + "documentation": "@dev See `IERC20.transfer`.\n * Requirements:\n * - `recipient` cannot be the zero address.\n- the caller must have a balance of at least `amount`.", + "id": 3183, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "transfer", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3169, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3166, + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 3183, + "src": "1990:17:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3165, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1990:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 3168, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 3183, + "src": "2009:14:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3167, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2009:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1989:35:10" + }, + "returnParameters": { + "id": 3172, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3171, + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3183, + "src": "2041:4:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 3170, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2041:4:10", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2040:6:10" + }, + "scope": 3520, + "src": "1972:153:10", + "stateMutability": "nonpayable", + "superFunction": 3601, + "visibility": "public" + }, + { + "body": { + "id": 3198, + "nodeType": "Block", + "src": "2264:51:10", + "statements": [ + { + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 3192, + "name": "_allowances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3142, + "src": "2281:11:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + } + }, + "id": 3194, + "indexExpression": { + "argumentTypes": null, + "id": 3193, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3185, + "src": "2293:5:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2281:18:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3196, + "indexExpression": { + "argumentTypes": null, + "id": 3195, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3187, + "src": "2300:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2281:27:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 3191, + "id": 3197, + "nodeType": "Return", + "src": "2274:34:10" + } + ] + }, + "documentation": "@dev See `IERC20.allowance`.", + "id": 3199, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "allowance", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3188, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3185, + "name": "owner", + "nodeType": "VariableDeclaration", + "scope": 3199, + "src": "2202:13:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3184, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2202:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 3187, + "name": "spender", + "nodeType": "VariableDeclaration", + "scope": 3199, + "src": "2217:15:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3186, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2217:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2201:32:10" + }, + "returnParameters": { + "id": 3191, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3190, + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3199, + "src": "2255:7:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3189, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2255:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2254:9:10" + }, + "scope": 3520, + "src": "2183:132:10", + "stateMutability": "view", + "superFunction": 3610, + "visibility": "public" + }, + { + "body": { + "id": 3217, + "nodeType": "Block", + "src": "2524:74:10", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 3209, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3662, + "src": "2543:3:10", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 3210, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "2543:10:10", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "argumentTypes": null, + "id": 3211, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3201, + "src": "2555:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 3212, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3203, + "src": "2564:5:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3208, + "name": "_approve", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3491, + "src": "2534:8:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 3213, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2534:36:10", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3214, + "nodeType": "ExpressionStatement", + "src": "2534:36:10" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 3215, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2587:4:10", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 3207, + "id": 3216, + "nodeType": "Return", + "src": "2580:11:10" + } + ] + }, + "documentation": "@dev See `IERC20.approve`.\n * Requirements:\n * - `spender` cannot be the zero address.", + "id": 3218, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "approve", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3204, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3201, + "name": "spender", + "nodeType": "VariableDeclaration", + "scope": 3218, + "src": "2470:15:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3200, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2470:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 3203, + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 3218, + "src": "2487:13:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3202, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2487:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2469:32:10" + }, + "returnParameters": { + "id": 3207, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3206, + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3218, + "src": "2518:4:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 3205, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2518:4:10", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2517:6:10" + }, + "scope": 3520, + "src": "2453:145:10", + "stateMutability": "nonpayable", + "superFunction": 3619, + "visibility": "public" + }, + { + "body": { + "id": 3252, + "nodeType": "Block", + "src": "3150:157:10", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 3230, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3220, + "src": "3170:6:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 3231, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3222, + "src": "3178:9:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 3232, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3224, + "src": "3189:6:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3229, + "name": "_transfer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3363, + "src": "3160:9:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 3233, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3160:36:10", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3234, + "nodeType": "ExpressionStatement", + "src": "3160:36:10" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 3236, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3220, + "src": "3215:6:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 3237, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3662, + "src": "3223:3:10", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 3238, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "3223:10:10", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 3246, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3224, + "src": "3271:6:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 3239, + "name": "_allowances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3142, + "src": "3235:11:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + } + }, + "id": 3241, + "indexExpression": { + "argumentTypes": null, + "id": 3240, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3220, + "src": "3247:6:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3235:19:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3244, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 3242, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3662, + "src": "3255:3:10", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 3243, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "3255:10:10", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3235:31:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3245, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 3042, + "src": "3235:35:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 3247, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3235:43:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3235, + "name": "_approve", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3491, + "src": "3206:8:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 3248, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3206:73:10", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3249, + "nodeType": "ExpressionStatement", + "src": "3206:73:10" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 3250, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3296:4:10", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 3228, + "id": 3251, + "nodeType": "Return", + "src": "3289:11:10" + } + ] + }, + "documentation": "@dev See `IERC20.transferFrom`.\n * Emits an `Approval` event indicating the updated allowance. This is not\nrequired by the EIP. See the note at the beginning of `ERC20`;\n * Requirements:\n- `sender` and `recipient` cannot be the zero address.\n- `sender` must have a balance of at least `value`.\n- the caller must have allowance for `sender`'s tokens of at least\n`amount`.", + "id": 3253, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "transferFrom", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3225, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3220, + "name": "sender", + "nodeType": "VariableDeclaration", + "scope": 3253, + "src": "3077:14:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3219, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3077:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 3222, + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 3253, + "src": "3093:17:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3221, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3093:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 3224, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 3253, + "src": "3112:14:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3223, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3112:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3076:51:10" + }, + "returnParameters": { + "id": 3228, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3227, + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3253, + "src": "3144:4:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 3226, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3144:4:10", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3143:6:10" + }, + "scope": 3520, + "src": "3055:252:10", + "stateMutability": "nonpayable", + "superFunction": 3630, + "visibility": "public" + }, + { + "body": { + "id": 3279, + "nodeType": "Block", + "src": "3788:117:10", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 3263, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3662, + "src": "3807:3:10", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 3264, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "3807:10:10", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "argumentTypes": null, + "id": 3265, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3255, + "src": "3819:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 3273, + "name": "addedValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3257, + "src": "3865:10:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 3266, + "name": "_allowances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3142, + "src": "3828:11:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + } + }, + "id": 3269, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 3267, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3662, + "src": "3840:3:10", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 3268, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "3840:10:10", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3828:23:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3271, + "indexExpression": { + "argumentTypes": null, + "id": 3270, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3255, + "src": "3852:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3828:32:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3272, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 3017, + "src": "3828:36:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 3274, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3828:48:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3262, + "name": "_approve", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3491, + "src": "3798:8:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 3275, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3798:79:10", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3276, + "nodeType": "ExpressionStatement", + "src": "3798:79:10" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 3277, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3894:4:10", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 3261, + "id": 3278, + "nodeType": "Return", + "src": "3887:11:10" + } + ] + }, + "documentation": "@dev Atomically increases the allowance granted to `spender` by the caller.\n * This is an alternative to `approve` that can be used as a mitigation for\nproblems described in `IERC20.approve`.\n * Emits an `Approval` event indicating the updated allowance.\n * Requirements:\n * - `spender` cannot be the zero address.", + "id": 3280, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "increaseAllowance", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3258, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3255, + "name": "spender", + "nodeType": "VariableDeclaration", + "scope": 3280, + "src": "3729:15:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3254, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3729:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 3257, + "name": "addedValue", + "nodeType": "VariableDeclaration", + "scope": 3280, + "src": "3746:18:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3256, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3746:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3728:37:10" + }, + "returnParameters": { + "id": 3261, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3260, + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3280, + "src": "3782:4:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 3259, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3782:4:10", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3781:6:10" + }, + "scope": 3520, + "src": "3702:203:10", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 3306, + "nodeType": "Block", + "src": "4483:122:10", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 3290, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3662, + "src": "4502:3:10", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 3291, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "4502:10:10", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "argumentTypes": null, + "id": 3292, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3282, + "src": "4514:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 3300, + "name": "subtractedValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3284, + "src": "4560:15:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 3293, + "name": "_allowances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3142, + "src": "4523:11:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + } + }, + "id": 3296, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 3294, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3662, + "src": "4535:3:10", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 3295, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "4535:10:10", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4523:23:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3298, + "indexExpression": { + "argumentTypes": null, + "id": 3297, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3282, + "src": "4547:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4523:32:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3299, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 3042, + "src": "4523:36:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 3301, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4523:53:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3289, + "name": "_approve", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3491, + "src": "4493:8:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 3302, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4493:84:10", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3303, + "nodeType": "ExpressionStatement", + "src": "4493:84:10" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 3304, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4594:4:10", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 3288, + "id": 3305, + "nodeType": "Return", + "src": "4587:11:10" + } + ] + }, + "documentation": "@dev Atomically decreases the allowance granted to `spender` by the caller.\n * This is an alternative to `approve` that can be used as a mitigation for\nproblems described in `IERC20.approve`.\n * Emits an `Approval` event indicating the updated allowance.\n * Requirements:\n * - `spender` cannot be the zero address.\n- `spender` must have allowance for the caller of at least\n`subtractedValue`.", + "id": 3307, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "decreaseAllowance", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3285, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3282, + "name": "spender", + "nodeType": "VariableDeclaration", + "scope": 3307, + "src": "4419:15:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3281, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4419:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 3284, + "name": "subtractedValue", + "nodeType": "VariableDeclaration", + "scope": 3307, + "src": "4436:23:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3283, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4436:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4418:42:10" + }, + "returnParameters": { + "id": 3288, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3287, + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3307, + "src": "4477:4:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 3286, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4477:4:10", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4476:6:10" + }, + "scope": 3520, + "src": "4392:213:10", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 3362, + "nodeType": "Block", + "src": "5158:343:10", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 3321, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 3317, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3309, + "src": "5176:6:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30", + "id": 3319, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5194:1:10", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 3318, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5186:7:10", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 3320, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5186:10:10", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "5176:20:10", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "45524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373", + "id": 3322, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5198:39:10", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea", + "typeString": "literal_string \"ERC20: transfer from the zero address\"" + }, + "value": "ERC20: transfer from the zero address" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea", + "typeString": "literal_string \"ERC20: transfer from the zero address\"" + } + ], + "id": 3316, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 3665, + 3666 + ], + "referencedDeclaration": 3666, + "src": "5168:7:10", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 3323, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5168:70:10", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3324, + "nodeType": "ExpressionStatement", + "src": "5168:70:10" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 3330, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 3326, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3311, + "src": "5256:9:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30", + "id": 3328, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5277:1:10", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 3327, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5269:7:10", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 3329, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5269:10:10", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "5256:23:10", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "45524332303a207472616e7366657220746f20746865207a65726f2061646472657373", + "id": 3331, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5281:37:10", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f", + "typeString": "literal_string \"ERC20: transfer to the zero address\"" + }, + "value": "ERC20: transfer to the zero address" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f", + "typeString": "literal_string \"ERC20: transfer to the zero address\"" + } + ], + "id": 3325, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 3665, + 3666 + ], + "referencedDeclaration": 3666, + "src": "5248:7:10", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 3332, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5248:71:10", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3333, + "nodeType": "ExpressionStatement", + "src": "5248:71:10" + }, + { + "expression": { + "argumentTypes": null, + "id": 3343, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 3334, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3136, + "src": "5330:9:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3336, + "indexExpression": { + "argumentTypes": null, + "id": 3335, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3309, + "src": "5340:6:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "5330:17:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 3341, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3313, + "src": "5372:6:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 3337, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3136, + "src": "5350:9:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3339, + "indexExpression": { + "argumentTypes": null, + "id": 3338, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3309, + "src": "5360:6:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5350:17:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3340, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 3042, + "src": "5350:21:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 3342, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5350:29:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5330:49:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3344, + "nodeType": "ExpressionStatement", + "src": "5330:49:10" + }, + { + "expression": { + "argumentTypes": null, + "id": 3354, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 3345, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3136, + "src": "5389:9:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3347, + "indexExpression": { + "argumentTypes": null, + "id": 3346, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3311, + "src": "5399:9:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "5389:20:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 3352, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3313, + "src": "5437:6:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 3348, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3136, + "src": "5412:9:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3350, + "indexExpression": { + "argumentTypes": null, + "id": 3349, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3311, + "src": "5422:9:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5412:20:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3351, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 3017, + "src": "5412:24:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 3353, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5412:32:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5389:55:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3355, + "nodeType": "ExpressionStatement", + "src": "5389:55:10" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 3357, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3309, + "src": "5468:6:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 3358, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3311, + "src": "5476:9:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 3359, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3313, + "src": "5487:6:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3356, + "name": "Transfer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3638, + "src": "5459:8:10", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 3360, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5459:35:10", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3361, + "nodeType": "EmitStatement", + "src": "5454:40:10" + } + ] + }, + "documentation": "@dev Moves tokens `amount` from `sender` to `recipient`.\n * This is internal function is equivalent to `transfer`, and can be used to\ne.g. implement automatic token fees, slashing mechanisms, etc.\n * Emits a `Transfer` event.\n * Requirements:\n * - `sender` cannot be the zero address.\n- `recipient` cannot be the zero address.\n- `sender` must have a balance of at least `amount`.", + "id": 3363, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_transfer", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3314, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3309, + "name": "sender", + "nodeType": "VariableDeclaration", + "scope": 3363, + "src": "5098:14:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3308, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5098:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 3311, + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 3363, + "src": "5114:17:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3310, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5114:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 3313, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 3363, + "src": "5133:14:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3312, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5133:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5097:51:10" + }, + "returnParameters": { + "id": 3315, + "nodeType": "ParameterList", + "parameters": [], + "src": "5158:0:10" + }, + "scope": 3520, + "src": "5079:422:10", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "internal" + }, + { + "body": { + "id": 3405, + "nodeType": "Block", + "src": "5828:245:10", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 3375, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 3371, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3365, + "src": "5846:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30", + "id": 3373, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5865:1:10", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 3372, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5857:7:10", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 3374, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5857:10:10", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "5846:21:10", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "45524332303a206d696e7420746f20746865207a65726f2061646472657373", + "id": 3376, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5869:33:10", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e", + "typeString": "literal_string \"ERC20: mint to the zero address\"" + }, + "value": "ERC20: mint to the zero address" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e", + "typeString": "literal_string \"ERC20: mint to the zero address\"" + } + ], + "id": 3370, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 3665, + 3666 + ], + "referencedDeclaration": 3666, + "src": "5838:7:10", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 3377, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5838:65:10", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3378, + "nodeType": "ExpressionStatement", + "src": "5838:65:10" + }, + { + "expression": { + "argumentTypes": null, + "id": 3384, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 3379, + "name": "_totalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3144, + "src": "5914:12:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 3382, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3367, + "src": "5946:6:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 3380, + "name": "_totalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3144, + "src": "5929:12:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3381, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 3017, + "src": "5929:16:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 3383, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5929:24:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5914:39:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3385, + "nodeType": "ExpressionStatement", + "src": "5914:39:10" + }, + { + "expression": { + "argumentTypes": null, + "id": 3395, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 3386, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3136, + "src": "5963:9:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3388, + "indexExpression": { + "argumentTypes": null, + "id": 3387, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3365, + "src": "5973:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "5963:18:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 3393, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3367, + "src": "6007:6:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 3389, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3136, + "src": "5984:9:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3391, + "indexExpression": { + "argumentTypes": null, + "id": 3390, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3365, + "src": "5994:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5984:18:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3392, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 3017, + "src": "5984:22:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 3394, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5984:30:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5963:51:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3396, + "nodeType": "ExpressionStatement", + "src": "5963:51:10" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30", + "id": 3399, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6046:1:10", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 3398, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6038:7:10", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 3400, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6038:10:10", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "argumentTypes": null, + "id": 3401, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3365, + "src": "6050:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 3402, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3367, + "src": "6059:6:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3397, + "name": "Transfer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3638, + "src": "6029:8:10", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 3403, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6029:37:10", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3404, + "nodeType": "EmitStatement", + "src": "6024:42:10" + } + ] + }, + "documentation": "@dev Creates `amount` tokens and assigns them to `account`, increasing\nthe total supply.\n * Emits a `Transfer` event with `from` set to the zero address.\n * Requirements\n * - `to` cannot be the zero address.", + "id": 3406, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_mint", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3368, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3365, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 3406, + "src": "5786:15:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3364, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5786:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 3367, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 3406, + "src": "5803:14:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3366, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5803:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5785:33:10" + }, + "returnParameters": { + "id": 3369, + "nodeType": "ParameterList", + "parameters": [], + "src": "5828:0:10" + }, + "scope": 3520, + "src": "5771:302:10", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "internal" + }, + { + "body": { + "id": 3448, + "nodeType": "Block", + "src": "6448:244:10", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 3418, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 3414, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3408, + "src": "6466:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30", + "id": 3416, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6485:1:10", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 3415, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6477:7:10", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 3417, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6477:10:10", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "6466:21:10", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "45524332303a206275726e2066726f6d20746865207a65726f2061646472657373", + "id": 3419, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6489:35:10", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f", + "typeString": "literal_string \"ERC20: burn from the zero address\"" + }, + "value": "ERC20: burn from the zero address" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f", + "typeString": "literal_string \"ERC20: burn from the zero address\"" + } + ], + "id": 3413, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 3665, + 3666 + ], + "referencedDeclaration": 3666, + "src": "6458:7:10", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 3420, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6458:67:10", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3421, + "nodeType": "ExpressionStatement", + "src": "6458:67:10" + }, + { + "expression": { + "argumentTypes": null, + "id": 3427, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 3422, + "name": "_totalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3144, + "src": "6536:12:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 3425, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3410, + "src": "6568:5:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 3423, + "name": "_totalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3144, + "src": "6551:12:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3424, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 3042, + "src": "6551:16:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 3426, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6551:23:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6536:38:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3428, + "nodeType": "ExpressionStatement", + "src": "6536:38:10" + }, + { + "expression": { + "argumentTypes": null, + "id": 3438, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 3429, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3136, + "src": "6584:9:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3431, + "indexExpression": { + "argumentTypes": null, + "id": 3430, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3408, + "src": "6594:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "6584:18:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 3436, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3410, + "src": "6628:5:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 3432, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3136, + "src": "6605:9:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3434, + "indexExpression": { + "argumentTypes": null, + "id": 3433, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3408, + "src": "6615:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "6605:18:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3435, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 3042, + "src": "6605:22:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 3437, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6605:29:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6584:50:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3439, + "nodeType": "ExpressionStatement", + "src": "6584:50:10" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 3441, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3408, + "src": "6658:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30", + "id": 3443, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6675:1:10", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 3442, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6667:7:10", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 3444, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6667:10:10", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "argumentTypes": null, + "id": 3445, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3410, + "src": "6679:5:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3440, + "name": "Transfer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3638, + "src": "6649:8:10", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 3446, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6649:36:10", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3447, + "nodeType": "EmitStatement", + "src": "6644:41:10" + } + ] + }, + "documentation": "@dev Destoys `amount` tokens from `account`, reducing the\ntotal supply.\n * Emits a `Transfer` event with `to` set to the zero address.\n * Requirements\n * - `account` cannot be the zero address.\n- `account` must have at least `amount` tokens.", + "id": 3449, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_burn", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3411, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3408, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 3449, + "src": "6407:15:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3407, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6407:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 3410, + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 3449, + "src": "6424:13:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3409, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6424:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6406:32:10" + }, + "returnParameters": { + "id": 3412, + "nodeType": "ParameterList", + "parameters": [], + "src": "6448:0:10" + }, + "scope": 3520, + "src": "6392:300:10", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "internal" + }, + { + "body": { + "id": 3490, + "nodeType": "Block", + "src": "7191:255:10", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 3463, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 3459, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3451, + "src": "7209:5:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30", + "id": 3461, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7226:1:10", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 3460, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7218:7:10", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 3462, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7218:10:10", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "7209:19:10", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "45524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373", + "id": 3464, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7230:38:10", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208", + "typeString": "literal_string \"ERC20: approve from the zero address\"" + }, + "value": "ERC20: approve from the zero address" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208", + "typeString": "literal_string \"ERC20: approve from the zero address\"" + } + ], + "id": 3458, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 3665, + 3666 + ], + "referencedDeclaration": 3666, + "src": "7201:7:10", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 3465, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7201:68:10", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3466, + "nodeType": "ExpressionStatement", + "src": "7201:68:10" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 3472, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 3468, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3453, + "src": "7287:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30", + "id": 3470, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7306:1:10", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 3469, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7298:7:10", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 3471, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7298:10:10", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "7287:21:10", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "45524332303a20617070726f766520746f20746865207a65726f2061646472657373", + "id": 3473, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7310:36:10", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029", + "typeString": "literal_string \"ERC20: approve to the zero address\"" + }, + "value": "ERC20: approve to the zero address" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029", + "typeString": "literal_string \"ERC20: approve to the zero address\"" + } + ], + "id": 3467, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 3665, + 3666 + ], + "referencedDeclaration": 3666, + "src": "7279:7:10", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 3474, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7279:68:10", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3475, + "nodeType": "ExpressionStatement", + "src": "7279:68:10" + }, + { + "expression": { + "argumentTypes": null, + "id": 3482, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 3476, + "name": "_allowances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3142, + "src": "7358:11:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + } + }, + "id": 3479, + "indexExpression": { + "argumentTypes": null, + "id": 3477, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3451, + "src": "7370:5:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7358:18:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3480, + "indexExpression": { + "argumentTypes": null, + "id": 3478, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3453, + "src": "7377:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "7358:27:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 3481, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3455, + "src": "7388:5:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7358:35:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3483, + "nodeType": "ExpressionStatement", + "src": "7358:35:10" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 3485, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3451, + "src": "7417:5:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 3486, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3453, + "src": "7424:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 3487, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3455, + "src": "7433:5:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3484, + "name": "Approval", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3646, + "src": "7408:8:10", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 3488, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7408:31:10", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3489, + "nodeType": "EmitStatement", + "src": "7403:36:10" + } + ] + }, + "documentation": "@dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.\n * This is internal function is equivalent to `approve`, and can be used to\ne.g. set automatic allowances for certain subsystems, etc.\n * Emits an `Approval` event.\n * Requirements:\n * - `owner` cannot be the zero address.\n- `spender` cannot be the zero address.", + "id": 3491, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_approve", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3456, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3451, + "name": "owner", + "nodeType": "VariableDeclaration", + "scope": 3491, + "src": "7135:13:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3450, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7135:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 3453, + "name": "spender", + "nodeType": "VariableDeclaration", + "scope": 3491, + "src": "7150:15:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3452, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7150:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 3455, + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 3491, + "src": "7167:13:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3454, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7167:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7134:47:10" + }, + "returnParameters": { + "id": 3457, + "nodeType": "ParameterList", + "parameters": [], + "src": "7191:0:10" + }, + "scope": 3520, + "src": "7117:329:10", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "internal" + }, + { + "body": { + "id": 3518, + "nodeType": "Block", + "src": "7684:124:10", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 3499, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3493, + "src": "7700:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 3500, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3495, + "src": "7709:6:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3498, + "name": "_burn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3449, + "src": "7694:5:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,uint256)" + } + }, + "id": 3501, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7694:22:10", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3502, + "nodeType": "ExpressionStatement", + "src": "7694:22:10" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 3504, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3493, + "src": "7735:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 3505, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3662, + "src": "7744:3:10", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 3506, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "7744:10:10", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 3514, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3495, + "src": "7793:6:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 3507, + "name": "_allowances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3142, + "src": "7756:11:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + } + }, + "id": 3509, + "indexExpression": { + "argumentTypes": null, + "id": 3508, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3493, + "src": "7768:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7756:20:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3512, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 3510, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3662, + "src": "7777:3:10", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 3511, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "7777:10:10", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7756:32:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3513, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 3042, + "src": "7756:36:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 3515, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7756:44:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3503, + "name": "_approve", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3491, + "src": "7726:8:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 3516, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7726:75:10", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3517, + "nodeType": "ExpressionStatement", + "src": "7726:75:10" + } + ] + }, + "documentation": "@dev Destoys `amount` tokens from `account`.`amount` is then deducted\nfrom the caller's allowance.\n * See `_burn` and `_approve`.", + "id": 3519, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_burnFrom", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3496, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3493, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 3519, + "src": "7642:15:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3492, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7642:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 3495, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 3519, + "src": "7659:14:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3494, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7659:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7641:33:10" + }, + "returnParameters": { + "id": 3497, + "nodeType": "ParameterList", + "parameters": [], + "src": "7684:0:10" + }, + "scope": 3520, + "src": "7623:185:10", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "internal" + } + ], + "scope": 3521, + "src": "1232:6578:10" + } + ], + "src": "0:7811:10" + }, + "legacyAST": { + "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol", + "exportedSymbols": { + "ERC20": [ + 3520 + ] + }, + "id": 3521, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 3125, + "literals": [ + "solidity", + "^", + "0.5", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "0:23:10" + }, + { + "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/IERC20.sol", + "file": "./IERC20.sol", + "id": 3126, + "nodeType": "ImportDirective", + "scope": 3521, + "sourceUnit": 3648, + "src": "25:22:10", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "openzeppelin-solidity/contracts/math/SafeMath.sol", + "file": "../../math/SafeMath.sol", + "id": 3127, + "nodeType": "ImportDirective", + "scope": 3521, + "sourceUnit": 3124, + "src": "48:33:10", + "symbolAliases": [], + "unitAlias": "" + }, + { + "baseContracts": [ + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 3128, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 3647, + "src": "1250:6:10", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3647", + "typeString": "contract IERC20" + } + }, + "id": 3129, + "nodeType": "InheritanceSpecifier", + "src": "1250:6:10" + } + ], + "contractDependencies": [ + 3647 + ], + "contractKind": "contract", + "documentation": "@dev Implementation of the `IERC20` interface.\n * This implementation is agnostic to the way tokens are created. This means\nthat a supply mechanism has to be added in a derived contract using `_mint`.\nFor a generic mechanism see `ERC20Mintable`.\n * *For a detailed writeup see our guide [How to implement supply\nmechanisms](https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226).*\n * We have followed general OpenZeppelin guidelines: functions revert instead\nof returning `false` on failure. This behavior is nonetheless conventional\nand does not conflict with the expectations of ERC20 applications.\n * Additionally, an `Approval` event is emitted on calls to `transferFrom`.\nThis allows applications to reconstruct the allowance for all accounts just\nby listening to said events. Other implementations of the EIP may not emit\nthese events, as it isn't required by the specification.\n * Finally, the non-standard `decreaseAllowance` and `increaseAllowance`\nfunctions have been added to mitigate the well-known issues around setting\nallowances. See `IERC20.approve`.", + "fullyImplemented": true, + "id": 3520, + "linearizedBaseContracts": [ + 3520, + 3647 + ], + "name": "ERC20", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 3132, + "libraryName": { + "contractScope": null, + "id": 3130, + "name": "SafeMath", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 3123, + "src": "1269:8:10", + "typeDescriptions": { + "typeIdentifier": "t_contract$_SafeMath_$3123", + "typeString": "library SafeMath" + } + }, + "nodeType": "UsingForDirective", + "src": "1263:27:10", + "typeName": { + "id": 3131, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1282:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + { + "constant": false, + "id": 3136, + "name": "_balances", + "nodeType": "VariableDeclaration", + "scope": 3520, + "src": "1296:46:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "typeName": { + "id": 3135, + "keyType": { + "id": 3133, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1305:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "1296:28:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "valueType": { + "id": 3134, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1316:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + "value": null, + "visibility": "private" + }, + { + "constant": false, + "id": 3142, + "name": "_allowances", + "nodeType": "VariableDeclaration", + "scope": 3520, + "src": "1349:69:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + }, + "typeName": { + "id": 3141, + "keyType": { + "id": 3137, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1358:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "1349:49:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + }, + "valueType": { + "id": 3140, + "keyType": { + "id": 3138, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1378:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "1369:28:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "valueType": { + "id": 3139, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1389:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + } + }, + "value": null, + "visibility": "private" + }, + { + "constant": false, + "id": 3144, + "name": "_totalSupply", + "nodeType": "VariableDeclaration", + "scope": 3520, + "src": "1425:28:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3143, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1425:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "private" + }, + { + "body": { + "id": 3151, + "nodeType": "Block", + "src": "1567:36:10", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 3149, + "name": "_totalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3144, + "src": "1584:12:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 3148, + "id": 3150, + "nodeType": "Return", + "src": "1577:19:10" + } + ] + }, + "documentation": "@dev See `IERC20.totalSupply`.", + "id": 3152, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "totalSupply", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3145, + "nodeType": "ParameterList", + "parameters": [], + "src": "1534:2:10" + }, + "returnParameters": { + "id": 3148, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3147, + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3152, + "src": "1558:7:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3146, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1558:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1557:9:10" + }, + "scope": 3520, + "src": "1514:89:10", + "stateMutability": "view", + "superFunction": 3585, + "visibility": "public" + }, + { + "body": { + "id": 3163, + "nodeType": "Block", + "src": "1727:42:10", + "statements": [ + { + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 3159, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3136, + "src": "1744:9:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3161, + "indexExpression": { + "argumentTypes": null, + "id": 3160, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3154, + "src": "1754:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1744:18:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 3158, + "id": 3162, + "nodeType": "Return", + "src": "1737:25:10" + } + ] + }, + "documentation": "@dev See `IERC20.balanceOf`.", + "id": 3164, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "balanceOf", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3155, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3154, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 3164, + "src": "1680:15:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3153, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1680:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1679:17:10" + }, + "returnParameters": { + "id": 3158, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3157, + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3164, + "src": "1718:7:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3156, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1718:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1717:9:10" + }, + "scope": 3520, + "src": "1661:108:10", + "stateMutability": "view", + "superFunction": 3592, + "visibility": "public" + }, + { + "body": { + "id": 3182, + "nodeType": "Block", + "src": "2047:78:10", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 3174, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3662, + "src": "2067:3:10", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 3175, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "2067:10:10", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "argumentTypes": null, + "id": 3176, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3166, + "src": "2079:9:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 3177, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3168, + "src": "2090:6:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3173, + "name": "_transfer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3363, + "src": "2057:9:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 3178, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2057:40:10", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3179, + "nodeType": "ExpressionStatement", + "src": "2057:40:10" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 3180, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2114:4:10", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 3172, + "id": 3181, + "nodeType": "Return", + "src": "2107:11:10" + } + ] + }, + "documentation": "@dev See `IERC20.transfer`.\n * Requirements:\n * - `recipient` cannot be the zero address.\n- the caller must have a balance of at least `amount`.", + "id": 3183, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "transfer", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3169, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3166, + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 3183, + "src": "1990:17:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3165, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1990:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 3168, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 3183, + "src": "2009:14:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3167, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2009:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1989:35:10" + }, + "returnParameters": { + "id": 3172, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3171, + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3183, + "src": "2041:4:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 3170, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2041:4:10", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2040:6:10" + }, + "scope": 3520, + "src": "1972:153:10", + "stateMutability": "nonpayable", + "superFunction": 3601, + "visibility": "public" + }, + { + "body": { + "id": 3198, + "nodeType": "Block", + "src": "2264:51:10", + "statements": [ + { + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 3192, + "name": "_allowances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3142, + "src": "2281:11:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + } + }, + "id": 3194, + "indexExpression": { + "argumentTypes": null, + "id": 3193, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3185, + "src": "2293:5:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2281:18:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3196, + "indexExpression": { + "argumentTypes": null, + "id": 3195, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3187, + "src": "2300:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2281:27:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 3191, + "id": 3197, + "nodeType": "Return", + "src": "2274:34:10" + } + ] + }, + "documentation": "@dev See `IERC20.allowance`.", + "id": 3199, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "allowance", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3188, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3185, + "name": "owner", + "nodeType": "VariableDeclaration", + "scope": 3199, + "src": "2202:13:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3184, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2202:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 3187, + "name": "spender", + "nodeType": "VariableDeclaration", + "scope": 3199, + "src": "2217:15:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3186, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2217:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2201:32:10" + }, + "returnParameters": { + "id": 3191, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3190, + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3199, + "src": "2255:7:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3189, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2255:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2254:9:10" + }, + "scope": 3520, + "src": "2183:132:10", + "stateMutability": "view", + "superFunction": 3610, + "visibility": "public" + }, + { + "body": { + "id": 3217, + "nodeType": "Block", + "src": "2524:74:10", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 3209, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3662, + "src": "2543:3:10", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 3210, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "2543:10:10", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "argumentTypes": null, + "id": 3211, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3201, + "src": "2555:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 3212, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3203, + "src": "2564:5:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3208, + "name": "_approve", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3491, + "src": "2534:8:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 3213, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2534:36:10", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3214, + "nodeType": "ExpressionStatement", + "src": "2534:36:10" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 3215, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2587:4:10", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 3207, + "id": 3216, + "nodeType": "Return", + "src": "2580:11:10" + } + ] + }, + "documentation": "@dev See `IERC20.approve`.\n * Requirements:\n * - `spender` cannot be the zero address.", + "id": 3218, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "approve", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3204, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3201, + "name": "spender", + "nodeType": "VariableDeclaration", + "scope": 3218, + "src": "2470:15:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3200, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2470:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 3203, + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 3218, + "src": "2487:13:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3202, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2487:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2469:32:10" + }, + "returnParameters": { + "id": 3207, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3206, + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3218, + "src": "2518:4:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 3205, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2518:4:10", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2517:6:10" + }, + "scope": 3520, + "src": "2453:145:10", + "stateMutability": "nonpayable", + "superFunction": 3619, + "visibility": "public" + }, + { + "body": { + "id": 3252, + "nodeType": "Block", + "src": "3150:157:10", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 3230, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3220, + "src": "3170:6:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 3231, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3222, + "src": "3178:9:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 3232, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3224, + "src": "3189:6:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3229, + "name": "_transfer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3363, + "src": "3160:9:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 3233, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3160:36:10", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3234, + "nodeType": "ExpressionStatement", + "src": "3160:36:10" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 3236, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3220, + "src": "3215:6:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 3237, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3662, + "src": "3223:3:10", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 3238, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "3223:10:10", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 3246, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3224, + "src": "3271:6:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 3239, + "name": "_allowances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3142, + "src": "3235:11:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + } + }, + "id": 3241, + "indexExpression": { + "argumentTypes": null, + "id": 3240, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3220, + "src": "3247:6:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3235:19:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3244, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 3242, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3662, + "src": "3255:3:10", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 3243, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "3255:10:10", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3235:31:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3245, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 3042, + "src": "3235:35:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 3247, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3235:43:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3235, + "name": "_approve", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3491, + "src": "3206:8:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 3248, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3206:73:10", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3249, + "nodeType": "ExpressionStatement", + "src": "3206:73:10" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 3250, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3296:4:10", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 3228, + "id": 3251, + "nodeType": "Return", + "src": "3289:11:10" + } + ] + }, + "documentation": "@dev See `IERC20.transferFrom`.\n * Emits an `Approval` event indicating the updated allowance. This is not\nrequired by the EIP. See the note at the beginning of `ERC20`;\n * Requirements:\n- `sender` and `recipient` cannot be the zero address.\n- `sender` must have a balance of at least `value`.\n- the caller must have allowance for `sender`'s tokens of at least\n`amount`.", + "id": 3253, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "transferFrom", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3225, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3220, + "name": "sender", + "nodeType": "VariableDeclaration", + "scope": 3253, + "src": "3077:14:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3219, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3077:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 3222, + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 3253, + "src": "3093:17:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3221, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3093:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 3224, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 3253, + "src": "3112:14:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3223, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3112:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3076:51:10" + }, + "returnParameters": { + "id": 3228, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3227, + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3253, + "src": "3144:4:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 3226, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3144:4:10", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3143:6:10" + }, + "scope": 3520, + "src": "3055:252:10", + "stateMutability": "nonpayable", + "superFunction": 3630, + "visibility": "public" + }, + { + "body": { + "id": 3279, + "nodeType": "Block", + "src": "3788:117:10", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 3263, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3662, + "src": "3807:3:10", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 3264, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "3807:10:10", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "argumentTypes": null, + "id": 3265, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3255, + "src": "3819:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 3273, + "name": "addedValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3257, + "src": "3865:10:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 3266, + "name": "_allowances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3142, + "src": "3828:11:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + } + }, + "id": 3269, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 3267, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3662, + "src": "3840:3:10", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 3268, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "3840:10:10", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3828:23:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3271, + "indexExpression": { + "argumentTypes": null, + "id": 3270, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3255, + "src": "3852:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3828:32:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3272, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 3017, + "src": "3828:36:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 3274, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3828:48:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3262, + "name": "_approve", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3491, + "src": "3798:8:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 3275, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3798:79:10", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3276, + "nodeType": "ExpressionStatement", + "src": "3798:79:10" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 3277, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3894:4:10", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 3261, + "id": 3278, + "nodeType": "Return", + "src": "3887:11:10" + } + ] + }, + "documentation": "@dev Atomically increases the allowance granted to `spender` by the caller.\n * This is an alternative to `approve` that can be used as a mitigation for\nproblems described in `IERC20.approve`.\n * Emits an `Approval` event indicating the updated allowance.\n * Requirements:\n * - `spender` cannot be the zero address.", + "id": 3280, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "increaseAllowance", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3258, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3255, + "name": "spender", + "nodeType": "VariableDeclaration", + "scope": 3280, + "src": "3729:15:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3254, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3729:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 3257, + "name": "addedValue", + "nodeType": "VariableDeclaration", + "scope": 3280, + "src": "3746:18:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3256, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3746:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3728:37:10" + }, + "returnParameters": { + "id": 3261, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3260, + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3280, + "src": "3782:4:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 3259, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3782:4:10", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3781:6:10" + }, + "scope": 3520, + "src": "3702:203:10", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 3306, + "nodeType": "Block", + "src": "4483:122:10", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 3290, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3662, + "src": "4502:3:10", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 3291, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "4502:10:10", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "argumentTypes": null, + "id": 3292, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3282, + "src": "4514:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 3300, + "name": "subtractedValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3284, + "src": "4560:15:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 3293, + "name": "_allowances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3142, + "src": "4523:11:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + } + }, + "id": 3296, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 3294, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3662, + "src": "4535:3:10", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 3295, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "4535:10:10", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4523:23:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3298, + "indexExpression": { + "argumentTypes": null, + "id": 3297, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3282, + "src": "4547:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4523:32:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3299, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 3042, + "src": "4523:36:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 3301, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4523:53:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3289, + "name": "_approve", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3491, + "src": "4493:8:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 3302, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4493:84:10", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3303, + "nodeType": "ExpressionStatement", + "src": "4493:84:10" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 3304, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4594:4:10", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 3288, + "id": 3305, + "nodeType": "Return", + "src": "4587:11:10" + } + ] + }, + "documentation": "@dev Atomically decreases the allowance granted to `spender` by the caller.\n * This is an alternative to `approve` that can be used as a mitigation for\nproblems described in `IERC20.approve`.\n * Emits an `Approval` event indicating the updated allowance.\n * Requirements:\n * - `spender` cannot be the zero address.\n- `spender` must have allowance for the caller of at least\n`subtractedValue`.", + "id": 3307, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "decreaseAllowance", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3285, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3282, + "name": "spender", + "nodeType": "VariableDeclaration", + "scope": 3307, + "src": "4419:15:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3281, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4419:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 3284, + "name": "subtractedValue", + "nodeType": "VariableDeclaration", + "scope": 3307, + "src": "4436:23:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3283, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4436:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4418:42:10" + }, + "returnParameters": { + "id": 3288, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3287, + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3307, + "src": "4477:4:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 3286, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4477:4:10", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4476:6:10" + }, + "scope": 3520, + "src": "4392:213:10", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 3362, + "nodeType": "Block", + "src": "5158:343:10", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 3321, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 3317, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3309, + "src": "5176:6:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30", + "id": 3319, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5194:1:10", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 3318, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5186:7:10", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 3320, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5186:10:10", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "5176:20:10", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "45524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373", + "id": 3322, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5198:39:10", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea", + "typeString": "literal_string \"ERC20: transfer from the zero address\"" + }, + "value": "ERC20: transfer from the zero address" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea", + "typeString": "literal_string \"ERC20: transfer from the zero address\"" + } + ], + "id": 3316, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 3665, + 3666 + ], + "referencedDeclaration": 3666, + "src": "5168:7:10", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 3323, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5168:70:10", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3324, + "nodeType": "ExpressionStatement", + "src": "5168:70:10" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 3330, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 3326, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3311, + "src": "5256:9:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30", + "id": 3328, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5277:1:10", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 3327, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5269:7:10", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 3329, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5269:10:10", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "5256:23:10", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "45524332303a207472616e7366657220746f20746865207a65726f2061646472657373", + "id": 3331, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5281:37:10", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f", + "typeString": "literal_string \"ERC20: transfer to the zero address\"" + }, + "value": "ERC20: transfer to the zero address" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f", + "typeString": "literal_string \"ERC20: transfer to the zero address\"" + } + ], + "id": 3325, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 3665, + 3666 + ], + "referencedDeclaration": 3666, + "src": "5248:7:10", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 3332, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5248:71:10", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3333, + "nodeType": "ExpressionStatement", + "src": "5248:71:10" + }, + { + "expression": { + "argumentTypes": null, + "id": 3343, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 3334, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3136, + "src": "5330:9:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3336, + "indexExpression": { + "argumentTypes": null, + "id": 3335, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3309, + "src": "5340:6:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "5330:17:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 3341, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3313, + "src": "5372:6:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 3337, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3136, + "src": "5350:9:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3339, + "indexExpression": { + "argumentTypes": null, + "id": 3338, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3309, + "src": "5360:6:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5350:17:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3340, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 3042, + "src": "5350:21:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 3342, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5350:29:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5330:49:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3344, + "nodeType": "ExpressionStatement", + "src": "5330:49:10" + }, + { + "expression": { + "argumentTypes": null, + "id": 3354, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 3345, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3136, + "src": "5389:9:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3347, + "indexExpression": { + "argumentTypes": null, + "id": 3346, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3311, + "src": "5399:9:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "5389:20:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 3352, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3313, + "src": "5437:6:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 3348, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3136, + "src": "5412:9:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3350, + "indexExpression": { + "argumentTypes": null, + "id": 3349, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3311, + "src": "5422:9:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5412:20:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3351, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 3017, + "src": "5412:24:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 3353, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5412:32:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5389:55:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3355, + "nodeType": "ExpressionStatement", + "src": "5389:55:10" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 3357, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3309, + "src": "5468:6:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 3358, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3311, + "src": "5476:9:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 3359, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3313, + "src": "5487:6:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3356, + "name": "Transfer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3638, + "src": "5459:8:10", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 3360, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5459:35:10", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3361, + "nodeType": "EmitStatement", + "src": "5454:40:10" + } + ] + }, + "documentation": "@dev Moves tokens `amount` from `sender` to `recipient`.\n * This is internal function is equivalent to `transfer`, and can be used to\ne.g. implement automatic token fees, slashing mechanisms, etc.\n * Emits a `Transfer` event.\n * Requirements:\n * - `sender` cannot be the zero address.\n- `recipient` cannot be the zero address.\n- `sender` must have a balance of at least `amount`.", + "id": 3363, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_transfer", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3314, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3309, + "name": "sender", + "nodeType": "VariableDeclaration", + "scope": 3363, + "src": "5098:14:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3308, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5098:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 3311, + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 3363, + "src": "5114:17:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3310, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5114:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 3313, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 3363, + "src": "5133:14:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3312, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5133:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5097:51:10" + }, + "returnParameters": { + "id": 3315, + "nodeType": "ParameterList", + "parameters": [], + "src": "5158:0:10" + }, + "scope": 3520, + "src": "5079:422:10", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "internal" + }, + { + "body": { + "id": 3405, + "nodeType": "Block", + "src": "5828:245:10", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 3375, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 3371, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3365, + "src": "5846:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30", + "id": 3373, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5865:1:10", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 3372, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5857:7:10", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 3374, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5857:10:10", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "5846:21:10", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "45524332303a206d696e7420746f20746865207a65726f2061646472657373", + "id": 3376, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5869:33:10", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e", + "typeString": "literal_string \"ERC20: mint to the zero address\"" + }, + "value": "ERC20: mint to the zero address" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e", + "typeString": "literal_string \"ERC20: mint to the zero address\"" + } + ], + "id": 3370, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 3665, + 3666 + ], + "referencedDeclaration": 3666, + "src": "5838:7:10", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 3377, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5838:65:10", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3378, + "nodeType": "ExpressionStatement", + "src": "5838:65:10" + }, + { + "expression": { + "argumentTypes": null, + "id": 3384, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 3379, + "name": "_totalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3144, + "src": "5914:12:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 3382, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3367, + "src": "5946:6:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 3380, + "name": "_totalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3144, + "src": "5929:12:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3381, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 3017, + "src": "5929:16:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 3383, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5929:24:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5914:39:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3385, + "nodeType": "ExpressionStatement", + "src": "5914:39:10" + }, + { + "expression": { + "argumentTypes": null, + "id": 3395, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 3386, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3136, + "src": "5963:9:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3388, + "indexExpression": { + "argumentTypes": null, + "id": 3387, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3365, + "src": "5973:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "5963:18:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 3393, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3367, + "src": "6007:6:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 3389, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3136, + "src": "5984:9:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3391, + "indexExpression": { + "argumentTypes": null, + "id": 3390, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3365, + "src": "5994:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5984:18:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3392, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 3017, + "src": "5984:22:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 3394, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5984:30:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5963:51:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3396, + "nodeType": "ExpressionStatement", + "src": "5963:51:10" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30", + "id": 3399, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6046:1:10", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 3398, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6038:7:10", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 3400, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6038:10:10", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "argumentTypes": null, + "id": 3401, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3365, + "src": "6050:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 3402, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3367, + "src": "6059:6:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3397, + "name": "Transfer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3638, + "src": "6029:8:10", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 3403, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6029:37:10", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3404, + "nodeType": "EmitStatement", + "src": "6024:42:10" + } + ] + }, + "documentation": "@dev Creates `amount` tokens and assigns them to `account`, increasing\nthe total supply.\n * Emits a `Transfer` event with `from` set to the zero address.\n * Requirements\n * - `to` cannot be the zero address.", + "id": 3406, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_mint", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3368, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3365, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 3406, + "src": "5786:15:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3364, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5786:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 3367, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 3406, + "src": "5803:14:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3366, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5803:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5785:33:10" + }, + "returnParameters": { + "id": 3369, + "nodeType": "ParameterList", + "parameters": [], + "src": "5828:0:10" + }, + "scope": 3520, + "src": "5771:302:10", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "internal" + }, + { + "body": { + "id": 3448, + "nodeType": "Block", + "src": "6448:244:10", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 3418, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 3414, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3408, + "src": "6466:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30", + "id": 3416, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6485:1:10", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 3415, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6477:7:10", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 3417, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6477:10:10", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "6466:21:10", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "45524332303a206275726e2066726f6d20746865207a65726f2061646472657373", + "id": 3419, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6489:35:10", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f", + "typeString": "literal_string \"ERC20: burn from the zero address\"" + }, + "value": "ERC20: burn from the zero address" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f", + "typeString": "literal_string \"ERC20: burn from the zero address\"" + } + ], + "id": 3413, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 3665, + 3666 + ], + "referencedDeclaration": 3666, + "src": "6458:7:10", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 3420, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6458:67:10", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3421, + "nodeType": "ExpressionStatement", + "src": "6458:67:10" + }, + { + "expression": { + "argumentTypes": null, + "id": 3427, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 3422, + "name": "_totalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3144, + "src": "6536:12:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 3425, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3410, + "src": "6568:5:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 3423, + "name": "_totalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3144, + "src": "6551:12:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3424, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 3042, + "src": "6551:16:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 3426, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6551:23:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6536:38:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3428, + "nodeType": "ExpressionStatement", + "src": "6536:38:10" + }, + { + "expression": { + "argumentTypes": null, + "id": 3438, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 3429, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3136, + "src": "6584:9:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3431, + "indexExpression": { + "argumentTypes": null, + "id": 3430, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3408, + "src": "6594:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "6584:18:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 3436, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3410, + "src": "6628:5:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 3432, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3136, + "src": "6605:9:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3434, + "indexExpression": { + "argumentTypes": null, + "id": 3433, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3408, + "src": "6615:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "6605:18:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3435, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 3042, + "src": "6605:22:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 3437, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6605:29:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6584:50:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3439, + "nodeType": "ExpressionStatement", + "src": "6584:50:10" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 3441, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3408, + "src": "6658:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30", + "id": 3443, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6675:1:10", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 3442, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6667:7:10", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 3444, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6667:10:10", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "argumentTypes": null, + "id": 3445, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3410, + "src": "6679:5:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3440, + "name": "Transfer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3638, + "src": "6649:8:10", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 3446, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6649:36:10", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3447, + "nodeType": "EmitStatement", + "src": "6644:41:10" + } + ] + }, + "documentation": "@dev Destoys `amount` tokens from `account`, reducing the\ntotal supply.\n * Emits a `Transfer` event with `to` set to the zero address.\n * Requirements\n * - `account` cannot be the zero address.\n- `account` must have at least `amount` tokens.", + "id": 3449, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_burn", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3411, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3408, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 3449, + "src": "6407:15:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3407, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6407:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 3410, + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 3449, + "src": "6424:13:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3409, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6424:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6406:32:10" + }, + "returnParameters": { + "id": 3412, + "nodeType": "ParameterList", + "parameters": [], + "src": "6448:0:10" + }, + "scope": 3520, + "src": "6392:300:10", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "internal" + }, + { + "body": { + "id": 3490, + "nodeType": "Block", + "src": "7191:255:10", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 3463, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 3459, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3451, + "src": "7209:5:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30", + "id": 3461, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7226:1:10", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 3460, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7218:7:10", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 3462, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7218:10:10", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "7209:19:10", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "45524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373", + "id": 3464, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7230:38:10", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208", + "typeString": "literal_string \"ERC20: approve from the zero address\"" + }, + "value": "ERC20: approve from the zero address" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208", + "typeString": "literal_string \"ERC20: approve from the zero address\"" + } + ], + "id": 3458, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 3665, + 3666 + ], + "referencedDeclaration": 3666, + "src": "7201:7:10", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 3465, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7201:68:10", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3466, + "nodeType": "ExpressionStatement", + "src": "7201:68:10" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 3472, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 3468, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3453, + "src": "7287:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30", + "id": 3470, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7306:1:10", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 3469, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7298:7:10", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 3471, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7298:10:10", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "7287:21:10", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "45524332303a20617070726f766520746f20746865207a65726f2061646472657373", + "id": 3473, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7310:36:10", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029", + "typeString": "literal_string \"ERC20: approve to the zero address\"" + }, + "value": "ERC20: approve to the zero address" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029", + "typeString": "literal_string \"ERC20: approve to the zero address\"" + } + ], + "id": 3467, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 3665, + 3666 + ], + "referencedDeclaration": 3666, + "src": "7279:7:10", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 3474, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7279:68:10", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3475, + "nodeType": "ExpressionStatement", + "src": "7279:68:10" + }, + { + "expression": { + "argumentTypes": null, + "id": 3482, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 3476, + "name": "_allowances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3142, + "src": "7358:11:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + } + }, + "id": 3479, + "indexExpression": { + "argumentTypes": null, + "id": 3477, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3451, + "src": "7370:5:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7358:18:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3480, + "indexExpression": { + "argumentTypes": null, + "id": 3478, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3453, + "src": "7377:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "7358:27:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 3481, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3455, + "src": "7388:5:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7358:35:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3483, + "nodeType": "ExpressionStatement", + "src": "7358:35:10" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 3485, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3451, + "src": "7417:5:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 3486, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3453, + "src": "7424:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 3487, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3455, + "src": "7433:5:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3484, + "name": "Approval", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3646, + "src": "7408:8:10", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 3488, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7408:31:10", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3489, + "nodeType": "EmitStatement", + "src": "7403:36:10" + } + ] + }, + "documentation": "@dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.\n * This is internal function is equivalent to `approve`, and can be used to\ne.g. set automatic allowances for certain subsystems, etc.\n * Emits an `Approval` event.\n * Requirements:\n * - `owner` cannot be the zero address.\n- `spender` cannot be the zero address.", + "id": 3491, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_approve", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3456, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3451, + "name": "owner", + "nodeType": "VariableDeclaration", + "scope": 3491, + "src": "7135:13:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3450, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7135:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 3453, + "name": "spender", + "nodeType": "VariableDeclaration", + "scope": 3491, + "src": "7150:15:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3452, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7150:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 3455, + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 3491, + "src": "7167:13:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3454, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7167:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7134:47:10" + }, + "returnParameters": { + "id": 3457, + "nodeType": "ParameterList", + "parameters": [], + "src": "7191:0:10" + }, + "scope": 3520, + "src": "7117:329:10", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "internal" + }, + { + "body": { + "id": 3518, + "nodeType": "Block", + "src": "7684:124:10", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 3499, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3493, + "src": "7700:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 3500, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3495, + "src": "7709:6:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3498, + "name": "_burn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3449, + "src": "7694:5:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,uint256)" + } + }, + "id": 3501, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7694:22:10", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3502, + "nodeType": "ExpressionStatement", + "src": "7694:22:10" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 3504, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3493, + "src": "7735:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 3505, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3662, + "src": "7744:3:10", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 3506, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "7744:10:10", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 3514, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3495, + "src": "7793:6:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 3507, + "name": "_allowances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3142, + "src": "7756:11:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + } + }, + "id": 3509, + "indexExpression": { + "argumentTypes": null, + "id": 3508, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3493, + "src": "7768:7:10", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7756:20:10", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 3512, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 3510, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3662, + "src": "7777:3:10", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 3511, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "7777:10:10", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7756:32:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3513, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 3042, + "src": "7756:36:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 3515, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7756:44:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3503, + "name": "_approve", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3491, + "src": "7726:8:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 3516, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7726:75:10", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3517, + "nodeType": "ExpressionStatement", + "src": "7726:75:10" + } + ] + }, + "documentation": "@dev Destoys `amount` tokens from `account`.`amount` is then deducted\nfrom the caller's allowance.\n * See `_burn` and `_approve`.", + "id": 3519, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_burnFrom", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3496, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3493, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 3519, + "src": "7642:15:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3492, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7642:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 3495, + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 3519, + "src": "7659:14:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3494, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7659:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7641:33:10" + }, + "returnParameters": { + "id": 3497, + "nodeType": "ParameterList", + "parameters": [], + "src": "7684:0:10" + }, + "scope": 3520, + "src": "7623:185:10", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "internal" + } + ], + "scope": 3521, + "src": "1232:6578:10" + } + ], + "src": "0:7811:10" + }, + "compiler": { + "name": "solc", + "version": "0.5.2+commit.1df8f40c.Emscripten.clang" + }, + "networks": {}, + "schemaVersion": "3.0.16", + "updatedAt": "2019-10-23T07:58:23.286Z", + "devdoc": { + "details": "Implementation of the `IERC20` interface. * This implementation is agnostic to the way tokens are created. This means that a supply mechanism has to be added in a derived contract using `_mint`. For a generic mechanism see `ERC20Mintable`. * *For a detailed writeup see our guide [How to implement supply mechanisms](https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226).* * We have followed general OpenZeppelin guidelines: functions revert instead of returning `false` on failure. This behavior is nonetheless conventional and does not conflict with the expectations of ERC20 applications. * Additionally, an `Approval` event is emitted on calls to `transferFrom`. This allows applications to reconstruct the allowance for all accounts just by listening to said events. Other implementations of the EIP may not emit these events, as it isn't required by the specification. * Finally, the non-standard `decreaseAllowance` and `increaseAllowance` functions have been added to mitigate the well-known issues around setting allowances. See `IERC20.approve`.", + "methods": { + "allowance(address,address)": { + "details": "See `IERC20.allowance`." + }, + "approve(address,uint256)": { + "details": "See `IERC20.approve`. * Requirements: * - `spender` cannot be the zero address." + }, + "balanceOf(address)": { + "details": "See `IERC20.balanceOf`." + }, + "decreaseAllowance(address,uint256)": { + "details": "Atomically decreases the allowance granted to `spender` by the caller. * This is an alternative to `approve` that can be used as a mitigation for problems described in `IERC20.approve`. * Emits an `Approval` event indicating the updated allowance. * Requirements: * - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`." + }, + "increaseAllowance(address,uint256)": { + "details": "Atomically increases the allowance granted to `spender` by the caller. * This is an alternative to `approve` that can be used as a mitigation for problems described in `IERC20.approve`. * Emits an `Approval` event indicating the updated allowance. * Requirements: * - `spender` cannot be the zero address." + }, + "totalSupply()": { + "details": "See `IERC20.totalSupply`." + }, + "transfer(address,uint256)": { + "details": "See `IERC20.transfer`. * Requirements: * - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`." + }, + "transferFrom(address,address,uint256)": { + "details": "See `IERC20.transferFrom`. * Emits an `Approval` event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of `ERC20`; * Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `value`. - the caller must have allowance for `sender`'s tokens of at least `amount`." + } + } + }, + "userdoc": { + "methods": {} + } +} \ No newline at end of file diff --git a/venv/lib/python3.7/site-packages/autobahn/xbr/contracts/XBRMaintained.json b/venv/lib/python3.7/site-packages/autobahn/xbr/contracts/XBRMaintained.json new file mode 100644 index 0000000..04446a4 --- /dev/null +++ b/venv/lib/python3.7/site-packages/autobahn/xbr/contracts/XBRMaintained.json @@ -0,0 +1,2521 @@ +{ + "contractName": "XBRMaintained", + "abi": [ + { + "inputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "account", + "type": "address" + } + ], + "name": "MaintainerAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "account", + "type": "address" + } + ], + "name": "MaintainerRemoved", + "type": "event" + }, + { + "constant": true, + "inputs": [ + { + "name": "account", + "type": "address" + } + ], + "name": "isMaintainer", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "account", + "type": "address" + } + ], + "name": "addMaintainer", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [], + "name": "renounceMaintainer", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } + ], + "metadata": "", + "bytecode": "0x", + "deployedBytecode": "0x", + "sourceMap": "", + "deployedSourceMap": "", + "source": "///////////////////////////////////////////////////////////////////////////////\n//\n// Copyright (C) 2018-2019 Crossbar.io Technologies GmbH and contributors.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n///////////////////////////////////////////////////////////////////////////////\n\npragma solidity ^0.5.2;\n\nimport \"openzeppelin-solidity/contracts/access/Roles.sol\";\n\n\n/**\n * XBR Network (and XBR Network Proxies) SCs inherit from this base contract\n * to manage network administration and maintenance via Role-based Access\n * Control (RBAC).\n * The implementation for management comes from the OpenZeppelin RBAC library.\n */\ncontract XBRMaintained {\n /// OpenZeppelin RBAC mixin.\n using Roles for Roles.Role;\n\n /**\n * Event fired when a maintainer was added.\n *\n * @param account The account that was added as a maintainer.\n */\n event MaintainerAdded(address indexed account);\n\n /**\n * Event fired when a maintainer was removed.\n *\n * @param account The account that was removed as a maintainer.\n */\n event MaintainerRemoved(address indexed account);\n\n /// Current list of XBR network maintainers.\n Roles.Role private maintainers;\n\n /// The constructor is internal (roles are managed by the OpenZeppelin base class).\n constructor () internal {\n _addMaintainer(msg.sender);\n }\n\n /**\n * Modifier to require maintainer-role for the sender when calling a SC.\n */\n modifier onlyMaintainer () {\n require(isMaintainer(msg.sender));\n _;\n }\n\n /**\n * Check if the given address is currently a maintainer.\n *\n * @param account The account to check.\n * @return `true` if the account is maintainer, otherwise `false`.\n */\n function isMaintainer (address account) public view returns (bool) {\n return maintainers.has(account);\n }\n\n /**\n * Add a new maintainer to the list of maintainers.\n *\n * @param account The account to grant maintainer rights to.\n */\n function addMaintainer (address account) public onlyMaintainer {\n _addMaintainer(account);\n }\n\n /**\n * Give away maintainer rights.\n */\n function renounceMaintainer () public {\n _removeMaintainer(msg.sender);\n }\n\n function _addMaintainer (address account) internal {\n maintainers.add(account);\n emit MaintainerAdded(account);\n }\n\n function _removeMaintainer (address account) internal {\n maintainers.remove(account);\n emit MaintainerRemoved(account);\n }\n}\n", + "sourcePath": "/home/oberstet/scm/crossbario/xbr-protocol/contracts/XBRMaintained.sol", + "ast": { + "absolutePath": "/home/oberstet/scm/crossbario/xbr-protocol/contracts/XBRMaintained.sol", + "exportedSymbols": { + "XBRMaintained": [ + 762 + ] + }, + "id": 763, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 661, + "literals": [ + "solidity", + "^", + "0.5", + ".2" + ], + "nodeType": "PragmaDirective", + "src": "810:23:2" + }, + { + "absolutePath": "openzeppelin-solidity/contracts/access/Roles.sol", + "file": "openzeppelin-solidity/contracts/access/Roles.sol", + "id": 662, + "nodeType": "ImportDirective", + "scope": 763, + "sourceUnit": 2910, + "src": "835:58:2", + "symbolAliases": [], + "unitAlias": "" + }, + { + "baseContracts": [], + "contractDependencies": [], + "contractKind": "contract", + "documentation": "XBR Network (and XBR Network Proxies) SCs inherit from this base contract\nto manage network administration and maintenance via Role-based Access\nControl (RBAC).\nThe implementation for management comes from the OpenZeppelin RBAC library.", + "fullyImplemented": true, + "id": 762, + "linearizedBaseContracts": [ + 762 + ], + "name": "XBRMaintained", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 665, + "libraryName": { + "contractScope": null, + "id": 663, + "name": "Roles", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2909, + "src": "1221:5:2", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Roles_$2909", + "typeString": "library Roles" + } + }, + "nodeType": "UsingForDirective", + "src": "1215:27:2", + "typeName": { + "contractScope": null, + "id": 664, + "name": "Roles.Role", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2835, + "src": "1231:10:2", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Role_$2835_storage_ptr", + "typeString": "struct Roles.Role" + } + } + }, + { + "anonymous": false, + "documentation": "Event fired when a maintainer was added.\n * @param account The account that was added as a maintainer.", + "id": 669, + "name": "MaintainerAdded", + "nodeType": "EventDefinition", + "parameters": { + "id": 668, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 667, + "indexed": true, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 669, + "src": "1407:23:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 666, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1407:7:2", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1406:25:2" + }, + "src": "1385:47:2" + }, + { + "anonymous": false, + "documentation": "Event fired when a maintainer was removed.\n * @param account The account that was removed as a maintainer.", + "id": 673, + "name": "MaintainerRemoved", + "nodeType": "EventDefinition", + "parameters": { + "id": 672, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 671, + "indexed": true, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 673, + "src": "1603:23:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 670, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1603:7:2", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1602:25:2" + }, + "src": "1579:49:2" + }, + { + "constant": false, + "id": 675, + "name": "maintainers", + "nodeType": "VariableDeclaration", + "scope": 762, + "src": "1683:30:2", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Role_$2835_storage", + "typeString": "struct Roles.Role" + }, + "typeName": { + "contractScope": null, + "id": 674, + "name": "Roles.Role", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2835, + "src": "1683:10:2", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Role_$2835_storage_ptr", + "typeString": "struct Roles.Role" + } + }, + "value": null, + "visibility": "private" + }, + { + "body": { + "id": 683, + "nodeType": "Block", + "src": "1832:43:2", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 679, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3662, + "src": "1857:3:2", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 680, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1857:10:2", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 678, + "name": "_addMaintainer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 745, + "src": "1842:14:2", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 681, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1842:26:2", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 682, + "nodeType": "ExpressionStatement", + "src": "1842:26:2" + } + ] + }, + "documentation": "The constructor is internal (roles are managed by the OpenZeppelin base class).", + "id": 684, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 676, + "nodeType": "ParameterList", + "parameters": [], + "src": "1820:2:2" + }, + "returnParameters": { + "id": 677, + "nodeType": "ParameterList", + "parameters": [], + "src": "1832:0:2" + }, + "scope": 762, + "src": "1808:67:2", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "internal" + }, + { + "body": { + "id": 694, + "nodeType": "Block", + "src": "2001:61:2", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 688, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3662, + "src": "2032:3:2", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 689, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "2032:10:2", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 687, + "name": "isMaintainer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 708, + "src": "2019:12:2", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$", + "typeString": "function (address) view returns (bool)" + } + }, + "id": 690, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2019:24:2", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 686, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 3665, + 3666 + ], + "referencedDeclaration": 3665, + "src": "2011:7:2", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 691, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2011:33:2", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 692, + "nodeType": "ExpressionStatement", + "src": "2011:33:2" + }, + { + "id": 693, + "nodeType": "PlaceholderStatement", + "src": "2054:1:2" + } + ] + }, + "documentation": "Modifier to require maintainer-role for the sender when calling a SC.", + "id": 695, + "name": "onlyMaintainer", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 685, + "nodeType": "ParameterList", + "parameters": [], + "src": "1998:2:2" + }, + "src": "1974:88:2", + "visibility": "internal" + }, + { + "body": { + "id": 707, + "nodeType": "Block", + "src": "2334:48:2", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 704, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 697, + "src": "2367:7:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 702, + "name": "maintainers", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 675, + "src": "2351:11:2", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Role_$2835_storage", + "typeString": "struct Roles.Role storage ref" + } + }, + "id": 703, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "has", + "nodeType": "MemberAccess", + "referencedDeclaration": 2908, + "src": "2351:15:2", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$2835_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$2835_storage_ptr_$", + "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)" + } + }, + "id": 705, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2351:24:2", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 701, + "id": 706, + "nodeType": "Return", + "src": "2344:31:2" + } + ] + }, + "documentation": "Check if the given address is currently a maintainer.\n * @param account The account to check.\n@return `true` if the account is maintainer, otherwise `false`.", + "id": 708, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "isMaintainer", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 698, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 697, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 708, + "src": "2290:15:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 696, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2290:7:2", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2289:17:2" + }, + "returnParameters": { + "id": 701, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 700, + "name": "", + "nodeType": "VariableDeclaration", + "scope": 708, + "src": "2328:4:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 699, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2328:4:2", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2327:6:2" + }, + "scope": 762, + "src": "2267:115:2", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 719, + "nodeType": "Block", + "src": "2595:40:2", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 716, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 710, + "src": "2620:7:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 715, + "name": "_addMaintainer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 745, + "src": "2605:14:2", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 717, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2605:23:2", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 718, + "nodeType": "ExpressionStatement", + "src": "2605:23:2" + } + ] + }, + "documentation": "Add a new maintainer to the list of maintainers.\n * @param account The account to grant maintainer rights to.", + "id": 720, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "arguments": null, + "id": 713, + "modifierName": { + "argumentTypes": null, + "id": 712, + "name": "onlyMaintainer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 695, + "src": "2580:14:2", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "2580:14:2" + } + ], + "name": "addMaintainer", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 711, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 710, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 720, + "src": "2556:15:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 709, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2556:7:2", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2555:17:2" + }, + "returnParameters": { + "id": 714, + "nodeType": "ParameterList", + "parameters": [], + "src": "2595:0:2" + }, + "scope": 762, + "src": "2532:103:2", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 728, + "nodeType": "Block", + "src": "2731:46:2", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 724, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3662, + "src": "2759:3:2", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 725, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "2759:10:2", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 723, + "name": "_removeMaintainer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 761, + "src": "2741:17:2", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 726, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2741:29:2", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 727, + "nodeType": "ExpressionStatement", + "src": "2741:29:2" + } + ] + }, + "documentation": "Give away maintainer rights.", + "id": 729, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "renounceMaintainer", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 721, + "nodeType": "ParameterList", + "parameters": [], + "src": "2721:2:2" + }, + "returnParameters": { + "id": 722, + "nodeType": "ParameterList", + "parameters": [], + "src": "2731:0:2" + }, + "scope": 762, + "src": "2693:84:2", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 744, + "nodeType": "Block", + "src": "2834:80:2", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 737, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 731, + "src": "2860:7:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 734, + "name": "maintainers", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 675, + "src": "2844:11:2", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Role_$2835_storage", + "typeString": "struct Roles.Role storage ref" + } + }, + "id": 736, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 2860, + "src": "2844:15:2", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$2835_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$2835_storage_ptr_$", + "typeString": "function (struct Roles.Role storage pointer,address)" + } + }, + "id": 738, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2844:24:2", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 739, + "nodeType": "ExpressionStatement", + "src": "2844:24:2" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 741, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 731, + "src": "2899:7:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 740, + "name": "MaintainerAdded", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 669, + "src": "2883:15:2", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 742, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2883:24:2", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 743, + "nodeType": "EmitStatement", + "src": "2878:29:2" + } + ] + }, + "documentation": null, + "id": 745, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_addMaintainer", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 732, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 731, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 745, + "src": "2808:15:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 730, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2808:7:2", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2807:17:2" + }, + "returnParameters": { + "id": 733, + "nodeType": "ParameterList", + "parameters": [], + "src": "2834:0:2" + }, + "scope": 762, + "src": "2783:131:2", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "internal" + }, + { + "body": { + "id": 760, + "nodeType": "Block", + "src": "2974:85:2", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 753, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 747, + "src": "3003:7:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 750, + "name": "maintainers", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 675, + "src": "2984:11:2", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Role_$2835_storage", + "typeString": "struct Roles.Role storage ref" + } + }, + "id": 752, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "remove", + "nodeType": "MemberAccess", + "referencedDeclaration": 2884, + "src": "2984:18:2", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$2835_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$2835_storage_ptr_$", + "typeString": "function (struct Roles.Role storage pointer,address)" + } + }, + "id": 754, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2984:27:2", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 755, + "nodeType": "ExpressionStatement", + "src": "2984:27:2" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 757, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 747, + "src": "3044:7:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 756, + "name": "MaintainerRemoved", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 673, + "src": "3026:17:2", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 758, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3026:26:2", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 759, + "nodeType": "EmitStatement", + "src": "3021:31:2" + } + ] + }, + "documentation": null, + "id": 761, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_removeMaintainer", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 748, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 747, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 761, + "src": "2948:15:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 746, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2948:7:2", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2947:17:2" + }, + "returnParameters": { + "id": 749, + "nodeType": "ParameterList", + "parameters": [], + "src": "2974:0:2" + }, + "scope": 762, + "src": "2920:139:2", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "internal" + } + ], + "scope": 763, + "src": "1153:1908:2" + } + ], + "src": "810:2252:2" + }, + "legacyAST": { + "absolutePath": "/home/oberstet/scm/crossbario/xbr-protocol/contracts/XBRMaintained.sol", + "exportedSymbols": { + "XBRMaintained": [ + 762 + ] + }, + "id": 763, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 661, + "literals": [ + "solidity", + "^", + "0.5", + ".2" + ], + "nodeType": "PragmaDirective", + "src": "810:23:2" + }, + { + "absolutePath": "openzeppelin-solidity/contracts/access/Roles.sol", + "file": "openzeppelin-solidity/contracts/access/Roles.sol", + "id": 662, + "nodeType": "ImportDirective", + "scope": 763, + "sourceUnit": 2910, + "src": "835:58:2", + "symbolAliases": [], + "unitAlias": "" + }, + { + "baseContracts": [], + "contractDependencies": [], + "contractKind": "contract", + "documentation": "XBR Network (and XBR Network Proxies) SCs inherit from this base contract\nto manage network administration and maintenance via Role-based Access\nControl (RBAC).\nThe implementation for management comes from the OpenZeppelin RBAC library.", + "fullyImplemented": true, + "id": 762, + "linearizedBaseContracts": [ + 762 + ], + "name": "XBRMaintained", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 665, + "libraryName": { + "contractScope": null, + "id": 663, + "name": "Roles", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2909, + "src": "1221:5:2", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Roles_$2909", + "typeString": "library Roles" + } + }, + "nodeType": "UsingForDirective", + "src": "1215:27:2", + "typeName": { + "contractScope": null, + "id": 664, + "name": "Roles.Role", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2835, + "src": "1231:10:2", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Role_$2835_storage_ptr", + "typeString": "struct Roles.Role" + } + } + }, + { + "anonymous": false, + "documentation": "Event fired when a maintainer was added.\n * @param account The account that was added as a maintainer.", + "id": 669, + "name": "MaintainerAdded", + "nodeType": "EventDefinition", + "parameters": { + "id": 668, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 667, + "indexed": true, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 669, + "src": "1407:23:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 666, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1407:7:2", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1406:25:2" + }, + "src": "1385:47:2" + }, + { + "anonymous": false, + "documentation": "Event fired when a maintainer was removed.\n * @param account The account that was removed as a maintainer.", + "id": 673, + "name": "MaintainerRemoved", + "nodeType": "EventDefinition", + "parameters": { + "id": 672, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 671, + "indexed": true, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 673, + "src": "1603:23:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 670, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1603:7:2", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1602:25:2" + }, + "src": "1579:49:2" + }, + { + "constant": false, + "id": 675, + "name": "maintainers", + "nodeType": "VariableDeclaration", + "scope": 762, + "src": "1683:30:2", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Role_$2835_storage", + "typeString": "struct Roles.Role" + }, + "typeName": { + "contractScope": null, + "id": 674, + "name": "Roles.Role", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2835, + "src": "1683:10:2", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Role_$2835_storage_ptr", + "typeString": "struct Roles.Role" + } + }, + "value": null, + "visibility": "private" + }, + { + "body": { + "id": 683, + "nodeType": "Block", + "src": "1832:43:2", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 679, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3662, + "src": "1857:3:2", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 680, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1857:10:2", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 678, + "name": "_addMaintainer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 745, + "src": "1842:14:2", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 681, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1842:26:2", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 682, + "nodeType": "ExpressionStatement", + "src": "1842:26:2" + } + ] + }, + "documentation": "The constructor is internal (roles are managed by the OpenZeppelin base class).", + "id": 684, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 676, + "nodeType": "ParameterList", + "parameters": [], + "src": "1820:2:2" + }, + "returnParameters": { + "id": 677, + "nodeType": "ParameterList", + "parameters": [], + "src": "1832:0:2" + }, + "scope": 762, + "src": "1808:67:2", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "internal" + }, + { + "body": { + "id": 694, + "nodeType": "Block", + "src": "2001:61:2", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 688, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3662, + "src": "2032:3:2", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 689, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "2032:10:2", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 687, + "name": "isMaintainer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 708, + "src": "2019:12:2", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$", + "typeString": "function (address) view returns (bool)" + } + }, + "id": 690, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2019:24:2", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 686, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 3665, + 3666 + ], + "referencedDeclaration": 3665, + "src": "2011:7:2", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 691, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2011:33:2", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 692, + "nodeType": "ExpressionStatement", + "src": "2011:33:2" + }, + { + "id": 693, + "nodeType": "PlaceholderStatement", + "src": "2054:1:2" + } + ] + }, + "documentation": "Modifier to require maintainer-role for the sender when calling a SC.", + "id": 695, + "name": "onlyMaintainer", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 685, + "nodeType": "ParameterList", + "parameters": [], + "src": "1998:2:2" + }, + "src": "1974:88:2", + "visibility": "internal" + }, + { + "body": { + "id": 707, + "nodeType": "Block", + "src": "2334:48:2", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 704, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 697, + "src": "2367:7:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 702, + "name": "maintainers", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 675, + "src": "2351:11:2", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Role_$2835_storage", + "typeString": "struct Roles.Role storage ref" + } + }, + "id": 703, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "has", + "nodeType": "MemberAccess", + "referencedDeclaration": 2908, + "src": "2351:15:2", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$2835_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$2835_storage_ptr_$", + "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)" + } + }, + "id": 705, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2351:24:2", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 701, + "id": 706, + "nodeType": "Return", + "src": "2344:31:2" + } + ] + }, + "documentation": "Check if the given address is currently a maintainer.\n * @param account The account to check.\n@return `true` if the account is maintainer, otherwise `false`.", + "id": 708, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "isMaintainer", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 698, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 697, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 708, + "src": "2290:15:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 696, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2290:7:2", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2289:17:2" + }, + "returnParameters": { + "id": 701, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 700, + "name": "", + "nodeType": "VariableDeclaration", + "scope": 708, + "src": "2328:4:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 699, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2328:4:2", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2327:6:2" + }, + "scope": 762, + "src": "2267:115:2", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 719, + "nodeType": "Block", + "src": "2595:40:2", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 716, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 710, + "src": "2620:7:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 715, + "name": "_addMaintainer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 745, + "src": "2605:14:2", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 717, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2605:23:2", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 718, + "nodeType": "ExpressionStatement", + "src": "2605:23:2" + } + ] + }, + "documentation": "Add a new maintainer to the list of maintainers.\n * @param account The account to grant maintainer rights to.", + "id": 720, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "arguments": null, + "id": 713, + "modifierName": { + "argumentTypes": null, + "id": 712, + "name": "onlyMaintainer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 695, + "src": "2580:14:2", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "2580:14:2" + } + ], + "name": "addMaintainer", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 711, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 710, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 720, + "src": "2556:15:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 709, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2556:7:2", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2555:17:2" + }, + "returnParameters": { + "id": 714, + "nodeType": "ParameterList", + "parameters": [], + "src": "2595:0:2" + }, + "scope": 762, + "src": "2532:103:2", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 728, + "nodeType": "Block", + "src": "2731:46:2", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 724, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3662, + "src": "2759:3:2", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 725, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "2759:10:2", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 723, + "name": "_removeMaintainer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 761, + "src": "2741:17:2", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 726, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2741:29:2", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 727, + "nodeType": "ExpressionStatement", + "src": "2741:29:2" + } + ] + }, + "documentation": "Give away maintainer rights.", + "id": 729, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "renounceMaintainer", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 721, + "nodeType": "ParameterList", + "parameters": [], + "src": "2721:2:2" + }, + "returnParameters": { + "id": 722, + "nodeType": "ParameterList", + "parameters": [], + "src": "2731:0:2" + }, + "scope": 762, + "src": "2693:84:2", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 744, + "nodeType": "Block", + "src": "2834:80:2", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 737, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 731, + "src": "2860:7:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 734, + "name": "maintainers", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 675, + "src": "2844:11:2", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Role_$2835_storage", + "typeString": "struct Roles.Role storage ref" + } + }, + "id": 736, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 2860, + "src": "2844:15:2", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$2835_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$2835_storage_ptr_$", + "typeString": "function (struct Roles.Role storage pointer,address)" + } + }, + "id": 738, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2844:24:2", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 739, + "nodeType": "ExpressionStatement", + "src": "2844:24:2" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 741, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 731, + "src": "2899:7:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 740, + "name": "MaintainerAdded", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 669, + "src": "2883:15:2", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 742, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2883:24:2", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 743, + "nodeType": "EmitStatement", + "src": "2878:29:2" + } + ] + }, + "documentation": null, + "id": 745, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_addMaintainer", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 732, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 731, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 745, + "src": "2808:15:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 730, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2808:7:2", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2807:17:2" + }, + "returnParameters": { + "id": 733, + "nodeType": "ParameterList", + "parameters": [], + "src": "2834:0:2" + }, + "scope": 762, + "src": "2783:131:2", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "internal" + }, + { + "body": { + "id": 760, + "nodeType": "Block", + "src": "2974:85:2", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 753, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 747, + "src": "3003:7:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 750, + "name": "maintainers", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 675, + "src": "2984:11:2", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Role_$2835_storage", + "typeString": "struct Roles.Role storage ref" + } + }, + "id": 752, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "remove", + "nodeType": "MemberAccess", + "referencedDeclaration": 2884, + "src": "2984:18:2", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$2835_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$2835_storage_ptr_$", + "typeString": "function (struct Roles.Role storage pointer,address)" + } + }, + "id": 754, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2984:27:2", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 755, + "nodeType": "ExpressionStatement", + "src": "2984:27:2" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 757, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 747, + "src": "3044:7:2", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 756, + "name": "MaintainerRemoved", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 673, + "src": "3026:17:2", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 758, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3026:26:2", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 759, + "nodeType": "EmitStatement", + "src": "3021:31:2" + } + ] + }, + "documentation": null, + "id": 761, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_removeMaintainer", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 748, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 747, + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 761, + "src": "2948:15:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 746, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2948:7:2", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2947:17:2" + }, + "returnParameters": { + "id": 749, + "nodeType": "ParameterList", + "parameters": [], + "src": "2974:0:2" + }, + "scope": 762, + "src": "2920:139:2", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "internal" + } + ], + "scope": 763, + "src": "1153:1908:2" + } + ], + "src": "810:2252:2" + }, + "compiler": { + "name": "solc", + "version": "0.5.2+commit.1df8f40c.Emscripten.clang" + }, + "networks": {}, + "schemaVersion": "3.0.16", + "updatedAt": "2019-10-23T07:58:23.254Z", + "devdoc": { + "methods": { + "addMaintainer(address)": { + "params": { + "account": "The account to grant maintainer rights to." + } + }, + "isMaintainer(address)": { + "params": { + "account": "The account to check." + }, + "return": "`true` if the account is maintainer, otherwise `false`." + } + } + }, + "userdoc": { + "methods": { + "addMaintainer(address)": { + "notice": "Add a new maintainer to the list of maintainers." + }, + "constructor": "The constructor is internal (roles are managed by the OpenZeppelin base class).", + "isMaintainer(address)": { + "notice": "Check if the given address is currently a maintainer." + }, + "renounceMaintainer()": { + "notice": "Give away maintainer rights." + } + }, + "notice": "XBR Network (and XBR Network Proxies) SCs inherit from this base contract to manage network administration and maintenance via Role-based Access Control (RBAC). The implementation for management comes from the OpenZeppelin RBAC library." + } +} \ No newline at end of file diff --git a/venv/lib/python3.7/site-packages/automat/_test/__init__.py b/venv/lib/python3.7/site-packages/automat/_test/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.7/site-packages/automat/_test/test_core.py b/venv/lib/python3.7/site-packages/automat/_test/test_core.py new file mode 100644 index 0000000..a9ff050 --- /dev/null +++ b/venv/lib/python3.7/site-packages/automat/_test/test_core.py @@ -0,0 +1,86 @@ + +from .._core import Automaton, NoTransition + +from unittest import TestCase + +class CoreTests(TestCase): + """ + Tests for Automat's (currently private, implementation detail) core. + """ + + def test_NoTransition(self): + """ + A L{NoTransition} exception describes the state and input symbol + that caused it. + """ + # NoTransition requires two arguments + with self.assertRaises(TypeError): + NoTransition() + + state = "current-state" + symbol = "transitionless-symbol" + noTransitionException = NoTransition(state=state, symbol=symbol) + + self.assertIs(noTransitionException.symbol, symbol) + + self.assertIn(state, str(noTransitionException)) + self.assertIn(symbol, str(noTransitionException)) + + + def test_noOutputForInput(self): + """ + L{Automaton.outputForInput} raises L{NoTransition} if no + transition for that input is defined. + """ + a = Automaton() + self.assertRaises(NoTransition, a.outputForInput, + "no-state", "no-symbol") + + + def test_oneTransition(self): + """ + L{Automaton.addTransition} adds its input symbol to + L{Automaton.inputAlphabet}, all its outputs to + L{Automaton.outputAlphabet}, and causes L{Automaton.outputForInput} to + start returning the new state and output symbols. + """ + a = Automaton() + a.addTransition("beginning", "begin", "ending", ["end"]) + self.assertEqual(a.inputAlphabet(), {"begin"}) + self.assertEqual(a.outputAlphabet(), {"end"}) + self.assertEqual(a.outputForInput("beginning", "begin"), + ("ending", ["end"])) + self.assertEqual(a.states(), {"beginning", "ending"}) + + + def test_oneTransition_nonIterableOutputs(self): + """ + L{Automaton.addTransition} raises a TypeError when given outputs + that aren't iterable and doesn't add any transitions. + """ + a = Automaton() + nonIterableOutputs = 1 + self.assertRaises( + TypeError, + a.addTransition, + "fromState", "viaSymbol", "toState", nonIterableOutputs) + self.assertFalse(a.inputAlphabet()) + self.assertFalse(a.outputAlphabet()) + self.assertFalse(a.states()) + self.assertFalse(a.allTransitions()) + + + def test_initialState(self): + """ + L{Automaton.initialState} is a descriptor that sets the initial + state if it's not yet set, and raises L{ValueError} if it is. + + """ + a = Automaton() + a.initialState = "a state" + self.assertEqual(a.initialState, "a state") + with self.assertRaises(ValueError): + a.initialState = "another state" + + +# FIXME: addTransition for transition that's been added before diff --git a/venv/lib/python3.7/site-packages/automat/_test/test_discover.py b/venv/lib/python3.7/site-packages/automat/_test/test_discover.py new file mode 100644 index 0000000..2aaf16a --- /dev/null +++ b/venv/lib/python3.7/site-packages/automat/_test/test_discover.py @@ -0,0 +1,609 @@ +import operator +import os +import shutil +import sys +import textwrap +import tempfile +from unittest import skipIf, TestCase + +import six + + +def isTwistedInstalled(): + try: + __import__('twisted') + except ImportError: + return False + else: + return True + + +class _WritesPythonModules(TestCase): + """ + A helper that enables generating Python module test fixtures. + """ + + def setUp(self): + super(_WritesPythonModules, self).setUp() + + from twisted.python.modules import getModule, PythonPath + from twisted.python.filepath import FilePath + + self.getModule = getModule + self.PythonPath = PythonPath + self.FilePath = FilePath + + self.originalSysModules = set(sys.modules.keys()) + self.savedSysPath = sys.path[:] + + self.pathDir = tempfile.mkdtemp() + self.makeImportable(self.pathDir) + + def tearDown(self): + super(_WritesPythonModules, self).tearDown() + + sys.path[:] = self.savedSysPath + modulesToDelete = six.viewkeys(sys.modules) - self.originalSysModules + for module in modulesToDelete: + del sys.modules[module] + + shutil.rmtree(self.pathDir) + + def makeImportable(self, path): + sys.path.append(path) + + def writeSourceInto(self, source, path, moduleName): + directory = self.FilePath(path) + + module = directory.child(moduleName) + # FilePath always opens a file in binary mode - but that will + # break on Python 3 + with open(module.path, 'w') as f: + f.write(textwrap.dedent(source)) + + return self.PythonPath([directory.path]) + + def makeModule(self, source, path, moduleName): + pythonModuleName, _ = os.path.splitext(moduleName) + return self.writeSourceInto(source, path, moduleName)[pythonModuleName] + + def attributesAsDict(self, hasIterAttributes): + return {attr.name: attr for attr in hasIterAttributes.iterAttributes()} + + def loadModuleAsDict(self, module): + module.load() + return self.attributesAsDict(module) + + def makeModuleAsDict(self, source, path, name): + return self.loadModuleAsDict(self.makeModule(source, path, name)) + + +@skipIf(not isTwistedInstalled(), "Twisted is not installed.") +class OriginalLocationTests(_WritesPythonModules): + """ + Tests that L{isOriginalLocation} detects when a + L{PythonAttribute}'s FQPN refers to an object inside the module + where it was defined. + + For example: A L{twisted.python.modules.PythonAttribute} with a + name of 'foo.bar' that refers to a 'bar' object defined in module + 'baz' does *not* refer to bar's original location, while a + L{PythonAttribute} with a name of 'baz.bar' does. + + """ + def setUp(self): + super(OriginalLocationTests, self).setUp() + from .._discover import isOriginalLocation + self.isOriginalLocation = isOriginalLocation + + def test_failsWithNoModule(self): + """ + L{isOriginalLocation} returns False when the attribute refers to an + object whose source module cannot be determined. + """ + source = """\ + class Fake(object): + pass + hasEmptyModule = Fake() + hasEmptyModule.__module__ = None + """ + + moduleDict = self.makeModuleAsDict(source, + self.pathDir, + 'empty_module_attr.py') + + self.assertFalse(self.isOriginalLocation( + moduleDict['empty_module_attr.hasEmptyModule'])) + + def test_failsWithDifferentModule(self): + """ + L{isOriginalLocation} returns False when the attribute refers to + an object outside of the module where that object was defined. + """ + originalSource = """\ + class ImportThisClass(object): + pass + importThisObject = ImportThisClass() + importThisNestingObject = ImportThisClass() + importThisNestingObject.nestedObject = ImportThisClass() + """ + + importingSource = """\ + from original import (ImportThisClass, + importThisObject, + importThisNestingObject) + """ + + self.makeModule(originalSource, self.pathDir, 'original.py') + importingDict = self.makeModuleAsDict(importingSource, + self.pathDir, + 'importing.py') + self.assertFalse( + self.isOriginalLocation( + importingDict['importing.ImportThisClass'])) + self.assertFalse( + self.isOriginalLocation( + importingDict['importing.importThisObject'])) + + nestingObject = importingDict['importing.importThisNestingObject'] + nestingObjectDict = self.attributesAsDict(nestingObject) + nestedObject = nestingObjectDict[ + 'importing.importThisNestingObject.nestedObject'] + + self.assertFalse(self.isOriginalLocation(nestedObject)) + + def test_succeedsWithSameModule(self): + """ + L{isOriginalLocation} returns True when the attribute refers to an + object inside the module where that object was defined. + """ + mSource = textwrap.dedent(""" + class ThisClassWasDefinedHere(object): + pass + anObject = ThisClassWasDefinedHere() + aNestingObject = ThisClassWasDefinedHere() + aNestingObject.nestedObject = ThisClassWasDefinedHere() + """) + mDict = self.makeModuleAsDict(mSource, self.pathDir, 'm.py') + self.assertTrue(self.isOriginalLocation( + mDict['m.ThisClassWasDefinedHere'])) + self.assertTrue(self.isOriginalLocation(mDict['m.aNestingObject'])) + + nestingObject = mDict['m.aNestingObject'] + nestingObjectDict = self.attributesAsDict(nestingObject) + nestedObject = nestingObjectDict['m.aNestingObject.nestedObject'] + + self.assertTrue(self.isOriginalLocation(nestedObject)) + + +@skipIf(not isTwistedInstalled(), "Twisted is not installed.") +class FindMachinesViaWrapperTests(_WritesPythonModules): + """ + L{findMachinesViaWrapper} recursively yields FQPN, + L{MethodicalMachine} pairs in and under a given + L{twisted.python.modules.PythonModule} or + L{twisted.python.modules.PythonAttribute}. + """ + TEST_MODULE_SOURCE = """ + from automat import MethodicalMachine + + + class PythonClass(object): + _classMachine = MethodicalMachine() + + class NestedClass(object): + _nestedClassMachine = MethodicalMachine() + + ignoredAttribute = "I am ignored." + + def ignoredMethod(self): + "I am also ignored." + + rootLevelMachine = MethodicalMachine() + ignoredPythonObject = PythonClass() + anotherIgnoredPythonObject = "I am ignored." + """ + + def setUp(self): + super(FindMachinesViaWrapperTests, self).setUp() + from .._discover import findMachinesViaWrapper + self.findMachinesViaWrapper = findMachinesViaWrapper + + def test_yieldsMachine(self): + """ + When given a L{twisted.python.modules.PythonAttribute} that refers + directly to a L{MethodicalMachine}, L{findMachinesViaWrapper} + yields that machine and its FQPN. + """ + source = """\ + from automat import MethodicalMachine + + rootMachine = MethodicalMachine() + """ + + moduleDict = self.makeModuleAsDict(source, self.pathDir, 'root.py') + rootMachine = moduleDict['root.rootMachine'] + self.assertIn(('root.rootMachine', rootMachine.load()), + list(self.findMachinesViaWrapper(rootMachine))) + + def test_yieldsMachineInClass(self): + """ + When given a L{twisted.python.modules.PythonAttribute} that refers + to a class that contains a L{MethodicalMachine} as a class + variable, L{findMachinesViaWrapper} yields that machine and + its FQPN. + """ + source = """\ + from automat import MethodicalMachine + + class PythonClass(object): + _classMachine = MethodicalMachine() + """ + moduleDict = self.makeModuleAsDict(source, self.pathDir, 'clsmod.py') + PythonClass = moduleDict['clsmod.PythonClass'] + self.assertIn(('clsmod.PythonClass._classMachine', + PythonClass.load()._classMachine), + list(self.findMachinesViaWrapper(PythonClass))) + + def test_yieldsMachineInNestedClass(self): + """ + When given a L{twisted.python.modules.PythonAttribute} that refers + to a nested class that contains a L{MethodicalMachine} as a + class variable, L{findMachinesViaWrapper} yields that machine + and its FQPN. + """ + source = """\ + from automat import MethodicalMachine + + class PythonClass(object): + class NestedClass(object): + _classMachine = MethodicalMachine() + """ + moduleDict = self.makeModuleAsDict(source, + self.pathDir, + 'nestedcls.py') + + PythonClass = moduleDict['nestedcls.PythonClass'] + self.assertIn(('nestedcls.PythonClass.NestedClass._classMachine', + PythonClass.load().NestedClass._classMachine), + list(self.findMachinesViaWrapper(PythonClass))) + + def test_yieldsMachineInModule(self): + """ + When given a L{twisted.python.modules.PythonModule} that refers to + a module that contains a L{MethodicalMachine}, + L{findMachinesViaWrapper} yields that machine and its FQPN. + """ + source = """\ + from automat import MethodicalMachine + + rootMachine = MethodicalMachine() + """ + module = self.makeModule(source, self.pathDir, 'root.py') + rootMachine = self.loadModuleAsDict(module)['root.rootMachine'].load() + self.assertIn(('root.rootMachine', rootMachine), + list(self.findMachinesViaWrapper(module))) + + def test_yieldsMachineInClassInModule(self): + """ + When given a L{twisted.python.modules.PythonModule} that refers to + the original module of a class containing a + L{MethodicalMachine}, L{findMachinesViaWrapper} yields that + machine and its FQPN. + """ + source = """\ + from automat import MethodicalMachine + + class PythonClass(object): + _classMachine = MethodicalMachine() + """ + module = self.makeModule(source, self.pathDir, 'clsmod.py') + PythonClass = self.loadModuleAsDict( + module)['clsmod.PythonClass'].load() + self.assertIn(('clsmod.PythonClass._classMachine', + PythonClass._classMachine), + list(self.findMachinesViaWrapper(module))) + + def test_yieldsMachineInNestedClassInModule(self): + """ + When given a L{twisted.python.modules.PythonModule} that refers to + the original module of a nested class containing a + L{MethodicalMachine}, L{findMachinesViaWrapper} yields that + machine and its FQPN. + """ + source = """\ + from automat import MethodicalMachine + + class PythonClass(object): + class NestedClass(object): + _classMachine = MethodicalMachine() + """ + module = self.makeModule(source, self.pathDir, 'nestedcls.py') + PythonClass = self.loadModuleAsDict( + module)['nestedcls.PythonClass'].load() + + self.assertIn(('nestedcls.PythonClass.NestedClass._classMachine', + PythonClass.NestedClass._classMachine), + list(self.findMachinesViaWrapper(module))) + + def test_ignoresImportedClass(self): + """ + When given a L{twisted.python.modules.PythonAttribute} that refers + to a class imported from another module, any + L{MethodicalMachine}s on that class are ignored. + + This behavior ensures that a machine is only discovered on a + class when visiting the module where that class was defined. + """ + originalSource = """ + from automat import MethodicalMachine + + class PythonClass(object): + _classMachine = MethodicalMachine() + """ + + importingSource = """ + from original import PythonClass + """ + + self.makeModule(originalSource, self.pathDir, 'original.py') + importingModule = self.makeModule(importingSource, + self.pathDir, + 'importing.py') + + self.assertFalse(list(self.findMachinesViaWrapper(importingModule))) + + def test_descendsIntoPackages(self): + """ + L{findMachinesViaWrapper} descends into packages to discover + machines. + """ + pythonPath = self.PythonPath([self.pathDir]) + package = self.FilePath(self.pathDir).child("test_package") + package.makedirs() + package.child('__init__.py').touch() + + source = """ + from automat import MethodicalMachine + + + class PythonClass(object): + _classMachine = MethodicalMachine() + + + rootMachine = MethodicalMachine() + """ + self.makeModule(source, package.path, 'module.py') + + test_package = pythonPath['test_package'] + machines = sorted(self.findMachinesViaWrapper(test_package), + key=operator.itemgetter(0)) + + moduleDict = self.loadModuleAsDict(test_package['module']) + rootMachine = moduleDict['test_package.module.rootMachine'].load() + PythonClass = moduleDict['test_package.module.PythonClass'].load() + + expectedMachines = sorted( + [('test_package.module.rootMachine', + rootMachine), + ('test_package.module.PythonClass._classMachine', + PythonClass._classMachine)], key=operator.itemgetter(0)) + + self.assertEqual(expectedMachines, machines) + + def test_infiniteLoop(self): + """ + L{findMachinesViaWrapper} ignores infinite loops. + + Note this test can't fail - it can only run forever! + """ + source = """ + class InfiniteLoop(object): + pass + + InfiniteLoop.loop = InfiniteLoop + """ + module = self.makeModule(source, self.pathDir, 'loop.py') + self.assertFalse(list(self.findMachinesViaWrapper(module))) + + +@skipIf(not isTwistedInstalled(), "Twisted is not installed.") +class WrapFQPNTests(TestCase): + """ + Tests that ensure L{wrapFQPN} loads the + L{twisted.python.modules.PythonModule} or + L{twisted.python.modules.PythonAttribute} for a given FQPN. + """ + + def setUp(self): + from twisted.python.modules import PythonModule, PythonAttribute + from .._discover import wrapFQPN, InvalidFQPN, NoModule, NoObject + + self.PythonModule = PythonModule + self.PythonAttribute = PythonAttribute + self.wrapFQPN = wrapFQPN + self.InvalidFQPN = InvalidFQPN + self.NoModule = NoModule + self.NoObject = NoObject + + def assertModuleWrapperRefersTo(self, moduleWrapper, module): + """ + Assert that a L{twisted.python.modules.PythonModule} refers to a + particular Python module. + """ + self.assertIsInstance(moduleWrapper, self.PythonModule) + self.assertEqual(moduleWrapper.name, module.__name__) + self.assertIs(moduleWrapper.load(), module) + + def assertAttributeWrapperRefersTo(self, attributeWrapper, fqpn, obj): + """ + Assert that a L{twisted.python.modules.PythonAttribute} refers to a + particular Python object. + """ + self.assertIsInstance(attributeWrapper, self.PythonAttribute) + self.assertEqual(attributeWrapper.name, fqpn) + self.assertIs(attributeWrapper.load(), obj) + + def test_failsWithEmptyFQPN(self): + """ + L{wrapFQPN} raises L{InvalidFQPN} when given an empty string. + """ + with self.assertRaises(self.InvalidFQPN): + self.wrapFQPN('') + + def test_failsWithBadDotting(self): + """" + L{wrapFQPN} raises L{InvalidFQPN} when given a badly-dotted + FQPN. (e.g., x..y). + """ + for bad in ('.fails', 'fails.', 'this..fails'): + with self.assertRaises(self.InvalidFQPN): + self.wrapFQPN(bad) + + def test_singleModule(self): + """ + L{wrapFQPN} returns a L{twisted.python.modules.PythonModule} + referring to the single module a dotless FQPN describes. + """ + import os + + moduleWrapper = self.wrapFQPN('os') + + self.assertIsInstance(moduleWrapper, self.PythonModule) + self.assertIs(moduleWrapper.load(), os) + + def test_failsWithMissingSingleModuleOrPackage(self): + """ + L{wrapFQPN} raises L{NoModule} when given a dotless FQPN that does + not refer to a module or package. + """ + with self.assertRaises(self.NoModule): + self.wrapFQPN("this is not an acceptable name!") + + def test_singlePackage(self): + """ + L{wrapFQPN} returns a L{twisted.python.modules.PythonModule} + referring to the single package a dotless FQPN describes. + """ + import xml + self.assertModuleWrapperRefersTo(self.wrapFQPN('xml'), xml) + + def test_multiplePackages(self): + """ + L{wrapFQPN} returns a L{twisted.python.modules.PythonModule} + referring to the deepest package described by dotted FQPN. + """ + import xml.etree + self.assertModuleWrapperRefersTo(self.wrapFQPN('xml.etree'), xml.etree) + + def test_multiplePackagesFinalModule(self): + """ + L{wrapFQPN} returns a L{twisted.python.modules.PythonModule} + referring to the deepest module described by dotted FQPN. + """ + import xml.etree.ElementTree + self.assertModuleWrapperRefersTo( + self.wrapFQPN('xml.etree.ElementTree'), xml.etree.ElementTree) + + def test_singleModuleObject(self): + """ + L{wrapFQPN} returns a L{twisted.python.modules.PythonAttribute} + referring to the deepest object an FQPN names, traversing one module. + """ + import os + self.assertAttributeWrapperRefersTo( + self.wrapFQPN('os.path'), 'os.path', os.path) + + def test_multiplePackagesObject(self): + """ + L{wrapFQPN} returns a L{twisted.python.modules.PythonAttribute} + referring to the deepest object described by an FQPN, + descending through several packages. + """ + import xml.etree.ElementTree + import automat + + for fqpn, obj in [('xml.etree.ElementTree.fromstring', + xml.etree.ElementTree.fromstring), + ('automat.MethodicalMachine.__doc__', + automat.MethodicalMachine.__doc__)]: + self.assertAttributeWrapperRefersTo( + self.wrapFQPN(fqpn), fqpn, obj) + + def test_failsWithMultiplePackagesMissingModuleOrPackage(self): + """ + L{wrapFQPN} raises L{NoObject} when given an FQPN that contains a + missing attribute, module, or package. + """ + for bad in ('xml.etree.nope!', + 'xml.etree.nope!.but.the.rest.is.believable'): + with self.assertRaises(self.NoObject): + self.wrapFQPN(bad) + + +@skipIf(not isTwistedInstalled(), "Twisted is not installed.") +class FindMachinesIntegrationTests(_WritesPythonModules): + """ + Integration tests to check that L{findMachines} yields all + machines discoverable at or below an FQPN. + """ + + SOURCE = """ + from automat import MethodicalMachine + + class PythonClass(object): + _machine = MethodicalMachine() + ignored = "i am ignored" + + rootLevel = MethodicalMachine() + + ignored = "i am ignored" + """ + + def setUp(self): + super(FindMachinesIntegrationTests, self).setUp() + from .._discover import findMachines + + self.findMachines = findMachines + + packageDir = self.FilePath(self.pathDir).child("test_package") + packageDir.makedirs() + self.pythonPath = self.PythonPath([self.pathDir]) + self.writeSourceInto(self.SOURCE, packageDir.path, '__init__.py') + + subPackageDir = packageDir.child('subpackage') + subPackageDir.makedirs() + subPackageDir.child('__init__.py').touch() + + self.makeModule(self.SOURCE, subPackageDir.path, 'module.py') + + self.packageDict = self.loadModuleAsDict( + self.pythonPath['test_package']) + self.moduleDict = self.loadModuleAsDict( + self.pythonPath['test_package']['subpackage']['module']) + + def test_discoverAll(self): + """ + Given a top-level package FQPN, L{findMachines} discovers all + L{MethodicalMachine} instances in and below it. + """ + machines = sorted(self.findMachines('test_package'), + key=operator.itemgetter(0)) + + tpRootLevel = self.packageDict['test_package.rootLevel'].load() + tpPythonClass = self.packageDict['test_package.PythonClass'].load() + + mRLAttr = self.moduleDict['test_package.subpackage.module.rootLevel'] + mRootLevel = mRLAttr.load() + mPCAttr = self.moduleDict['test_package.subpackage.module.PythonClass'] + mPythonClass = mPCAttr.load() + + expectedMachines = sorted( + [('test_package.rootLevel', tpRootLevel), + ('test_package.PythonClass._machine', tpPythonClass._machine), + ('test_package.subpackage.module.rootLevel', mRootLevel), + ('test_package.subpackage.module.PythonClass._machine', + mPythonClass._machine)], + key=operator.itemgetter(0)) + + self.assertEqual(expectedMachines, machines) diff --git a/venv/lib/python3.7/site-packages/automat/_test/test_trace.py b/venv/lib/python3.7/site-packages/automat/_test/test_trace.py new file mode 100644 index 0000000..6d7433b --- /dev/null +++ b/venv/lib/python3.7/site-packages/automat/_test/test_trace.py @@ -0,0 +1,98 @@ +from unittest import TestCase +from .._methodical import MethodicalMachine + +class SampleObject(object): + mm = MethodicalMachine() + + @mm.state(initial=True) + def begin(self): + "initial state" + @mm.state() + def middle(self): + "middle state" + @mm.state() + def end(self): + "end state" + + @mm.input() + def go1(self): + "sample input" + @mm.input() + def go2(self): + "sample input" + @mm.input() + def back(self): + "sample input" + + @mm.output() + def out(self): + "sample output" + + setTrace = mm._setTrace + + begin.upon(go1, middle, [out]) + middle.upon(go2, end, [out]) + end.upon(back, middle, []) + middle.upon(back, begin, []) + +class TraceTests(TestCase): + def test_only_inputs(self): + traces = [] + def tracer(old_state, input, new_state): + traces.append((old_state, input, new_state)) + return None # "I only care about inputs, not outputs" + s = SampleObject() + s.setTrace(tracer) + + s.go1() + self.assertEqual(traces, [("begin", "go1", "middle"), + ]) + + s.go2() + self.assertEqual(traces, [("begin", "go1", "middle"), + ("middle", "go2", "end"), + ]) + s.setTrace(None) + s.back() + self.assertEqual(traces, [("begin", "go1", "middle"), + ("middle", "go2", "end"), + ]) + s.go2() + self.assertEqual(traces, [("begin", "go1", "middle"), + ("middle", "go2", "end"), + ]) + + def test_inputs_and_outputs(self): + traces = [] + def tracer(old_state, input, new_state): + traces.append((old_state, input, new_state, None)) + def trace_outputs(output): + traces.append((old_state, input, new_state, output)) + return trace_outputs # "I care about outputs too" + s = SampleObject() + s.setTrace(tracer) + + s.go1() + self.assertEqual(traces, [("begin", "go1", "middle", None), + ("begin", "go1", "middle", "out"), + ]) + + s.go2() + self.assertEqual(traces, [("begin", "go1", "middle", None), + ("begin", "go1", "middle", "out"), + ("middle", "go2", "end", None), + ("middle", "go2", "end", "out"), + ]) + s.setTrace(None) + s.back() + self.assertEqual(traces, [("begin", "go1", "middle", None), + ("begin", "go1", "middle", "out"), + ("middle", "go2", "end", None), + ("middle", "go2", "end", "out"), + ]) + s.go2() + self.assertEqual(traces, [("begin", "go1", "middle", None), + ("begin", "go1", "middle", "out"), + ("middle", "go2", "end", None), + ("middle", "go2", "end", "out"), + ]) diff --git a/venv/lib/python3.7/site-packages/automat/_test/test_visualize.py b/venv/lib/python3.7/site-packages/automat/_test/test_visualize.py new file mode 100644 index 0000000..987eb3c --- /dev/null +++ b/venv/lib/python3.7/site-packages/automat/_test/test_visualize.py @@ -0,0 +1,430 @@ +from __future__ import print_function +import functools + +import os +import subprocess +from unittest import TestCase, skipIf + +import attr + +from .._methodical import MethodicalMachine + +from .test_discover import isTwistedInstalled + + +def isGraphvizModuleInstalled(): + """ + Is the graphviz Python module installed? + """ + try: + __import__("graphviz") + except ImportError: + return False + else: + return True + + +def isGraphvizInstalled(): + """ + Are the graphviz tools installed? + """ + r, w = os.pipe() + os.close(w) + try: + return not subprocess.call("dot", stdin=r, shell=True) + finally: + os.close(r) + + + +def sampleMachine(): + """ + Create a sample L{MethodicalMachine} with some sample states. + """ + mm = MethodicalMachine() + class SampleObject(object): + @mm.state(initial=True) + def begin(self): + "initial state" + @mm.state() + def end(self): + "end state" + @mm.input() + def go(self): + "sample input" + @mm.output() + def out(self): + "sample output" + begin.upon(go, end, [out]) + so = SampleObject() + so.go() + return mm + + +@skipIf(not isGraphvizModuleInstalled(), "Graphviz module is not installed.") +class ElementMakerTests(TestCase): + """ + L{elementMaker} generates HTML representing the specified element. + """ + + def setUp(self): + from .._visualize import elementMaker + self.elementMaker = elementMaker + + def test_sortsAttrs(self): + """ + L{elementMaker} orders HTML attributes lexicographically. + """ + expected = r'
' + self.assertEqual(expected, + self.elementMaker("div", + b='2', + a='1', + c='3')) + + def test_quotesAttrs(self): + """ + L{elementMaker} quotes HTML attributes according to DOT's quoting rule. + + See U{http://www.graphviz.org/doc/info/lang.html}, footnote 1. + """ + expected = r'
' + self.assertEqual(expected, + self.elementMaker("div", + b='a " quote', + a=1, + c="a string")) + + def test_noAttrs(self): + """ + L{elementMaker} should render an element with no attributes. + """ + expected = r'
' + self.assertEqual(expected, self.elementMaker("div")) + + +@attr.s +class HTMLElement(object): + """Holds an HTML element, as created by elementMaker.""" + name = attr.ib() + children = attr.ib() + attributes = attr.ib() + + +def findElements(element, predicate): + """ + Recursively collect all elements in an L{HTMLElement} tree that + match the optional predicate. + """ + if predicate(element): + return [element] + elif isLeaf(element): + return [] + + return [result + for child in element.children + for result in findElements(child, predicate)] + + +def isLeaf(element): + """ + This HTML element is actually leaf node. + """ + return not isinstance(element, HTMLElement) + + +@skipIf(not isGraphvizModuleInstalled(), "Graphviz module is not installed.") +class TableMakerTests(TestCase): + """ + Tests that ensure L{tableMaker} generates HTML tables usable as + labels in DOT graphs. + + For more information, read the "HTML-Like Labels" section of + U{http://www.graphviz.org/doc/info/shapes.html}. + """ + + def fakeElementMaker(self, name, *children, **attributes): + return HTMLElement(name=name, children=children, attributes=attributes) + + def setUp(self): + from .._visualize import tableMaker + + self.inputLabel = "input label" + self.port = "the port" + self.tableMaker = functools.partial(tableMaker, + _E=self.fakeElementMaker) + + def test_inputLabelRow(self): + """ + The table returned by L{tableMaker} always contains the input + symbol label in its first row, and that row contains one cell + with a port attribute set to the provided port. + """ + + def hasPort(element): + return (not isLeaf(element) + and element.attributes.get("port") == self.port) + + for outputLabels in ([], ["an output label"]): + table = self.tableMaker(self.inputLabel, outputLabels, + port=self.port) + self.assertGreater(len(table.children), 0) + inputLabelRow = table.children[0] + + portCandidates = findElements(table, hasPort) + + self.assertEqual(len(portCandidates), 1) + self.assertEqual(portCandidates[0].name, "td") + self.assertEqual(findElements(inputLabelRow, isLeaf), + [self.inputLabel]) + + def test_noOutputLabels(self): + """ + L{tableMaker} does not add a colspan attribute to the input + label's cell or a second row if there no output labels. + """ + table = self.tableMaker("input label", (), port=self.port) + self.assertEqual(len(table.children), 1) + (inputLabelRow,) = table.children + self.assertNotIn("colspan", inputLabelRow.attributes) + + def test_withOutputLabels(self): + """ + L{tableMaker} adds a colspan attribute to the input label's cell + equal to the number of output labels and a second row that + contains the output labels. + """ + table = self.tableMaker(self.inputLabel, ("output label 1", + "output label 2"), + port=self.port) + + self.assertEqual(len(table.children), 2) + inputRow, outputRow = table.children + + def hasCorrectColspan(element): + return (not isLeaf(element) + and element.name == "td" + and element.attributes.get('colspan') == "2") + + self.assertEqual(len(findElements(inputRow, hasCorrectColspan)), + 1) + self.assertEqual(findElements(outputRow, isLeaf), ["output label 1", + "output label 2"]) + + +@skipIf(not isGraphvizModuleInstalled(), "Graphviz module is not installed.") +@skipIf(not isGraphvizInstalled(), "Graphviz tools are not installed.") +class IntegrationTests(TestCase): + """ + Tests which make sure Graphviz can understand the output produced by + Automat. + """ + + def test_validGraphviz(self): + """ + L{graphviz} emits valid graphviz data. + """ + p = subprocess.Popen("dot", stdin=subprocess.PIPE, + stdout=subprocess.PIPE) + out, err = p.communicate("".join(sampleMachine().asDigraph()) + .encode("utf-8")) + self.assertEqual(p.returncode, 0) + + +@skipIf(not isGraphvizModuleInstalled(), "Graphviz module is not installed.") +class SpotChecks(TestCase): + """ + Tests to make sure that the output contains salient features of the machine + being generated. + """ + + def test_containsMachineFeatures(self): + """ + The output of L{graphviz} should contain the names of the states, + inputs, outputs in the state machine. + """ + gvout = "".join(sampleMachine().asDigraph()) + self.assertIn("begin", gvout) + self.assertIn("end", gvout) + self.assertIn("go", gvout) + self.assertIn("out", gvout) + + +class RecordsDigraphActions(object): + """ + Records calls made to L{FakeDigraph}. + """ + + def __init__(self): + self.reset() + + def reset(self): + self.renderCalls = [] + self.saveCalls = [] + + +class FakeDigraph(object): + """ + A fake L{graphviz.Digraph}. Instantiate it with a + L{RecordsDigraphActions}. + """ + + def __init__(self, recorder): + self._recorder = recorder + + def render(self, **kwargs): + self._recorder.renderCalls.append(kwargs) + + def save(self, **kwargs): + self._recorder.saveCalls.append(kwargs) + + +class FakeMethodicalMachine(object): + """ + A fake L{MethodicalMachine}. Instantiate it with a L{FakeDigraph} + """ + + def __init__(self, digraph): + self._digraph = digraph + + def asDigraph(self): + return self._digraph + + +@skipIf(not isGraphvizModuleInstalled(), "Graphviz module is not installed.") +@skipIf(not isGraphvizInstalled(), "Graphviz tools are not installed.") +@skipIf(not isTwistedInstalled(), "Twisted is not installed.") +class VisualizeToolTests(TestCase): + + def setUp(self): + self.digraphRecorder = RecordsDigraphActions() + self.fakeDigraph = FakeDigraph(self.digraphRecorder) + + self.fakeProgname = 'tool-test' + self.fakeSysPath = ['ignored'] + self.collectedOutput = [] + self.fakeFQPN = 'fake.fqpn' + + def collectPrints(self, *args): + self.collectedOutput.append(' '.join(args)) + + def fakeFindMachines(self, fqpn): + yield fqpn, FakeMethodicalMachine(self.fakeDigraph) + + def tool(self, + progname=None, + argv=None, + syspath=None, + findMachines=None, + print=None): + from .._visualize import tool + return tool( + _progname=progname or self.fakeProgname, + _argv=argv or [self.fakeFQPN], + _syspath=syspath or self.fakeSysPath, + _findMachines=findMachines or self.fakeFindMachines, + _print=print or self.collectPrints) + + def test_checksCurrentDirectory(self): + """ + L{tool} adds '' to sys.path to ensure + L{automat._discover.findMachines} searches the current + directory. + """ + self.tool(argv=[self.fakeFQPN]) + self.assertEqual(self.fakeSysPath[0], '') + + def test_quietHidesOutput(self): + """ + Passing -q/--quiet hides all output. + """ + self.tool(argv=[self.fakeFQPN, '--quiet']) + self.assertFalse(self.collectedOutput) + self.tool(argv=[self.fakeFQPN, '-q']) + self.assertFalse(self.collectedOutput) + + def test_onlySaveDot(self): + """ + Passing an empty string for --image-directory/-i disables + rendering images. + """ + for arg in ('--image-directory', '-i'): + self.digraphRecorder.reset() + self.collectedOutput = [] + + self.tool(argv=[self.fakeFQPN, arg, '']) + self.assertFalse(any("image" in line + for line in self.collectedOutput)) + + self.assertEqual(len(self.digraphRecorder.saveCalls), 1) + (call,) = self.digraphRecorder.saveCalls + self.assertEqual("{}.dot".format(self.fakeFQPN), + call['filename']) + + self.assertFalse(self.digraphRecorder.renderCalls) + + def test_saveOnlyImage(self): + """ + Passing an empty string for --dot-directory/-d disables saving dot + files. + """ + for arg in ('--dot-directory', '-d'): + self.digraphRecorder.reset() + self.collectedOutput = [] + self.tool(argv=[self.fakeFQPN, arg, '']) + + self.assertFalse(any("dot" in line + for line in self.collectedOutput)) + + self.assertEqual(len(self.digraphRecorder.renderCalls), 1) + (call,) = self.digraphRecorder.renderCalls + self.assertEqual("{}.dot".format(self.fakeFQPN), + call['filename']) + self.assertTrue(call['cleanup']) + + self.assertFalse(self.digraphRecorder.saveCalls) + + def test_saveDotAndImagesInDifferentDirectories(self): + """ + Passing different directories to --image-directory and --dot-directory + writes images and dot files to those directories. + """ + imageDirectory = 'image' + dotDirectory = 'dot' + self.tool(argv=[self.fakeFQPN, + '--image-directory', imageDirectory, + '--dot-directory', dotDirectory]) + + self.assertTrue(any("image" in line + for line in self.collectedOutput)) + self.assertTrue(any("dot" in line + for line in self.collectedOutput)) + + self.assertEqual(len(self.digraphRecorder.renderCalls), 1) + (renderCall,) = self.digraphRecorder.renderCalls + self.assertEqual(renderCall["directory"], imageDirectory) + self.assertTrue(renderCall['cleanup']) + + self.assertEqual(len(self.digraphRecorder.saveCalls), 1) + (saveCall,) = self.digraphRecorder.saveCalls + self.assertEqual(saveCall["directory"], dotDirectory) + + def test_saveDotAndImagesInSameDirectory(self): + """ + Passing the same directory to --image-directory and --dot-directory + writes images and dot files to that one directory. + """ + directory = 'imagesAndDot' + self.tool(argv=[self.fakeFQPN, + '--image-directory', directory, + '--dot-directory', directory]) + + self.assertTrue(any("image and dot" in line + for line in self.collectedOutput)) + + self.assertEqual(len(self.digraphRecorder.renderCalls), 1) + (renderCall,) = self.digraphRecorder.renderCalls + self.assertEqual(renderCall["directory"], directory) + self.assertFalse(renderCall['cleanup']) + + self.assertFalse(len(self.digraphRecorder.saveCalls)) diff --git a/venv/lib/python3.7/site-packages/certifi-2019.11.28.dist-info/METADATA b/venv/lib/python3.7/site-packages/certifi-2019.11.28.dist-info/METADATA new file mode 100644 index 0000000..bc0532f --- /dev/null +++ b/venv/lib/python3.7/site-packages/certifi-2019.11.28.dist-info/METADATA @@ -0,0 +1,74 @@ +Metadata-Version: 2.0 +Name: certifi +Version: 2019.11.28 +Summary: Python package for providing Mozilla's CA Bundle. +Home-page: https://certifi.io/ +Author: Kenneth Reitz +Author-email: me@kennethreitz.com +License: MPL-2.0 +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0) +Classifier: Natural Language :: English +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.6 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.3 +Classifier: Programming Language :: Python :: 3.4 +Classifier: Programming Language :: Python :: 3.5 +Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 + +Certifi: Python SSL Certificates +================================ + +`Certifi`_ is a carefully curated collection of Root Certificates for +validating the trustworthiness of SSL certificates while verifying the identity +of TLS hosts. It has been extracted from the `Requests`_ project. + +Installation +------------ + +``certifi`` is available on PyPI. Simply install it with ``pip``:: + + $ pip install certifi + +Usage +----- + +To reference the installed certificate authority (CA) bundle, you can use the +built-in function:: + + >>> import certifi + + >>> certifi.where() + '/usr/local/lib/python2.7/site-packages/certifi/cacert.pem' + +Or from the command line:: + + $ python -m certifi + /usr/local/lib/python2.7/site-packages/certifi/cacert.pem + +Enjoy! + +1024-bit Root Certificates +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Browsers and certificate authorities have concluded that 1024-bit keys are +unacceptably weak for certificates, particularly root certificates. For this +reason, Mozilla has removed any weak (i.e. 1024-bit key) certificate from its +bundle, replacing it with an equivalent strong (i.e. 2048-bit or greater key) +certificate from the same CA. Because Mozilla removed these certificates from +its bundle, ``certifi`` removed them as well. + +In previous versions, ``certifi`` provided the ``certifi.old_where()`` function +to intentionally re-add the 1024-bit roots back into your bundle. This was not +recommended in production and therefore was removed at the end of 2018. + +.. _`Certifi`: https://certifi.io/en/latest/ +.. _`Requests`: http://docs.python-requests.org/en/latest/ + + diff --git a/venv/lib/python3.7/site-packages/certifi-2019.11.28.dist-info/metadata.json b/venv/lib/python3.7/site-packages/certifi-2019.11.28.dist-info/metadata.json new file mode 100644 index 0000000..3a14841 --- /dev/null +++ b/venv/lib/python3.7/site-packages/certifi-2019.11.28.dist-info/metadata.json @@ -0,0 +1 @@ +{"classifiers": ["Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)", "Natural Language :: English", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7"], "extensions": {"python.details": {"contacts": [{"email": "me@kennethreitz.com", "name": "Kenneth Reitz", "role": "author"}], "document_names": {"description": "DESCRIPTION.rst"}, "project_urls": {"Home": "https://certifi.io/"}}}, "generator": "bdist_wheel (0.30.0.a0)", "license": "MPL-2.0", "metadata_version": "2.0", "name": "certifi", "summary": "Python package for providing Mozilla's CA Bundle.", "version": "2019.11.28"} \ No newline at end of file diff --git a/venv/lib/python3.7/site-packages/certifi/cacert.pem b/venv/lib/python3.7/site-packages/certifi/cacert.pem new file mode 100644 index 0000000..a4758ef --- /dev/null +++ b/venv/lib/python3.7/site-packages/certifi/cacert.pem @@ -0,0 +1,4602 @@ + +# Issuer: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA +# Subject: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA +# Label: "GlobalSign Root CA" +# Serial: 4835703278459707669005204 +# MD5 Fingerprint: 3e:45:52:15:09:51:92:e1:b7:5d:37:9f:b1:87:29:8a +# SHA1 Fingerprint: b1:bc:96:8b:d4:f4:9d:62:2a:a8:9a:81:f2:15:01:52:a4:1d:82:9c +# SHA256 Fingerprint: eb:d4:10:40:e4:bb:3e:c7:42:c9:e3:81:d3:1e:f2:a4:1a:48:b6:68:5c:96:e7:ce:f3:c1:df:6c:d4:33:1c:99 +-----BEGIN CERTIFICATE----- +MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG +A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv +b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw +MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i +YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT +aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ +jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp +xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp +1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG +snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ +U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8 +9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E +BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B +AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz +yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE +38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP +AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad +DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME +HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2 +# Label: "GlobalSign Root CA - R2" +# Serial: 4835703278459682885658125 +# MD5 Fingerprint: 94:14:77:7e:3e:5e:fd:8f:30:bd:41:b0:cf:e7:d0:30 +# SHA1 Fingerprint: 75:e0:ab:b6:13:85:12:27:1c:04:f8:5f:dd:de:38:e4:b7:24:2e:fe +# SHA256 Fingerprint: ca:42:dd:41:74:5f:d0:b8:1e:b9:02:36:2c:f9:d8:bf:71:9d:a1:bd:1b:1e:fc:94:6f:5b:4c:99:f4:2c:1b:9e +-----BEGIN CERTIFICATE----- +MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G +A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp +Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1 +MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG +A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL +v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8 +eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq +tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd +C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa +zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB +mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH +V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n +bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG +3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs +J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO +291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS +ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd +AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 +TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== +-----END CERTIFICATE----- + +# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only +# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only +# Label: "Verisign Class 3 Public Primary Certification Authority - G3" +# Serial: 206684696279472310254277870180966723415 +# MD5 Fingerprint: cd:68:b6:a7:c7:c4:ce:75:e0:1d:4f:57:44:61:92:09 +# SHA1 Fingerprint: 13:2d:0d:45:53:4b:69:97:cd:b2:d5:c3:39:e2:55:76:60:9b:5c:c6 +# SHA256 Fingerprint: eb:04:cf:5e:b1:f3:9a:fa:76:2f:2b:b1:20:f2:96:cb:a5:20:c1:b9:7d:b1:58:95:65:b8:1c:b9:a1:7b:72:44 +-----BEGIN CERTIFICATE----- +MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl +cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu +LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT +aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD +VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT +aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ +bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu +IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg +LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b +N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t +KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu +kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm +CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ +Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu +imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te +2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe +DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC +/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p +F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt +TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== +-----END CERTIFICATE----- + +# Issuer: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited +# Subject: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited +# Label: "Entrust.net Premium 2048 Secure Server CA" +# Serial: 946069240 +# MD5 Fingerprint: ee:29:31:bc:32:7e:9a:e6:e8:b5:f7:51:b4:34:71:90 +# SHA1 Fingerprint: 50:30:06:09:1d:97:d4:f5:ae:39:f7:cb:e7:92:7d:7d:65:2d:34:31 +# SHA256 Fingerprint: 6d:c4:71:72:e0:1c:bc:b0:bf:62:58:0d:89:5f:e2:b8:ac:9a:d4:f8:73:80:1e:0c:10:b9:c8:37:d2:1e:b1:77 +-----BEGIN CERTIFICATE----- +MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML +RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp +bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5 +IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0yOTA3 +MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3 +LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp +YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG +A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq +K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe +sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX +MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT +XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/ +HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH +4QIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV +HQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJKoZIhvcNAQEFBQADggEBADub +j1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPyT/4xmf3IDExo +U8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf +zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5b +u/8j72gZyxKTJ1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+ +bYQLCIt+jerXmCHG8+c8eS9enNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/Er +fF6adulZkMV8gzURZVE= +-----END CERTIFICATE----- + +# Issuer: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust +# Subject: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust +# Label: "Baltimore CyberTrust Root" +# Serial: 33554617 +# MD5 Fingerprint: ac:b6:94:a5:9c:17:e0:d7:91:52:9b:b1:97:06:a6:e4 +# SHA1 Fingerprint: d4:de:20:d0:5e:66:fc:53:fe:1a:50:88:2c:78:db:28:52:ca:e4:74 +# SHA256 Fingerprint: 16:af:57:a9:f6:76:b0:ab:12:60:95:aa:5e:ba:de:f2:2a:b3:11:19:d6:44:ac:95:cd:4b:93:db:f3:f2:6a:eb +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ +RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD +VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX +DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y +ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy +VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr +mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr +IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK +mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu +XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy +dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye +jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1 +BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3 +DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92 +9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx +jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0 +Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz +ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS +R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp +-----END CERTIFICATE----- + +# Issuer: CN=AddTrust External CA Root O=AddTrust AB OU=AddTrust External TTP Network +# Subject: CN=AddTrust External CA Root O=AddTrust AB OU=AddTrust External TTP Network +# Label: "AddTrust External Root" +# Serial: 1 +# MD5 Fingerprint: 1d:35:54:04:85:78:b0:3f:42:42:4d:bf:20:73:0a:3f +# SHA1 Fingerprint: 02:fa:f3:e2:91:43:54:68:60:78:57:69:4d:f5:e4:5b:68:85:18:68 +# SHA256 Fingerprint: 68:7f:a4:51:38:22:78:ff:f0:c8:b1:1f:8d:43:d5:76:67:1c:6e:b2:bc:ea:b4:13:fb:83:d9:65:d0:6d:2f:f2 +-----BEGIN CERTIFICATE----- +MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU +MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs +IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290 +MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux +FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h +bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v +dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt +H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9 +uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX +mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX +a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN +E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0 +WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD +VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0 +Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU +cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx +IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN +AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH +YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 +6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC +Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX +c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a +mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= +-----END CERTIFICATE----- + +# Issuer: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc. +# Subject: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc. +# Label: "Entrust Root Certification Authority" +# Serial: 1164660820 +# MD5 Fingerprint: d6:a5:c3:ed:5d:dd:3e:00:c1:3d:87:92:1f:1d:3f:e4 +# SHA1 Fingerprint: b3:1e:b1:b7:40:e3:6c:84:02:da:dc:37:d4:4d:f5:d4:67:49:52:f9 +# SHA256 Fingerprint: 73:c1:76:43:4f:1b:c6:d5:ad:f4:5b:0e:76:e7:27:28:7c:8d:e5:76:16:c1:e6:e6:14:1a:2b:2c:bc:7d:8e:4c +-----BEGIN CERTIFICATE----- +MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC +VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0 +Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW +KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl +cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw +NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw +NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy +ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV +BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ +KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo +Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4 +4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9 +KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI +rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi +94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB +sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi +gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo +kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE +vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA +A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t +O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua +AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP +9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/ +eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m +0vdXcDazv/wor3ElhVsT/h5/WrQ8 +-----END CERTIFICATE----- + +# Issuer: CN=GeoTrust Global CA O=GeoTrust Inc. +# Subject: CN=GeoTrust Global CA O=GeoTrust Inc. +# Label: "GeoTrust Global CA" +# Serial: 144470 +# MD5 Fingerprint: f7:75:ab:29:fb:51:4e:b7:77:5e:ff:05:3c:99:8e:f5 +# SHA1 Fingerprint: de:28:f4:a4:ff:e5:b9:2f:a3:c5:03:d1:a3:49:a7:f9:96:2a:82:12 +# SHA256 Fingerprint: ff:85:6a:2d:25:1d:cd:88:d3:66:56:f4:50:12:67:98:cf:ab:aa:de:40:79:9c:72:2d:e4:d2:b5:db:36:a7:3a +-----BEGIN CERTIFICATE----- +MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT +MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i +YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG +EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg +R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9 +9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq +fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv +iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU +1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+ +bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW +MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA +ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l +uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn +Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS +tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF +PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un +hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV +5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw== +-----END CERTIFICATE----- + +# Issuer: CN=GeoTrust Universal CA O=GeoTrust Inc. +# Subject: CN=GeoTrust Universal CA O=GeoTrust Inc. +# Label: "GeoTrust Universal CA" +# Serial: 1 +# MD5 Fingerprint: 92:65:58:8b:a2:1a:31:72:73:68:5c:b4:a5:7a:07:48 +# SHA1 Fingerprint: e6:21:f3:35:43:79:05:9a:4b:68:30:9d:8a:2f:74:22:15:87:ec:79 +# SHA256 Fingerprint: a0:45:9b:9f:63:b2:25:59:f5:fa:5d:4c:6d:b3:f9:f7:2f:f1:93:42:03:35:78:f0:73:bf:1d:1b:46:cb:b9:12 +-----BEGIN CERTIFICATE----- +MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEW +MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVy +c2FsIENBMB4XDTA0MDMwNDA1MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UE +BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHjAcBgNVBAMTFUdlb1RydXN0 +IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKYV +VaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9tJPi8 +cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTT +QjOgNB0eRXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFh +F7em6fgemdtzbvQKoiFs7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2v +c7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d8Lsrlh/eezJS/R27tQahsiFepdaVaH/w +mZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7VqnJNk22CDtucvc+081xd +VHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3CgaRr0BHdCX +teGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZ +f9hBZ3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfRe +Bi9Fi1jUIxaS5BZuKGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+ +nhutxx9z3SxPGWX9f5NAEC7S8O08ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB +/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0XG0D08DYj3rWMB8GA1UdIwQY +MBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG +9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc +aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fX +IwjhmF7DWgh2qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzyn +ANXH/KttgCJwpQzgXQQpAvvLoJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0z +uzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsKxr2EoyNB3tZ3b4XUhRxQ4K5RirqN +Pnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxFKyDuSN/n3QmOGKja +QI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2DFKW +koRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9 +ER/frslKxfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQt +DF4JbAiXfKM9fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/Sfuvm +bJxPgWp6ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw= +-----END CERTIFICATE----- + +# Issuer: CN=GeoTrust Universal CA 2 O=GeoTrust Inc. +# Subject: CN=GeoTrust Universal CA 2 O=GeoTrust Inc. +# Label: "GeoTrust Universal CA 2" +# Serial: 1 +# MD5 Fingerprint: 34:fc:b8:d0:36:db:9e:14:b3:c2:f2:db:8f:e4:94:c7 +# SHA1 Fingerprint: 37:9a:19:7b:41:85:45:35:0c:a6:03:69:f3:3c:2e:af:47:4f:20:79 +# SHA256 Fingerprint: a0:23:4f:3b:c8:52:7c:a5:62:8e:ec:81:ad:5d:69:89:5d:a5:68:0d:c9:1d:1c:b8:47:7f:33:f8:78:b9:5b:0b +-----BEGIN CERTIFICATE----- +MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEW +MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVy +c2FsIENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYD +VQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1 +c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC +AQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0DE81 +WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUG +FF+3Qs17j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdq +XbboW0W63MOhBW9Wjo8QJqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxL +se4YuU6W3Nx2/zu+z18DwPw76L5GG//aQMJS9/7jOvdqdzXQ2o3rXhhqMcceujwb +KNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2WP0+GfPtDCapkzj4T8Fd +IgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP20gaXT73 +y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRt +hAAnZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgoc +QIgfksILAAX/8sgCSqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4 +Lt1ZrtmhN79UNdxzMk+MBB4zsslG8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAfBgNV +HSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8EBAMCAYYwDQYJ +KoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z +dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQ +L1EuxBRa3ugZ4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgr +Fg5fNuH8KrUwJM/gYwx7WBr+mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSo +ag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpqA1Ihn0CoZ1Dy81of398j9tx4TuaY +T1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpgY+RdM4kX2TGq2tbz +GDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiPpm8m +1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJV +OCiNUW7dFGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH +6aLcr34YEoP9VhdBLtUpgn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwX +QMAJKOSLakhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS +-----END CERTIFICATE----- + +# Issuer: CN=AAA Certificate Services O=Comodo CA Limited +# Subject: CN=AAA Certificate Services O=Comodo CA Limited +# Label: "Comodo AAA Services root" +# Serial: 1 +# MD5 Fingerprint: 49:79:04:b0:eb:87:19:ac:47:b0:bc:11:51:9b:74:d0 +# SHA1 Fingerprint: d1:eb:23:a4:6d:17:d6:8f:d9:25:64:c2:f1:f1:60:17:64:d8:e3:49 +# SHA256 Fingerprint: d7:a7:a0:fb:5d:7e:27:31:d7:71:e9:48:4e:bc:de:f7:1d:5f:0c:3e:0a:29:48:78:2b:c8:3e:e0:ea:69:9e:f4 +-----BEGIN CERTIFICATE----- +MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb +MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow +GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj +YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL +MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE +BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM +GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua +BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe +3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4 +YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR +rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm +ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU +oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF +MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v +QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t +b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF +AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q +GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz +Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2 +G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi +l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3 +smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root Certification Authority O=QuoVadis Limited OU=Root Certification Authority +# Subject: CN=QuoVadis Root Certification Authority O=QuoVadis Limited OU=Root Certification Authority +# Label: "QuoVadis Root CA" +# Serial: 985026699 +# MD5 Fingerprint: 27:de:36:fe:72:b7:00:03:00:9d:f4:f0:1e:6c:04:24 +# SHA1 Fingerprint: de:3f:40:bd:50:93:d3:9b:6c:60:f6:da:bc:07:62:01:00:89:76:c9 +# SHA256 Fingerprint: a4:5e:de:3b:bb:f0:9c:8a:e1:5c:72:ef:c0:72:68:d6:93:a2:1c:99:6f:d5:1e:67:ca:07:94:60:fd:6d:88:73 +-----BEGIN CERTIFICATE----- +MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJC +TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0 +aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0 +aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAzMTkxODMzMzNaFw0yMTAzMTcxODMz +MzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUw +IwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVR +dW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Yp +li4kVEAkOPcahdxYTMukJ0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2D +rOpm2RgbaIr1VxqYuvXtdj182d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJ +WCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cug +F+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospU +xbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCC +Ak4wPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVv +dmFkaXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREw +ggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNl +IG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBh +c3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy +ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh +Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYI +KwYBBQUHAgEWFmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3T +KbkGGew5Oanwl4Rqy+/fMIGuBgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rq +y+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1p +dGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYD +VQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6tlCL +MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSk +fnIYj9lofFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf8 +7C9TqnN7Az10buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1R +cHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0y +mQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQW +xFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQNiOK +SnQ2+Q== +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 2 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 2 O=QuoVadis Limited +# Label: "QuoVadis Root CA 2" +# Serial: 1289 +# MD5 Fingerprint: 5e:39:7b:dd:f8:ba:ec:82:e9:ac:62:ba:0c:54:00:2b +# SHA1 Fingerprint: ca:3a:fb:cf:12:40:36:4b:44:b2:16:20:88:80:48:39:19:93:7c:f7 +# SHA256 Fingerprint: 85:a0:dd:7d:d7:20:ad:b7:ff:05:f8:3d:54:2b:20:9d:c7:ff:45:28:f7:d6:77:b1:83:89:fe:a5:e5:c4:9e:86 +-----BEGIN CERTIFICATE----- +MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x +GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv +b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV +BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W +YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa +GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg +Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J +WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB +rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp ++ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1 +ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i +Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz +PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og +/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH +oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI +yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud +EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2 +A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL +MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT +ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f +BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn +g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl +fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K +WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha +B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc +hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR +TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD +mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z +ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y +4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza +8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 3 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 3 O=QuoVadis Limited +# Label: "QuoVadis Root CA 3" +# Serial: 1478 +# MD5 Fingerprint: 31:85:3c:62:94:97:63:b9:aa:fd:89:4e:af:6f:e0:cf +# SHA1 Fingerprint: 1f:49:14:f7:d8:74:95:1d:dd:ae:02:c0:be:fd:3a:2d:82:75:51:85 +# SHA256 Fingerprint: 18:f1:fc:7f:20:5d:f8:ad:dd:eb:7f:e0:07:dd:57:e3:af:37:5a:9c:4d:8d:73:54:6b:f4:f1:fe:d1:e1:8d:35 +-----BEGIN CERTIFICATE----- +MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x +GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv +b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV +BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W +YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM +V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB +4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr +H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd +8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv +vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT +mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe +btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc +T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt +WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ +c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A +4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD +VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG +CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0 +aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 +aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu +dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw +czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G +A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC +TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg +Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0 +7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem +d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd ++LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B +4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN +t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x +DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57 +k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s +zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j +Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT +mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK +4SVhM7JZG+Ju1zdXtg2pEto= +-----END CERTIFICATE----- + +# Issuer: O=SECOM Trust.net OU=Security Communication RootCA1 +# Subject: O=SECOM Trust.net OU=Security Communication RootCA1 +# Label: "Security Communication Root CA" +# Serial: 0 +# MD5 Fingerprint: f1:bc:63:6a:54:e0:b5:27:f5:cd:e7:1a:e3:4d:6e:4a +# SHA1 Fingerprint: 36:b1:2b:49:f9:81:9e:d7:4c:9e:bc:38:0f:c6:56:8f:5d:ac:b2:f7 +# SHA256 Fingerprint: e7:5e:72:ed:9f:56:0e:ec:6e:b4:80:00:73:a4:3f:c3:ad:19:19:5a:39:22:82:01:78:95:97:4a:99:02:6b:6c +-----BEGIN CERTIFICATE----- +MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEY +MBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21t +dW5pY2F0aW9uIFJvb3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5 +WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYD +VQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw8yl8 +9f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJ +DKaVv0uMDPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9 +Ms+k2Y7CI9eNqPPYJayX5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/N +QV3Is00qVUarH9oe4kA92819uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJ +xrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0G +A1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0T +AQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vG +kl3g0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfr +Uj94nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5 +Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJU +JRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXot +RSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw== +-----END CERTIFICATE----- + +# Issuer: CN=Sonera Class2 CA O=Sonera +# Subject: CN=Sonera Class2 CA O=Sonera +# Label: "Sonera Class 2 Root CA" +# Serial: 29 +# MD5 Fingerprint: a3:ec:75:0f:2e:88:df:fa:48:01:4e:0b:5c:48:6f:fb +# SHA1 Fingerprint: 37:f7:6d:e6:07:7c:90:c5:b1:3e:93:1a:b7:41:10:b4:f2:e4:9a:27 +# SHA256 Fingerprint: 79:08:b4:03:14:c1:38:10:0b:51:8d:07:35:80:7f:fb:fc:f8:51:8a:00:95:33:71:05:ba:38:6b:15:3d:d9:27 +-----BEGIN CERTIFICATE----- +MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP +MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAx +MDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNV +BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3/Ei9vX+ALTU74W+o +Z6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybTdXnt +5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s +3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2Ej +vOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu +8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEw +DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEG +MA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zil +zqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/ +3DEIcbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvD +FNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6 +Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2 +ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M +-----END CERTIFICATE----- + +# Issuer: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com +# Subject: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com +# Label: "XRamp Global CA Root" +# Serial: 107108908803651509692980124233745014957 +# MD5 Fingerprint: a1:0b:44:b3:ca:10:d8:00:6e:9d:0f:d8:0f:92:0a:d1 +# SHA1 Fingerprint: b8:01:86:d1:eb:9c:86:a5:41:04:cf:30:54:f3:4c:52:b7:e5:58:c6 +# SHA256 Fingerprint: ce:cd:dc:90:50:99:d8:da:df:c5:b1:d2:09:b7:37:cb:e2:c1:8c:fb:2c:10:c0:ff:0b:cf:0d:32:86:fc:1a:a2 +-----BEGIN CERTIFICATE----- +MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB +gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk +MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY +UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx +NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3 +dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy +dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6 +38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP +KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q +DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4 +qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa +JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi +PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P +BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs +jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0 +eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD +ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR +vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt +qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa +IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy +i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ +O+7ETPTsJ3xCwnR8gooJybQDJbw= +-----END CERTIFICATE----- + +# Issuer: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority +# Subject: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority +# Label: "Go Daddy Class 2 CA" +# Serial: 0 +# MD5 Fingerprint: 91:de:06:25:ab:da:fd:32:17:0c:bb:25:17:2a:84:67 +# SHA1 Fingerprint: 27:96:ba:e6:3f:18:01:e2:77:26:1b:a0:d7:77:70:02:8f:20:ee:e4 +# SHA256 Fingerprint: c3:84:6b:f2:4b:9e:93:ca:64:27:4c:0e:c6:7c:1e:cc:5e:02:4f:fc:ac:d2:d7:40:19:35:0e:81:fe:54:6a:e4 +-----BEGIN CERTIFICATE----- +MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh +MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE +YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3 +MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo +ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg +MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN +ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA +PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w +wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi +EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY +avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+ +YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE +sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h +/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5 +IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD +ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy +OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P +TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ +HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER +dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf +ReYNnyicsbkqWletNw+vHX/bvZ8= +-----END CERTIFICATE----- + +# Issuer: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority +# Subject: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority +# Label: "Starfield Class 2 CA" +# Serial: 0 +# MD5 Fingerprint: 32:4a:4b:bb:c8:63:69:9b:be:74:9a:c6:dd:1d:46:24 +# SHA1 Fingerprint: ad:7e:1c:28:b0:64:ef:8f:60:03:40:20:14:c3:d0:e3:37:0e:b5:8a +# SHA256 Fingerprint: 14:65:fa:20:53:97:b8:76:fa:a6:f0:a9:95:8e:55:90:e4:0f:cc:7f:aa:4f:b7:c2:c8:67:75:21:fb:5f:b6:58 +-----BEGIN CERTIFICATE----- +MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl +MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp +U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw +NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE +ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp +ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3 +DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf +8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN ++lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0 +X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa +K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA +1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G +A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR +zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0 +YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD +bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w +DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3 +L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D +eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl +xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp +VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY +WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q= +-----END CERTIFICATE----- + +# Issuer: O=Government Root Certification Authority +# Subject: O=Government Root Certification Authority +# Label: "Taiwan GRCA" +# Serial: 42023070807708724159991140556527066870 +# MD5 Fingerprint: 37:85:44:53:32:45:1f:20:f0:f3:95:e1:25:c4:43:4e +# SHA1 Fingerprint: f4:8b:11:bf:de:ab:be:94:54:20:71:e6:41:de:6b:be:88:2b:40:b9 +# SHA256 Fingerprint: 76:00:29:5e:ef:e8:5b:9e:1f:d6:24:db:76:06:2a:aa:ae:59:81:8a:54:d2:77:4c:d4:c0:b2:c0:11:31:e1:b3 +-----BEGIN CERTIFICATE----- +MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/ +MQswCQYDVQQGEwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5MB4XDTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1ow +PzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dvdmVybm1lbnQgUm9vdCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB +AJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qNw8XR +IePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1q +gQdW8or5BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKy +yhwOeYHWtXBiCAEuTk8O1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAts +F/tnyMKtsc2AtJfcdgEWFelq16TheEfOhtX7MfP6Mb40qij7cEwdScevLJ1tZqa2 +jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wovJ5pGfaENda1UhhXcSTvx +ls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7Q3hub/FC +VGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHK +YS1tB6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoH +EgKXTiCQ8P8NHuJBO9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThN +Xo+EHWbNxWCWtFJaBYmOlXqYwZE8lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1Ud +DgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNVHRMEBTADAQH/MDkGBGcqBwAE +MTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg209yewDL7MTqK +UWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ +TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyf +qzvS/3WXy6TjZwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaK +ZEk9GhiHkASfQlK3T8v+R0F2Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFE +JPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlUD7gsL0u8qV1bYH+Mh6XgUmMqvtg7 +hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6QzDxARvBMB1uUO07+1 +EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+HbkZ6Mm +nD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WX +udpVBrkk7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44Vbnz +ssQwmSNOXfJIoRIM3BKQCZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDe +LMDDav7v3Aun+kbfYNucpllQdSNpc5Oy+fwC00fmcc4QAu4njIT/rEUNE1yDMuAl +pYYsfPQS +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Assured ID Root CA" +# Serial: 17154717934120587862167794914071425081 +# MD5 Fingerprint: 87:ce:0b:7b:2a:0e:49:00:e1:58:71:9b:37:a8:93:72 +# SHA1 Fingerprint: 05:63:b8:63:0d:62:d7:5a:bb:c8:ab:1e:4b:df:b5:a8:99:b2:4d:43 +# SHA256 Fingerprint: 3e:90:99:b5:01:5e:8f:48:6c:00:bc:ea:9d:11:1e:e7:21:fa:ba:35:5a:89:bc:f1:df:69:56:1e:3d:c6:32:5c +-----BEGIN CERTIFICATE----- +MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv +b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl +cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c +JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP +mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+ +wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4 +VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/ +AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB +AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW +BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun +pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC +dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf +fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm +NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx +H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe ++o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Global Root CA" +# Serial: 10944719598952040374951832963794454346 +# MD5 Fingerprint: 79:e4:a9:84:0d:7d:3a:96:d7:c0:4f:e2:43:4c:89:2e +# SHA1 Fingerprint: a8:98:5d:3a:65:e5:e5:c4:b2:d7:d6:6d:40:c6:dd:2f:b1:9c:54:36 +# SHA256 Fingerprint: 43:48:a0:e9:44:4c:78:cb:26:5e:05:8d:5e:89:44:b4:d8:4f:96:62:bd:26:db:25:7f:89:34:a4:43:c7:01:61 +-----BEGIN CERTIFICATE----- +MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD +QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT +MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j +b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB +CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97 +nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt +43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P +T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4 +gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO +BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR +TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw +DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr +hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg +06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF +PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls +YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk +CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert High Assurance EV Root CA" +# Serial: 3553400076410547919724730734378100087 +# MD5 Fingerprint: d4:74:de:57:5c:39:b2:d3:9c:85:83:c5:c0:65:49:8a +# SHA1 Fingerprint: 5f:b7:ee:06:33:e2:59:db:ad:0c:4c:9a:e6:d3:8f:1a:61:c7:dc:25 +# SHA256 Fingerprint: 74:31:e5:f4:c3:c1:ce:46:90:77:4f:0b:61:e0:54:40:88:3b:a9:a0:1e:d0:0b:a6:ab:d7:80:6e:d3:b1:18:cf +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j +ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL +MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 +LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug +RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm ++9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW +PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM +xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB +Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3 +hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg +EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA +FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec +nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z +eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF +hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2 +Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe +vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep ++OkuE6N36B9K +-----END CERTIFICATE----- + +# Issuer: CN=DST Root CA X3 O=Digital Signature Trust Co. +# Subject: CN=DST Root CA X3 O=Digital Signature Trust Co. +# Label: "DST Root CA X3" +# Serial: 91299735575339953335919266965803778155 +# MD5 Fingerprint: 41:03:52:dc:0f:f7:50:1b:16:f0:02:8e:ba:6f:45:c5 +# SHA1 Fingerprint: da:c9:02:4f:54:d8:f6:df:94:93:5f:b1:73:26:38:ca:6a:d7:7c:13 +# SHA256 Fingerprint: 06:87:26:03:31:a7:24:03:d9:09:f1:05:e6:9b:cf:0d:32:e1:bd:24:93:ff:c6:d9:20:6d:11:bc:d6:77:07:39 +-----BEGIN CERTIFICATE----- +MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/ +MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT +DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow +PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD +Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O +rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq +OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b +xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw +7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD +aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV +HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG +SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69 +ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr +AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz +R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5 +JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo +Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ +-----END CERTIFICATE----- + +# Issuer: CN=SwissSign Gold CA - G2 O=SwissSign AG +# Subject: CN=SwissSign Gold CA - G2 O=SwissSign AG +# Label: "SwissSign Gold CA - G2" +# Serial: 13492815561806991280 +# MD5 Fingerprint: 24:77:d9:a8:91:d1:3b:fa:88:2d:c2:ff:f8:cd:33:93 +# SHA1 Fingerprint: d8:c5:38:8a:b7:30:1b:1b:6e:d4:7a:e6:45:25:3a:6f:9f:1a:27:61 +# SHA256 Fingerprint: 62:dd:0b:e9:b9:f5:0a:16:3e:a0:f8:e7:5c:05:3b:1e:ca:57:ea:55:c8:68:8f:64:7c:68:81:f2:c8:35:7b:95 +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +# Issuer: CN=SwissSign Silver CA - G2 O=SwissSign AG +# Subject: CN=SwissSign Silver CA - G2 O=SwissSign AG +# Label: "SwissSign Silver CA - G2" +# Serial: 5700383053117599563 +# MD5 Fingerprint: e0:06:a1:c9:7d:cf:c9:fc:0d:c0:56:75:96:d8:62:13 +# SHA1 Fingerprint: 9b:aa:e5:9f:56:ee:21:cb:43:5a:be:25:93:df:a7:f0:40:d1:1d:cb +# SHA256 Fingerprint: be:6c:4d:a2:bb:b9:ba:59:b6:f3:93:97:68:37:42:46:c3:c0:05:99:3f:a9:8f:02:0d:1d:ed:be:d4:8a:81:d5 +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +# Issuer: CN=GeoTrust Primary Certification Authority O=GeoTrust Inc. +# Subject: CN=GeoTrust Primary Certification Authority O=GeoTrust Inc. +# Label: "GeoTrust Primary Certification Authority" +# Serial: 32798226551256963324313806436981982369 +# MD5 Fingerprint: 02:26:c3:01:5e:08:30:37:43:a9:d0:7d:cf:37:e6:bf +# SHA1 Fingerprint: 32:3c:11:8e:1b:f7:b8:b6:52:54:e2:e2:10:0d:d6:02:90:37:f0:96 +# SHA256 Fingerprint: 37:d5:10:06:c5:12:ea:ab:62:64:21:f1:ec:8c:92:01:3f:c5:f8:2a:e9:8e:e5:33:eb:46:19:b8:de:b4:d0:6c +-----BEGIN CERTIFICATE----- +MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY +MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo +R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx +MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK +Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9 +AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA +ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0 +7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W +kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI +mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G +A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ +KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1 +6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl +4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K +oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj +UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU +AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= +-----END CERTIFICATE----- + +# Issuer: CN=thawte Primary Root CA O=thawte, Inc. OU=Certification Services Division/(c) 2006 thawte, Inc. - For authorized use only +# Subject: CN=thawte Primary Root CA O=thawte, Inc. OU=Certification Services Division/(c) 2006 thawte, Inc. - For authorized use only +# Label: "thawte Primary Root CA" +# Serial: 69529181992039203566298953787712940909 +# MD5 Fingerprint: 8c:ca:dc:0b:22:ce:f5:be:72:ac:41:1a:11:a8:d8:12 +# SHA1 Fingerprint: 91:c6:d6:ee:3e:8a:c8:63:84:e5:48:c2:99:29:5c:75:6c:81:7b:81 +# SHA256 Fingerprint: 8d:72:2f:81:a9:c1:13:c0:79:1d:f1:36:a2:96:6d:b2:6c:95:0a:97:1d:b4:6b:41:99:f4:ea:54:b7:8b:fb:9f +-----BEGIN CERTIFICATE----- +MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB +qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf +Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw +MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV +BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw +NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j +LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG +A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl +IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs +W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta +3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk +6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6 +Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J +NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP +r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU +DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz +YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX +xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2 +/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/ +LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7 +jVaMaA== +-----END CERTIFICATE----- + +# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G5 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2006 VeriSign, Inc. - For authorized use only +# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G5 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2006 VeriSign, Inc. - For authorized use only +# Label: "VeriSign Class 3 Public Primary Certification Authority - G5" +# Serial: 33037644167568058970164719475676101450 +# MD5 Fingerprint: cb:17:e4:31:67:3e:e2:09:fe:45:57:93:f3:0a:fa:1c +# SHA1 Fingerprint: 4e:b6:d5:78:49:9b:1c:cf:5f:58:1e:ad:56:be:3d:9b:67:44:a5:e5 +# SHA256 Fingerprint: 9a:cf:ab:7e:43:c8:d8:80:d0:6b:26:2a:94:de:ee:e4:b4:65:99:89:c3:d0:ca:f1:9b:af:64:05:e4:1a:b7:df +-----BEGIN CERTIFICATE----- +MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB +yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL +ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp +U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW +ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL +MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW +ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln +biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp +U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y +aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1 +nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex +t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz +SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG +BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+ +rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/ +NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E +BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH +BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy +aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv +MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE +p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y +5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK +WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ +4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N +hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq +-----END CERTIFICATE----- + +# Issuer: CN=SecureTrust CA O=SecureTrust Corporation +# Subject: CN=SecureTrust CA O=SecureTrust Corporation +# Label: "SecureTrust CA" +# Serial: 17199774589125277788362757014266862032 +# MD5 Fingerprint: dc:32:c3:a7:6d:25:57:c7:68:09:9d:ea:2d:a9:a2:d1 +# SHA1 Fingerprint: 87:82:c6:c3:04:35:3b:cf:d2:96:92:d2:59:3e:7d:44:d9:34:ff:11 +# SHA256 Fingerprint: f1:c1:b5:0a:e5:a2:0d:d8:03:0e:c9:f6:bc:24:82:3d:d3:67:b5:25:57:59:b4:e7:1b:61:fc:e9:f7:37:5d:73 +-----BEGIN CERTIFICATE----- +MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI +MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x +FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz +MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv +cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN +AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz +Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO +0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao +wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj +7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS +8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT +BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg +JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC +NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3 +6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/ +3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm +D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS +CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR +3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= +-----END CERTIFICATE----- + +# Issuer: CN=Secure Global CA O=SecureTrust Corporation +# Subject: CN=Secure Global CA O=SecureTrust Corporation +# Label: "Secure Global CA" +# Serial: 9751836167731051554232119481456978597 +# MD5 Fingerprint: cf:f4:27:0d:d4:ed:dc:65:16:49:6d:3d:da:bf:6e:de +# SHA1 Fingerprint: 3a:44:73:5a:e5:81:90:1f:24:86:61:46:1e:3b:9c:c4:5f:f5:3a:1b +# SHA256 Fingerprint: 42:00:f5:04:3a:c8:59:0e:bb:52:7d:20:9e:d1:50:30:29:fb:cb:d4:1c:a1:b5:06:ec:27:f1:5a:de:7d:ac:69 +-----BEGIN CERTIFICATE----- +MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK +MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x +GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx +MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg +Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ +iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa +/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ +jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI +HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7 +sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w +gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw +KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG +AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L +URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO +H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm +I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY +iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc +f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW +-----END CERTIFICATE----- + +# Issuer: CN=COMODO Certification Authority O=COMODO CA Limited +# Subject: CN=COMODO Certification Authority O=COMODO CA Limited +# Label: "COMODO Certification Authority" +# Serial: 104350513648249232941998508985834464573 +# MD5 Fingerprint: 5c:48:dc:f7:42:72:ec:56:94:6d:1c:cc:71:35:80:75 +# SHA1 Fingerprint: 66:31:bf:9e:f7:4f:9e:b6:c9:d5:a6:0c:ba:6a:be:d1:f7:bd:ef:7b +# SHA256 Fingerprint: 0c:2c:d6:3d:f7:80:6f:a3:99:ed:e8:09:11:6b:57:5b:f8:79:89:f0:65:18:f9:80:8c:86:05:03:17:8b:af:66 +-----BEGIN CERTIFICATE----- +MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB +gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G +A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV +BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw +MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl +YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P +RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3 +UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI +2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8 +Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp ++2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+ +DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O +nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW +/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g +PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u +QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY +SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv +IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ +RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4 +zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd +BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB +ZQ== +-----END CERTIFICATE----- + +# Issuer: CN=Network Solutions Certificate Authority O=Network Solutions L.L.C. +# Subject: CN=Network Solutions Certificate Authority O=Network Solutions L.L.C. +# Label: "Network Solutions Certificate Authority" +# Serial: 116697915152937497490437556386812487904 +# MD5 Fingerprint: d3:f3:a6:16:c0:fa:6b:1d:59:b1:2d:96:4d:0e:11:2e +# SHA1 Fingerprint: 74:f8:a3:c3:ef:e7:b3:90:06:4b:83:90:3c:21:64:60:20:e5:df:ce +# SHA256 Fingerprint: 15:f0:ba:00:a3:ac:7a:f3:ac:88:4c:07:2b:10:11:a0:77:bd:77:c0:97:f4:01:64:b2:f8:59:8a:bd:83:86:0c +-----BEGIN CERTIFICATE----- +MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi +MQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu +MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3Jp +dHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJV +UzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO +ZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwz +c7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPP +OCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl +mGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnF +BgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4 +qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcw +gZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIB +BjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwu +bmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3Jp +dHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc8 +6fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/ +h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH +/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv +wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHN +pGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey +-----END CERTIFICATE----- + +# Issuer: CN=COMODO ECC Certification Authority O=COMODO CA Limited +# Subject: CN=COMODO ECC Certification Authority O=COMODO CA Limited +# Label: "COMODO ECC Certification Authority" +# Serial: 41578283867086692638256921589707938090 +# MD5 Fingerprint: 7c:62:ff:74:9d:31:53:5e:68:4a:d5:78:aa:1e:bf:23 +# SHA1 Fingerprint: 9f:74:4e:9f:2b:4d:ba:ec:0f:31:2c:50:b6:56:3b:8e:2d:93:c3:11 +# SHA256 Fingerprint: 17:93:92:7a:06:14:54:97:89:ad:ce:2f:8f:34:f7:f0:b6:6d:0f:3a:e3:a3:b8:4d:21:ec:15:db:ba:4f:ad:c7 +-----BEGIN CERTIFICATE----- +MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL +MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE +BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT +IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw +MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy +ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N +T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR +FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J +cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW +BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm +fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv +GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= +-----END CERTIFICATE----- + +# Issuer: CN=OISTE WISeKey Global Root GA CA O=WISeKey OU=Copyright (c) 2005/OISTE Foundation Endorsed +# Subject: CN=OISTE WISeKey Global Root GA CA O=WISeKey OU=Copyright (c) 2005/OISTE Foundation Endorsed +# Label: "OISTE WISeKey Global Root GA CA" +# Serial: 86718877871133159090080555911823548314 +# MD5 Fingerprint: bc:6c:51:33:a7:e9:d3:66:63:54:15:72:1b:21:92:93 +# SHA1 Fingerprint: 59:22:a1:e1:5a:ea:16:35:21:f8:98:39:6a:46:46:b0:44:1b:0f:a9 +# SHA256 Fingerprint: 41:c9:23:86:6a:b4:ca:d6:b7:ad:57:80:81:58:2e:02:07:97:a6:cb:df:4f:ff:78:ce:83:96:b3:89:37:d7:f5 +-----BEGIN CERTIFICATE----- +MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCB +ijELMAkGA1UEBhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHly +aWdodCAoYykgMjAwNTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl +ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQSBDQTAeFw0w +NTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYDVQQGEwJDSDEQMA4G +A1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIwIAYD +VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBX +SVNlS2V5IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAy0+zAJs9Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxR +VVuuk+g3/ytr6dTqvirdqFEr12bDYVxgAsj1znJ7O7jyTmUIms2kahnBAbtzptf2 +w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbDd50kc3vkDIzh2TbhmYsF +mQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ/yxViJGg +4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t9 +4B3RLoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYw +DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQw +EAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOx +SPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vImMMkQyh2I+3QZH4VFvbBsUfk2 +ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4+vg1YFkCExh8 +vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa +hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZi +Fj4A4xylNoEYokxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ +/L7fCg0= +-----END CERTIFICATE----- + +# Issuer: CN=Certigna O=Dhimyotis +# Subject: CN=Certigna O=Dhimyotis +# Label: "Certigna" +# Serial: 18364802974209362175 +# MD5 Fingerprint: ab:57:a6:5b:7d:42:82:19:b5:d8:58:26:28:5e:fd:ff +# SHA1 Fingerprint: b1:2e:13:63:45:86:a4:6f:1a:b2:60:68:37:58:2d:c4:ac:fd:94:97 +# SHA256 Fingerprint: e3:b6:a2:db:2e:d7:ce:48:84:2f:7a:c5:32:41:c7:b7:1d:54:14:4b:fb:40:c1:1f:3f:1d:0b:42:f5:ee:a1:2d +-----BEGIN CERTIFICATE----- +MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV +BAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4X +DTA3MDYyOTE1MTMwNVoXDTI3MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQ +BgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwIQ2VydGlnbmEwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7qXOEm7RFHYeGifBZ4 +QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyHGxny +gQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbw +zBfsV1/pogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q +130yGLMLLGq/jj8UEYkgDncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2 +JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKfIrjxwo1p3Po6WAbfAgMBAAGjgbwwgbkw +DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQtCRZvgHyUtVF9lo53BEw +ZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJBgNVBAYT +AkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzj +AQ/JSP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG +9w0BAQUFAAOCAQEAhQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8h +bV6lUmPOEvjvKtpv6zf+EwLHyzs+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFnc +fca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1kluPBS1xp81HlDQwY9qcEQCYsuu +HWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY1gkIl2PlwS6w +t0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw +WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== +-----END CERTIFICATE----- + +# Issuer: CN=Cybertrust Global Root O=Cybertrust, Inc +# Subject: CN=Cybertrust Global Root O=Cybertrust, Inc +# Label: "Cybertrust Global Root" +# Serial: 4835703278459682877484360 +# MD5 Fingerprint: 72:e4:4a:87:e3:69:40:80:77:ea:bc:e3:f4:ff:f0:e1 +# SHA1 Fingerprint: 5f:43:e5:b1:bf:f8:78:8c:ac:1c:c7:ca:4a:9a:c6:22:2b:cc:34:c6 +# SHA256 Fingerprint: 96:0a:df:00:63:e9:63:56:75:0c:29:65:dd:0a:08:67:da:0b:9c:bd:6e:77:71:4a:ea:fb:23:49:ab:39:3d:a3 +-----BEGIN CERTIFICATE----- +MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYG +A1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2Jh +bCBSb290MB4XDTA2MTIxNTA4MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UE +ChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBS +b290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+Mi8vRRQZhP/8NN5 +7CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW0ozS +J8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2y +HLtgwEZLAfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iP +t3sMpTjr3kfb1V05/Iin89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNz +FtApD0mpSPCzqrdsxacwOUBdrsTiXSZT8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAY +XSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/ +MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2MDSgMqAw +hi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3Js +MB8GA1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUA +A4IBAQBW7wojoFROlZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMj +Wqd8BfP9IjsO0QbE2zZMcwSO5bAi5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUx +XOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2hO0j9n0Hq0V+09+zv+mKts2o +omcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+TX3EJIrduPuoc +A06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW +WL1WMRJOEcgh4LMRkWXbtKaIOM5V +-----END CERTIFICATE----- + +# Issuer: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority +# Subject: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority +# Label: "ePKI Root Certification Authority" +# Serial: 28956088682735189655030529057352760477 +# MD5 Fingerprint: 1b:2e:00:ca:26:06:90:3d:ad:fe:6f:15:68:d3:6b:b3 +# SHA1 Fingerprint: 67:65:0d:f1:7e:8e:7e:5b:82:40:a4:f4:56:4b:cf:e2:3d:69:c6:f0 +# SHA256 Fingerprint: c0:a6:f4:dc:63:a2:4b:fd:cf:54:ef:2a:6a:08:2a:0a:72:de:35:80:3e:2f:f5:ff:52:7a:e5:d8:72:06:df:d5 +-----BEGIN CERTIFICATE----- +MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBe +MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0 +ZC4xKjAoBgNVBAsMIWVQS0kgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe +Fw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMxMjdaMF4xCzAJBgNVBAYTAlRXMSMw +IQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEqMCgGA1UECwwhZVBL +SSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEF +AAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAH +SyZbCUNsIZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAh +ijHyl3SJCRImHJ7K2RKilTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3X +DZoTM1PRYfl61dd4s5oz9wCGzh1NlDivqOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1 +TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX12ruOzjjK9SXDrkb5wdJ +fzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0OWQqraffA +sgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uU +WH1+ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLS +nT0IFaUQAS2zMnaolQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pH +dmX2Os+PYhcZewoozRrSgx4hxyy/vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJip +NiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXiZo1jDiVN1Rmy5nk3pyKdVDEC +AwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/QkqiMAwGA1UdEwQF +MAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH +ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGB +uvl2ICO1J2B01GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6Yl +PwZpVnPDimZI+ymBV3QGypzqKOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkP +JXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdVxrsStZf0X4OFunHB2WyBEXYKCrC/ +gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEPNXubrjlpC2JgQCA2 +j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+rGNm6 +5ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUB +o2M3IUxExJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS +/jQ6fbjpKdx2qcgw+BRxgMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2z +Gp1iro2C6pSe3VkQw63d4k3jMdXH7OjysP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTE +W9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmODBCEIZ43ygknQW/2xzQ+D +hNQ+IIX3Sj0rnP0qCglN6oH4EZw= +-----END CERTIFICATE----- + +# Issuer: O=certSIGN OU=certSIGN ROOT CA +# Subject: O=certSIGN OU=certSIGN ROOT CA +# Label: "certSIGN ROOT CA" +# Serial: 35210227249154 +# MD5 Fingerprint: 18:98:c0:d6:e9:3a:fc:f9:b0:f5:0c:f7:4b:01:44:17 +# SHA1 Fingerprint: fa:b7:ee:36:97:26:62:fb:2d:b0:2a:f6:bf:03:fd:e8:7c:4b:2f:9b +# SHA256 Fingerprint: ea:a9:62:c4:fa:4a:6b:af:eb:e4:15:19:6d:35:1c:cd:88:8d:4f:53:f3:fa:8a:e6:d7:c4:66:a9:4e:60:42:bb +-----BEGIN CERTIFICATE----- +MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYT +AlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBD +QTAeFw0wNjA3MDQxNzIwMDRaFw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJP +MREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTCC +ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7IJUqOtdu0KBuqV5Do +0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHHrfAQ +UySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5d +RdY4zTW2ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQ +OA7+j0xbm0bqQfWwCHTD0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwv +JoIQ4uNllAoEwF73XVv4EOLQunpL+943AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08C +AwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAcYwHQYDVR0O +BBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IBAQA+0hyJ +LjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecY +MnQ8SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ +44gx+FkagQnIl6Z0x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6I +Jd1hJyMctTEHBDa0GpC9oHRxUIltvBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNw +i/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7NzTogVZ96edhBiIL5VaZVDADlN +9u6wWk5JRFRYX0KD +-----END CERTIFICATE----- + +# Issuer: CN=GeoTrust Primary Certification Authority - G3 O=GeoTrust Inc. OU=(c) 2008 GeoTrust Inc. - For authorized use only +# Subject: CN=GeoTrust Primary Certification Authority - G3 O=GeoTrust Inc. OU=(c) 2008 GeoTrust Inc. - For authorized use only +# Label: "GeoTrust Primary Certification Authority - G3" +# Serial: 28809105769928564313984085209975885599 +# MD5 Fingerprint: b5:e8:34:36:c9:10:44:58:48:70:6d:2e:83:d4:b8:05 +# SHA1 Fingerprint: 03:9e:ed:b8:0b:e7:a0:3c:69:53:89:3b:20:d2:d9:32:3a:4c:2a:fd +# SHA256 Fingerprint: b4:78:b8:12:25:0d:f8:78:63:5c:2a:a7:ec:7d:15:5e:aa:62:5e:e8:29:16:e2:cd:29:43:61:88:6c:d1:fb:d4 +-----BEGIN CERTIFICATE----- +MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCB +mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT +MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s +eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv +cml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJ +BgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg +MjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0 +BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg +LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz ++uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/BGvESyiaHAKAxJcCGVn2TAppMSAmUm +hsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdEc5IiaacDiGydY8hS2pgn +5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/W +JmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exAL +DmKudlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZC +huOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw +HQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IB +AQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTTOd8lNNTB +zU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQN +kv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD +AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUH +SJsMC8tJP33st/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2G +spki4cErx5z481+oghLrGREt +-----END CERTIFICATE----- + +# Issuer: CN=thawte Primary Root CA - G2 O=thawte, Inc. OU=(c) 2007 thawte, Inc. - For authorized use only +# Subject: CN=thawte Primary Root CA - G2 O=thawte, Inc. OU=(c) 2007 thawte, Inc. - For authorized use only +# Label: "thawte Primary Root CA - G2" +# Serial: 71758320672825410020661621085256472406 +# MD5 Fingerprint: 74:9d:ea:60:24:c4:fd:22:53:3e:cc:3a:72:d9:29:4f +# SHA1 Fingerprint: aa:db:bc:22:23:8f:c4:01:a1:27:bb:38:dd:f4:1d:db:08:9e:f0:12 +# SHA256 Fingerprint: a4:31:0d:50:af:18:a6:44:71:90:37:2a:86:af:af:8b:95:1f:fb:43:1d:83:7f:1e:56:88:b4:59:71:ed:15:57 +-----BEGIN CERTIFICATE----- +MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDEL +MAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMp +IDIwMDcgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAi +BgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMjAeFw0wNzExMDUwMDAw +MDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh +d3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBGb3Ig +YXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9v +dCBDQSAtIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/ +BebfowJPDQfGAFG6DAJSLSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6 +papu+7qzcMBniKI11KOasf2twu8x+qi58/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUmtgAMADna3+FGO6Lts6K +DPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUNG4k8VIZ3 +KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41ox +XZ3Krr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg== +-----END CERTIFICATE----- + +# Issuer: CN=thawte Primary Root CA - G3 O=thawte, Inc. OU=Certification Services Division/(c) 2008 thawte, Inc. - For authorized use only +# Subject: CN=thawte Primary Root CA - G3 O=thawte, Inc. OU=Certification Services Division/(c) 2008 thawte, Inc. - For authorized use only +# Label: "thawte Primary Root CA - G3" +# Serial: 127614157056681299805556476275995414779 +# MD5 Fingerprint: fb:1b:5d:43:8a:94:cd:44:c6:76:f2:43:4b:47:e7:31 +# SHA1 Fingerprint: f1:8b:53:8d:1b:e9:03:b6:a6:f0:56:43:5b:17:15:89:ca:f3:6b:f2 +# SHA256 Fingerprint: 4b:03:f4:58:07:ad:70:f2:1b:fc:2c:ae:71:c9:fd:e4:60:4c:06:4c:f5:ff:b6:86:ba:e5:db:aa:d7:fd:d3:4c +-----BEGIN CERTIFICATE----- +MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCB +rjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf +Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw +MDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNV +BAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0wODA0MDIwMDAwMDBa +Fw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3Rl +LCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9u +MTgwNgYDVQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXpl +ZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEcz +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr8nLPvb2FvdeHsbnndm +gcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2AtP0LMqmsywCPLLEHd5N/8 +YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC+BsUa0Lf +b1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS9 +9irY7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2S +zhkGcuYMXDhpxwTWvGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUk +OQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV +HQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJKoZIhvcNAQELBQADggEBABpA +2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweKA3rD6z8KLFIW +oCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu +t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7c +KUGRIjxpp7sC8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fM +m7v/OeZWYdMKp8RcTGB7BXcmer/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZu +MdRAGmI0Nj81Aa6sY6A= +-----END CERTIFICATE----- + +# Issuer: CN=GeoTrust Primary Certification Authority - G2 O=GeoTrust Inc. OU=(c) 2007 GeoTrust Inc. - For authorized use only +# Subject: CN=GeoTrust Primary Certification Authority - G2 O=GeoTrust Inc. OU=(c) 2007 GeoTrust Inc. - For authorized use only +# Label: "GeoTrust Primary Certification Authority - G2" +# Serial: 80682863203381065782177908751794619243 +# MD5 Fingerprint: 01:5e:d8:6b:bd:6f:3d:8e:a1:31:f8:12:e0:98:73:6a +# SHA1 Fingerprint: 8d:17:84:d5:37:f3:03:7d:ec:70:fe:57:8b:51:9a:99:e6:10:d7:b0 +# SHA256 Fingerprint: 5e:db:7a:c4:3b:82:a0:6a:87:61:e8:d7:be:49:79:eb:f2:61:1f:7d:d7:9b:f9:1c:1c:6b:56:6a:21:9e:d7:66 +-----BEGIN CERTIFICATE----- +MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDEL +MAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChj +KSAyMDA3IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2 +MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 +eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1OVowgZgxCzAJBgNV +BAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykgMjAw +NyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNV +BAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH +MjB2MBAGByqGSM49AgEGBSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcL +So17VDs6bl8VAsBQps8lL33KSLjHUGMcKiEIfJo22Av+0SbFWDEwKCXzXV2juLal +tJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO +BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+EVXVMAoG +CCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGT +qQ7mndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBucz +rD6ogRLQy7rQkgu2npaqBA+K +-----END CERTIFICATE----- + +# Issuer: CN=VeriSign Universal Root Certification Authority O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2008 VeriSign, Inc. - For authorized use only +# Subject: CN=VeriSign Universal Root Certification Authority O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2008 VeriSign, Inc. - For authorized use only +# Label: "VeriSign Universal Root Certification Authority" +# Serial: 85209574734084581917763752644031726877 +# MD5 Fingerprint: 8e:ad:b5:01:aa:4d:81:e4:8c:1d:d1:e1:14:00:95:19 +# SHA1 Fingerprint: 36:79:ca:35:66:87:72:30:4d:30:a5:fb:87:3b:0f:a7:7b:b7:0d:54 +# SHA256 Fingerprint: 23:99:56:11:27:a5:71:25:de:8c:ef:ea:61:0d:df:2f:a0:78:b5:c8:06:7f:4e:82:82:90:bf:b8:60:e8:4b:3c +-----BEGIN CERTIFICATE----- +MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCB +vTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL +ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJp +U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9W +ZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe +Fw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJVUzEX +MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0 +IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9y +IGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNh +bCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj1mCOkdeQmIN65lgZOIzF +9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGPMiJhgsWH +H26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+H +LL729fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN +/BMReYTtXlT2NJ8IAfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPT +rJ9VAMf2CGqUuV/c4DPxhGD5WycRtPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1Ud +EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0GCCsGAQUFBwEMBGEwX6FdoFsw +WTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2Oa8PPgGrUSBgs +exkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud +DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4 +sAPmLGd75JR3Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+ +seQxIcaBlVZaDrHC1LGmWazxY8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz +4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTxP/jgdFcrGJ2BtMQo2pSXpXDrrB2+ +BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+PwGZsY6rp2aQW9IHR +lRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4mJO3 +7M2CYfE45k+XmCpajQ== +-----END CERTIFICATE----- + +# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G4 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2007 VeriSign, Inc. - For authorized use only +# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G4 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2007 VeriSign, Inc. - For authorized use only +# Label: "VeriSign Class 3 Public Primary Certification Authority - G4" +# Serial: 63143484348153506665311985501458640051 +# MD5 Fingerprint: 3a:52:e1:e7:fd:6f:3a:e3:6f:f3:6f:99:1b:f9:22:41 +# SHA1 Fingerprint: 22:d5:d8:df:8f:02:31:d1:8d:f7:9d:b7:cf:8a:2d:64:c9:3f:6c:3a +# SHA256 Fingerprint: 69:dd:d7:ea:90:bb:57:c9:3e:13:5d:c8:5e:a6:fc:d5:48:0b:60:32:39:bd:c4:54:fc:75:8b:2a:26:cf:7f:79 +-----BEGIN CERTIFICATE----- +MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjEL +MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW +ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2ln +biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp +U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y +aXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjELMAkG +A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJp +U2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwg +SW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2ln +biBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8Utpkmw4tXNherJI9/gHm +GUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGzrl0Bp3ve +fLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJ +aW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYj +aHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMW +kf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMDA2gAMGUCMGYhDBgmYFo4e1ZC +4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIxAJw9SDkjOVga +FRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA== +-----END CERTIFICATE----- + +# Issuer: CN=NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny O=NetLock Kft. OU=Tan\xfas\xedtv\xe1nykiad\xf3k (Certification Services) +# Subject: CN=NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny O=NetLock Kft. OU=Tan\xfas\xedtv\xe1nykiad\xf3k (Certification Services) +# Label: "NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny" +# Serial: 80544274841616 +# MD5 Fingerprint: c5:a1:b7:ff:73:dd:d6:d7:34:32:18:df:fc:3c:ad:88 +# SHA1 Fingerprint: 06:08:3f:59:3f:15:a1:04:a0:69:a4:6b:a9:03:d0:06:b7:97:09:91 +# SHA256 Fingerprint: 6c:61:da:c3:a2:de:f0:31:50:6b:e0:36:d2:a6:fe:40:19:94:fb:d1:3d:f9:c8:d4:66:59:92:74:c4:46:ec:98 +-----BEGIN CERTIFICATE----- +MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQG +EwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3 +MDUGA1UECwwuVGFuw7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNl +cnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBBcmFueSAoQ2xhc3MgR29sZCkgRsWR +dGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgxMjA2MTUwODIxWjCB +pzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxOZXRM +b2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlm +aWNhdGlvbiBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNz +IEdvbGQpIEbFkXRhbsO6c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAxCRec75LbRTDofTjl5Bu0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrT +lF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw/HpYzY6b7cNGbIRwXdrz +AZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAkH3B5r9s5 +VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRG +ILdwfzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2 +BJtr+UBdADTHLpl1neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAG +AQH/AgEEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2M +U9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwWqZw8UQCgwBEIBaeZ5m8BiFRh +bvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTtaYtOUZcTh5m2C ++C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC +bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2F +uLjbvrW5KfnaNwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2 +XjG4Kvte9nHfRCaexOYNkbQudZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= +-----END CERTIFICATE----- + +# Issuer: CN=Staat der Nederlanden Root CA - G2 O=Staat der Nederlanden +# Subject: CN=Staat der Nederlanden Root CA - G2 O=Staat der Nederlanden +# Label: "Staat der Nederlanden Root CA - G2" +# Serial: 10000012 +# MD5 Fingerprint: 7c:a5:0f:f8:5b:9a:7d:6d:30:ae:54:5a:e3:42:a2:8a +# SHA1 Fingerprint: 59:af:82:79:91:86:c7:b4:75:07:cb:cf:03:57:46:eb:04:dd:b7:16 +# SHA256 Fingerprint: 66:8c:83:94:7d:a6:3b:72:4b:ec:e1:74:3c:31:a0:e6:ae:d0:db:8e:c5:b3:1b:e3:77:bb:78:4f:91:b6:71:6f +-----BEGIN CERTIFICATE----- +MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO +TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh +dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oX +DTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl +ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv +b3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ5291 +qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8Sp +uOUfiUtnvWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPU +Z5uW6M7XxgpT0GtJlvOjCwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvE +pMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiile7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp +5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCROME4HYYEhLoaJXhena/M +UGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpICT0ugpTN +GmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy +5V6548r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv +6q012iDTiIJh8BIitrzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEK +eN5KzlW/HdXZt1bv8Hb/C3m1r737qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6 +B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMBAAGjgZcwgZQwDwYDVR0TAQH/ +BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcCARYxaHR0cDov +L3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV +HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqG +SIb3DQEBCwUAA4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLyS +CZa59sCrI2AGeYwRTlHSeYAz+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen +5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwjf/ST7ZwaUb7dRUG/kSS0H4zpX897 +IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaNkqbG9AclVMwWVxJK +gnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfkCpYL ++63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxL +vJxxcypFURmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkm +bEgeqmiSBeGCc1qb3AdbCG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvk +N1trSt8sV4pAWja63XVECDdCcAz+3F4hoKOKwJCcaNpQ5kUQR3i2TtJlycM33+FC +Y7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoVIPVVYpbtbZNQvOSqeK3Z +ywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm66+KAQ== +-----END CERTIFICATE----- + +# Issuer: CN=Hongkong Post Root CA 1 O=Hongkong Post +# Subject: CN=Hongkong Post Root CA 1 O=Hongkong Post +# Label: "Hongkong Post Root CA 1" +# Serial: 1000 +# MD5 Fingerprint: a8:0d:6f:39:78:b9:43:6d:77:42:6d:98:5a:cc:23:ca +# SHA1 Fingerprint: d6:da:a8:20:8d:09:d2:15:4d:24:b5:2f:cb:34:6e:b2:58:b2:8a:58 +# SHA256 Fingerprint: f9:e6:7d:33:6c:51:00:2a:c0:54:c6:32:02:2d:66:dd:a2:e7:e3:ff:f1:0a:d0:61:ed:31:d8:bb:b4:10:cf:b2 +-----BEGIN CERTIFICATE----- +MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsx +FjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3Qg +Um9vdCBDQSAxMB4XDTAzMDUxNTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkG +A1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdr +b25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1ApzQ +jVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEn +PzlTCeqrauh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjh +ZY4bXSNmO7ilMlHIhqqhqZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9 +nnV0ttgCXjqQesBCNnLsak3c78QA3xMYV18meMjWCnl3v/evt3a5pQuEF10Q6m/h +q5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNVHRMBAf8ECDAGAQH/AgED +MA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7ih9legYsC +mEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI3 +7piol7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clB +oiMBdDhViw+5LmeiIAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJs +EhTkYY2sEJCehFC78JZvRZ+K88psT/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpO +fMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilTc4afU9hDDl3WY4JxHYB0yvbi +AmvZWg== +-----END CERTIFICATE----- + +# Issuer: CN=SecureSign RootCA11 O=Japan Certification Services, Inc. +# Subject: CN=SecureSign RootCA11 O=Japan Certification Services, Inc. +# Label: "SecureSign RootCA11" +# Serial: 1 +# MD5 Fingerprint: b7:52:74:e2:92:b4:80:93:f2:75:e4:cc:d7:f2:ea:26 +# SHA1 Fingerprint: 3b:c4:9f:48:f8:f3:73:a0:9c:1e:bd:f8:5b:b1:c3:65:c7:d8:11:b3 +# SHA256 Fingerprint: bf:0f:ee:fb:9e:3a:58:1a:d5:f9:e9:db:75:89:98:57:43:d2:61:08:5c:4d:31:4f:6f:5d:72:59:aa:42:16:12 +-----BEGIN CERTIFICATE----- +MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDEr +MCkGA1UEChMiSmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoG +A1UEAxMTU2VjdXJlU2lnbiBSb290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0 +MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSswKQYDVQQKEyJKYXBhbiBDZXJ0aWZp +Y2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1cmVTaWduIFJvb3RD +QTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvLTJsz +i1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8 +h9uuywGOwvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOV +MdrAG/LuYpmGYz+/3ZMqg6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9 +UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rPO7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni +8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitAbpSACW22s293bzUIUPsC +h8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZXt94wDgYD +VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB +AKChOBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xm +KbabfSVSSUOrTC4rbnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQ +X5Ucv+2rIrVls4W6ng+4reV6G4pQOh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWr +QbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01y8hSyn+B/tlr0/cR7SXf+Of5 +pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061lgeLKBObjBmN +QSdJQO7e5iNEOdyhIta6A/I= +-----END CERTIFICATE----- + +# Issuer: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd. +# Subject: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd. +# Label: "Microsec e-Szigno Root CA 2009" +# Serial: 14014712776195784473 +# MD5 Fingerprint: f8:49:f4:03:bc:44:2d:83:be:48:69:7d:29:64:fc:b1 +# SHA1 Fingerprint: 89:df:74:fe:5c:f4:0f:4a:80:f9:e3:37:7d:54:da:91:e1:01:31:8e +# SHA256 Fingerprint: 3c:5f:81:fe:a5:fa:b8:2c:64:bf:a2:ea:ec:af:cd:e8:e0:77:fc:86:20:a7:ca:e5:37:16:3d:f3:6e:db:f3:78 +-----BEGIN CERTIFICATE----- +MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYD +VQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0 +ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0G +CSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTAeFw0wOTA2MTYxMTMwMThaFw0y +OTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3Qx +FjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3pp +Z25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o +dTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvP +kd6mJviZpWNwrZuuyjNAfW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tc +cbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG0IMZfcChEhyVbUr02MelTTMuhTlAdX4U +fIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKApxn1ntxVUwOXewdI/5n7 +N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm1HxdrtbC +xkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1 ++rUCAwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G +A1UdDgQWBBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPM +Pcu1SCOhGnqmKrs0aDAbBgNVHREEFDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqG +SIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0olZMEyL/azXm4Q5DwpL7v8u8h +mLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfXI/OMn74dseGk +ddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 +tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c +2Pm2G2JwCz02yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5t +HMN1Rq41Bab2XD0h7lbwyYIiLXpUq3DDfSJlgnCW +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 +# Label: "GlobalSign Root CA - R3" +# Serial: 4835703278459759426209954 +# MD5 Fingerprint: c5:df:b8:49:ca:05:13:55:ee:2d:ba:1a:c3:3e:b0:28 +# SHA1 Fingerprint: d6:9b:56:11:48:f0:1c:77:c5:45:78:c1:09:26:df:5b:85:69:76:ad +# SHA256 Fingerprint: cb:b5:22:d7:b7:f1:27:ad:6a:01:13:86:5b:df:1c:d4:10:2e:7d:07:59:af:63:5a:7c:f4:72:0d:c9:63:c5:3b +-----BEGIN CERTIFICATE----- +MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G +A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp +Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4 +MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG +A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8 +RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT +gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm +KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd +QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ +XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw +DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o +LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU +RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp +jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK +6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX +mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs +Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH +WD9f +-----END CERTIFICATE----- + +# Issuer: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 +# Subject: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 +# Label: "Autoridad de Certificacion Firmaprofesional CIF A62634068" +# Serial: 6047274297262753887 +# MD5 Fingerprint: 73:3a:74:7a:ec:bb:a3:96:a6:c2:e4:e2:c8:9b:c0:c3 +# SHA1 Fingerprint: ae:c5:fb:3f:c8:e1:bf:c4:e5:4f:03:07:5a:9a:e8:00:b7:f7:b6:fa +# SHA256 Fingerprint: 04:04:80:28:bf:1f:28:64:d4:8f:9a:d4:d8:32:94:36:6a:82:88:56:55:3f:3b:14:30:3f:90:14:7f:5d:40:ef +-----BEGIN CERTIFICATE----- +MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UE +BhMCRVMxQjBABgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1h +cHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEy +MzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUg +Q2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBBNjI2MzQwNjgwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDDUtd9 +thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQM +cas9UX4PB99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefG +L9ItWY16Ck6WaVICqjaY7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15i +NA9wBj4gGFrO93IbJWyTdBSTo3OxDqqHECNZXyAFGUftaI6SEspd/NYrspI8IM/h +X68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyIplD9amML9ZMWGxmPsu2b +m8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctXMbScyJCy +Z/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirja +EbsXLZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/T +KI8xWVvTyQKmtFLKbpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF +6NkBiDkal4ZkQdU7hwxu+g/GvUgUvzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVh +OSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYD +VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNHDhpkLzCBpgYD +VR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp +cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBv +ACAAZABlACAAbABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBl +AGwAbwBuAGEAIAAwADgAMAAxADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF +661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx51tkljYyGOylMnfX40S2wBEqgLk9 +am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qkR71kMrv2JYSiJ0L1 +ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaPT481 +PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS +3a/DTg4fJl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5k +SeTy36LssUzAKh3ntLFlosS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF +3dvd6qJ2gHN99ZwExEWN57kci57q13XRcrHedUTnQn3iV2t93Jm8PYMo6oCTjcVM +ZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoRsaS8I8nkvof/uZS2+F0g +StRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTDKCOM/icz +Q0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQB +jLMi6Et8Vcad+qMUu2WFbm5PEn4KPJ2V +-----END CERTIFICATE----- + +# Issuer: CN=Izenpe.com O=IZENPE S.A. +# Subject: CN=Izenpe.com O=IZENPE S.A. +# Label: "Izenpe.com" +# Serial: 917563065490389241595536686991402621 +# MD5 Fingerprint: a6:b0:cd:85:80:da:5c:50:34:a3:39:90:2f:55:67:73 +# SHA1 Fingerprint: 2f:78:3d:25:52:18:a7:4a:65:39:71:b5:2c:a2:9c:45:15:6f:e9:19 +# SHA256 Fingerprint: 25:30:cc:8e:98:32:15:02:ba:d9:6f:9b:1f:ba:1b:09:9e:2d:29:9e:0f:45:48:bb:91:4f:36:3b:c0:d4:53:1f +-----BEGIN CERTIFICATE----- +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=Chambers of Commerce Root - 2008 O=AC Camerfirma S.A. +# Subject: CN=Chambers of Commerce Root - 2008 O=AC Camerfirma S.A. +# Label: "Chambers of Commerce Root - 2008" +# Serial: 11806822484801597146 +# MD5 Fingerprint: 5e:80:9e:84:5a:0e:65:0b:17:02:f3:55:18:2a:3e:d7 +# SHA1 Fingerprint: 78:6a:74:ac:76:ab:14:7f:9c:6a:30:50:ba:9e:a8:7e:fe:9a:ce:3c +# SHA256 Fingerprint: 06:3e:4a:fa:c4:91:df:d3:32:f3:08:9b:85:42:e9:46:17:d8:93:d7:fe:94:4e:10:a7:93:7e:e2:9d:96:93:c0 +-----BEGIN CERTIFICATE----- +MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYD +VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0 +IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3 +MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xKTAnBgNVBAMTIENoYW1iZXJz +IG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEyMjk1MFoXDTM4MDcz +MTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBj +dXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIw +EAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEp +MCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0G +CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW9 +28sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKAXuFixrYp4YFs8r/lfTJq +VKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorjh40G072Q +DuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR +5gN/ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfL +ZEFHcpOrUMPrCXZkNNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05a +Sd+pZgvMPMZ4fKecHePOjlO+Bd5gD2vlGts/4+EhySnB8esHnFIbAURRPHsl18Tl +UlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331lubKgdaX8ZSD6e2wsWsSaR6s ++12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ0wlf2eOKNcx5 +Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj +ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAx +hduub+84Mxh2EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNV +HQ4EFgQU+SSsD7K1+HnA+mCIG8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1 ++HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpN +YWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29t +L2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVy +ZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAt +IDIwMDiCCQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRV +HSAAMCowKAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20w +DQYJKoZIhvcNAQEFBQADggIBAJASryI1wqM58C7e6bXpeHxIvj99RZJe6dqxGfwW +PJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH3qLPaYRgM+gQDROpI9CF +5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbURWpGqOt1 +glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaH +FoI6M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2 +pSB7+R5KBWIBpih1YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MD +xvbxrN8y8NmBGuScvfaAFPDRLLmF9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QG +tjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcKzBIKinmwPQN/aUv0NCB9szTq +jktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvGnrDQWzilm1De +fhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg +OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZ +d0jQ +-----END CERTIFICATE----- + +# Issuer: CN=Global Chambersign Root - 2008 O=AC Camerfirma S.A. +# Subject: CN=Global Chambersign Root - 2008 O=AC Camerfirma S.A. +# Label: "Global Chambersign Root - 2008" +# Serial: 14541511773111788494 +# MD5 Fingerprint: 9e:80:ff:78:01:0c:2e:c1:36:bd:fe:96:90:6e:08:f3 +# SHA1 Fingerprint: 4a:bd:ee:ec:95:0d:35:9c:89:ae:c7:52:a1:2c:5b:29:f6:d6:aa:0c +# SHA256 Fingerprint: 13:63:35:43:93:34:a7:69:80:16:a0:d3:24:de:72:28:4e:07:9d:7b:52:20:bb:8f:bd:74:78:16:ee:be:ba:ca +-----BEGIN CERTIFICATE----- +MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYD +VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0 +IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3 +MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD +aGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMxNDBaFw0zODA3MzEx +MjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3Vy +cmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAG +A1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAl +BgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZI +hvcNAQEBBQADggIPADCCAgoCggIBAMDfVtPkOpt2RbQT2//BthmLN0EYlVJH6xed +KYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXfXjaOcNFccUMd2drvXNL7 +G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0ZJJ0YPP2 +zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4 +ddPB/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyG +HoiMvvKRhI9lNNgATH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2 +Id3UwD2ln58fQ1DJu7xsepeY7s2MH/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3V +yJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfeOx2YItaswTXbo6Al/3K1dh3e +beksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSFHTynyQbehP9r +6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh +wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsog +zCtLkykPAgMBAAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQW +BBS5CcqcHtvTbDprru1U8VuTBjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDpr +ru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UEBhMCRVUxQzBBBgNVBAcTOk1hZHJp +ZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJmaXJtYS5jb20vYWRk +cmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJmaXJt +YSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiC +CQDJzdPp1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCow +KAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZI +hvcNAQEFBQADggIBAICIf3DekijZBZRG/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZ +UohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6ReAJ3spED8IXDneRRXoz +X1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/sdZ7LoR/x +fxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVz +a2Mg9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yyd +Yhz2rXzdpjEetrHHfoUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMd +SqlapskD7+3056huirRXhOukP9DuqqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9O +AP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETrP3iZ8ntxPjzxmKfFGBI/5rso +M0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVqc5iJWzouE4ge +v8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z +09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B +-----END CERTIFICATE----- + +# Issuer: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. +# Subject: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. +# Label: "Go Daddy Root Certificate Authority - G2" +# Serial: 0 +# MD5 Fingerprint: 80:3a:bc:22:c1:e6:fb:8d:9b:3b:27:4a:32:1b:9a:01 +# SHA1 Fingerprint: 47:be:ab:c9:22:ea:e8:0e:78:78:34:62:a7:9f:45:c2:54:fd:e6:8b +# SHA256 Fingerprint: 45:14:0b:32:47:eb:9c:c8:c5:b4:f0:d7:b5:30:91:f7:32:92:08:9e:6e:5a:63:e2:74:9d:d3:ac:a9:19:8e:da +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx +EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT +EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp +ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz +NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH +EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE +AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD +E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH +/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy +DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh +GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR +tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA +AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE +FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX +WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu +9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr +gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo +2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO +LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI +4uJEvlz36hz1 +-----END CERTIFICATE----- + +# Issuer: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. +# Subject: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. +# Label: "Starfield Root Certificate Authority - G2" +# Serial: 0 +# MD5 Fingerprint: d6:39:81:c6:52:7e:96:69:fc:fc:ca:66:ed:05:f2:96 +# SHA1 Fingerprint: b5:1c:06:7c:ee:2b:0c:3d:f8:55:ab:2d:92:f4:fe:39:d4:e7:0f:0e +# SHA256 Fingerprint: 2c:e1:cb:0b:f9:d2:f9:e1:02:99:3f:be:21:51:52:c3:b2:dd:0c:ab:de:1c:68:e5:31:9b:83:91:54:db:b7:f5 +-----BEGIN CERTIFICATE----- +MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx +EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT +HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs +ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw +MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 +b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj +aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp +Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg +nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1 +HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N +Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN +dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0 +HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO +BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G +CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU +sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3 +4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg +8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K +pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1 +mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 +-----END CERTIFICATE----- + +# Issuer: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. +# Subject: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. +# Label: "Starfield Services Root Certificate Authority - G2" +# Serial: 0 +# MD5 Fingerprint: 17:35:74:af:7b:61:1c:eb:f4:f9:3c:e2:ee:40:f9:a2 +# SHA1 Fingerprint: 92:5a:8f:8d:2c:6d:04:e0:66:5f:59:6a:ff:22:d8:63:e8:25:6f:3f +# SHA256 Fingerprint: 56:8d:69:05:a2:c8:87:08:a4:b3:02:51:90:ed:cf:ed:b1:97:4a:60:6a:13:c6:e5:29:0f:cb:2a:e6:3e:da:b5 +-----BEGIN CERTIFICATE----- +MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx +EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT +HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs +ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 +MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy +ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy +dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p +OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2 +8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K +Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe +hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk +6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw +DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q +AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI +bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB +ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z +qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd +iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn +0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN +sSi6 +-----END CERTIFICATE----- + +# Issuer: CN=AffirmTrust Commercial O=AffirmTrust +# Subject: CN=AffirmTrust Commercial O=AffirmTrust +# Label: "AffirmTrust Commercial" +# Serial: 8608355977964138876 +# MD5 Fingerprint: 82:92:ba:5b:ef:cd:8a:6f:a6:3d:55:f9:84:f6:d6:b7 +# SHA1 Fingerprint: f9:b5:b6:32:45:5f:9c:be:ec:57:5f:80:dc:e9:6e:2c:c7:b2:78:b7 +# SHA256 Fingerprint: 03:76:ab:1d:54:c5:f9:80:3c:e4:b2:e2:01:a0:ee:7e:ef:7b:57:b6:36:e8:a9:3c:9b:8d:48:60:c9:6f:5f:a7 +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE +BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz +dCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDEL +MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp +cm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKP +Hx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yr +ba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPAL +MeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1 +yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqr +VwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/ +nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ +KoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYG +XUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNj +vbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivt +Z8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9g +N53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YC +nlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= +-----END CERTIFICATE----- + +# Issuer: CN=AffirmTrust Networking O=AffirmTrust +# Subject: CN=AffirmTrust Networking O=AffirmTrust +# Label: "AffirmTrust Networking" +# Serial: 8957382827206547757 +# MD5 Fingerprint: 42:65:ca:be:01:9a:9a:4c:a9:8c:41:49:cd:c0:d5:7f +# SHA1 Fingerprint: 29:36:21:02:8b:20:ed:02:f5:66:c5:32:d1:d6:ed:90:9f:45:00:2f +# SHA256 Fingerprint: 0a:81:ec:5a:92:97:77:f1:45:90:4a:f3:8d:5d:50:9f:66:b5:e2:c5:8f:cd:b5:31:05:8b:0e:17:f3:f0:b4:1b +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE +BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz +dCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDEL +MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp +cm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3y +YJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbua +kCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRL +QESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp +6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndG +yH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6i +QLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ +KoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfO +tDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzu +QY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZ +Lgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4u +olu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48 +x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= +-----END CERTIFICATE----- + +# Issuer: CN=AffirmTrust Premium O=AffirmTrust +# Subject: CN=AffirmTrust Premium O=AffirmTrust +# Label: "AffirmTrust Premium" +# Serial: 7893706540734352110 +# MD5 Fingerprint: c4:5d:0e:48:b6:ac:28:30:4e:0a:bc:f9:38:16:87:57 +# SHA1 Fingerprint: d8:a6:33:2c:e0:03:6f:b1:85:f6:63:4f:7d:6a:06:65:26:32:28:27 +# SHA256 Fingerprint: 70:a7:3f:7f:37:6b:60:07:42:48:90:45:34:b1:14:82:d5:bf:0e:69:8e:cc:49:8d:f5:25:77:eb:f2:e9:3b:9a +-----BEGIN CERTIFICATE----- +MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UE +BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVz +dCBQcmVtaXVtMB4XDTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkG +A1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1U +cnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLf +qV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtnBKAQ +JG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ ++jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrS +s8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5 +HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d7 +70O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauG +V+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+S +qHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S +5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4Ia +C1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TX +OwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYE +FJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ +BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2 +KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg +Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B +8OWycvpEgjNC6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQ +MKSOyARiqcTtNd56l+0OOF6SL5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc +0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQ +u4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmVBtWVyuEklut89pMF +u+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFgIxpH +YoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8 +GKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaO +RtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6e +KeC2uAloGRwYQw== +-----END CERTIFICATE----- + +# Issuer: CN=AffirmTrust Premium ECC O=AffirmTrust +# Subject: CN=AffirmTrust Premium ECC O=AffirmTrust +# Label: "AffirmTrust Premium ECC" +# Serial: 8401224907861490260 +# MD5 Fingerprint: 64:b0:09:55:cf:b1:d5:99:e2:be:13:ab:a6:5d:ea:4d +# SHA1 Fingerprint: b8:23:6b:00:2f:1d:16:86:53:01:55:6c:11:a4:37:ca:eb:ff:c3:bb +# SHA256 Fingerprint: bd:71:fd:f6:da:97:e4:cf:62:d1:64:7a:dd:25:81:b0:7d:79:ad:f8:39:7e:b4:ec:ba:9c:5e:84:88:82:14:23 +-----BEGIN CERTIFICATE----- +MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMC +VVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQ +cmVtaXVtIEVDQzAeFw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJ +BgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJt +VHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D +0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQN8O9 +ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0G +A1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4G +A1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/Vs +aobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6I +flc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ== +-----END CERTIFICATE----- + +# Issuer: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority +# Subject: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority +# Label: "Certum Trusted Network CA" +# Serial: 279744 +# MD5 Fingerprint: d5:e9:81:40:c5:18:69:fc:46:2c:89:75:62:0f:aa:78 +# SHA1 Fingerprint: 07:e0:32:e0:20:b7:2c:3f:19:2f:06:28:a2:59:3a:19:a7:0f:06:9e +# SHA256 Fingerprint: 5c:58:46:8d:55:f5:8e:49:7e:74:39:82:d2:b5:00:10:b6:d1:65:37:4a:cf:83:a7:d4:a3:2d:b7:68:c4:40:8e +-----BEGIN CERTIFICATE----- +MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBM +MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D +ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU +cnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIyMTIwNzM3WhcNMjkxMjMxMTIwNzM3 +WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMg +Uy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIw +IAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rH +UV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LM +TXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVU +BBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brM +kUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8x +AcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNV +HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15y +sHhE49wcrwn9I0j6vSrEuVUEtRCjjSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfL +I9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1mS1FhIrlQgnXdAIv94nYmem8 +J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5ajZt3hrvJBW8qY +VoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI +03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= +-----END CERTIFICATE----- + +# Issuer: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA +# Subject: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA +# Label: "TWCA Root Certification Authority" +# Serial: 1 +# MD5 Fingerprint: aa:08:8f:f6:f9:7b:b7:f2:b1:a7:1e:9b:ea:ea:bd:79 +# SHA1 Fingerprint: cf:9e:87:6d:d3:eb:fc:42:26:97:a3:b5:a3:7a:a0:76:a9:06:23:48 +# SHA256 Fingerprint: bf:d8:8f:e1:10:1c:41:ae:3e:80:1b:f8:be:56:35:0e:e9:ba:d1:a6:b9:bd:51:5e:dc:5c:6d:5b:87:11:ac:44 +-----BEGIN CERTIFICATE----- +MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzES +MBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFU +V0NBIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMz +WhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJVEFJV0FO +LUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlm +aWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +AQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFE +AcK0HMMxQhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HH +K3XLfJ+utdGdIzdjp9xCoi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeX +RfwZVzsrb+RH9JlF/h3x+JejiB03HFyP4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/z +rX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1ry+UPizgN7gr8/g+YnzAx +3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkq +hkiG9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeC +MErJk/9q56YAf4lCmtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdls +XebQ79NqZp4VKIV66IIArB6nCWlWQtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62D +lhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVYT0bf+215WfKEIlKuD8z7fDvn +aspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocnyYh0igzyXxfkZ +YiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== +-----END CERTIFICATE----- + +# Issuer: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2 +# Subject: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2 +# Label: "Security Communication RootCA2" +# Serial: 0 +# MD5 Fingerprint: 6c:39:7d:a4:0e:55:59:b2:3f:d6:41:b1:12:50:de:43 +# SHA1 Fingerprint: 5f:3b:8c:f2:f8:10:b3:7d:78:b4:ce:ec:19:19:c3:73:34:b9:c7:74 +# SHA256 Fingerprint: 51:3b:2c:ec:b8:10:d4:cd:e5:dd:85:39:1a:df:c6:c2:dd:60:d8:7b:b7:36:d2:b5:21:48:4a:a4:7a:0e:be:f6 +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDEl +MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMe +U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoX +DTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRy +dXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3VyaXR5IENvbW11bmlj +YXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANAV +OVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGr +zbl+dp+++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVM +VAX3NuRFg3sUZdbcDE3R3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQ +hNBqyjoGADdH5H5XTz+L62e4iKrFvlNVspHEfbmwhRkGeC7bYRr6hfVKkaHnFtWO +ojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1KEOtOghY6rCcMU/Gt1SSw +awNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8QIH4D5cs +OPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3 +DQEBCwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpF +coJxDjrSzG+ntKEju/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXc +okgfGT+Ok+vx+hfuzU7jBBJV1uXk3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8 +t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6qtnRGEmyR7jTV7JqR50S+kDFy +1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29mvVXIwAHIRc/ +SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 +-----END CERTIFICATE----- + +# Issuer: CN=Hellenic Academic and Research Institutions RootCA 2011 O=Hellenic Academic and Research Institutions Cert. Authority +# Subject: CN=Hellenic Academic and Research Institutions RootCA 2011 O=Hellenic Academic and Research Institutions Cert. Authority +# Label: "Hellenic Academic and Research Institutions RootCA 2011" +# Serial: 0 +# MD5 Fingerprint: 73:9f:4c:4b:73:5b:79:e9:fa:ba:1c:ef:6e:cb:d5:c9 +# SHA1 Fingerprint: fe:45:65:9b:79:03:5b:98:a1:61:b5:51:2e:ac:da:58:09:48:22:4d +# SHA256 Fingerprint: bc:10:4f:15:a4:8b:e7:09:dc:a5:42:a7:e1:d4:b9:df:6f:05:45:27:e8:02:ea:a9:2d:59:54:44:25:8a:fe:71 +-----BEGIN CERTIFICATE----- +MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1Ix +RDBCBgNVBAoTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1 +dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1p +YyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIFJvb3RDQSAyMDExMB4XDTExMTIw +NjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYTAkdSMUQwQgYDVQQK +EztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIENl +cnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl +c2VhcmNoIEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBAKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPz +dYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJ +fel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa71HFK9+WXesyHgLacEns +bgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u8yBRQlqD +75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSP +FEDH3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNV +HRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp +5dgTBCPuQSUwRwYDVR0eBEAwPqA8MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQu +b3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQub3JnMA0GCSqGSIb3DQEBBQUA +A4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVtXdMiKahsog2p +6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8 +TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7 +dIsXRSZMFpGD/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8Acys +Nnq/onN694/BtZqhFLKPM58N7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXI +l7WdmplNsDz4SgCbZN2fOUvRJ9e4 +-----END CERTIFICATE----- + +# Issuer: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967 +# Subject: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967 +# Label: "Actalis Authentication Root CA" +# Serial: 6271844772424770508 +# MD5 Fingerprint: 69:c1:0d:4f:07:a3:1b:c3:fe:56:3d:04:bc:11:f6:a6 +# SHA1 Fingerprint: f3:73:b3:87:06:5a:28:84:8a:f2:f3:4a:ce:19:2b:dd:c7:8e:9c:ac +# SHA256 Fingerprint: 55:92:60:84:ec:96:3a:64:b9:6e:2a:be:01:ce:0b:a8:6a:64:fb:fe:bc:c7:aa:b5:af:c1:55:b3:7f:d7:60:66 +-----BEGIN CERTIFICATE----- +MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UE +BhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8w +MzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 +IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDkyMjExMjIwMlowazELMAkGA1UEBhMC +SVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1 +ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENB +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNv +UTufClrJwkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX +4ay8IMKx4INRimlNAJZaby/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9 +KK3giq0itFZljoZUj5NDKd45RnijMCO6zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/ +gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1fYVEiVRvjRuPjPdA1Yprb +rxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2oxgkg4YQ +51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2F +be8lEfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxe +KF+w6D9Fz8+vm2/7hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4F +v6MGn8i1zeQf1xcGDXqVdFUNaBr8EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbn +fpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5jF66CyCU3nuDuP/jVo23Eek7 +jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLYiDrIn3hm7Ynz +ezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt +ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAL +e3KHwGCmSUyIWOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70 +jsNjLiNmsGe+b7bAEzlgqqI0JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDz +WochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKxK3JCaKygvU5a2hi/a5iB0P2avl4V +SM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+Xlff1ANATIGk0k9j +pwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC4yyX +X04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+Ok +fcvHlXHo2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7R +K4X9p2jIugErsWx0Hbhzlefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btU +ZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXemOR/qnuOf0GZvBeyqdn6/axag67XH/JJU +LysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9vwGYT7JZVEc+NHt4bVaT +LnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== +-----END CERTIFICATE----- + +# Issuer: O=Trustis Limited OU=Trustis FPS Root CA +# Subject: O=Trustis Limited OU=Trustis FPS Root CA +# Label: "Trustis FPS Root CA" +# Serial: 36053640375399034304724988975563710553 +# MD5 Fingerprint: 30:c9:e7:1e:6b:e6:14:eb:65:b2:16:69:20:31:67:4d +# SHA1 Fingerprint: 3b:c0:38:0b:33:c3:f6:a6:0c:86:15:22:93:d9:df:f5:4b:81:c0:04 +# SHA256 Fingerprint: c1:b4:82:99:ab:a5:20:8f:e9:63:0a:ce:55:ca:68:a0:3e:da:5a:51:9c:88:02:a0:d3:a6:73:be:8f:8e:55:7d +-----BEGIN CERTIFICATE----- +MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBF +MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQL +ExNUcnVzdGlzIEZQUyBSb290IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTEx +MzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1RydXN0aXMgTGltaXRlZDEc +MBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQRUN+ +AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihH +iTHcDnlkH5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjj +vSkCqPoc4Vu5g6hBSLwacY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA +0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zto3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlB +OrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEAAaNTMFEwDwYDVR0TAQH/ +BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAdBgNVHQ4E +FgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01 +GX2cGE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmW +zaD+vkAMXBJV+JOCyinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP4 +1BIy+Q7DsdwyhEQsb8tGD+pmQQ9P8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZE +f1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHVl/9D7S3B2l0pKoU/rGXuhg8F +jZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYliB6XzCGcKQEN +ZetX2fNXlrtIzYE= +-----END CERTIFICATE----- + +# Issuer: CN=Buypass Class 2 Root CA O=Buypass AS-983163327 +# Subject: CN=Buypass Class 2 Root CA O=Buypass AS-983163327 +# Label: "Buypass Class 2 Root CA" +# Serial: 2 +# MD5 Fingerprint: 46:a7:d2:fe:45:fb:64:5a:a8:59:90:9b:78:44:9b:29 +# SHA1 Fingerprint: 49:0a:75:74:de:87:0a:47:fe:58:ee:f6:c7:6b:eb:c6:0b:12:40:99 +# SHA256 Fingerprint: 9a:11:40:25:19:7c:5b:b9:5d:94:e6:3d:55:cd:43:79:08:47:b6:46:b2:3c:df:11:ad:a4:a0:0e:ff:15:fb:48 +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd +MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg +Q2xhc3MgMiBSb290IENBMB4XDTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1ow +TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw +HgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB +BQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1g1Lr +6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPV +L4O2fuPn9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC91 +1K2GScuVr1QGbNgGE41b/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHx +MlAQTn/0hpPshNOOvEu/XAFOBz3cFIqUCqTqc/sLUegTBxj6DvEr0VQVfTzh97QZ +QmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeffawrbD02TTqigzXsu8lkB +arcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgIzRFo1clr +Us3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLi +FRhnBkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRS +P/TizPJhk9H9Z2vXUq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN +9SG9dKpN6nIDSdvHXx1iY8f93ZHsM+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxP +AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMmAd+BikoL1Rpzz +uvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAU18h +9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s +A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3t +OluwlN5E40EIosHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo ++fsicdl9sz1Gv7SEr5AcD48Saq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7 +KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYdDnkM/crqJIByw5c/8nerQyIKx+u2 +DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWDLfJ6v9r9jv6ly0Us +H8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0oyLQ +I+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK7 +5t98biGCwWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h +3PFaTWwyI0PurKju7koSCTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPz +Y11aWOIv4x3kqdbQCtCev9eBCfHJxyYNrJgWVqA= +-----END CERTIFICATE----- + +# Issuer: CN=Buypass Class 3 Root CA O=Buypass AS-983163327 +# Subject: CN=Buypass Class 3 Root CA O=Buypass AS-983163327 +# Label: "Buypass Class 3 Root CA" +# Serial: 2 +# MD5 Fingerprint: 3d:3b:18:9e:2c:64:5a:e8:d5:88:ce:0e:f9:37:c2:ec +# SHA1 Fingerprint: da:fa:f7:fa:66:84:ec:06:8f:14:50:bd:c7:c2:81:a5:bc:a9:64:57 +# SHA256 Fingerprint: ed:f7:eb:bc:a2:7a:2a:38:4d:38:7b:7d:40:10:c6:66:e2:ed:b4:84:3e:4c:29:b4:ae:1d:5b:93:32:e6:b2:4d +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd +MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg +Q2xhc3MgMyBSb290IENBMB4XDTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFow +TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw +HgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB +BQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRHsJ8Y +ZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3E +N3coTRiR5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9 +tznDDgFHmV0ST9tD+leh7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX +0DJq1l1sDPGzbjniazEuOQAnFN44wOwZZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c +/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH2xc519woe2v1n/MuwU8X +KhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV/afmiSTY +zIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvS +O1UQRwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D +34xFMFbG02SrZvPAXpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgP +K9Dx2hzLabjKSWJtyNBjYt1gD1iqj6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3 +AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFEe4zf/lb+74suwv +Tg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAACAj +QTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV +cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXS +IGrs/CIBKM+GuIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2 +HJLw5QY33KbmkJs4j1xrG0aGQ0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsa +O5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8ZORK15FTAaggiG6cX0S5y2CBNOxv +033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2KSb12tjE8nVhz36u +dmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz6MkE +kbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg41 +3OEMXbugUZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvD +u79leNKGef9JOxqDDPDeeOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq +4/g7u9xN12TyUb7mqqta6THuBrxzvxNiCp/HuZc= +-----END CERTIFICATE----- + +# Issuer: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center +# Subject: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center +# Label: "T-TeleSec GlobalRoot Class 3" +# Serial: 1 +# MD5 Fingerprint: ca:fb:40:a8:4e:39:92:8a:1d:fe:8e:2f:c4:27:ea:ef +# SHA1 Fingerprint: 55:a6:72:3e:cb:f2:ec:cd:c3:23:74:70:19:9d:2a:be:11:e3:81:d1 +# SHA256 Fingerprint: fd:73:da:d3:1c:64:4f:f1:b4:3b:ef:0c:cd:da:96:71:0b:9c:d9:87:5e:ca:7e:31:70:7a:f3:e9:6d:52:2b:bd +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx +KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd +BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl +YyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgxMDAxMTAyOTU2WhcNMzMxMDAxMjM1 +OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy +aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 +ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN +8ELg63iIVl6bmlQdTQyK9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/ +RLyTPWGrTs0NvvAgJ1gORH8EGoel15YUNpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4 +hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZFiP0Zf3WHHx+xGwpzJFu5 +ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W0eDrXltM +EnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGj +QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1 +A/d2O2GCahKqGFPrAyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOy +WL6ukK2YJ5f+AbGwUgC4TeQbIXQbfsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ +1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzTucpH9sry9uetuUg/vBa3wW30 +6gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7hP0HHRwA11fXT +91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml +e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4p +TpPDpFQUWw== +-----END CERTIFICATE----- + +# Issuer: CN=EE Certification Centre Root CA O=AS Sertifitseerimiskeskus +# Subject: CN=EE Certification Centre Root CA O=AS Sertifitseerimiskeskus +# Label: "EE Certification Centre Root CA" +# Serial: 112324828676200291871926431888494945866 +# MD5 Fingerprint: 43:5e:88:d4:7d:1a:4a:7e:fd:84:2e:52:eb:01:d4:6f +# SHA1 Fingerprint: c9:a8:b9:e7:55:80:5e:58:e3:53:77:a7:25:eb:af:c3:7b:27:cc:d7 +# SHA256 Fingerprint: 3e:84:ba:43:42:90:85:16:e7:75:73:c0:99:2f:09:79:ca:08:4e:46:85:68:1f:f1:95:cc:ba:8a:22:9b:8a:76 +-----BEGIN CERTIFICATE----- +MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1 +MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1 +czEoMCYGA1UEAwwfRUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYG +CSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIwMTAxMDMwMTAxMDMwWhgPMjAzMDEy +MTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlBUyBTZXJ0aWZpdHNl +ZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRyZSBS +b290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUy +euuOF0+W2Ap7kaJjbMeMTC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvO +bntl8jixwKIy72KyaOBhU8E2lf/slLo2rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIw +WFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw93X2PaRka9ZP585ArQ/d +MtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtNP2MbRMNE +1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYD +VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/ +zQas8fElyalL1BSZMEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYB +BQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEF +BQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+RjxY6hUFaTlrg4wCQiZrxTFGGV +v9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqMlIpPnTX/dqQG +E5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u +uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIW +iAYLtqZLICjU3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/v +GVCJYMzpJJUPwssd8m92kMfMdcGWxZ0= +-----END CERTIFICATE----- + +# Issuer: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH +# Subject: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH +# Label: "D-TRUST Root Class 3 CA 2 2009" +# Serial: 623603 +# MD5 Fingerprint: cd:e0:25:69:8d:47:ac:9c:89:35:90:f7:fd:51:3d:2f +# SHA1 Fingerprint: 58:e8:ab:b0:36:15:33:fb:80:f7:9b:1b:6d:29:d3:ff:8d:5f:00:f0 +# SHA256 Fingerprint: 49:e7:a4:42:ac:f0:ea:62:87:05:00:54:b5:25:64:b6:50:e4:f4:9e:42:e3:48:d6:aa:38:e0:39:e9:57:b1:c1 +-----BEGIN CERTIFICATE----- +MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRF +MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBD +bGFzcyAzIENBIDIgMjAwOTAeFw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NTha +ME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMM +HkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOADER03 +UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42 +tSHKXzlABF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9R +ySPocq60vFYJfxLLHLGvKZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsM +lFqVlNpQmvH/pStmMaTJOKDfHR+4CS7zp+hnUquVH+BGPtikw8paxTGA6Eian5Rp +/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUCAwEAAaOCARowggEWMA8G +A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ4PGEMA4G +A1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVj +dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUy +MENBJTIwMiUyMDIwMDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRl +cmV2b2NhdGlvbmxpc3QwQ6BBoD+GPWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3Js +L2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAwOS5jcmwwDQYJKoZIhvcNAQEL +BQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm2H6NMLVwMeni +acfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 +o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4K +zCUqNQT4YJEVdT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8 +PIWmawomDeCTmGCufsYkl4phX5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3Y +Johw1+qRzT65ysCQblrGXnRl11z+o+I= +-----END CERTIFICATE----- + +# Issuer: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH +# Subject: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH +# Label: "D-TRUST Root Class 3 CA 2 EV 2009" +# Serial: 623604 +# MD5 Fingerprint: aa:c6:43:2c:5e:2d:cd:c4:34:c0:50:4f:11:02:4f:b6 +# SHA1 Fingerprint: 96:c9:1b:0b:95:b4:10:98:42:fa:d0:d8:22:79:fe:60:fa:b9:16:83 +# SHA256 Fingerprint: ee:c5:49:6b:98:8c:e9:86:25:b9:34:09:2e:ec:29:08:be:d0:b0:f3:16:c2:d4:73:0c:84:ea:f1:f3:d3:48:81 +-----BEGIN CERTIFICATE----- +MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRF +MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBD +bGFzcyAzIENBIDIgRVYgMjAwOTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUw +NDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNV +BAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAwOTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfSegpn +ljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM0 +3TP1YtHhzRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6Z +qQTMFexgaDbtCHu39b+T7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lR +p75mpoo6Kr3HGrHhFPC+Oh25z1uxav60sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8 +HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure3511H3a6UCAwEAAaOCASQw +ggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyvcop9Ntea +HNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFw +Oi8vZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xh +c3MlMjAzJTIwQ0ElMjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1E +RT9jZXJ0aWZpY2F0ZXJldm9jYXRpb25saXN0MEagRKBChkBodHRwOi8vd3d3LmQt +dHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xhc3NfM19jYV8yX2V2XzIwMDku +Y3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+PPoeUSbrh/Yp +3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 +nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNF +CSuGdXzfX2lXANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7na +xpeG0ILD5EJt/rDiZE4OJudANCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqX +KVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVvw9y4AyHqnxbxLFS1 +-----END CERTIFICATE----- + +# Issuer: CN=CA Disig Root R2 O=Disig a.s. +# Subject: CN=CA Disig Root R2 O=Disig a.s. +# Label: "CA Disig Root R2" +# Serial: 10572350602393338211 +# MD5 Fingerprint: 26:01:fb:d8:27:a7:17:9a:45:54:38:1a:43:01:3b:03 +# SHA1 Fingerprint: b5:61:eb:ea:a4:de:e4:25:4b:69:1a:98:a5:57:47:c2:34:c7:d9:71 +# SHA256 Fingerprint: e2:3d:4a:03:6d:7b:70:e9:f5:95:b1:42:20:79:d2:b9:1e:df:bb:1f:b6:51:a0:63:3e:aa:8a:9d:c5:f8:07:03 +-----BEGIN CERTIFICATE----- +MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNV +BAYTAlNLMRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMu +MRkwFwYDVQQDExBDQSBEaXNpZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQy +MDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sxEzARBgNVBAcTCkJyYXRpc2xhdmEx +EzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERpc2lnIFJvb3QgUjIw +ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbCw3Oe +NcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNH +PWSb6WiaxswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3I +x2ymrdMxp7zo5eFm1tL7A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbe +QTg06ov80egEFGEtQX6sx3dOy1FU+16SGBsEWmjGycT6txOgmLcRK7fWV8x8nhfR +yyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqVg8NTEQxzHQuyRpDRQjrO +QG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa5Beny912 +H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJ +QfYEkoopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUD +i/ZnWejBBhG93c+AAk9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORs +nLMOPReisjQS1n6yqEm70XooQL6iFh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1 +rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud +DwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5uQu0wDQYJKoZI +hvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM +tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqf +GopTpti72TVVsRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkb +lvdhuDvEK7Z4bLQjb/D907JedR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka ++elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W81k/BfDxujRNt+3vrMNDcTa/F1bal +TFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjxmHHEt38OFdAlab0i +nSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01utI3 +gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18Dr +G5gPcFw0sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3Os +zMOl6W8KjptlwlCFtaOgUxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8x +L4ysEr3vQCj8KWefshNPZiTEUxnpHikV7+ZtsH8tZ/3zbBt1RqPlShfppNcL +-----END CERTIFICATE----- + +# Issuer: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV +# Subject: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV +# Label: "ACCVRAIZ1" +# Serial: 6828503384748696800 +# MD5 Fingerprint: d0:a0:5a:ee:05:b6:09:94:21:a1:7d:f1:b2:29:82:02 +# SHA1 Fingerprint: 93:05:7a:88:15:c6:4f:ce:88:2f:fa:91:16:52:28:78:bc:53:64:17 +# SHA256 Fingerprint: 9a:6e:c0:12:e1:a7:da:9d:be:34:19:4d:47:8a:d7:c0:db:18:22:fb:07:1d:f1:29:81:49:6e:d1:04:38:41:13 +-----BEGIN CERTIFICATE----- +MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UE +AwwJQUNDVlJBSVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQsw +CQYDVQQGEwJFUzAeFw0xMTA1MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQ +BgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwHUEtJQUNDVjENMAsGA1UECgwEQUND +VjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCb +qau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gMjmoY +HtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWo +G2ioPej0RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpA +lHPrzg5XPAOBOp0KoVdDaaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhr +IA8wKFSVf+DuzgpmndFALW4ir50awQUZ0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/ +0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDGWuzndN9wrqODJerWx5eH +k6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs78yM2x/47 +4KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMO +m3WR5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpa +cXpkatcnYGMN285J9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPl +uUsXQA+xtrn13k/c4LOsOxFwYIRKQ26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYI +KwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRwOi8vd3d3LmFjY3YuZXMvZmls +ZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEuY3J0MB8GCCsG +AQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2 +VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeT +VfZW6oHlNsyMHj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIG +CCsGAQUFBwICMIIBFB6CARAAQQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUA +cgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBhAO0AegAgAGQAZQAgAGwAYQAgAEEA +QwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUAYwBuAG8AbABvAGcA +7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBjAHQA +cgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAA +QwBQAFMAIABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUA +czAwBggrBgEFBQcCARYkaHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2Mu +aHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRt +aW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2MV9kZXIuY3JsMA4GA1Ud +DwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZIhvcNAQEF +BQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdp +D70ER9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gU +JyCpZET/LtZ1qmxNYEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+m +AM/EKXMRNt6GGT6d7hmKG9Ww7Y49nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepD +vV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJTS+xJlsndQAJxGJ3KQhfnlms +tn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3sCPdK6jT2iWH +7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h +I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szA +h1xA2syVP1XgNce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xF +d3+YJ5oyXSrjhO7FmGYvliAd3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2H +pPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3pEfbRD0tVNEYqi4Y7 +-----END CERTIFICATE----- + +# Issuer: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA +# Subject: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA +# Label: "TWCA Global Root CA" +# Serial: 3262 +# MD5 Fingerprint: f9:03:7e:cf:e6:9e:3c:73:7a:2a:90:07:69:ff:2b:96 +# SHA1 Fingerprint: 9c:bb:48:53:f6:a4:f6:d3:52:a4:e8:32:52:55:60:13:f5:ad:af:65 +# SHA256 Fingerprint: 59:76:90:07:f7:68:5d:0f:cd:50:87:2f:9f:95:d5:75:5a:5b:2b:45:7d:81:f3:69:2b:61:0a:98:67:2f:0e:1b +-----BEGIN CERTIFICATE----- +MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcx +EjAQBgNVBAoTCVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMT +VFdDQSBHbG9iYWwgUm9vdCBDQTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5 +NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQKEwlUQUlXQU4tQ0ExEDAOBgNVBAsT +B1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3QgQ0EwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2CnJfF +10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz +0ALfUPZVr2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfCh +MBwqoJimFb3u/Rk28OKRQ4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbH +zIh1HrtsBv+baz4X7GGqcXzGHaL3SekVtTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc +46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1WKKD+u4ZqyPpcC1jcxkt2 +yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99sy2sbZCi +laLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYP +oA/pyJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQA +BDzfuBSO6N+pjWxnkjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcE +qYSjMq+u7msXi7Kx/mzhkIyIqJdIzshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm +4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6gcFGn90xHNcgL +1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn +LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WF +H6vPNOw/KP4M8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNo +RI2T9GRwoD2dKAXDOXC4Ynsg/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+ +nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlglPx4mI88k1HtQJAH32RjJMtOcQWh +15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryPA9gK8kxkRr05YuWW +6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3mi4TW +nsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5j +wa19hAM8EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWz +aGHQRiapIVJpLesux+t3zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmy +KwbQBM0= +-----END CERTIFICATE----- + +# Issuer: CN=TeliaSonera Root CA v1 O=TeliaSonera +# Subject: CN=TeliaSonera Root CA v1 O=TeliaSonera +# Label: "TeliaSonera Root CA v1" +# Serial: 199041966741090107964904287217786801558 +# MD5 Fingerprint: 37:41:49:1b:18:56:9a:26:f5:ad:c2:66:fb:40:a5:4c +# SHA1 Fingerprint: 43:13:bb:96:f1:d5:86:9b:c1:4e:6a:92:f6:cf:f6:34:69:87:82:37 +# SHA256 Fingerprint: dd:69:36:fe:21:f8:f0:77:c1:23:a1:a5:21:c1:22:24:f7:22:55:b7:3e:03:a7:26:06:93:e8:a2:4b:0f:a3:89 +-----BEGIN CERTIFICATE----- +MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAw +NzEUMBIGA1UECgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJv +b3QgQ0EgdjEwHhcNMDcxMDE4MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYD +VQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwWVGVsaWFTb25lcmEgUm9vdCBDQSB2 +MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+6yfwIaPzaSZVfp3F +VRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA3GV1 +7CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+X +Z75Ljo1kB1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+ +/jXh7VB7qTCNGdMJjmhnXb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs +81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxHoLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkm +dtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3F0fUTPHSiXk+TT2YqGHe +Oh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJoWjiUIMu +sDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4 +pgd7gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fs +slESl1MpWtTwEhDcTwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQ +arMCpgKIv7NHfirZ1fpoeDVNAgMBAAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYD +VR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qWDNXr+nuqF+gTEjANBgkqhkiG +9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNmzqjMDfz1mgbl +dxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx +0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1Tj +TQpgcmLNkQfWpb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBed +Y2gea+zDTYa4EzAvXUYNR0PVG6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7 +Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpcc41teyWRyu5FrgZLAMzTsVlQ2jqI +OylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOTJsjrDNYmiLbAJM+7 +vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2qReW +t88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcn +HL/EVlP6Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVx +SK236thZiNSQvxaz2emsWWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY= +-----END CERTIFICATE----- + +# Issuer: CN=E-Tugra Certification Authority O=E-Tu\u011fra EBG Bili\u015fim Teknolojileri ve Hizmetleri A.\u015e. OU=E-Tugra Sertifikasyon Merkezi +# Subject: CN=E-Tugra Certification Authority O=E-Tu\u011fra EBG Bili\u015fim Teknolojileri ve Hizmetleri A.\u015e. OU=E-Tugra Sertifikasyon Merkezi +# Label: "E-Tugra Certification Authority" +# Serial: 7667447206703254355 +# MD5 Fingerprint: b8:a1:03:63:b0:bd:21:71:70:8a:6f:13:3a:bb:79:49 +# SHA1 Fingerprint: 51:c6:e7:08:49:06:6e:f3:92:d4:5c:a0:0d:6d:a3:62:8f:c3:52:39 +# SHA256 Fingerprint: b0:bf:d5:2b:b0:d7:d9:bd:92:bf:5d:4d:c1:3d:a2:55:c0:2c:54:2f:37:83:65:ea:89:39:11:f5:5e:55:f2:3c +-----BEGIN CERTIFICATE----- +MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNV +BAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBC +aWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNV +BAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQDDB9FLVR1 +Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMwNTEyMDk0OFoXDTIz +MDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExQDA+ +BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhp +em1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN +ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA4vU/kwVRHoViVF56C/UY +B4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vdhQd2h8y/L5VMzH2nPbxH +D5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5KCKpbknSF +Q9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEo +q1+gElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3D +k14opz8n8Y4e0ypQBaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcH +fC425lAcP9tDJMW/hkd5s3kc91r0E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsut +dEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gzrt48Ue7LE3wBf4QOXVGUnhMM +ti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAqjqFGOjGY5RH8 +zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn +rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUX +U8u3Zg5mTPj5dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6 +Jyr+zE7S6E5UMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5 +XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAF +Nzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAKkEh47U6YA5n+KGCR +HTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jOXKqY +GwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c +77NCR807VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3 ++GbHeJAAFS6LrVE1Uweoa2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WK +vJUawSg5TB9D0pH0clmKuVb8P7Sd2nCcdlqMQ1DujjByTd//SffGqWfZbawCEeI6 +FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEVKV0jq9BgoRJP3vQXzTLl +yb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gTDx4JnW2P +AJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpD +y4Q08ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8d +NL/+I5c30jn6PQ0GC7TbO6Orb1wdtn7os4I07QZcJA== +-----END CERTIFICATE----- + +# Issuer: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center +# Subject: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center +# Label: "T-TeleSec GlobalRoot Class 2" +# Serial: 1 +# MD5 Fingerprint: 2b:9b:9e:e4:7b:6c:1f:00:72:1a:cc:c1:77:79:df:6a +# SHA1 Fingerprint: 59:0d:2d:7d:88:4f:40:2e:61:7e:a5:62:32:17:65:cf:17:d8:94:e9 +# SHA256 Fingerprint: 91:e2:f5:78:8d:58:10:eb:a7:ba:58:73:7d:e1:54:8a:8e:ca:cd:01:45:98:bc:0b:14:3e:04:1b:17:05:25:52 +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx +KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd +BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl +YyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgxMDAxMTA0MDE0WhcNMzMxMDAxMjM1 +OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy +aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 +ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUd +AqSzm1nzHoqvNK38DcLZSBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiC +FoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/FvudocP05l03Sx5iRUKrERLMjfTlH6VJi +1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx9702cu+fjOlbpSD8DT6Iavq +jnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGVWOHAD3bZ +wI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGj +QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/ +WSA2AHmgoCJrjNXyYdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhy +NsZt+U2e+iKo4YFWz827n+qrkRk4r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPAC +uvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNfvNoBYimipidx5joifsFvHZVw +IEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR3p1m0IvVVGb6 +g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN +9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlP +BSeOE6Fuwg== +-----END CERTIFICATE----- + +# Issuer: CN=Atos TrustedRoot 2011 O=Atos +# Subject: CN=Atos TrustedRoot 2011 O=Atos +# Label: "Atos TrustedRoot 2011" +# Serial: 6643877497813316402 +# MD5 Fingerprint: ae:b9:c4:32:4b:ac:7f:5d:66:cc:77:94:bb:2a:77:56 +# SHA1 Fingerprint: 2b:b1:f5:3e:55:0c:1d:c5:f1:d4:e6:b7:6a:46:4b:55:06:02:ac:21 +# SHA256 Fingerprint: f3:56:be:a2:44:b7:a9:1e:b3:5d:53:ca:9a:d7:86:4a:ce:01:8e:2d:35:d5:f8:f9:6d:df:68:a6:f4:1a:a4:74 +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UE +AwwVQXRvcyBUcnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQG +EwJERTAeFw0xMTA3MDcxNDU4MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMM +FUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsGA1UECgwEQXRvczELMAkGA1UEBhMC +REUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCVhTuXbyo7LjvPpvMp +Nb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr54rM +VD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+ +SZFhyBH+DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ +4J7sVaE3IqKHBAUsR320HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0L +cp2AMBYHlT8oDv3FdU9T1nSatCQujgKRz3bFmx5VdJx4IbHwLfELn8LVlhgf8FQi +eowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7Rl+lwrrw7GWzbITAPBgNV +HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZbNshMBgG +A1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3 +DQEBCwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8j +vZfza1zv7v1Apt+hk6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kP +DpFrdRbhIfzYJsdHt6bPWHJxfrrhTZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pc +maHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a961qn8FYiqTxlVMYVqL2Gns2D +lmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G3mB/ufNPRJLv +KrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 1 G3 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 1 G3 O=QuoVadis Limited +# Label: "QuoVadis Root CA 1 G3" +# Serial: 687049649626669250736271037606554624078720034195 +# MD5 Fingerprint: a4:bc:5b:3f:fe:37:9a:fa:64:f0:e2:fa:05:3d:0b:ab +# SHA1 Fingerprint: 1b:8e:ea:57:96:29:1a:c9:39:ea:b8:0a:81:1a:73:73:c0:93:79:67 +# SHA256 Fingerprint: 8a:86:6f:d1:b2:76:b5:7e:57:8e:92:1c:65:82:8a:2b:ed:58:e9:f2:f2:88:05:41:34:b7:f1:f4:bf:c9:cc:74 +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQEL +BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc +BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00 +MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEgRzMwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakEPBtV +wedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWe +rNrwU8lmPNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF341 +68Xfuw6cwI2H44g4hWf6Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh +4Pw5qlPafX7PGglTvF0FBM+hSo+LdoINofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXp +UhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/lg6AnhF4EwfWQvTA9xO+o +abw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV7qJZjqlc +3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/G +KubX9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSt +hfbZxbGL0eUQMk1fiyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KO +Tk0k+17kBL5yG6YnLUlamXrXXAkgt3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOt +zCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZIhvcNAQELBQAD +ggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC +MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2 +cDMT/uFPpiN3GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUN +qXsCHKnQO18LwIE6PWThv6ctTr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5 +YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP+V04ikkwj+3x6xn0dxoxGE1nVGwv +b2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh3jRJjehZrJ3ydlo2 +8hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fawx/k +NSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNj +ZgKAvQU6O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhp +q1467HxpvMc7hU6eFbm0FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFt +nh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOVhMJKzRwuJIczYOXD +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 2 G3 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 2 G3 O=QuoVadis Limited +# Label: "QuoVadis Root CA 2 G3" +# Serial: 390156079458959257446133169266079962026824725800 +# MD5 Fingerprint: af:0c:86:6e:bf:40:2d:7f:0b:3e:12:50:ba:12:3d:06 +# SHA1 Fingerprint: 09:3c:61:f3:8b:8b:dc:7d:55:df:75:38:02:05:00:e1:25:f5:c8:36 +# SHA256 Fingerprint: 8f:e4:fb:0a:f9:3a:4d:0d:67:db:0b:eb:b2:3e:37:c7:1b:f3:25:dc:bc:dd:24:0e:a0:4d:af:58:b4:7e:18:40 +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQEL +BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc +BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00 +MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIgRzMwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFhZiFf +qq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMW +n4rjyduYNM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ym +c5GQYaYDFCDy54ejiK2toIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+ +O7q414AB+6XrW7PFXmAqMaCvN+ggOp+oMiwMzAkd056OXbxMmO7FGmh77FOm6RQ1 +o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+lV0POKa2Mq1W/xPtbAd0j +IaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZoL1NesNKq +IcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz +8eQQsSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43eh +vNURG3YBZwjgQQvD6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l +7ZizlWNof/k19N+IxWA1ksB8aRxhlRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALG +cC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZIhvcNAQELBQAD +ggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66 +AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RC +roijQ1h5fq7KpVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0Ga +W/ZZGYjeVYg3UQt4XAoeo0L9x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4n +lv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgzdWqTHBLmYF5vHX/JHyPLhGGfHoJE ++V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6XU/IyAgkwo1jwDQHV +csaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+NwmNtd +dbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNg +KCLjsZWDzYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeM +HVOyToV7BjjHLPj4sHKNJeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4 +WSr2Rz0ZiC3oheGe7IUIarFsNMkd7EgrO3jtZsSOeWmD3n+M +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 3 G3 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 3 G3 O=QuoVadis Limited +# Label: "QuoVadis Root CA 3 G3" +# Serial: 268090761170461462463995952157327242137089239581 +# MD5 Fingerprint: df:7d:b9:ad:54:6f:68:a1:df:89:57:03:97:43:b0:d7 +# SHA1 Fingerprint: 48:12:bd:92:3c:a8:c4:39:06:e7:30:6d:27:96:e6:a4:cf:22:2e:7d +# SHA256 Fingerprint: 88:ef:81:de:20:2e:b0:18:45:2e:43:f8:64:72:5c:ea:5f:bd:1f:c2:d9:d2:05:73:07:09:c5:d8:b8:69:0f:46 +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQEL +BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc +BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00 +MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMgRzMwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286IxSR +/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNu +FoM7pmRLMon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXR +U7Ox7sWTaYI+FrUoRqHe6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+c +ra1AdHkrAj80//ogaX3T7mH1urPnMNA3I4ZyYUUpSFlob3emLoG+B01vr87ERROR +FHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3UVDmrJqMz6nWB2i3ND0/k +A9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f75li59wzw +eyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634Ryl +sSqiMd5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBp +VzgeAVuNVejH38DMdyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0Q +A4XN8f+MFrXBsj6IbGB/kE+V9/YtrQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ +ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZIhvcNAQELBQAD +ggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px +KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnI +FUBhynLWcKzSt/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5Wvv +oxXqA/4Ti2Tk08HS6IT7SdEQTXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFg +u/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9DuDcpmvJRPpq3t/O5jrFc/ZSXPsoaP +0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGibIh6BJpsQBJFxwAYf +3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmDhPbl +8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+ +DhcI00iX0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HN +PlopNLk9hM6xZdRZkZFWdSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ +ywaZWWDYWGWVjUTR939+J399roD1B0y2PpxxVJkES/1Y+Zj0 +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Assured ID Root G2 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Assured ID Root G2 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Assured ID Root G2" +# Serial: 15385348160840213938643033620894905419 +# MD5 Fingerprint: 92:38:b9:f8:63:24:82:65:2c:57:33:e6:fe:81:8f:9d +# SHA1 Fingerprint: a1:4b:48:d9:43:ee:0a:0e:40:90:4f:3c:e0:a4:c0:91:93:51:5d:3f +# SHA256 Fingerprint: 7d:05:eb:b6:82:33:9f:8c:94:51:ee:09:4e:eb:fe:fa:79:53:a1:14:ed:b2:f4:49:49:45:2f:ab:7d:2f:c1:85 +-----BEGIN CERTIFICATE----- +MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBl +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv +b3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl +cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSA +n61UQbVH35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4Htecc +biJVMWWXvdMX0h5i89vqbFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9Hp +EgjAALAcKxHad3A2m67OeYfcgnDmCXRwVWmvo2ifv922ebPynXApVfSr/5Vh88lA +bx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OPYLfykqGxvYmJHzDNw6Yu +YjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+RnlTGNAgMB +AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQW +BBTOw0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPI +QW5pJ6d1Ee88hjZv0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I +0jJmwYrA8y8678Dj1JGG0VDjA9tzd29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4Gni +lmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAWhsI6yLETcDbYz+70CjTVW0z9 +B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0MjomZmWzwPDCv +ON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo +IhNzbM8m9Yop5w== +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Assured ID Root G3 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Assured ID Root G3 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Assured ID Root G3" +# Serial: 15459312981008553731928384953135426796 +# MD5 Fingerprint: 7c:7f:65:31:0c:81:df:8d:ba:3e:99:e2:5c:ad:6e:fb +# SHA1 Fingerprint: f5:17:a2:4f:9a:48:c6:c9:f8:a2:00:26:9f:dc:0f:48:2c:ab:30:89 +# SHA256 Fingerprint: 7e:37:cb:8b:4c:47:09:0c:ab:36:55:1b:a6:f4:5d:b8:40:68:0f:ba:16:6a:95:2d:b1:00:71:7f:43:05:3f:c2 +-----BEGIN CERTIFICATE----- +MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQsw +CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu +ZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3Qg +RzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu +Y29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQBgcq +hkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJf +Zn4f5dwbRXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17Q +RSAPWXYQ1qAk8C3eNvJsKTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ +BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgFUaFNN6KDec6NHSrkhDAKBggqhkjOPQQD +AwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5FyYZ5eEJJZVrmDxxDnOOlY +JjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy1vUhZscv +6pZjamVFkpUBtA== +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Global Root G2" +# Serial: 4293743540046975378534879503202253541 +# MD5 Fingerprint: e4:a6:8a:c8:54:ac:52:42:46:0a:fd:72:48:1b:2a:44 +# SHA1 Fingerprint: df:3c:24:f9:bf:d6:66:76:1b:26:80:73:fe:06:d1:cc:8d:4f:82:a4 +# SHA256 Fingerprint: cb:3c:cb:b7:60:31:e5:e0:13:8f:8d:d3:9a:23:f9:de:47:ff:c3:5e:43:c1:14:4c:ea:27:d4:6a:5a:b1:cb:5f +-----BEGIN CERTIFICATE----- +MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH +MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT +MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j +b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI +2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx +1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ +q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz +tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ +vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP +BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV +5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY +1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4 +NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG +Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91 +8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe +pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl +MrY= +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Global Root G3 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Global Root G3 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Global Root G3" +# Serial: 7089244469030293291760083333884364146 +# MD5 Fingerprint: f5:5d:a4:50:a5:fb:28:7e:1e:0f:0d:cc:96:57:56:ca +# SHA1 Fingerprint: 7e:04:de:89:6a:3e:66:6d:00:e6:87:d3:3f:fa:d9:3b:e8:3d:34:9e +# SHA256 Fingerprint: 31:ad:66:48:f8:10:41:38:c7:38:f3:9e:a4:32:01:33:39:3e:3a:18:cc:02:29:6e:f9:7c:2a:c9:ef:67:31:d0 +-----BEGIN CERTIFICATE----- +MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQsw +CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu +ZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAe +Fw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVTMRUw +EwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20x +IDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0CAQYF +K4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FG +fp4tn+6OYwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPO +Z9wj/wMco+I+o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAd +BgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNpYim8S8YwCgYIKoZIzj0EAwMDaAAwZQIx +AK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y3maTD/HMsQmP3Wyr+mt/ +oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34VOKa5Vt8 +sycX +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Trusted Root G4" +# Serial: 7451500558977370777930084869016614236 +# MD5 Fingerprint: 78:f2:fc:aa:60:1f:2f:b4:eb:c9:37:ba:53:2e:75:49 +# SHA1 Fingerprint: dd:fb:16:cd:49:31:c9:73:a2:03:7d:3f:c8:3a:4d:7d:77:5d:05:e4 +# SHA256 Fingerprint: 55:2f:7b:dc:f1:a7:af:9e:6c:e6:72:01:7f:4f:12:ab:f7:72:40:c7:8e:76:1a:c2:03:d1:d9:d2:0a:c8:99:88 +-----BEGIN CERTIFICATE----- +MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBi +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3Qg +RzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBiMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu +Y29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3y +ithZwuEppz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1If +xp4VpX6+n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDV +ySAdYyktzuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiO +DCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQ +jdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/ +CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCi +EhtmmnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADM +fRyVw4/3IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QY +uKZ3AeEPlAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXK +chYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t +9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +hjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD +ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2 +SV1EY+CtnJYYZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd ++SeuMIW59mdNOj6PWTkiU0TryF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWc +fFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy7zBZLq7gcfJW5GqXb5JQbZaNaHqa +sjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iahixTXTBmyUEFxPT9N +cCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN5r5N +0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie +4u1Ki7wb/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mI +r/OSmbaz5mEP0oUA51Aa5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1 +/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tKG48BtieVU+i2iW1bvGjUI+iLUaJW+fCm +gKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP82Z+ +-----END CERTIFICATE----- + +# Issuer: CN=COMODO RSA Certification Authority O=COMODO CA Limited +# Subject: CN=COMODO RSA Certification Authority O=COMODO CA Limited +# Label: "COMODO RSA Certification Authority" +# Serial: 101909084537582093308941363524873193117 +# MD5 Fingerprint: 1b:31:b0:71:40:36:cc:14:36:91:ad:c4:3e:fd:ec:18 +# SHA1 Fingerprint: af:e5:d2:44:a8:d1:19:42:30:ff:47:9f:e2:f8:97:bb:cd:7a:8c:b4 +# SHA256 Fingerprint: 52:f0:e1:c4:e5:8e:c6:29:29:1b:60:31:7f:07:46:71:b8:5d:7e:a8:0d:5b:07:27:34:63:53:4b:32:b4:02:34 +-----BEGIN CERTIFICATE----- +MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCB +hTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G +A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNV +BAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMTE5 +MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgT +EkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR +Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR +6FSS0gpWsawNJN3Fz0RndJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8X +pz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZFGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC +9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+5eNu/Nio5JIk2kNrYrhV +/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pGx8cgoLEf +Zd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z ++pUX2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7w +qP/0uK3pN/u6uPQLOvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZah +SL0896+1DSJMwBGB7FY79tOi4lu3sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVIC +u9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+CGCe01a60y1Dma/RMhnEw6abf +Fobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5WdYgGq/yapiq +crxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E +FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB +/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvl +wFTPoCWOAvn9sKIN9SCYPBMtrFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM +4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+nq6PK7o9mfjYcwlYRm6mnPTXJ9OV +2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSgtZx8jb8uk2Intzna +FxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwWsRqZ +CuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiK +boHGhfKppC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmcke +jkk9u+UJueBPSZI9FoJAzMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yL +S0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHqZJx64SIDqZxubw5lT2yHh17zbqD5daWb +QOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk527RH89elWsn2/x20Kk4yl +0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7ILaZRfyHB +NVOFBkpdn627G190 +-----END CERTIFICATE----- + +# Issuer: CN=USERTrust RSA Certification Authority O=The USERTRUST Network +# Subject: CN=USERTrust RSA Certification Authority O=The USERTRUST Network +# Label: "USERTrust RSA Certification Authority" +# Serial: 2645093764781058787591871645665788717 +# MD5 Fingerprint: 1b:fe:69:d1:91:b7:19:33:a3:72:a8:0f:e1:55:e5:b5 +# SHA1 Fingerprint: 2b:8f:1b:57:33:0d:bb:a2:d0:7a:6c:51:f7:0e:e9:0d:da:b9:ad:8e +# SHA256 Fingerprint: e7:93:c9:b0:2f:d8:aa:13:e2:1c:31:22:8a:cc:b0:81:19:64:3b:74:9c:89:89:64:b1:74:6d:46:c3:d4:cb:d2 +-----BEGIN CERTIFICATE----- +MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCB +iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl +cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV +BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAw +MjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNV +BAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU +aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2Vy +dGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +AoICAQCAEmUXNg7D2wiz0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B +3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2jY0K2dvKpOyuR+OJv0OwWIJAJPuLodMkY +tJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFnRghRy4YUVD+8M/5+bJz/ +Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O+T23LLb2 +VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT +79uq/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6 +c0Plfg6lZrEpfDKEY1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmT +Yo61Zs8liM2EuLE/pDkP2QKe6xJMlXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97l +c6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8yexDJtC/QV9AqURE9JnnV4ee +UB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+eLf8ZxXhyVeE +Hg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd +BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8G +A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPF +Up/L+M+ZBn8b2kMVn54CVVeWFPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KO +VWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ7l8wXEskEVX/JJpuXior7gtNn3/3 +ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQEg9zKC7F4iRO/Fjs +8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM8WcR +iQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYze +Sf7dNXGiFSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZ +XHlKYC6SQK5MNyosycdiyA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/ +qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9cJ2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRB +VXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGwsAvgnEzDHNb842m1R0aB +L6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gxQ+6IHdfG +jjxDah2nGN59PRbxYvnKkKj9 +-----END CERTIFICATE----- + +# Issuer: CN=USERTrust ECC Certification Authority O=The USERTRUST Network +# Subject: CN=USERTrust ECC Certification Authority O=The USERTRUST Network +# Label: "USERTrust ECC Certification Authority" +# Serial: 123013823720199481456569720443997572134 +# MD5 Fingerprint: fa:68:bc:d9:b5:7f:ad:fd:c9:1d:06:83:28:cc:24:c1 +# SHA1 Fingerprint: d1:cb:ca:5d:b2:d5:2a:7f:69:3b:67:4d:e5:f0:5a:1d:0c:95:7d:f0 +# SHA256 Fingerprint: 4f:f4:60:d5:4b:9c:86:da:bf:bc:fc:57:12:e0:40:0d:2b:ed:3f:bc:4d:4f:bd:aa:86:e0:6a:dc:d2:a9:ad:7a +-----BEGIN CERTIFICATE----- +MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDEL +MAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNl +eSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMT +JVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMjAx +MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgT +Ck5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVUaGUg +VVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlm +aWNhdGlvbiBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqflo +I+d61SRvU8Za2EurxtW20eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinng +o4N+LZfQYcTxmdwlkWOrfzCjtHDix6EznPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0G +A1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNVHQ8BAf8EBAMCAQYwDwYD +VR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBBHU6+4WMB +zzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbW +RNZu9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg= +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R4 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R4 +# Label: "GlobalSign ECC Root CA - R4" +# Serial: 14367148294922964480859022125800977897474 +# MD5 Fingerprint: 20:f0:27:68:d1:7e:a0:9d:0e:e6:2a:ca:df:5c:89:8e +# SHA1 Fingerprint: 69:69:56:2e:40:80:f4:24:a1:e7:19:9f:14:ba:f3:ee:58:ab:6a:bb +# SHA256 Fingerprint: be:c9:49:11:c2:95:56:76:db:6c:0a:55:09:86:d7:6e:3b:a0:05:66:7c:44:2c:97:62:b4:fb:b7:73:de:22:8c +-----BEGIN CERTIFICATE----- +MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEk +MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpH +bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX +DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD +QSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu +MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprlOQcJ +FspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAw +DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61F +uOJAf/sKbvu+M8k8o4TVMAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGX +kPoUVy0D7O48027KqGx2vKLeuwIgJ6iFJzWbVsaj8kfSt24bAgAXqmemFZHe+pTs +ewv4n4Q= +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R5 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R5 +# Label: "GlobalSign ECC Root CA - R5" +# Serial: 32785792099990507226680698011560947931244 +# MD5 Fingerprint: 9f:ad:3b:1c:02:1e:8a:ba:17:74:38:81:0c:a2:bc:08 +# SHA1 Fingerprint: 1f:24:c6:30:cd:a4:18:ef:20:69:ff:ad:4f:dd:5f:46:3a:1b:69:aa +# SHA256 Fingerprint: 17:9f:bc:14:8a:3d:d0:0f:d2:4e:a1:34:58:cc:43:bf:a7:f5:9c:81:82:d7:83:a5:13:f6:eb:ec:10:0c:89:24 +-----BEGIN CERTIFICATE----- +MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEk +MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpH +bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX +DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD +QSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu +MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6SFkc +8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8ke +hOvRnkmSh5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD +VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYI +KoZIzj0EAwMDaAAwZQIxAOVpEslu28YxuglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg +515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7yFz9SO8NdCKoCOJuxUnO +xwy8p2Fp8fc74SrL+SvzZpA3 +-----END CERTIFICATE----- + +# Issuer: CN=Staat der Nederlanden Root CA - G3 O=Staat der Nederlanden +# Subject: CN=Staat der Nederlanden Root CA - G3 O=Staat der Nederlanden +# Label: "Staat der Nederlanden Root CA - G3" +# Serial: 10003001 +# MD5 Fingerprint: 0b:46:67:07:db:10:2f:19:8c:35:50:60:d1:0b:f4:37 +# SHA1 Fingerprint: d8:eb:6b:41:51:92:59:e0:f3:e7:85:00:c0:3d:b6:88:97:c9:ee:fc +# SHA256 Fingerprint: 3c:4f:b0:b9:5a:b8:b3:00:32:f4:32:b8:6f:53:5f:e1:72:c1:85:d0:fd:39:86:58:37:cf:36:18:7f:a6:f4:28 +-----BEGIN CERTIFICATE----- +MIIFdDCCA1ygAwIBAgIEAJiiOTANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO +TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh +dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEczMB4XDTEzMTExNDExMjg0MloX +DTI4MTExMzIzMDAwMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl +ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv +b3QgQ0EgLSBHMzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL4yolQP +cPssXFnrbMSkUeiFKrPMSjTysF/zDsccPVMeiAho2G89rcKezIJnByeHaHE6n3WW +IkYFsO2tx1ueKt6c/DrGlaf1F2cY5y9JCAxcz+bMNO14+1Cx3Gsy8KL+tjzk7FqX +xz8ecAgwoNzFs21v0IJyEavSgWhZghe3eJJg+szeP4TrjTgzkApyI/o1zCZxMdFy +KJLZWyNtZrVtB0LrpjPOktvA9mxjeM3KTj215VKb8b475lRgsGYeCasH/lSJEULR +9yS6YHgamPfJEf0WwTUaVHXvQ9Plrk7O53vDxk5hUUurmkVLoR9BvUhTFXFkC4az +5S6+zqQbwSmEorXLCCN2QyIkHxcE1G6cxvx/K2Ya7Irl1s9N9WMJtxU51nus6+N8 +6U78dULI7ViVDAZCopz35HCz33JvWjdAidiFpNfxC95DGdRKWCyMijmev4SH8RY7 +Ngzp07TKbBlBUgmhHbBqv4LvcFEhMtwFdozL92TkA1CvjJFnq8Xy7ljY3r735zHP +bMk7ccHViLVlvMDoFxcHErVc0qsgk7TmgoNwNsXNo42ti+yjwUOH5kPiNL6VizXt +BznaqB16nzaeErAMZRKQFWDZJkBE41ZgpRDUajz9QdwOWke275dhdU/Z/seyHdTt +XUmzqWrLZoQT1Vyg3N9udwbRcXXIV2+vD3dbAgMBAAGjQjBAMA8GA1UdEwEB/wQF +MAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRUrfrHkleuyjWcLhL75Lpd +INyUVzANBgkqhkiG9w0BAQsFAAOCAgEAMJmdBTLIXg47mAE6iqTnB/d6+Oea31BD +U5cqPco8R5gu4RV78ZLzYdqQJRZlwJ9UXQ4DO1t3ApyEtg2YXzTdO2PCwyiBwpwp +LiniyMMB8jPqKqrMCQj3ZWfGzd/TtiunvczRDnBfuCPRy5FOCvTIeuXZYzbB1N/8 +Ipf3YF3qKS9Ysr1YvY2WTxB1v0h7PVGHoTx0IsL8B3+A3MSs/mrBcDCw6Y5p4ixp +gZQJut3+TcCDjJRYwEYgr5wfAvg1VUkvRtTA8KCWAg8zxXHzniN9lLf9OtMJgwYh +/WA9rjLA0u6NpvDntIJ8CsxwyXmA+P5M9zWEGYox+wrZ13+b8KKaa8MFSu1BYBQw +0aoRQm7TIwIEC8Zl3d1Sd9qBa7Ko+gE4uZbqKmxnl4mUnrzhVNXkanjvSr0rmj1A +fsbAddJu+2gw7OyLnflJNZoaLNmzlTnVHpL3prllL+U9bTpITAjc5CgSKL59NVzq +4BZ+Extq1z7XnvwtdbLBFNUjA9tbbws+eC8N3jONFrdI54OagQ97wUNNVQQXOEpR +1VmiiXTTn74eS9fGbbeIJG9gkaSChVtWQbzQRKtqE77RLFi3EjNYsjdj3BP1lB0/ +QFH1T/U67cjF68IeHRaVesd+QnGTbksVtzDfqu1XhUisHWrdOWnk4Xl4vs4Fv6EM +94B7IWcnMFk= +-----END CERTIFICATE----- + +# Issuer: CN=Staat der Nederlanden EV Root CA O=Staat der Nederlanden +# Subject: CN=Staat der Nederlanden EV Root CA O=Staat der Nederlanden +# Label: "Staat der Nederlanden EV Root CA" +# Serial: 10000013 +# MD5 Fingerprint: fc:06:af:7b:e8:1a:f1:9a:b4:e8:d2:70:1f:c0:f5:ba +# SHA1 Fingerprint: 76:e2:7e:c1:4f:db:82:c1:c0:a6:75:b5:05:be:3d:29:b4:ed:db:bb +# SHA256 Fingerprint: 4d:24:91:41:4c:fe:95:67:46:ec:4c:ef:a6:cf:6f:72:e2:8a:13:29:43:2f:9d:8a:90:7a:c4:cb:5d:ad:c1:5a +-----BEGIN CERTIFICATE----- +MIIFcDCCA1igAwIBAgIEAJiWjTANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJO +TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSkwJwYDVQQDDCBTdGFh +dCBkZXIgTmVkZXJsYW5kZW4gRVYgUm9vdCBDQTAeFw0xMDEyMDgxMTE5MjlaFw0y +MjEyMDgxMTEwMjhaMFgxCzAJBgNVBAYTAk5MMR4wHAYDVQQKDBVTdGFhdCBkZXIg +TmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRlcmxhbmRlbiBFViBS +b290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA48d+ifkkSzrS +M4M1LGns3Amk41GoJSt5uAg94JG6hIXGhaTK5skuU6TJJB79VWZxXSzFYGgEt9nC +UiY4iKTWO0Cmws0/zZiTs1QUWJZV1VD+hq2kY39ch/aO5ieSZxeSAgMs3NZmdO3d +Z//BYY1jTw+bbRcwJu+r0h8QoPnFfxZpgQNH7R5ojXKhTbImxrpsX23Wr9GxE46p +rfNeaXUmGD5BKyF/7otdBwadQ8QpCiv8Kj6GyzyDOvnJDdrFmeK8eEEzduG/L13l +pJhQDBXd4Pqcfzho0LKmeqfRMb1+ilgnQ7O6M5HTp5gVXJrm0w912fxBmJc+qiXb +j5IusHsMX/FjqTf5m3VpTCgmJdrV8hJwRVXj33NeN/UhbJCONVrJ0yPr08C+eKxC +KFhmpUZtcALXEPlLVPxdhkqHz3/KRawRWrUgUY0viEeXOcDPusBCAUCZSCELa6fS +/ZbV0b5GnUngC6agIk440ME8MLxwjyx1zNDFjFE7PZQIZCZhfbnDZY8UnCHQqv0X +cgOPvZuM5l5Tnrmd74K74bzickFbIZTTRTeU0d8JOV3nI6qaHcptqAqGhYqCvkIH +1vI4gnPah1vlPNOePqc7nvQDs/nxfRN0Av+7oeX6AHkcpmZBiFxgV6YuCcS6/ZrP +px9Aw7vMWgpVSzs4dlG4Y4uElBbmVvMCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB +/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFP6rAJCYniT8qcwaivsnuL8wbqg7 +MA0GCSqGSIb3DQEBCwUAA4ICAQDPdyxuVr5Os7aEAJSrR8kN0nbHhp8dB9O2tLsI +eK9p0gtJ3jPFrK3CiAJ9Brc1AsFgyb/E6JTe1NOpEyVa/m6irn0F3H3zbPB+po3u +2dfOWBfoqSmuc0iH55vKbimhZF8ZE/euBhD/UcabTVUlT5OZEAFTdfETzsemQUHS +v4ilf0X8rLiltTMMgsT7B/Zq5SWEXwbKwYY5EdtYzXc7LMJMD16a4/CrPmEbUCTC +wPTxGfARKbalGAKb12NMcIxHowNDXLldRqANb/9Zjr7dn3LDWyvfjFvO5QxGbJKy +CqNMVEIYFRIYvdr8unRu/8G2oGTYqV9Vrp9canaW2HNnh/tNf1zuacpzEPuKqf2e +vTY4SUmH9A4U8OmHuD+nT3pajnnUk+S7aFKErGzp85hwVXIy+TSrK0m1zSBi5Dp6 +Z2Orltxtrpfs/J92VoguZs9btsmksNcFuuEnL5O7Jiqik7Ab846+HUCjuTaPPoIa +Gl6I6lD4WeKDRikL40Rc4ZW2aZCaFG+XroHPaO+Zmr615+F/+PoTRxZMzG0IQOeL +eG9QgkRQP2YGiqtDhFZKDyAthg710tvSeopLzaXoTvFeJiUBWSOgftL2fiFX1ye8 +FVdMpEbB4IMeDExNH08GGeL5qPQ6gqGyeUN51q1veieQA6TqJIc/2b3Z6fJfUEkc +7uzXLg== +-----END CERTIFICATE----- + +# Issuer: CN=IdenTrust Commercial Root CA 1 O=IdenTrust +# Subject: CN=IdenTrust Commercial Root CA 1 O=IdenTrust +# Label: "IdenTrust Commercial Root CA 1" +# Serial: 13298821034946342390520003877796839426 +# MD5 Fingerprint: b3:3e:77:73:75:ee:a0:d3:e3:7e:49:63:49:59:bb:c7 +# SHA1 Fingerprint: df:71:7e:aa:4a:d9:4e:c9:55:84:99:60:2d:48:de:5f:bc:f0:3a:25 +# SHA256 Fingerprint: 5d:56:49:9b:e4:d2:e0:8b:cf:ca:d0:8a:3e:38:72:3d:50:50:3b:de:70:69:48:e4:2f:55:60:30:19:e5:28:ae +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBK +MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVu +VHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQw +MTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScw +JQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ldhNlT +3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU ++ehcCuz/mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gp +S0l4PJNgiCL8mdo2yMKi1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1 +bVoE/c40yiTcdCMbXTMTEl3EASX2MN0CXZ/g1Ue9tOsbobtJSdifWwLziuQkkORi +T0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl3ZBWzvurpWCdxJ35UrCL +vYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzyNeVJSQjK +Vsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZK +dHzVWYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHT +c+XvvqDtMwt0viAgxGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hv +l7yTmvmcEpB4eoCHFddydJxVdHixuuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5N +iGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZIhvcNAQELBQAD +ggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH +6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwt +LRvM7Kqas6pgghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93 +nAbowacYXVKV7cndJZ5t+qntozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3 ++wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmVYjzlVYA211QC//G5Xc7UI2/YRYRK +W2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUXfeu+h1sXIFRRk0pT +AwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/rokTLq +l1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG +4iZZRHUe2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZ +mUlO+KWA2yUPHGNiiskzZ2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A +7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7RcGzM7vRX+Bi6hG6H +-----END CERTIFICATE----- + +# Issuer: CN=IdenTrust Public Sector Root CA 1 O=IdenTrust +# Subject: CN=IdenTrust Public Sector Root CA 1 O=IdenTrust +# Label: "IdenTrust Public Sector Root CA 1" +# Serial: 13298821034946342390521976156843933698 +# MD5 Fingerprint: 37:06:a5:b0:fc:89:9d:ba:f4:6b:8c:1a:64:cd:d5:ba +# SHA1 Fingerprint: ba:29:41:60:77:98:3f:f4:f3:ef:f2:31:05:3b:2e:ea:6d:4d:45:fd +# SHA256 Fingerprint: 30:d0:89:5a:9a:44:8a:26:20:91:63:55:22:d1:f5:20:10:b5:86:7a:ca:e1:2c:78:ef:95:8f:d4:f4:38:9f:2f +-----BEGIN CERTIFICATE----- +MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBN +MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVu +VHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcN +MzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0 +MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTyP4o7 +ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGy +RBb06tD6Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlS +bdsHyo+1W/CD80/HLaXIrcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF +/YTLNiCBWS2ab21ISGHKTN9T0a9SvESfqy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R +3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoSmJxZZoY+rfGwyj4GD3vw +EUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFnol57plzy +9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9V +GxyhLrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ +2fjXctscvG29ZV/viDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsV +WaFHVCkugyhfHMKiq3IXAAaOReyL4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gD +W/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMwDQYJKoZIhvcN +AQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj +t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHV +DRDtfULAj+7AmgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9 +TaDKQGXSc3z1i9kKlT/YPyNtGtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8G +lwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFtm6/n6J91eEyrRjuazr8FGF1NFTwW +mhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMxNRF4eKLg6TCMf4Df +WN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4Mhn5 ++bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJ +tshquDDIajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhA +GaQdp/lLQzfcaFpPz+vCZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv +8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ3Wl9af0AVqW3rLatt8o+Ae+c +-----END CERTIFICATE----- + +# Issuer: CN=Entrust Root Certification Authority - G2 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2009 Entrust, Inc. - for authorized use only +# Subject: CN=Entrust Root Certification Authority - G2 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2009 Entrust, Inc. - for authorized use only +# Label: "Entrust Root Certification Authority - G2" +# Serial: 1246989352 +# MD5 Fingerprint: 4b:e2:c9:91:96:65:0c:f4:0e:5a:93:92:a0:0a:fe:b2 +# SHA1 Fingerprint: 8c:f4:27:fd:79:0c:3a:d1:66:06:8d:e8:1e:57:ef:bb:93:22:72:d4 +# SHA256 Fingerprint: 43:df:57:74:b0:3e:7f:ef:5f:e4:0d:93:1a:7b:ed:f1:bb:2e:6b:42:73:8c:4e:6d:38:41:10:3d:3a:a7:f3:39 +-----BEGIN CERTIFICATE----- +MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMC +VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50 +cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3Qs +IEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVz +dCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwHhcNMDkwNzA3MTcy +NTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUVu +dHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwt +dGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0 +aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP/vaCeb9zYQYKpSfYs1/T +RU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXzHHfV1IWN +cCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hW +wcKUs/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1 +U1+cPvQXLOZprE4yTGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0 +jaWvYkxN4FisZDQSA/i2jZRjJKRxAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ60B7vfec7aVHUbI2fkBJmqzAN +BgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5ZiXMRrEPR9RP/ +jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ +Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v +1fN2D807iDginWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4R +nAuknZoh8/CbCzB428Hch0P+vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmH +VHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xOe4pIb4tF9g== +-----END CERTIFICATE----- + +# Issuer: CN=Entrust Root Certification Authority - EC1 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2012 Entrust, Inc. - for authorized use only +# Subject: CN=Entrust Root Certification Authority - EC1 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2012 Entrust, Inc. - for authorized use only +# Label: "Entrust Root Certification Authority - EC1" +# Serial: 51543124481930649114116133369 +# MD5 Fingerprint: b6:7e:1d:f0:58:c5:49:6c:24:3b:3d:ed:98:18:ed:bc +# SHA1 Fingerprint: 20:d8:06:40:df:9b:25:f5:12:25:3a:11:ea:f7:59:8a:eb:14:b5:47 +# SHA256 Fingerprint: 02:ed:0e:b2:8c:14:da:45:16:5c:56:67:91:70:0d:64:51:d7:fb:56:f0:b2:ab:1d:3b:8e:b0:70:e5:6e:df:f5 +-----BEGIN CERTIFICATE----- +MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkG +A1UEBhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3 +d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVu +dHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEzMDEGA1UEAxMq +RW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRUMxMB4XDTEy +MTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYwFAYD +VQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0 +L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0g +Zm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBD +ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEVDMTB2MBAGByqGSM49AgEGBSuBBAAi +A2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHyAsWfoPZb1YsGGYZPUxBt +ByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef9eNi1KlH +Bz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O +BBYEFLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVC +R98crlOZF7ZvHH3hvxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nX +hTcGtXsI/esni0qU+eH6p44mCOh8kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G +-----END CERTIFICATE----- + +# Issuer: CN=CFCA EV ROOT O=China Financial Certification Authority +# Subject: CN=CFCA EV ROOT O=China Financial Certification Authority +# Label: "CFCA EV ROOT" +# Serial: 407555286 +# MD5 Fingerprint: 74:e1:b6:ed:26:7a:7a:44:30:33:94:ab:7b:27:81:30 +# SHA1 Fingerprint: e2:b8:29:4b:55:84:ab:6b:58:c2:90:46:6c:ac:3f:b8:39:8f:84:83 +# SHA256 Fingerprint: 5c:c3:d7:8e:4e:1d:5e:45:54:7a:04:e6:87:3e:64:f9:0c:f9:53:6d:1c:cc:2e:f8:00:f3:55:c4:c5:fd:70:fd +-----BEGIN CERTIFICATE----- +MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJD +TjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9y +aXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkx +MjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5j +aWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJP +T1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnVBU03 +sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpL +TIpTUnrD7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5 +/ZOkVIBMUtRSqy5J35DNuF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp +7hZZLDRJGqgG16iI0gNyejLi6mhNbiyWZXvKWfry4t3uMCz7zEasxGPrb382KzRz +EpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7xzbh72fROdOXW3NiGUgt +hxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9fpy25IGvP +a931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqot +aK8KgWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNg +TnYGmE69g60dWIolhdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfV +PKPtl8MeNPo4+QgO48BdK4PRVmrJtqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hv +cWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAfBgNVHSMEGDAWgBTj/i39KNAL +tbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAd +BgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB +ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObT +ej/tUxPQ4i9qecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdL +jOztUmCypAbqTuv0axn96/Ua4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBS +ESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sGE5uPhnEFtC+NiWYzKXZUmhH4J/qy +P5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfXBDrDMlI1Dlb4pd19 +xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjnaH9d +Ci77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN +5mydLIhyPDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe +/v5WOaHIz16eGWRGENoXkbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+Z +AAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3CekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ +5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su +-----END CERTIFICATE----- + +# Issuer: CN=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=LuxTrust Global Root 2 O=LuxTrust S.A. +# Subject: CN=LuxTrust Global Root 2 O=LuxTrust S.A. +# Label: "LuxTrust Global Root 2" +# Serial: 59914338225734147123941058376788110305822489521 +# MD5 Fingerprint: b2:e1:09:00:61:af:f7:f1:91:6f:c4:ad:8d:5e:3b:7c +# SHA1 Fingerprint: 1e:0e:56:19:0a:d1:8b:25:98:b2:04:44:ff:66:8a:04:17:99:5f:3f +# SHA256 Fingerprint: 54:45:5f:71:29:c2:0b:14:47:c4:18:f9:97:16:8f:24:c5:8f:c5:02:3b:f5:da:5b:e2:eb:6e:1d:d8:90:2e:d5 +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +# Issuer: CN=TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 O=Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK OU=Kamu Sertifikasyon Merkezi - Kamu SM +# Subject: CN=TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 O=Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK OU=Kamu Sertifikasyon Merkezi - Kamu SM +# Label: "TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1" +# Serial: 1 +# MD5 Fingerprint: dc:00:81:dc:69:2f:3e:2f:b0:3b:f6:3d:5a:91:8e:49 +# SHA1 Fingerprint: 31:43:64:9b:ec:ce:27:ec:ed:3a:3f:0b:8f:0d:e4:e8:91:dd:ee:ca +# SHA256 Fingerprint: 46:ed:c3:68:90:46:d5:3a:45:3f:b3:10:4a:b8:0d:ca:ec:65:8b:26:60:ea:16:29:dd:7e:86:79:90:64:87:16 +-----BEGIN CERTIFICATE----- +MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIx +GDAWBgNVBAcTD0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxp +bXNlbCB2ZSBUZWtub2xvamlrIEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0w +KwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24gTWVya2V6aSAtIEthbXUgU00xNjA0 +BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRpZmlrYXNpIC0gU3Vy +dW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYDVQQG +EwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXll +IEJpbGltc2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklU +QUsxLTArBgNVBAsTJEthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBT +TTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11IFNNIFNTTCBLb2sgU2VydGlmaWthc2kg +LSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr3UwM6q7 +a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y86Ij5iySr +LqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INr +N3wcwv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2X +YacQuFWQfw4tJzh03+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/ +iSIzL+aFCr2lqBs23tPcLG07xxO9WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4f +AJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQUZT/HiobGPN08VFw1+DrtUgxH +V8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL +BQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh +AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPf +IPP54+M638yclNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4 +lzwDGrpDxpa5RXI4s6ehlj2Re37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c +8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0jq5Rm+K37DwhuJi1/FwcJsoz7UMCf +lo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM= +-----END CERTIFICATE----- + +# Issuer: CN=GDCA TrustAUTH R5 ROOT O=GUANG DONG CERTIFICATE AUTHORITY CO.,LTD. +# Subject: CN=GDCA TrustAUTH R5 ROOT O=GUANG DONG CERTIFICATE AUTHORITY CO.,LTD. +# Label: "GDCA TrustAUTH R5 ROOT" +# Serial: 9009899650740120186 +# MD5 Fingerprint: 63:cc:d9:3d:34:35:5c:6f:53:a3:e2:08:70:48:1f:b4 +# SHA1 Fingerprint: 0f:36:38:5b:81:1a:25:c3:9b:31:4e:83:ca:e9:34:66:70:cc:74:b4 +# SHA256 Fingerprint: bf:ff:8f:d0:44:33:48:7d:6a:8a:a6:0c:1a:29:76:7a:9f:c2:bb:b0:5e:42:0f:71:3a:13:b9:92:89:1d:38:93 +-----BEGIN CERTIFICATE----- +MIIFiDCCA3CgAwIBAgIIfQmX/vBH6nowDQYJKoZIhvcNAQELBQAwYjELMAkGA1UE +BhMCQ04xMjAwBgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZ +IENPLixMVEQuMR8wHQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMB4XDTE0 +MTEyNjA1MTMxNVoXDTQwMTIzMTE1NTk1OVowYjELMAkGA1UEBhMCQ04xMjAwBgNV +BAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZIENPLixMVEQuMR8w +HQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMIICIjANBgkqhkiG9w0BAQEF +AAOCAg8AMIICCgKCAgEA2aMW8Mh0dHeb7zMNOwZ+Vfy1YI92hhJCfVZmPoiC7XJj +Dp6L3TQsAlFRwxn9WVSEyfFrs0yw6ehGXTjGoqcuEVe6ghWinI9tsJlKCvLriXBj +TnnEt1u9ol2x8kECK62pOqPseQrsXzrj/e+APK00mxqriCZ7VqKChh/rNYmDf1+u +KU49tm7srsHwJ5uu4/Ts765/94Y9cnrrpftZTqfrlYwiOXnhLQiPzLyRuEH3FMEj +qcOtmkVEs7LXLM3GKeJQEK5cy4KOFxg2fZfmiJqwTTQJ9Cy5WmYqsBebnh52nUpm +MUHfP/vFBu8btn4aRjb3ZGM74zkYI+dndRTVdVeSN72+ahsmUPI2JgaQxXABZG12 +ZuGR224HwGGALrIuL4xwp9E7PLOR5G62xDtw8mySlwnNR30YwPO7ng/Wi64HtloP +zgsMR6flPri9fcebNaBhlzpBdRfMK5Z3KpIhHtmVdiBnaM8Nvd/WHwlqmuLMc3Gk +L30SgLdTMEZeS1SZD2fJpcjyIMGC7J0R38IC+xo70e0gmu9lZJIQDSri3nDxGGeC +jGHeuLzRL5z7D9Ar7Rt2ueQ5Vfj4oR24qoAATILnsn8JuLwwoC8N9VKejveSswoA +HQBUlwbgsQfZxw9cZX08bVlX5O2ljelAU58VS6Bx9hoh49pwBiFYFIeFd3mqgnkC +AwEAAaNCMEAwHQYDVR0OBBYEFOLJQJ9NzuiaoXzPDj9lxSmIahlRMA8GA1UdEwEB +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQDRSVfg +p8xoWLoBDysZzY2wYUWsEe1jUGn4H3++Fo/9nesLqjJHdtJnJO29fDMylyrHBYZm +DRd9FBUb1Ov9H5r2XpdptxolpAqzkT9fNqyL7FeoPueBihhXOYV0GkLH6VsTX4/5 +COmSdI31R9KrO9b7eGZONn356ZLpBN79SWP8bfsUcZNnL0dKt7n/HipzcEYwv1ry +L3ml4Y0M2fmyYzeMN2WFcGpcWwlyua1jPLHd+PwyvzeG5LuOmCd+uh8W4XAR8gPf +JWIyJyYYMoSf/wA6E7qaTfRPuBRwIrHKK5DOKcFw9C+df/KQHtZa37dG/OaG+svg +IHZ6uqbL9XzeYqWxi+7egmaKTjowHz+Ay60nugxe19CxVsp3cbK1daFQqUBDF8Io +2c9Si1vIY9RCPqAzekYu9wogRlR+ak8x8YF+QnQ4ZXMn7sZ8uI7XpTrXmKGcjBBV +09tL7ECQ8s1uV9JiDnxXk7Gnbc2dg7sq5+W2O3FYrf3RRbxake5TFW/TRQl1brqQ +XR4EzzffHqhmsYzmIGrv/EhOdJhCrylvLmrH+33RZjEizIYAfmaDDEL0vTSSwxrq +T8p+ck0LcIymSLumoRT2+1hEmRSuqguTaaApJUqlyyvdimYHFngVV3Eb7PVHhPOe +MTd61X8kreS8/f3MboPoDKi3QWwH3b08hpcv0g== +-----END CERTIFICATE----- + +# Issuer: CN=TrustCor RootCert CA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority +# Subject: CN=TrustCor RootCert CA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority +# Label: "TrustCor RootCert CA-1" +# Serial: 15752444095811006489 +# MD5 Fingerprint: 6e:85:f1:dc:1a:00:d3:22:d5:b2:b2:ac:6b:37:05:45 +# SHA1 Fingerprint: ff:bd:cd:e7:82:c8:43:5e:3c:6f:26:86:5c:ca:a8:3a:45:5b:c3:0a +# SHA256 Fingerprint: d4:0e:9c:86:cd:8f:e4:68:c1:77:69:59:f4:9e:a7:74:fa:54:86:84:b6:c4:06:f3:90:92:61:f4:dc:e2:57:5c +-----BEGIN CERTIFICATE----- +MIIEMDCCAxigAwIBAgIJANqb7HHzA7AZMA0GCSqGSIb3DQEBCwUAMIGkMQswCQYD +VQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEk +MCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U +cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRydXN0Q29y +IFJvb3RDZXJ0IENBLTEwHhcNMTYwMjA0MTIzMjE2WhcNMjkxMjMxMTcyMzE2WjCB +pDELMAkGA1UEBhMCUEExDzANBgNVBAgMBlBhbmFtYTEUMBIGA1UEBwwLUGFuYW1h +IENpdHkxJDAiBgNVBAoMG1RydXN0Q29yIFN5c3RlbXMgUy4gZGUgUi5MLjEnMCUG +A1UECwweVHJ1c3RDb3IgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYDVQQDDBZU +cnVzdENvciBSb290Q2VydCBDQS0xMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEAv463leLCJhJrMxnHQFgKq1mqjQCj/IDHUHuO1CAmujIS2CNUSSUQIpid +RtLByZ5OGy4sDjjzGiVoHKZaBeYei0i/mJZ0PmnK6bV4pQa81QBeCQryJ3pS/C3V +seq0iWEk8xoT26nPUu0MJLq5nux+AHT6k61sKZKuUbS701e/s/OojZz0JEsq1pme +9J7+wH5COucLlVPat2gOkEz7cD+PSiyU8ybdY2mplNgQTsVHCJCZGxdNuWxu72CV +EY4hgLW9oHPY0LJ3xEXqWib7ZnZ2+AYfYW0PVcWDtxBWcgYHpfOxGgMFZA6dWorW +hnAbJN7+KIor0Gqw/Hqi3LJ5DotlDwIDAQABo2MwYTAdBgNVHQ4EFgQU7mtJPHo/ +DeOxCbeKyKsZn3MzUOcwHwYDVR0jBBgwFoAU7mtJPHo/DeOxCbeKyKsZn3MzUOcw +DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQAD +ggEBACUY1JGPE+6PHh0RU9otRCkZoB5rMZ5NDp6tPVxBb5UrJKF5mDo4Nvu7Zp5I +/5CQ7z3UuJu0h3U/IJvOcs+hVcFNZKIZBqEHMwwLKeXx6quj7LUKdJDHfXLy11yf +ke+Ri7fc7Waiz45mO7yfOgLgJ90WmMCV1Aqk5IGadZQ1nJBfiDcGrVmVCrDRZ9MZ +yonnMlo2HD6CqFqTvsbQZJG2z9m2GM/bftJlo6bEjhcxwft+dtvTheNYsnd6djts +L1Ac59v2Z3kf9YKVmgenFK+P3CghZwnS1k1aHBkcjndcw5QkPTJrS37UeJSDvjdN +zl/HHk484IkzlQsPpTLWPFp5LBk= +-----END CERTIFICATE----- + +# Issuer: CN=TrustCor RootCert CA-2 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority +# Subject: CN=TrustCor RootCert CA-2 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority +# Label: "TrustCor RootCert CA-2" +# Serial: 2711694510199101698 +# MD5 Fingerprint: a2:e1:f8:18:0b:ba:45:d5:c7:41:2a:bb:37:52:45:64 +# SHA1 Fingerprint: b8:be:6d:cb:56:f1:55:b9:63:d4:12:ca:4e:06:34:c7:94:b2:1c:c0 +# SHA256 Fingerprint: 07:53:e9:40:37:8c:1b:d5:e3:83:6e:39:5d:ae:a5:cb:83:9e:50:46:f1:bd:0e:ae:19:51:cf:10:fe:c7:c9:65 +-----BEGIN CERTIFICATE----- +MIIGLzCCBBegAwIBAgIIJaHfyjPLWQIwDQYJKoZIhvcNAQELBQAwgaQxCzAJBgNV +BAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQw +IgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRy +dXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0eTEfMB0GA1UEAwwWVHJ1c3RDb3Ig +Um9vdENlcnQgQ0EtMjAeFw0xNjAyMDQxMjMyMjNaFw0zNDEyMzExNzI2MzlaMIGk +MQswCQYDVQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEg +Q2l0eTEkMCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYD +VQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRy +dXN0Q29yIFJvb3RDZXJ0IENBLTIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +AoICAQCnIG7CKqJiJJWQdsg4foDSq8GbZQWU9MEKENUCrO2fk8eHyLAnK0IMPQo+ +QVqedd2NyuCb7GgypGmSaIwLgQ5WoD4a3SwlFIIvl9NkRvRUqdw6VC0xK5mC8tkq +1+9xALgxpL56JAfDQiDyitSSBBtlVkxs1Pu2YVpHI7TYabS3OtB0PAx1oYxOdqHp +2yqlO/rOsP9+aij9JxzIsekp8VduZLTQwRVtDr4uDkbIXvRR/u8OYzo7cbrPb1nK +DOObXUm4TOJXsZiKQlecdu/vvdFoqNL0Cbt3Nb4lggjEFixEIFapRBF37120Hape +az6LMvYHL1cEksr1/p3C6eizjkxLAjHZ5DxIgif3GIJ2SDpxsROhOdUuxTTCHWKF +3wP+TfSvPd9cW436cOGlfifHhi5qjxLGhF5DUVCcGZt45vz27Ud+ez1m7xMTiF88 +oWP7+ayHNZ/zgp6kPwqcMWmLmaSISo5uZk3vFsQPeSghYA2FFn3XVDjxklb9tTNM +g9zXEJ9L/cb4Qr26fHMC4P99zVvh1Kxhe1fVSntb1IVYJ12/+CtgrKAmrhQhJ8Z3 +mjOAPF5GP/fDsaOGM8boXg25NSyqRsGFAnWAoOsk+xWq5Gd/bnc/9ASKL3x74xdh +8N0JqSDIvgmk0H5Ew7IwSjiqqewYmgeCK9u4nBit2uBGF6zPXQIDAQABo2MwYTAd +BgNVHQ4EFgQU2f4hQG6UnrybPZx9mCAZ5YwwYrIwHwYDVR0jBBgwFoAU2f4hQG6U +nrybPZx9mCAZ5YwwYrIwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYw +DQYJKoZIhvcNAQELBQADggIBAJ5Fngw7tu/hOsh80QA9z+LqBrWyOrsGS2h60COX +dKcs8AjYeVrXWoSK2BKaG9l9XE1wxaX5q+WjiYndAfrs3fnpkpfbsEZC89NiqpX+ +MWcUaViQCqoL7jcjx1BRtPV+nuN79+TMQjItSQzL/0kMmx40/W5ulop5A7Zv2wnL +/V9lFDfhOPXzYRZY5LVtDQsEGz9QLX+zx3oaFoBg+Iof6Rsqxvm6ARppv9JYx1RX +CI/hOWB3S6xZhBqI8d3LT3jX5+EzLfzuQfogsL7L9ziUwOHQhQ+77Sxzq+3+knYa +ZH9bDTMJBzN7Bj8RpFxwPIXAz+OQqIN3+tvmxYxoZxBnpVIt8MSZj3+/0WvitUfW +2dCFmU2Umw9Lje4AWkcdEQOsQRivh7dvDDqPys/cA8GiCcjl/YBeyGBCARsaU1q7 +N6a3vLqE6R5sGtRk2tRD/pOLS/IseRYQ1JMLiI+h2IYURpFHmygk71dSTlxCnKr3 +Sewn6EAes6aJInKc9Q0ztFijMDvd1GpUk74aTfOTlPf8hAs/hCBcNANExdqtvArB +As8e5ZTZ845b2EzwnexhF7sUMlQMAimTHpKG9n/v55IFDlndmQguLvqcAFLTxWYp +5KeXRKQOKIETNcX2b2TmQcTVL8w0RSXPQQCWPUouwpaYT05KnJe32x+SMsj/D1Fu +1uwJ +-----END CERTIFICATE----- + +# Issuer: CN=TrustCor ECA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority +# Subject: CN=TrustCor ECA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority +# Label: "TrustCor ECA-1" +# Serial: 9548242946988625984 +# MD5 Fingerprint: 27:92:23:1d:0a:f5:40:7c:e9:e6:6b:9d:d8:f5:e7:6c +# SHA1 Fingerprint: 58:d1:df:95:95:67:6b:63:c0:f0:5b:1c:17:4d:8b:84:0b:c8:78:bd +# SHA256 Fingerprint: 5a:88:5d:b1:9c:01:d9:12:c5:75:93:88:93:8c:af:bb:df:03:1a:b2:d4:8e:91:ee:15:58:9b:42:97:1d:03:9c +-----BEGIN CERTIFICATE----- +MIIEIDCCAwigAwIBAgIJAISCLF8cYtBAMA0GCSqGSIb3DQEBCwUAMIGcMQswCQYD +VQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEk +MCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U +cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxFzAVBgNVBAMMDlRydXN0Q29y +IEVDQS0xMB4XDTE2MDIwNDEyMzIzM1oXDTI5MTIzMTE3MjgwN1owgZwxCzAJBgNV +BAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQw +IgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRy +dXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0eTEXMBUGA1UEAwwOVHJ1c3RDb3Ig +RUNBLTEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPj+ARtZ+odnbb +3w9U73NjKYKtR8aja+3+XzP4Q1HpGjORMRegdMTUpwHmspI+ap3tDvl0mEDTPwOA +BoJA6LHip1GnHYMma6ve+heRK9jGrB6xnhkB1Zem6g23xFUfJ3zSCNV2HykVh0A5 +3ThFEXXQmqc04L/NyFIduUd+Dbi7xgz2c1cWWn5DkR9VOsZtRASqnKmcp0yJF4Ou +owReUoCLHhIlERnXDH19MURB6tuvsBzvgdAsxZohmz3tQjtQJvLsznFhBmIhVE5/ +wZ0+fyCMgMsq2JdiyIMzkX2woloPV+g7zPIlstR8L+xNxqE6FXrntl019fZISjZF +ZtS6mFjBAgMBAAGjYzBhMB0GA1UdDgQWBBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAf +BgNVHSMEGDAWgBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAPBgNVHRMBAf8EBTADAQH/ +MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAQEABT41XBVwm8nHc2Fv +civUwo/yQ10CzsSUuZQRg2dd4mdsdXa/uwyqNsatR5Nj3B5+1t4u/ukZMjgDfxT2 +AHMsWbEhBuH7rBiVDKP/mZb3Kyeb1STMHd3BOuCYRLDE5D53sXOpZCz2HAF8P11F +hcCF5yWPldwX8zyfGm6wyuMdKulMY/okYWLW2n62HGz1Ah3UKt1VkOsqEUc8Ll50 +soIipX1TH0XsJ5F95yIW6MBoNtjG8U+ARDL54dHRHareqKucBK+tIA5kmE2la8BI +WJZpTdwHjFGTot+fDz2LYLSCjaoITmJF4PkL0uDgPFveXHEnJcLmA4GLEFPjx1Wi +tJ/X5g== +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com Root Certification Authority RSA O=SSL Corporation +# Subject: CN=SSL.com Root Certification Authority RSA O=SSL Corporation +# Label: "SSL.com Root Certification Authority RSA" +# Serial: 8875640296558310041 +# MD5 Fingerprint: 86:69:12:c0:70:f1:ec:ac:ac:c2:d5:bc:a5:5b:a1:29 +# SHA1 Fingerprint: b7:ab:33:08:d1:ea:44:77:ba:14:80:12:5a:6f:bd:a9:36:49:0c:bb +# SHA256 Fingerprint: 85:66:6a:56:2e:e0:be:5c:e9:25:c1:d8:89:0a:6f:76:a8:7e:c1:6d:4d:7d:5f:29:ea:74:19:cf:20:12:3b:69 +-----BEGIN CERTIFICATE----- +MIIF3TCCA8WgAwIBAgIIeyyb0xaAMpkwDQYJKoZIhvcNAQELBQAwfDELMAkGA1UE +BhMCVVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQK +DA9TU0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eSBSU0EwHhcNMTYwMjEyMTczOTM5WhcNNDEwMjEyMTcz +OTM5WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv +dXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNv +bSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFJTQTCCAiIwDQYJKoZIhvcN +AQEBBQADggIPADCCAgoCggIBAPkP3aMrfcvQKv7sZ4Wm5y4bunfh4/WvpOz6Sl2R +xFdHaxh3a3by/ZPkPQ/CFp4LZsNWlJ4Xg4XOVu/yFv0AYvUiCVToZRdOQbngT0aX +qhvIuG5iXmmxX9sqAn78bMrzQdjt0Oj8P2FI7bADFB0QDksZ4LtO7IZl/zbzXmcC +C52GVWH9ejjt/uIZALdvoVBidXQ8oPrIJZK0bnoix/geoeOy3ZExqysdBP+lSgQ3 +6YWkMyv94tZVNHwZpEpox7Ko07fKoZOI68GXvIz5HdkihCR0xwQ9aqkpk8zruFvh +/l8lqjRYyMEjVJ0bmBHDOJx+PYZspQ9AhnwC9FwCTyjLrnGfDzrIM/4RJTXq/LrF +YD3ZfBjVsqnTdXgDciLKOsMf7yzlLqn6niy2UUb9rwPW6mBo6oUWNmuF6R7As93E +JNyAKoFBbZQ+yODJgUEAnl6/f8UImKIYLEJAs/lvOCdLToD0PYFH4Ih86hzOtXVc +US4cK38acijnALXRdMbX5J+tB5O2UzU1/Dfkw/ZdFr4hc96SCvigY2q8lpJqPvi8 +ZVWb3vUNiSYE/CUapiVpy8JtynziWV+XrOvvLsi81xtZPCvM8hnIk2snYxnP/Okm ++Mpxm3+T/jRnhE6Z6/yzeAkzcLpmpnbtG3PrGqUNxCITIJRWCk4sbE6x/c+cCbqi +M+2HAgMBAAGjYzBhMB0GA1UdDgQWBBTdBAkHovV6fVJTEpKV7jiAJQ2mWTAPBgNV +HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFN0ECQei9Xp9UlMSkpXuOIAlDaZZMA4G +A1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAIBgRlCn7Jp0cHh5wYfGV +cpNxJK1ok1iOMq8bs3AD/CUrdIWQPXhq9LmLpZc7tRiRux6n+UBbkflVma8eEdBc +Hadm47GUBwwyOabqG7B52B2ccETjit3E+ZUfijhDPwGFpUenPUayvOUiaPd7nNgs +PgohyC0zrL/FgZkxdMF1ccW+sfAjRfSda/wZY52jvATGGAslu1OJD7OAUN5F7kR/ +q5R4ZJjT9ijdh9hwZXT7DrkT66cPYakylszeu+1jTBi7qUD3oFRuIIhxdRjqerQ0 +cuAjJ3dctpDqhiVAq+8zD8ufgr6iIPv2tS0a5sKFsXQP+8hlAqRSAUfdSSLBv9jr +a6x+3uxjMxW3IwiPxg+NQVrdjsW5j+VFP3jbutIbQLH+cU0/4IGiul607BXgk90I +H37hVZkLId6Tngr75qNJvTYw/ud3sqB1l7UtgYgXZSD32pAAn8lSzDLKNXz1PQ/Y +K9f1JmzJBjSWFupwWRoyeXkLtoh/D1JIPb9s2KJELtFOt3JY04kTlf5Eq/jXixtu +nLwsoFvVagCvXzfh1foQC5ichucmj87w7G6KVwuA406ywKBjYZC6VWg3dGq2ktuf +oYYitmUnDuy2n0Jg5GfCtdpBC8TTi2EbvPofkSvXRAdeuims2cXp71NIWuuA8ShY +Ic2wBlX7Jz9TkHCpBB5XJ7k= +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com Root Certification Authority ECC O=SSL Corporation +# Subject: CN=SSL.com Root Certification Authority ECC O=SSL Corporation +# Label: "SSL.com Root Certification Authority ECC" +# Serial: 8495723813297216424 +# MD5 Fingerprint: 2e:da:e4:39:7f:9c:8f:37:d1:70:9f:26:17:51:3a:8e +# SHA1 Fingerprint: c3:19:7c:39:24:e6:54:af:1b:c4:ab:20:95:7a:e2:c3:0e:13:02:6a +# SHA256 Fingerprint: 34:17:bb:06:cc:60:07:da:1b:96:1c:92:0b:8a:b4:ce:3f:ad:82:0e:4a:a3:0b:9a:cb:c4:a7:4e:bd:ce:bc:65 +-----BEGIN CERTIFICATE----- +MIICjTCCAhSgAwIBAgIIdebfy8FoW6gwCgYIKoZIzj0EAwIwfDELMAkGA1UEBhMC +VVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T +U0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0 +aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNDAzWhcNNDEwMjEyMTgxNDAz +WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hvdXN0 +b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNvbSBS +b290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuB +BAAiA2IABEVuqVDEpiM2nl8ojRfLliJkP9x6jh3MCLOicSS6jkm5BBtHllirLZXI +7Z4INcgn64mMU1jrYor+8FsPazFSY0E7ic3s7LaNGdM0B9y7xgZ/wkWV7Mt/qCPg +CemB+vNH06NjMGEwHQYDVR0OBBYEFILRhXMw5zUE044CkvvlpNHEIejNMA8GA1Ud +EwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUgtGFczDnNQTTjgKS++Wk0cQh6M0wDgYD +VR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2cAMGQCMG/n61kRpGDPYbCWe+0F+S8T +kdzt5fxQaxFGRrMcIQBiu77D5+jNB5n5DQtdcj7EqgIwH7y6C+IwJPt8bYBVCpk+ +gA0z5Wajs6O7pdWLjwkspl1+4vAHCGht0nxpbl/f5Wpl +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com EV Root Certification Authority RSA R2 O=SSL Corporation +# Subject: CN=SSL.com EV Root Certification Authority RSA R2 O=SSL Corporation +# Label: "SSL.com EV Root Certification Authority RSA R2" +# Serial: 6248227494352943350 +# MD5 Fingerprint: e1:1e:31:58:1a:ae:54:53:02:f6:17:6a:11:7b:4d:95 +# SHA1 Fingerprint: 74:3a:f0:52:9b:d0:32:a0:f4:4a:83:cd:d4:ba:a9:7b:7c:2e:c4:9a +# SHA256 Fingerprint: 2e:7b:f1:6c:c2:24:85:a7:bb:e2:aa:86:96:75:07:61:b0:ae:39:be:3b:2f:e9:d0:cc:6d:4e:f7:34:91:42:5c +-----BEGIN CERTIFICATE----- +MIIF6zCCA9OgAwIBAgIIVrYpzTS8ePYwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNV +BAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UE +CgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQDDC5TU0wuY29tIEVWIFJvb3QgQ2Vy +dGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIyMB4XDTE3MDUzMTE4MTQzN1oXDTQy +MDUzMDE4MTQzN1owgYIxCzAJBgNVBAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4G +A1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQD +DC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIy +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjzZlQOHWTcDXtOlG2mvq +M0fNTPl9fb69LT3w23jhhqXZuglXaO1XPqDQCEGD5yhBJB/jchXQARr7XnAjssuf +OePPxU7Gkm0mxnu7s9onnQqG6YE3Bf7wcXHswxzpY6IXFJ3vG2fThVUCAtZJycxa +4bH3bzKfydQ7iEGonL3Lq9ttewkfokxykNorCPzPPFTOZw+oz12WGQvE43LrrdF9 +HSfvkusQv1vrO6/PgN3B0pYEW3p+pKk8OHakYo6gOV7qd89dAFmPZiw+B6KjBSYR +aZfqhbcPlgtLyEDhULouisv3D5oi53+aNxPN8k0TayHRwMwi8qFG9kRpnMphNQcA +b9ZhCBHqurj26bNg5U257J8UZslXWNvNh2n4ioYSA0e/ZhN2rHd9NCSFg83XqpyQ +Gp8hLH94t2S42Oim9HizVcuE0jLEeK6jj2HdzghTreyI/BXkmg3mnxp3zkyPuBQV +PWKchjgGAGYS5Fl2WlPAApiiECtoRHuOec4zSnaqW4EWG7WK2NAAe15itAnWhmMO +pgWVSbooi4iTsjQc2KRVbrcc0N6ZVTsj9CLg+SlmJuwgUHfbSguPvuUCYHBBXtSu +UDkiFCbLsjtzdFVHB3mBOagwE0TlBIqulhMlQg+5U8Sb/M3kHN48+qvWBkofZ6aY +MBzdLNvcGJVXZsb/XItW9XcCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNV +HSMEGDAWgBT5YLvU49U09rj1BoAlp3PbRmmonjAdBgNVHQ4EFgQU+WC71OPVNPa4 +9QaAJadz20ZpqJ4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBW +s47LCp1Jjr+kxJG7ZhcFUZh1++VQLHqe8RT6q9OKPv+RKY9ji9i0qVQBDb6Thi/5 +Sm3HXvVX+cpVHBK+Rw82xd9qt9t1wkclf7nxY/hoLVUE0fKNsKTPvDxeH3jnpaAg +cLAExbf3cqfeIg29MyVGjGSSJuM+LmOW2puMPfgYCdcDzH2GguDKBAdRUNf/ktUM +79qGn5nX67evaOI5JpS6aLe/g9Pqemc9YmeuJeVy6OLk7K4S9ksrPJ/psEDzOFSz +/bdoyNrGj1E8svuR3Bznm53htw1yj+KkxKl4+esUrMZDBcJlOSgYAsOCsp0FvmXt +ll9ldDz7CTUue5wT/RsPXcdtgTpWD8w74a8CLyKsRspGPKAcTNZEtF4uXBVmCeEm +Kf7GUmG6sXP/wwyc5WxqlD8UykAWlYTzWamsX0xhk23RO8yilQwipmdnRC652dKK +QbNmC1r7fSOl8hqw/96bg5Qu0T/fkreRrwU7ZcegbLHNYhLDkBvjJc40vG93drEQ +w/cFGsDWr3RiSBd3kmmQYRzelYB0VI8YHMPzA9C/pEN1hlMYegouCRw2n5H9gooi +S9EOUCXdywMMF8mDAAhONU2Ki+3wApRmLER/y5UnlhetCTCstnEXbosX9hwJ1C07 +mKVx01QT2WDz9UtmT/rx7iASjbSsV7FFY6GsdqnC+w== +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com EV Root Certification Authority ECC O=SSL Corporation +# Subject: CN=SSL.com EV Root Certification Authority ECC O=SSL Corporation +# Label: "SSL.com EV Root Certification Authority ECC" +# Serial: 3182246526754555285 +# MD5 Fingerprint: 59:53:22:65:83:42:01:54:c0:ce:42:b9:5a:7c:f2:90 +# SHA1 Fingerprint: 4c:dd:51:a3:d1:f5:20:32:14:b0:c6:c5:32:23:03:91:c7:46:42:6d +# SHA256 Fingerprint: 22:a2:c1:f7:bd:ed:70:4c:c1:e7:01:b5:f4:08:c3:10:88:0f:e9:56:b5:de:2a:4a:44:f9:9c:87:3a:25:a7:c8 +-----BEGIN CERTIFICATE----- +MIIClDCCAhqgAwIBAgIILCmcWxbtBZUwCgYIKoZIzj0EAwIwfzELMAkGA1UEBhMC +VVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T +U0wgQ29ycG9yYXRpb24xNDAyBgNVBAMMK1NTTC5jb20gRVYgUm9vdCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNTIzWhcNNDEwMjEyMTgx +NTIzWjB/MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv +dXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjE0MDIGA1UEAwwrU1NMLmNv +bSBFViBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49 +AgEGBSuBBAAiA2IABKoSR5CYG/vvw0AHgyBO8TCCogbR8pKGYfL2IWjKAMTH6kMA +VIbc/R/fALhBYlzccBYy3h+Z1MzFB8gIH2EWB1E9fVwHU+M1OIzfzZ/ZLg1Kthku +WnBaBu2+8KGwytAJKaNjMGEwHQYDVR0OBBYEFFvKXuXe0oGqzagtZFG22XKbl+ZP +MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUW8pe5d7SgarNqC1kUbbZcpuX +5k8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQCK5kCJN+vp1RPZ +ytRrJPOwPYdGWBrssd9v+1a6cGvHOMzosYxPD/fxZ3YOg9AeUY8CMD32IygmTMZg +h5Mmm7I1HrrW9zzRHM76JTymGoEVW/MSD2zuZYrJh6j5B+BimoxcSg== +-----END CERTIFICATE----- + +# 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=GTS Root R1 O=Google Trust Services LLC +# Subject: CN=GTS Root R1 O=Google Trust Services LLC +# Label: "GTS Root R1" +# Serial: 146587175971765017618439757810265552097 +# MD5 Fingerprint: 82:1a:ef:d4:d2:4a:f2:9f:e2:3d:97:06:14:70:72:85 +# SHA1 Fingerprint: e1:c9:50:e6:ef:22:f8:4c:56:45:72:8b:92:20:60:d7:d5:a7:a3:e8 +# SHA256 Fingerprint: 2a:57:54:71:e3:13:40:bc:21:58:1c:bd:2c:f1:3e:15:84:63:20:3e:ce:94:bc:f9:d3:cc:19:6b:f0:9a:54:72 +-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgIQbkepxUtHDA3sM9CJuRz04TANBgkqhkiG9w0BAQwFADBH +MQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExM +QzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIy +MDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNl +cnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQC2EQKLHuOhd5s73L+UPreVp0A8of2C+X0yBoJx9vaM +f/vo27xqLpeXo4xL+Sv2sfnOhB2x+cWX3u+58qPpvBKJXqeqUqv4IyfLpLGcY9vX +mX7wCl7raKb0xlpHDU0QM+NOsROjyBhsS+z8CZDfnWQpJSMHobTSPS5g4M/SCYe7 +zUjwTcLCeoiKu7rPWRnWr4+wB7CeMfGCwcDfLqZtbBkOtdh+JhpFAz2weaSUKK0P +fyblqAj+lug8aJRT7oM6iCsVlgmy4HqMLnXWnOunVmSPlk9orj2XwoSPwLxAwAtc +vfaHszVsrBhQf4TgTM2S0yDpM7xSma8ytSmzJSq0SPly4cpk9+aCEI3oncKKiPo4 +Zor8Y/kB+Xj9e1x3+naH+uzfsQ55lVe0vSbv1gHR6xYKu44LtcXFilWr06zqkUsp +zBmkMiVOKvFlRNACzqrOSbTqn3yDsEB750Orp2yjj32JgfpMpf/VjsPOS+C12LOO +Rc92wO1AK/1TD7Cn1TsNsYqiA94xrcx36m97PtbfkSIS5r762DL8EGMUUXLeXdYW +k70paDPvOmbsB4om3xPXV2V4J95eSRQAogB/mqghtqmxlbCluQ0WEdrHbEg8QOB+ +DVrNVjzRlwW5y0vtOUucxD/SVRNuJLDWcfr0wbrM7Rv1/oFB2ACYPTrIrnqYNxgF +lQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV +HQ4EFgQU5K8rJnEaK0gnhS9SZizv8IkTcT4wDQYJKoZIhvcNAQEMBQADggIBADiW +Cu49tJYeX++dnAsznyvgyv3SjgofQXSlfKqE1OXyHuY3UjKcC9FhHb8owbZEKTV1 +d5iyfNm9dKyKaOOpMQkpAWBz40d8U6iQSifvS9efk+eCNs6aaAyC58/UEBZvXw6Z +XPYfcX3v73svfuo21pdwCxXu11xWajOl40k4DLh9+42FpLFZXvRq4d2h9mREruZR +gyFmxhE+885H7pwoHyXa/6xmld01D1zvICxi/ZG6qcz8WpyTgYMpl0p8WnK0OdC3 +d8t5/Wk6kjftbjhlRn7pYL15iJdfOBL07q9bgsiG1eGZbYwE8na6SfZu6W0eX6Dv +J4J2QPim01hcDyxC2kLGe4g0x8HYRZvBPsVhHdljUEn2NIVq4BjFbkerQUIpm/Zg +DdIx02OYI5NaAIFItO/Nis3Jz5nu2Z6qNuFoS3FJFDYoOj0dzpqPJeaAcWErtXvM ++SUWgeExX6GjfhaknBZqlxi9dnKlC54dNuYvoS++cJEPqOba+MSSQGwlfnuzCdyy +F62ARPBopY+Udf90WuioAnwMCeKpSwughQtiue+hMZL77/ZRBIls6Kl0obsXs7X9 +SQ98POyDGCBDTtWTurQ0sR8WNh8M5mQ5Fkzc4P4dyKliPUDqysU0ArSuiYgzNdws +E3PYJ/HQcu51OyLemGhmW/HGY0dVHLqlCFF1pkgl +-----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: 146587176055767053814479386953112547951 +# MD5 Fingerprint: 44:ed:9a:0e:a4:09:3b:00:f2:ae:4c:a3:c6:61:b0:8b +# SHA1 Fingerprint: d2:73:96:2a:2a:5e:39:9f:73:3f:e1:c7:1e:64:3f:03:38:34:fc:4d +# SHA256 Fingerprint: c4:5d:7b:b0:8e:6d:67:e6:2e:42:35:11:0b:56:4e:5f:78:fd:92:ef:05:8c:84:0a:ea:4e:64:55:d7:58:5c:60 +-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgIQbkepxlqz5yDFMJo/aFLybzANBgkqhkiG9w0BAQwFADBH +MQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExM +QzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIy +MDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNl +cnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQDO3v2m++zsFDQ8BwZabFn3GTXd98GdVarTzTukk3Lv +CvptnfbwhYBboUhSnznFt+4orO/LdmgUud+tAWyZH8QiHZ/+cnfgLFuv5AS/T3Kg +GjSY6Dlo7JUle3ah5mm5hRm9iYz+re026nO8/4Piy33B0s5Ks40FnotJk9/BW9Bu +XvAuMC6C/Pq8tBcKSOWIm8Wba96wyrQD8Nr0kLhlZPdcTK3ofmZemde4wj7I0BOd +re7kRXuJVfeKH2JShBKzwkCX44ofR5GmdFrS+LFjKBC4swm4VndAoiaYecb+3yXu +PuWgf9RhD1FLPD+M2uFwdNjCaKH5wQzpoeJ/u1U8dgbuak7MkogwTZq9TwtImoS1 +mKPV+3PBV2HdKFZ1E66HjucMUQkQdYhMvI35ezzUIkgfKtzra7tEscszcTJGr61K +8YzodDqs5xoic4DSMPclQsciOzsSrZYuxsN2B6ogtzVJV+mSSeh2FnIxZyuWfoqj +x5RWIr9qS34BIbIjMt/kmkRtWVtd9QCgHJvGeJeNkP+byKq0rxFROV7Z+2et1VsR +nTKaG73VululycslaVNVJ1zgyjbLiGH7HrfQy+4W+9OmTN6SpdTi3/UGVN4unUu0 +kzCqgc7dGtxRcw1PcOnlthYhGXmy5okLdWTK1au8CcEYof/UVKGFPP0UJAOyh9Ok +twIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV +HQ4EFgQUu//KjiOfT5nK2+JopqUVJxce2Q4wDQYJKoZIhvcNAQEMBQADggIBALZp +8KZ3/p7uC4Gt4cCpx/k1HUCCq+YEtN/L9x0Pg/B+E02NjO7jMyLDOfxA325BS0JT +vhaI8dI4XsRomRyYUpOM52jtG2pzegVATX9lO9ZY8c6DR2Dj/5epnGB3GFW1fgiT +z9D2PGcDFWEJ+YF59exTpJ/JjwGLc8R3dtyDovUMSRqodt6Sm2T4syzFJ9MHwAiA +pJiS4wGWAqoC7o87xdFtCjMwc3i5T1QWvwsHoaRc5svJXISPD+AVdyx+Jn7axEvb +pxZ3B7DNdehyQtaVhJ2Gg/LkkM0JR9SLA3DaWsYDQvTtN6LwG1BUSw7YhN4ZKJmB +R64JGz9I0cNv4rBgF/XuIwKl2gBbbZCr7qLpGzvpx0QnRY5rn/WkhLx3+WuXrD5R +RaIRpsyF7gpo8j5QOHokYh4XIDdtak23CZvJ/KRY9bb7nE4Yu5UC56GtmwfuNmsk +0jmGwZODUNKBRqhfYlcsu2xkiAhu7xNUX90txGdj08+JN7+dIPT7eoOboB6BAFDC +5AwiWVIQ7UNWhwD4FFKnHYuTjKJNRn8nxnGbJN7k2oaLDX5rIMHAnuFl2GqjpuiF +izoHCBy69Y9Vmhh1fuXsgWbRIXOhNUQLgD1bnF5vKheW0YMjiGZt5obicDIvUiLn +yOd/xCxgXS/Dr55FBcOEArf9LAhST4Ldo/DUhgkC +-----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: 146587176140553309517047991083707763997 +# MD5 Fingerprint: 1a:79:5b:6b:04:52:9c:5d:c7:74:33:1b:25:9a:f9:25 +# SHA1 Fingerprint: 30:d4:24:6f:07:ff:db:91:89:8a:0b:e9:49:66:11:eb:8c:5e:46:e5 +# SHA256 Fingerprint: 15:d5:b8:77:46:19:ea:7d:54:ce:1c:a6:d0:b0:c4:03:e0:37:a9:17:f1:31:e8:a0:4e:1e:6b:7a:71:ba:bc:e5 +-----BEGIN CERTIFICATE----- +MIICDDCCAZGgAwIBAgIQbkepx2ypcyRAiQ8DVd2NHTAKBggqhkjOPQQDAzBHMQsw +CQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU +MBIGA1UEAxMLR1RTIFJvb3QgUjMwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw +MDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp +Y2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAAQfTzOHMymKoYTey8chWEGJ6ladK0uFxh1MJ7x/JlFyb+Kf1qPKzEUURout +736GjOyxfi//qXGdGIRFBEFVbivqJn+7kAHjSxm65FSWRQmx1WyRRK2EE46ajA2A +DDL24CejQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud +DgQWBBTB8Sa6oC2uhYHP0/EqEr24Cmf9vDAKBggqhkjOPQQDAwNpADBmAjEAgFuk +fCPAlaUs3L6JbyO5o91lAFJekazInXJ0glMLfalAvWhgxeG4VDvBNhcl2MG9AjEA +njWSdIUlUfUk7GRSJFClH9voy8l27OyCbvWFGFPouOOaKaqW04MjyaR7YbPMAuhd +-----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: 146587176229350439916519468929765261721 +# MD5 Fingerprint: 5d:b6:6a:c4:60:17:24:6a:1a:99:a8:4b:ee:5e:b4:26 +# SHA1 Fingerprint: 2a:1d:60:27:d9:4a:b1:0a:1c:4d:91:5c:cd:33:a0:cb:3e:2d:54:cb +# SHA256 Fingerprint: 71:cc:a5:39:1f:9e:79:4b:04:80:25:30:b3:63:e1:21:da:8a:30:43:bb:26:66:2f:ea:4d:ca:7f:c9:51:a4:bd +-----BEGIN CERTIFICATE----- +MIICCjCCAZGgAwIBAgIQbkepyIuUtui7OyrYorLBmTAKBggqhkjOPQQDAzBHMQsw +CQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU +MBIGA1UEAxMLR1RTIFJvb3QgUjQwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw +MDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp +Y2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAATzdHOnaItgrkO4NcWBMHtLSZ37wWHO5t5GvWvVYRg1rkDdc/eJkTBa6zzu +hXyiQHY7qca4R9gq55KRanPpsXI5nymfopjTX15YhmUPoYRlBtHci8nHc8iMai/l +xKvRHYqjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud +DgQWBBSATNbrdP9JNqPV2Py1PsVq8JQdjDAKBggqhkjOPQQDAwNnADBkAjBqUFJ0 +CMRw3J5QdCHojXohw0+WbhXRIjVhLfoIN+4Zba3bssx9BzT1YBkstTTZbyACMANx +sbqjYAuG7ZoIapVon+Kz4ZNkfF6Tpt95LY2F45TPI11xzPKwTdb+mciUqXWi4w== +-----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=Entrust Root Certification Authority - G4 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2015 Entrust, Inc. - for authorized use only +# Subject: CN=Entrust Root Certification Authority - G4 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2015 Entrust, Inc. - for authorized use only +# Label: "Entrust Root Certification Authority - G4" +# Serial: 289383649854506086828220374796556676440 +# MD5 Fingerprint: 89:53:f1:83:23:b7:7c:8e:05:f1:8c:71:38:4e:1f:88 +# SHA1 Fingerprint: 14:88:4e:86:26:37:b0:26:af:59:62:5c:40:77:ec:35:29:ba:96:01 +# SHA256 Fingerprint: db:35:17:d1:f6:73:2a:2d:5a:b9:7c:53:3e:c7:07:79:ee:32:70:a6:2f:b4:ac:42:38:37:24:60:e6:f0:1e:88 +-----BEGIN CERTIFICATE----- +MIIGSzCCBDOgAwIBAgIRANm1Q3+vqTkPAAAAAFVlrVgwDQYJKoZIhvcNAQELBQAw +gb4xCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQL +Ex9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykg +MjAxNSBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMjAw +BgNVBAMTKUVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEc0 +MB4XDTE1MDUyNzExMTExNloXDTM3MTIyNzExNDExNlowgb4xCzAJBgNVBAYTAlVT +MRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1 +c3QubmV0L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxNSBFbnRydXN0LCBJ +bmMuIC0gZm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMjAwBgNVBAMTKUVudHJ1c3Qg +Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEc0MIICIjANBgkqhkiG9w0B +AQEFAAOCAg8AMIICCgKCAgEAsewsQu7i0TD/pZJH4i3DumSXbcr3DbVZwbPLqGgZ +2K+EbTBwXX7zLtJTmeH+H17ZSK9dE43b/2MzTdMAArzE+NEGCJR5WIoV3imz/f3E +T+iq4qA7ec2/a0My3dl0ELn39GjUu9CH1apLiipvKgS1sqbHoHrmSKvS0VnM1n4j +5pds8ELl3FFLFUHtSUrJ3hCX1nbB76W1NhSXNdh4IjVS70O92yfbYVaCNNzLiGAM +C1rlLAHGVK/XqsEQe9IFWrhAnoanw5CGAlZSCXqc0ieCU0plUmr1POeo8pyvi73T +DtTUXm6Hnmo9RR3RXRv06QqsYJn7ibT/mCzPfB3pAqoEmh643IhuJbNsZvc8kPNX +wbMv9W3y+8qh+CmdRouzavbmZwe+LGcKKh9asj5XxNMhIWNlUpEbsZmOeX7m640A +2Vqq6nPopIICR5b+W45UYaPrL0swsIsjdXJ8ITzI9vF01Bx7owVV7rtNOzK+mndm +nqxpkCIHH2E6lr7lmk/MBTwoWdPBDFSoWWG9yHJM6Nyfh3+9nEg2XpWjDrk4JFX8 +dWbrAuMINClKxuMrLzOg2qOGpRKX/YAr2hRC45K9PvJdXmd0LhyIRyk0X+IyqJwl +N4y6mACXi0mWHv0liqzc2thddG5msP9E36EYxr5ILzeUePiVSj9/E15dWf10hkNj +c0kCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD +VR0OBBYEFJ84xFYjwznooHFs6FRM5Og6sb9nMA0GCSqGSIb3DQEBCwUAA4ICAQAS +5UKme4sPDORGpbZgQIeMJX6tuGguW8ZAdjwD+MlZ9POrYs4QjbRaZIxowLByQzTS +Gwv2LFPSypBLhmb8qoMi9IsabyZIrHZ3CL/FmFz0Jomee8O5ZDIBf9PD3Vht7LGr +hFV0d4QEJ1JrhkzO3bll/9bGXp+aEJlLdWr+aumXIOTkdnrG0CSqkM0gkLpHZPt/ +B7NTeLUKYvJzQ85BK4FqLoUWlFPUa19yIqtRLULVAJyZv967lDtX/Zr1hstWO1uI +AeV8KEsD+UmDfLJ/fOPtjqF/YFOOVZ1QNBIPt5d7bIdKROf1beyAN/BYGW5KaHbw +H5Lk6rWS02FREAutp9lfx1/cH6NcjKF+m7ee01ZvZl4HliDtC3T7Zk6LERXpgUl+ +b7DUUH8i119lAg2m9IUe2K4GS0qn0jFmwvjO5QimpAKWRGhXxNUzzxkvFMSUHHuk +2fCfDrGA4tGeEWSpiBE6doLlYsKA2KSD7ZPvfC+QsDJMlhVoSFLUmQjAJOgc47Ol +IQ6SwJAfzyBfyjs4x7dtOvPmRLgOMWuIjnDrnBdSqEGULoe256YSxXXfW8AKbnuk +5F6G+TaU33fD6Q3AOfF5u0aOq0NZJ7cguyPpVkAh7DE9ZapD8j3fcEThuk0mEDuY +n/PIjhs4ViFqUZPTkcpG2om3PVODLAgfi49T3f+sHw== +-----END CERTIFICATE----- diff --git a/venv/lib/python3.7/site-packages/cffi-1.13.2.dist-info/METADATA b/venv/lib/python3.7/site-packages/cffi-1.13.2.dist-info/METADATA new file mode 100644 index 0000000..9bbb9ee --- /dev/null +++ b/venv/lib/python3.7/site-packages/cffi-1.13.2.dist-info/METADATA @@ -0,0 +1,36 @@ +Metadata-Version: 2.1 +Name: cffi +Version: 1.13.2 +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 +Platform: UNKNOWN +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.6 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.2 +Classifier: Programming Language :: Python :: 3.3 +Classifier: Programming Language :: Python :: 3.4 +Classifier: Programming Language :: Python :: 3.5 +Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy +Requires-Dist: pycparser + + +CFFI +==== + +Foreign Function Interface for Python calling C code. +Please see the `Documentation `_. + +Contact +------- + +`Mailing list `_ + + diff --git a/venv/lib/python3.7/site-packages/cffi-1.13.2.dist-info/RECORD b/venv/lib/python3.7/site-packages/cffi-1.13.2.dist-info/RECORD new file mode 100644 index 0000000..a6ab8f3 --- /dev/null +++ b/venv/lib/python3.7/site-packages/cffi-1.13.2.dist-info/RECORD @@ -0,0 +1,44 @@ +_cffi_backend.cpython-37m-darwin.so,sha256=LJzSWP4IkbkOAteI0N3d_C0N6WbcaMVgMTtnenPD7cs,405376 +cffi/__init__.py,sha256=S9BTr5ma0KrdRubi0WQGrLfmLhRgkYWvLaGRqy2xiPc,513 +cffi/_cffi_errors.h,sha256=6nFQ-4dRQI1bXRoSeqdvyKU33TmutQJB_2fAhWSzdl8,3856 +cffi/_cffi_include.h,sha256=JuFfmwpRE65vym3Nxr9vDMOIEuv21tXdarkL1l2WNms,12149 +cffi/_embedding.h,sha256=fXmvYWE96kCgekPNX1_FnYAUJ9I6gnSrBhhRAHKdhww,17411 +cffi/api.py,sha256=Q07iwDD0FRwWa2fx2ZzQft69iJs9aNR52fvrtUy3EY4,41800 +cffi/backend_ctypes.py,sha256=h5ZIzLc6BFVXnGyc9xPqZWUS7qGy7yFSDqXe68Sa8z4,42454 +cffi/cffi_opcode.py,sha256=v9RdD_ovA8rCtqsC95Ivki5V667rAOhGgs3fb2q9xpM,5724 +cffi/commontypes.py,sha256=QS4uxCDI7JhtTyjh1hlnCA-gynmaszWxJaRRLGkJa1A,2689 +cffi/cparser.py,sha256=l4Hy6H2H3q4-0-Mv-5ld3mkH4qRFybWz2CTwNUtNpw0,42071 +cffi/error.py,sha256=v6xTiS4U0kvDcy4h_BDRo5v39ZQuj-IMRYLv5ETddZs,877 +cffi/ffiplatform.py,sha256=HMXqR8ks2wtdsNxGaWpQ_PyqIvtiuos_vf1qKCy-cwg,4046 +cffi/lock.py,sha256=l9TTdwMIMpi6jDkJGnQgE9cvTIR7CAntIJr8EGHt3pY,747 +cffi/model.py,sha256=AYyjS26uiFKXtkm43qmStpy9zfGh5HVJF4UETYFBt6w,21682 +cffi/parse_c_type.h,sha256=OdwQfwM9ktq6vlCB43exFQmxDBtj2MBNdK8LYl15tjw,5976 +cffi/pkgconfig.py,sha256=LP1w7vmWvmKwyqLaU1Z243FOWGNQMrgMUZrvgFuOlco,4374 +cffi/recompiler.py,sha256=9BR4oOQ9wFTMrp6CGa4Pa4U1pAU64Mv5-KwW5Hdn3ZM,62755 +cffi/setuptools_ext.py,sha256=qc6arfrSzm4RNT5oJz6d5td7KJ-pHfI7bqYD0X4Q-08,8848 +cffi/vengine_cpy.py,sha256=hdyjjZNijLrg_uGMnnFyC-7GG_LxWtwB8BlS2vvVDQ0,41470 +cffi/vengine_gen.py,sha256=Zkq0-EdeZwn6qUvf_CI8iUEs2UxVIvDmKCH1j0-y0GI,26676 +cffi/verifier.py,sha256=J9Enz2rbJb9CHPqWlWQ5uQESoyr0uc7MNWugchjXBv4,11207 +cffi-1.13.2.dist-info/LICENSE,sha256=BLgPWwd7vtaICM_rreteNSPyqMmpZJXFh72W3x6sKjM,1294 +cffi-1.13.2.dist-info/METADATA,sha256=7iXowU_BLqDyZXb5vOztg3wha0RmjMcxL_MtvN0EnDo,1140 +cffi-1.13.2.dist-info/WHEEL,sha256=ZAPg4sh1IYHKqp2FoarXKab2VRxd7s7md0doFSVDALY,109 +cffi-1.13.2.dist-info/entry_points.txt,sha256=Q9f5C9IpjYxo0d2PK9eUcnkgxHc9pHWwjEMaANPKNCI,76 +cffi-1.13.2.dist-info/top_level.txt,sha256=rE7WR3rZfNKxWI9-jn6hsHCAl7MDkB-FmuQbxWjFehQ,19 +cffi-1.13.2.dist-info/RECORD,, +cffi-1.13.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +cffi/__pycache__/ffiplatform.cpython-37.pyc,, +cffi/__pycache__/commontypes.cpython-37.pyc,, +cffi/__pycache__/cffi_opcode.cpython-37.pyc,, +cffi/__pycache__/backend_ctypes.cpython-37.pyc,, +cffi/__pycache__/model.cpython-37.pyc,, +cffi/__pycache__/vengine_cpy.cpython-37.pyc,, +cffi/__pycache__/verifier.cpython-37.pyc,, +cffi/__pycache__/pkgconfig.cpython-37.pyc,, +cffi/__pycache__/lock.cpython-37.pyc,, +cffi/__pycache__/cparser.cpython-37.pyc,, +cffi/__pycache__/setuptools_ext.cpython-37.pyc,, +cffi/__pycache__/vengine_gen.cpython-37.pyc,, +cffi/__pycache__/api.cpython-37.pyc,, +cffi/__pycache__/error.cpython-37.pyc,, +cffi/__pycache__/__init__.cpython-37.pyc,, +cffi/__pycache__/recompiler.cpython-37.pyc,, diff --git a/venv/lib/python3.7/site-packages/cffi-1.13.2.dist-info/top_level.txt b/venv/lib/python3.7/site-packages/cffi-1.13.2.dist-info/top_level.txt new file mode 100644 index 0000000..f645779 --- /dev/null +++ b/venv/lib/python3.7/site-packages/cffi-1.13.2.dist-info/top_level.txt @@ -0,0 +1,2 @@ +_cffi_backend +cffi diff --git a/venv/lib/python3.7/site-packages/cffi/_cffi_errors.h b/venv/lib/python3.7/site-packages/cffi/_cffi_errors.h new file mode 100644 index 0000000..83cdad0 --- /dev/null +++ b/venv/lib/python3.7/site-packages/cffi/_cffi_errors.h @@ -0,0 +1,147 @@ +#ifndef CFFI_MESSAGEBOX +# ifdef _MSC_VER +# define CFFI_MESSAGEBOX 1 +# else +# define CFFI_MESSAGEBOX 0 +# endif +#endif + + +#if CFFI_MESSAGEBOX +/* Windows only: logic to take the Python-CFFI embedding logic + initialization errors and display them in a background thread + with MessageBox. The idea is that if the whole program closes + as a result of this problem, then likely it is already a console + program and you can read the stderr output in the console too. + If it is not a console program, then it will likely show its own + dialog to complain, or generally not abruptly close, and for this + case the background thread should stay alive. +*/ +static void *volatile _cffi_bootstrap_text; + +static PyObject *_cffi_start_error_capture(void) +{ + PyObject *result = NULL; + PyObject *x, *m, *bi; + + if (InterlockedCompareExchangePointer(&_cffi_bootstrap_text, + (void *)1, NULL) != NULL) + return (PyObject *)1; + + m = PyImport_AddModule("_cffi_error_capture"); + if (m == NULL) + goto error; + + result = PyModule_GetDict(m); + if (result == NULL) + goto error; + +#if PY_MAJOR_VERSION >= 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" + "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.7/site-packages/cffi/commontypes.py b/venv/lib/python3.7/site-packages/cffi/commontypes.py new file mode 100644 index 0000000..8ec97c7 --- /dev/null +++ b/venv/lib/python3.7/site-packages/cffi/commontypes.py @@ -0,0 +1,80 @@ +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 + +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.7/site-packages/cffi/cparser.py b/venv/lib/python3.7/site-packages/cffi/cparser.py new file mode 100644 index 0000000..ea27c48 --- /dev/null +++ b/venv/lib/python3.7/site-packages/cffi/cparser.py @@ -0,0 +1,963 @@ +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_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 _preprocess(csource): + # Remove comments. NOTE: this only work because the cdef() section + # should not contain any string literal! + csource = _r_comment.sub(' ', 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. + return csource.replace('...', ' __dotdotdot__ '), 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) + 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) + self._declare('typedef ' + decl.name, realtype, quals=quals) + elif decl.__class__.__name__ == 'Pragma': + pass # skip pragma, only in pycparser 2.15 + 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): + # 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) + tp, quals = self._get_type_and_quals(typenode.type, + partial_length_ok=partial_length_ok) + 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.7/site-packages/cffi/error.py b/venv/lib/python3.7/site-packages/cffi/error.py new file mode 100644 index 0000000..0a27247 --- /dev/null +++ b/venv/lib/python3.7/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.7/site-packages/cffi/model.py b/venv/lib/python3.7/site-packages/cffi/model.py new file mode 100644 index 0000000..5f1b0d2 --- /dev/null +++ b/venv/lib/python3.7/site-packages/cffi/model.py @@ -0,0 +1,614 @@ +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', + 'float _Complex': 'j', + 'double _Complex': '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 = qualify(quals, " *&") + if totype.is_array_type: + extra = "(%s)" % (extra.lstrip(),) + 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 resolve_length(self, newlength): + return ArrayType(self.item, newlength) + + def build_backend_type(self, ffi, finishlist): + if self.length == '...': + 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 == '...': + # 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.7/site-packages/cffi/parse_c_type.h b/venv/lib/python3.7/site-packages/cffi/parse_c_type.h new file mode 100644 index 0000000..84e4ef8 --- /dev/null +++ b/venv/lib/python3.7/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.7/site-packages/cffi/pkgconfig.py b/venv/lib/python3.7/site-packages/cffi/pkgconfig.py new file mode 100644 index 0000000..5c93f15 --- /dev/null +++ b/venv/lib/python3.7/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.7/site-packages/cffi/vengine_cpy.py b/venv/lib/python3.7/site-packages/cffi/vengine_cpy.py new file mode 100644 index 0000000..536f11f --- /dev/null +++ b/venv/lib/python3.7/site-packages/cffi/vengine_cpy.py @@ -0,0 +1,1015 @@ +# +# DEPRECATED: implementation for ffi.verify() +# +import sys, imp +from . import model +from .error import VerificationError + + +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 + 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): + if isinstance(tp, model.PointerType): + localvars.add('Py_ssize_t datasize') + + 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(' if (datasize < 0)') + self._prnt(' %s;' % errcode) + self._prnt(' %s = alloca((size_t)datasize);' % (tovar,)) + self._prnt(' memset((void *)%s, 0, (size_t)datasize);' % (tovar,)) + self._prnt(' if (_cffi_convert_array_from_object(' + '(char *)%s, _cffi_type(%d), %s) < 0)' % ( + tovar, self._gettypenum(tp), fromvar)) + 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() + for type in tp.args: + self._extra_local_variables(type, localvars) + for decl in 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)) + 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(' return %s;' % + self._convert_expr_from_c(tp.result, 'result', 'result type')) + else: + 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 == '...')) + 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 == '...': + 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 +#else +# include +# if (defined (__SVR4) && defined (__sun)) || defined(_AIX) || defined(__hpux) +# include +# endif +#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); +} + +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.7/site-packages/cffi/verifier.py b/venv/lib/python3.7/site-packages/cffi/verifier.py new file mode 100644 index 0000000..59b78c2 --- /dev/null +++ b/venv/lib/python3.7/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([sys.version[:3], __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): + ffiplatform._hack_at_distutils() # backward compatibility hack + 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.7/site-packages/channels-2.3.1.dist-info/RECORD b/venv/lib/python3.7/site-packages/channels-2.3.1.dist-info/RECORD new file mode 100644 index 0000000..b68ec96 --- /dev/null +++ b/venv/lib/python3.7/site-packages/channels-2.3.1.dist-info/RECORD @@ -0,0 +1,64 @@ +channels/__init__.py,sha256=g1v_9G0wEY66XuTmoRIN7zLl9mSxiXwD_bW-JMtXPcA,109 +channels/apps.py,sha256=Y_JZ0GiWrr6GSkinzRMIyqkYlHR0Dr8f93B25_EJqFE,501 +channels/auth.py,sha256=zUL2LFBIP8ZPXa0nDfIuanCpbXa0vPogBxzp2ol7sqU,6090 +channels/consumer.py,sha256=Yg9QmzQy12oOHICH34zb8M65o41Uc03qxVOTl0RkTSk,3679 +channels/db.py,sha256=hfXljAYAMaRPM_pXyEOzAebnkFfv2LVDG9R61LPGNwA,563 +channels/exceptions.py,sha256=-AJy2YuE4geaucjGDo59ZA78a-m5ZMJNOUS_QVzSASo,1119 +channels/hacks.py,sha256=is-0JEUYllpMt7gG_Tzxc1-bcAi5XHseUajFtKzO7UE,467 +channels/http.py,sha256=YVu7L9ne_DAx4JnYSj6szLk5jBBU5qLlnu3_9HlR8g0,14442 +channels/layers.py,sha256=YoZe4ddMMpwsHEjzPFBTAL1dONBcuVgt-SV13hNZxhI,12150 +channels/middleware.py,sha256=W_8pU8nNuSB6zp3zzPWa27h0ZAu3aVlnDQnJ7L85lT0,1380 +channels/routing.py,sha256=mCiPXw1TKcRiZciVEliBJgJyEfqQp0zRH4gNbktOFic,6414 +channels/sessions.py,sha256=J7rxL7oaCk5c0jEbeC_aWvxDb_eQP2M_SFQUBvQ7dAI,9742 +channels/signals.py,sha256=wj1M2JVhW5rKhKfJf2LK2fxIl9sGWYtQC9oPJ5-OSTE,270 +channels/staticfiles.py,sha256=3SsXAMWhSm4FqapLduE0sPvkzYiDZ3AaKv-rJ3dfVgg,2311 +channels/utils.py,sha256=_bT5fyzEMNMW080FjgUA9t-EkQUlg174kCo88JiTvAE,2176 +channels/worker.py,sha256=6z_R8hUqlD9bz2vNHi1NCgZyxLMNzU_0t6tF-APk7yI,1687 +channels/generic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +channels/generic/http.py,sha256=Mkyh_sa-Qi-1jmNXsVF3OjORfbROsskqSjyJConFe3I,3131 +channels/generic/websocket.py,sha256=l9q-JWna1GSEvG5NyX_myScAPAlB0El3JrjxNIl1KD8,8647 +channels/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +channels/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +channels/management/commands/runserver.py,sha256=m1YySjmC_lYgs2VBhrsLKdd8NwvM_ARD7ZZLjwMmlDo,7037 +channels/management/commands/runworker.py,sha256=jxrR0_x0mdG7rlRV4cNtuWB6ZylzSeBkyiEGZt72lV4,1594 +channels/security/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +channels/security/websocket.py,sha256=27byUdUY0-jjoMTjideyuL8XMLKe-TAayrKGjwquyt8,5764 +channels/testing/__init__.py,sha256=4Gv--eDMF5__J4ESnf4JLPxeYn_1I9tPV1x0GJUL_98,343 +channels/testing/http.py,sha256=9XR-hXcWvx_BmXFwetEp7jez9yf7daS1LbWWtSP_r5s,2043 +channels/testing/live.py,sha256=dE2EoOFhpMljLElUQ894IYAbjNlKGGP1NQCayoUinNc,2316 +channels/testing/websocket.py,sha256=d6YAJhLCwEL6n-u_LEEFzwjZl_xA5PaQd8G0tydCTfk,3901 +channels-2.3.1.dist-info/LICENSE,sha256=uEZBXRtRTpwd_xSiLeuQbXlLxUbKYSn5UKGM0JHipmk,1552 +channels-2.3.1.dist-info/METADATA,sha256=xJJcWC8kMPST08-gXmIgbfiD2a6XrtecOWuWQ6gZMaM,1374 +channels-2.3.1.dist-info/WHEEL,sha256=8zNYZbwQSXoB9IfXOjPfeNwvAsALAjffgk27FqvCWbo,110 +channels-2.3.1.dist-info/top_level.txt,sha256=5-YaD2ZIFwhfgn0xikDTCwaofGY9Tg_HVyZkw2ocUnA,9 +channels-2.3.1.dist-info/RECORD,, +channels-2.3.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +channels/security/__pycache__/websocket.cpython-37.pyc,, +channels/security/__pycache__/__init__.cpython-37.pyc,, +channels/management/__pycache__/__init__.cpython-37.pyc,, +channels/management/commands/__pycache__/runworker.cpython-37.pyc,, +channels/management/commands/__pycache__/runserver.cpython-37.pyc,, +channels/management/commands/__pycache__/__init__.cpython-37.pyc,, +channels/__pycache__/exceptions.cpython-37.pyc,, +channels/__pycache__/sessions.cpython-37.pyc,, +channels/__pycache__/signals.cpython-37.pyc,, +channels/__pycache__/staticfiles.cpython-37.pyc,, +channels/__pycache__/db.cpython-37.pyc,, +channels/__pycache__/middleware.cpython-37.pyc,, +channels/__pycache__/auth.cpython-37.pyc,, +channels/__pycache__/apps.cpython-37.pyc,, +channels/__pycache__/routing.cpython-37.pyc,, +channels/__pycache__/consumer.cpython-37.pyc,, +channels/__pycache__/layers.cpython-37.pyc,, +channels/__pycache__/utils.cpython-37.pyc,, +channels/__pycache__/http.cpython-37.pyc,, +channels/__pycache__/worker.cpython-37.pyc,, +channels/__pycache__/__init__.cpython-37.pyc,, +channels/__pycache__/hacks.cpython-37.pyc,, +channels/testing/__pycache__/live.cpython-37.pyc,, +channels/testing/__pycache__/websocket.cpython-37.pyc,, +channels/testing/__pycache__/http.cpython-37.pyc,, +channels/testing/__pycache__/__init__.cpython-37.pyc,, +channels/generic/__pycache__/websocket.cpython-37.pyc,, +channels/generic/__pycache__/http.cpython-37.pyc,, +channels/generic/__pycache__/__init__.cpython-37.pyc,, diff --git a/venv/lib/python3.7/site-packages/channels/auth.py b/venv/lib/python3.7/site-packages/channels/auth.py new file mode 100644 index 0000000..041316a --- /dev/null +++ b/venv/lib/python3.7/site-packages/channels/auth.py @@ -0,0 +1,172 @@ +from django.conf import settings +from django.contrib.auth import ( + BACKEND_SESSION_KEY, + HASH_SESSION_KEY, + SESSION_KEY, + _get_backends, + get_user_model, + load_backend, + user_logged_in, + user_logged_out, +) +from django.contrib.auth.models import AnonymousUser +from django.utils.crypto import constant_time_compare +from django.utils.functional import LazyObject +from django.utils.translation import LANGUAGE_SESSION_KEY + +from channels.db import database_sync_to_async +from channels.middleware import BaseMiddleware +from channels.sessions import CookieMiddleware, SessionMiddleware + + +@database_sync_to_async +def get_user(scope): + """ + Return the user model instance associated with the given scope. + If no user is retrieved, return an instance of `AnonymousUser`. + """ + if "session" not in scope: + raise ValueError( + "Cannot find session in scope. You should wrap your consumer in SessionMiddleware." + ) + session = scope["session"] + user = None + try: + user_id = _get_user_session_key(session) + backend_path = session[BACKEND_SESSION_KEY] + except KeyError: + pass + else: + if backend_path in settings.AUTHENTICATION_BACKENDS: + backend = load_backend(backend_path) + user = backend.get_user(user_id) + # Verify the session + if hasattr(user, "get_session_auth_hash"): + session_hash = session.get(HASH_SESSION_KEY) + session_hash_verified = session_hash and constant_time_compare( + session_hash, user.get_session_auth_hash() + ) + if not session_hash_verified: + session.flush() + user = None + return user or AnonymousUser() + + +@database_sync_to_async +def login(scope, user, backend=None): + """ + Persist a user id and a backend in the request. + This way a user doesn't have to re-authenticate on every request. + Note that data set during the anonymous session is retained when the user logs in. + """ + if "session" not in scope: + raise ValueError( + "Cannot find session in scope. You should wrap your consumer in SessionMiddleware." + ) + session = scope["session"] + session_auth_hash = "" + if user is None: + user = scope.get("user", None) + if user is None: + raise ValueError( + "User must be passed as an argument or must be present in the scope." + ) + if hasattr(user, "get_session_auth_hash"): + session_auth_hash = user.get_session_auth_hash() + if SESSION_KEY in session: + if _get_user_session_key(session) != user.pk or ( + session_auth_hash + and not constant_time_compare( + session.get(HASH_SESSION_KEY, ""), session_auth_hash + ) + ): + # To avoid reusing another user's session, create a new, empty + # session if the existing session corresponds to a different + # authenticated user. + session.flush() + else: + session.cycle_key() + try: + backend = backend or user.backend + except AttributeError: + backends = _get_backends(return_tuples=True) + if len(backends) == 1: + _, backend = backends[0] + else: + raise ValueError( + "You have multiple authentication backends configured and therefore must provide the `backend` " + "argument or set the `backend` attribute on the user." + ) + session[SESSION_KEY] = user._meta.pk.value_to_string(user) + session[BACKEND_SESSION_KEY] = backend + session[HASH_SESSION_KEY] = session_auth_hash + scope["user"] = user + # note this does not reset the CSRF_COOKIE/Token + user_logged_in.send(sender=user.__class__, request=None, user=user) + + +@database_sync_to_async +def logout(scope): + """ + Remove the authenticated user's ID from the request and flush their session data. + """ + if "session" not in scope: + raise ValueError( + "Login cannot find session in scope. You should wrap your consumer in SessionMiddleware." + ) + session = scope["session"] + # Dispatch the signal before the user is logged out so the receivers have a + # chance to find out *who* logged out. + user = scope.get("user", None) + if hasattr(user, "is_authenticated") and not user.is_authenticated: + user = None + if user is not None: + user_logged_out.send(sender=user.__class__, request=None, user=user) + # remember language choice saved to session + language = session.get(LANGUAGE_SESSION_KEY) + session.flush() + if language is not None: + session[LANGUAGE_SESSION_KEY] = language + if "user" in scope: + scope["user"] = AnonymousUser() + + +def _get_user_session_key(session): + # This value in the session is always serialized to a string, so we need + # to convert it back to Python whenever we access it. + return get_user_model()._meta.pk.to_python(session[SESSION_KEY]) + + +class UserLazyObject(LazyObject): + """ + Throw a more useful error message when scope['user'] is accessed before it's resolved + """ + + def _setup(self): + raise ValueError("Accessing scope user before it is ready.") + + +class AuthMiddleware(BaseMiddleware): + """ + Middleware which populates scope["user"] from a Django session. + Requires SessionMiddleware to function. + """ + + def populate_scope(self, scope): + # Make sure we have a session + if "session" not in scope: + raise ValueError( + "AuthMiddleware cannot find session in scope. SessionMiddleware must be above it." + ) + # Add it to the scope if it's not there already + if "user" not in scope: + scope["user"] = UserLazyObject() + + async def resolve_scope(self, scope): + scope["user"]._wrapped = await get_user(scope) + + +# Handy shortcut for applying all three layers at once +AuthMiddlewareStack = lambda inner: CookieMiddleware( + SessionMiddleware(AuthMiddleware(inner)) +) diff --git a/venv/lib/python3.7/site-packages/channels/consumer.py b/venv/lib/python3.7/site-packages/channels/consumer.py new file mode 100644 index 0000000..704c038 --- /dev/null +++ b/venv/lib/python3.7/site-packages/channels/consumer.py @@ -0,0 +1,113 @@ +import functools + +from asgiref.sync import async_to_sync + +from . import DEFAULT_CHANNEL_LAYER +from .db import database_sync_to_async +from .exceptions import StopConsumer +from .layers import get_channel_layer +from .utils import await_many_dispatch + + +def get_handler_name(message): + """ + Looks at a message, checks it has a sensible type, and returns the + handler name for that type. + """ + # Check message looks OK + if "type" not in message: + raise ValueError("Incoming message has no 'type' attribute") + if message["type"].startswith("_"): + raise ValueError("Malformed type in message (leading underscore)") + # Extract type and replace . with _ + return message["type"].replace(".", "_") + + +class AsyncConsumer: + """ + Base consumer class. Implements the ASGI application spec, and adds on + channel layer management and routing of events to named methods based + on their type. + """ + + _sync = False + channel_layer_alias = DEFAULT_CHANNEL_LAYER + + def __init__(self, scope): + self.scope = scope + + async def __call__(self, receive, send): + """ + Dispatches incoming messages to type-based handlers asynchronously. + """ + # Initialize channel layer + self.channel_layer = get_channel_layer(self.channel_layer_alias) + if self.channel_layer is not None: + self.channel_name = await self.channel_layer.new_channel() + self.channel_receive = functools.partial( + self.channel_layer.receive, self.channel_name + ) + # Store send function + if self._sync: + self.base_send = async_to_sync(send) + else: + self.base_send = send + # Pass messages in from channel layer or client to dispatch method + try: + if self.channel_layer is not None: + await await_many_dispatch( + [receive, self.channel_receive], self.dispatch + ) + else: + await await_many_dispatch([receive], self.dispatch) + except StopConsumer: + # Exit cleanly + pass + + async def dispatch(self, message): + """ + Works out what to do with a message. + """ + handler = getattr(self, get_handler_name(message), None) + if handler: + await handler(message) + else: + raise ValueError("No handler for message type %s" % message["type"]) + + async def send(self, message): + """ + Overrideable/callable-by-subclasses send method. + """ + await self.base_send(message) + + +class SyncConsumer(AsyncConsumer): + """ + Synchronous version of the consumer, which is what we write most of the + generic consumers against (for now). Calls handlers in a threadpool and + uses CallBouncer to get the send method out to the main event loop. + + It would have been possible to have "mixed" consumers and auto-detect + if a handler was awaitable or not, but that would have made the API + for user-called methods very confusing as there'd be two types of each. + """ + + _sync = True + + @database_sync_to_async + def dispatch(self, message): + """ + Dispatches incoming messages to type-based handlers asynchronously. + """ + # Get and execute the handler + handler = getattr(self, get_handler_name(message), None) + if handler: + handler(message) + else: + raise ValueError("No handler for message type %s" % message["type"]) + + def send(self, message): + """ + Overrideable/callable-by-subclasses send method. + """ + self.base_send(message) diff --git a/venv/lib/python3.7/site-packages/channels/hacks.py b/venv/lib/python3.7/site-packages/channels/hacks.py new file mode 100644 index 0000000..ef9ee06 --- /dev/null +++ b/venv/lib/python3.7/site-packages/channels/hacks.py @@ -0,0 +1,12 @@ +def monkeypatch_django(): + """ + Monkeypatches support for us into parts of Django. + """ + # Ensure that the staticfiles version of runserver bows down to us + # This one is particularly horrible + from django.contrib.staticfiles.management.commands.runserver import ( + Command as StaticRunserverCommand, + ) + from .management.commands.runserver import Command as RunserverCommand + + StaticRunserverCommand.__bases__ = (RunserverCommand,) diff --git a/venv/lib/python3.7/site-packages/channels/http.py b/venv/lib/python3.7/site-packages/channels/http.py new file mode 100644 index 0000000..5ea1ead --- /dev/null +++ b/venv/lib/python3.7/site-packages/channels/http.py @@ -0,0 +1,371 @@ +import cgi +import codecs +import logging +import sys +import tempfile +import traceback + +from django import http +from django.conf import settings +from django.core import signals +from django.core.exceptions import RequestDataTooBig +from django.core.handlers import base +from django.http import FileResponse, HttpResponse, HttpResponseServerError +from django.urls import set_script_prefix +from django.utils.functional import cached_property + +from asgiref.sync import async_to_sync, sync_to_async +from channels.exceptions import RequestAborted, RequestTimeout + +logger = logging.getLogger("django.request") + + +class AsgiRequest(http.HttpRequest): + """ + Custom request subclass that decodes from an ASGI-standard request + dict, and wraps request body handling. + """ + + # Number of seconds until a Request gives up on trying to read a request + # body and aborts. + body_receive_timeout = 60 + + def __init__(self, scope, stream): + self.scope = scope + self._content_length = 0 + self._post_parse_error = False + self._read_started = False + self.resolver_match = None + self.script_name = self.scope.get("root_path", "") + if self.script_name and scope["path"].startswith(self.script_name): + # TODO: Better is-prefix checking, slash handling? + self.path_info = scope["path"][len(self.script_name) :] + else: + self.path_info = scope["path"] + + # django path is different from asgi scope path args, it should combine with script name + if self.script_name: + self.path = "%s/%s" % ( + self.script_name.rstrip("/"), + self.path_info.replace("/", "", 1), + ) + else: + self.path = scope["path"] + + # HTTP basics + self.method = self.scope["method"].upper() + # fix https://github.com/django/channels/issues/622 + query_string = self.scope.get("query_string", "") + if isinstance(query_string, bytes): + query_string = query_string.decode("utf-8") + self.META = { + "REQUEST_METHOD": self.method, + "QUERY_STRING": query_string, + "SCRIPT_NAME": self.script_name, + "PATH_INFO": self.path_info, + # Old code will need these for a while + "wsgi.multithread": True, + "wsgi.multiprocess": True, + } + if self.scope.get("client", None): + self.META["REMOTE_ADDR"] = self.scope["client"][0] + self.META["REMOTE_HOST"] = self.META["REMOTE_ADDR"] + self.META["REMOTE_PORT"] = self.scope["client"][1] + if self.scope.get("server", None): + self.META["SERVER_NAME"] = self.scope["server"][0] + self.META["SERVER_PORT"] = str(self.scope["server"][1]) + else: + self.META["SERVER_NAME"] = "unknown" + self.META["SERVER_PORT"] = "0" + # Handle old style-headers for a transition period + if "headers" in self.scope and isinstance(self.scope["headers"], dict): + self.scope["headers"] = [ + (x.encode("latin1"), y) for x, y in self.scope["headers"].items() + ] + # Headers go into META + for name, value in self.scope.get("headers", []): + name = name.decode("latin1") + if name == "content-length": + corrected_name = "CONTENT_LENGTH" + elif name == "content-type": + corrected_name = "CONTENT_TYPE" + else: + corrected_name = "HTTP_%s" % name.upper().replace("-", "_") + # HTTPbis say only ASCII chars are allowed in headers, but we latin1 just in case + value = value.decode("latin1") + if corrected_name in self.META: + value = self.META[corrected_name] + "," + value + self.META[corrected_name] = value + # Pull out request encoding if we find it + if "CONTENT_TYPE" in self.META: + self.content_type, self.content_params = cgi.parse_header( + self.META["CONTENT_TYPE"] + ) + if "charset" in self.content_params: + try: + codecs.lookup(self.content_params["charset"]) + except LookupError: + pass + else: + self.encoding = self.content_params["charset"] + else: + self.content_type, self.content_params = "", {} + # Pull out content length info + if self.META.get("CONTENT_LENGTH", None): + try: + self._content_length = int(self.META["CONTENT_LENGTH"]) + except (ValueError, TypeError): + pass + # Body handling + self._stream = stream + # Other bits + self.resolver_match = None + + @cached_property + def GET(self): + return http.QueryDict(self.scope.get("query_string", "")) + + def _get_scheme(self): + return self.scope.get("scheme", "http") + + def _get_post(self): + if not hasattr(self, "_post"): + self._load_post_and_files() + return self._post + + def _set_post(self, post): + self._post = post + + def _get_files(self): + if not hasattr(self, "_files"): + self._load_post_and_files() + return self._files + + POST = property(_get_post, _set_post) + FILES = property(_get_files) + + @cached_property + def COOKIES(self): + return http.parse_cookie(self.META.get("HTTP_COOKIE", "")) + + +class AsgiHandler(base.BaseHandler): + """ + Handler for ASGI requests for the view system only (it will have got here + after traversing the dispatch-by-channel-name system, which decides it's + a HTTP request) + + You can also manually construct it with a get_response callback if you + want to run a single Django view yourself. If you do this, though, it will + not do any URL routing or middleware (Channels uses it for staticfiles' + serving code) + """ + + request_class = AsgiRequest + + # Size to chunk response bodies into for multiple response messages + chunk_size = 512 * 1024 + + def __init__(self, scope): + if scope["type"] != "http": + raise ValueError( + "The AsgiHandler can only handle HTTP connections, not %s" + % scope["type"] + ) + super(AsgiHandler, self).__init__() + self.scope = scope + self.load_middleware() + + async def __call__(self, receive, send): + """ + Async entrypoint - uses the sync_to_async wrapper to run things in a + threadpool. + """ + self.send = async_to_sync(send) + + # Receive the HTTP request body as a stream object. + try: + body_stream = await self.read_body(receive) + except RequestAborted: + return + # Launch into body handling (and a synchronous subthread). + await self.handle(body_stream) + + async def read_body(self, receive): + """Reads a HTTP body from an ASGI connection.""" + # Use the tempfile that auto rolls-over to a disk file as it fills up. + body_file = tempfile.SpooledTemporaryFile( + max_size=settings.FILE_UPLOAD_MAX_MEMORY_SIZE, mode="w+b" + ) + while True: + message = await receive() + if message["type"] == "http.disconnect": + # Early client disconnect. + raise RequestAborted() + # Add a body chunk from the message, if provided. + if "body" in message: + body_file.write(message["body"]) + # Quit out if that's the end. + if not message.get("more_body", False): + break + body_file.seek(0) + return body_file + + @sync_to_async + def handle(self, body): + """ + Synchronous message processing. + """ + # Set script prefix from message root_path, turning None into empty string + script_prefix = self.scope.get("root_path", "") or "" + if settings.FORCE_SCRIPT_NAME: + script_prefix = settings.FORCE_SCRIPT_NAME + set_script_prefix(script_prefix) + signals.request_started.send(sender=self.__class__, scope=self.scope) + # Run request through view system + try: + request = self.request_class(self.scope, body) + except UnicodeDecodeError: + logger.warning( + "Bad Request (UnicodeDecodeError)", + exc_info=sys.exc_info(), + extra={"status_code": 400}, + ) + response = http.HttpResponseBadRequest() + except RequestTimeout: + # Parsing the request failed, so the response is a Request Timeout error + response = HttpResponse("408 Request Timeout (upload too slow)", status=408) + except RequestAborted: + # Client closed connection on us mid request. Abort! + return + except RequestDataTooBig: + response = HttpResponse("413 Payload too large", status=413) + else: + response = self.get_response(request) + # Fix chunk size on file responses + if isinstance(response, FileResponse): + response.block_size = 1024 * 512 + # Transform response into messages, which we yield back to caller + for response_message in self.encode_response(response): + self.send(response_message) + # Close the response now we're done with it + response.close() + + def handle_uncaught_exception(self, request, resolver, exc_info): + """ + Last-chance handler for exceptions. + """ + # There's no WSGI server to catch the exception further up if this fails, + # so translate it into a plain text response. + try: + return super(AsgiHandler, self).handle_uncaught_exception( + request, resolver, exc_info + ) + except Exception: + return HttpResponseServerError( + traceback.format_exc() if settings.DEBUG else "Internal Server Error", + content_type="text/plain", + ) + + def load_middleware(self): + """ + Loads the Django middleware chain and caches it on the class. + """ + # Because we create an AsgiHandler on every HTTP request + # we need to preserve the Django middleware chain once we load it. + if ( + hasattr(self.__class__, "_middleware_chain") + and self.__class__._middleware_chain + ): + self._middleware_chain = self.__class__._middleware_chain + self._view_middleware = self.__class__._view_middleware + self._template_response_middleware = ( + self.__class__._template_response_middleware + ) + self._exception_middleware = self.__class__._exception_middleware + + # Support additional arguments for Django 1.11 and 2.0. + if hasattr(self.__class__, "_request_middleware"): + self._request_middleware = self.__class__._request_middleware + self._response_middleware = self.__class__._response_middleware + + else: + super(AsgiHandler, self).load_middleware() + self.__class__._middleware_chain = self._middleware_chain + self.__class__._view_middleware = self._view_middleware + self.__class__._template_response_middleware = ( + self._template_response_middleware + ) + self.__class__._exception_middleware = self._exception_middleware + + # Support additional arguments for Django 1.11 and 2.0. + if hasattr(self, "_request_middleware"): + self.__class__._request_middleware = self._request_middleware + self.__class__._response_middleware = self._response_middleware + + @classmethod + def encode_response(cls, response): + """ + Encodes a Django HTTP response into ASGI http.response message(s). + """ + # Collect cookies into headers. + # Note that we have to preserve header case as there are some non-RFC + # compliant clients that want things like Content-Type correct. Ugh. + response_headers = [] + for header, value in response.items(): + if isinstance(header, str): + header = header.encode("ascii") + if isinstance(value, str): + value = value.encode("latin1") + response_headers.append((bytes(header), bytes(value))) + for c in response.cookies.values(): + response_headers.append( + (b"Set-Cookie", c.output(header="").encode("ascii").strip()) + ) + # Make initial response message + yield { + "type": "http.response.start", + "status": response.status_code, + "headers": response_headers, + } + # Streaming responses need to be pinned to their iterator + if response.streaming: + # Access `__iter__` and not `streaming_content` directly in case + # it has been overridden in a subclass. + for part in response: + for chunk, _ in cls.chunk_bytes(part): + yield { + "type": "http.response.body", + "body": chunk, + # We ignore "more" as there may be more parts; instead, + # we use an empty final closing message with False. + "more_body": True, + } + # Final closing message + yield {"type": "http.response.body"} + # Other responses just need chunking + else: + # Yield chunks of response + for chunk, last in cls.chunk_bytes(response.content): + yield { + "type": "http.response.body", + "body": chunk, + "more_body": not last, + } + + @classmethod + def chunk_bytes(cls, data): + """ + Chunks some data up so it can be sent in reasonable size messages. + Yields (chunk, last_chunk) tuples. + """ + position = 0 + if not data: + yield data, True + return + while position < len(data): + yield ( + data[position : position + cls.chunk_size], + (position + cls.chunk_size) >= len(data), + ) + position += cls.chunk_size diff --git a/venv/lib/python3.7/site-packages/channels/middleware.py b/venv/lib/python3.7/site-packages/channels/middleware.py new file mode 100644 index 0000000..996f7cb --- /dev/null +++ b/venv/lib/python3.7/site-packages/channels/middleware.py @@ -0,0 +1,41 @@ +from functools import partial + + +class BaseMiddleware: + """ + Base class for implementing ASGI middleware. Inherit from this and + override the setup() method if you want to do things before you + get to. + + Note that subclasses of this are not self-safe; don't store state on + the instance, as it serves multiple application instances. Instead, use + scope. + """ + + def __init__(self, inner): + """ + Middleware constructor - just takes inner application. + """ + self.inner = inner + + def __call__(self, scope): + """ + ASGI constructor; can insert things into the scope, but not + run asynchronous code. + """ + # Copy scope to stop changes going upstream + scope = dict(scope) + # Allow subclasses to change the scope + self.populate_scope(scope) + # Call the inner application's init + inner_instance = self.inner(scope) + # Partially bind it to our coroutine entrypoint along with the scope + return partial(self.coroutine_call, inner_instance, scope) + + async def coroutine_call(self, inner_instance, scope, receive, send): + """ + ASGI coroutine; where we can resolve items in the scope + (but you can't modify it at the top level here!) + """ + await self.resolve_scope(scope) + await inner_instance(receive, send) diff --git a/venv/lib/python3.7/site-packages/channels/sessions.py b/venv/lib/python3.7/site-packages/channels/sessions.py new file mode 100644 index 0000000..bf52e96 --- /dev/null +++ b/venv/lib/python3.7/site-packages/channels/sessions.py @@ -0,0 +1,253 @@ +import datetime +import time +from importlib import import_module + +from django.conf import settings +from django.contrib.sessions.backends.base import UpdateError +from django.core.exceptions import SuspiciousOperation +from django.http import parse_cookie +from django.http.cookie import SimpleCookie +from django.utils import timezone +from django.utils.encoding import force_str +from django.utils.functional import LazyObject + +from channels.db import database_sync_to_async + +try: + from django.utils.http import http_date +except ImportError: + from django.utils.http import cookie_date as http_date + + +class CookieMiddleware: + """ + Extracts cookies from HTTP or WebSocket-style scopes and adds them as a + scope["cookies"] entry with the same format as Django's request.COOKIES. + """ + + def __init__(self, inner): + self.inner = inner + + def __call__(self, scope): + # Check this actually has headers. They're a required scope key for HTTP and WS. + if "headers" not in scope: + raise ValueError( + "CookieMiddleware was passed a scope that did not have a headers key " + + "(make sure it is only passed HTTP or WebSocket connections)" + ) + # Go through headers to find the cookie one + for name, value in scope.get("headers", []): + if name == b"cookie": + cookies = parse_cookie(value.decode("ascii")) + break + else: + # No cookie header found - add an empty default. + cookies = {} + # Return inner application + return self.inner(dict(scope, cookies=cookies)) + + @classmethod + def set_cookie( + cls, + message, + key, + value="", + max_age=None, + expires=None, + path="/", + domain=None, + secure=False, + httponly=False, + ): + """ + Sets a cookie in the passed HTTP response message. + + ``expires`` can be: + - a string in the correct format, + - a naive ``datetime.datetime`` object in UTC, + - an aware ``datetime.datetime`` object in any time zone. + If it is a ``datetime.datetime`` object then ``max_age`` will be calculated. + """ + value = force_str(value) + cookies = SimpleCookie() + cookies[key] = value + if expires is not None: + if isinstance(expires, datetime.datetime): + if timezone.is_aware(expires): + expires = timezone.make_naive(expires, timezone.utc) + delta = expires - expires.utcnow() + # Add one second so the date matches exactly (a fraction of + # time gets lost between converting to a timedelta and + # then the date string). + delta = delta + datetime.timedelta(seconds=1) + # Just set max_age - the max_age logic will set expires. + expires = None + max_age = max(0, delta.days * 86400 + delta.seconds) + else: + cookies[key]["expires"] = expires + else: + cookies[key]["expires"] = "" + if max_age is not None: + cookies[key]["max-age"] = max_age + # IE requires expires, so set it if hasn't been already. + if not expires: + cookies[key]["expires"] = http_date(time.time() + max_age) + if path is not None: + cookies[key]["path"] = path + if domain is not None: + cookies[key]["domain"] = domain + if secure: + cookies[key]["secure"] = True + if httponly: + cookies[key]["httponly"] = True + # Write out the cookies to the response + for c in cookies.values(): + message.setdefault("headers", []).append( + (b"Set-Cookie", bytes(c.output(header=""), encoding="utf-8")) + ) + + @classmethod + def delete_cookie(cls, message, key, path="/", domain=None): + """ + Deletes a cookie in a response. + """ + return cls.set_cookie( + message, + key, + max_age=0, + path=path, + domain=domain, + expires="Thu, 01-Jan-1970 00:00:00 GMT", + ) + + +class SessionMiddleware: + """ + Class that adds Django sessions (from HTTP cookies) to the + scope. Works with HTTP or WebSocket protocol types (or anything that + provides a "headers" entry in the scope). + + Requires the CookieMiddleware to be higher up in the stack. + """ + + # Message types that trigger a session save if it's modified + save_message_types = ["http.response.start"] + + # Message types that can carry session cookies back + cookie_response_message_types = ["http.response.start"] + + def __init__(self, inner): + self.inner = inner + self.cookie_name = settings.SESSION_COOKIE_NAME + self.session_store = import_module(settings.SESSION_ENGINE).SessionStore + + def __call__(self, scope): + return SessionMiddlewareInstance(scope, self) + + +class SessionMiddlewareInstance: + """ + Inner class that is instantiated once per scope. + """ + + def __init__(self, scope, middleware): + self.middleware = middleware + self.scope = dict(scope) + if "session" in self.scope: + # There's already session middleware of some kind above us, pass that through + self.activated = False + else: + # Make sure there are cookies in the scope + if "cookies" not in self.scope: + raise ValueError( + "No cookies in scope - SessionMiddleware needs to run inside of CookieMiddleware." + ) + # Parse the headers in the scope into cookies + self.scope["session"] = LazyObject() + self.activated = True + # Instantiate our inner application + self.inner = self.middleware.inner(self.scope) + + async def __call__(self, receive, send): + """ + We intercept the send() callable so we can do session saves and + add session cookie overrides to send back. + """ + # Resolve the session now we can do it in a blocking way + session_key = self.scope["cookies"].get(self.middleware.cookie_name) + self.scope["session"]._wrapped = await database_sync_to_async( + self.middleware.session_store + )(session_key) + # Override send + self.real_send = send + return await self.inner(receive, self.send) + + async def send(self, message): + """ + Overridden send that also does session saves/cookies. + """ + # Only save session if we're the outermost session middleware + if self.activated: + modified = self.scope["session"].modified + empty = self.scope["session"].is_empty() + # If this is a message type that we want to save on, and there's + # changed data, save it. We also save if it's empty as we might + # not be able to send a cookie-delete along with this message. + if ( + message["type"] in self.middleware.save_message_types + and message.get("status", 200) != 500 + and (modified or settings.SESSION_SAVE_EVERY_REQUEST) + ): + self.save_session() + # If this is a message type that can transport cookies back to the + # client, then do so. + if message["type"] in self.middleware.cookie_response_message_types: + if empty: + # Delete cookie if it's set + if settings.SESSION_COOKIE_NAME in self.scope["cookies"]: + CookieMiddleware.delete_cookie( + message, + settings.SESSION_COOKIE_NAME, + path=settings.SESSION_COOKIE_PATH, + domain=settings.SESSION_COOKIE_DOMAIN, + ) + else: + # Get the expiry data + if self.scope["session"].get_expire_at_browser_close(): + max_age = None + expires = None + else: + max_age = self.scope["session"].get_expiry_age() + expires_time = time.time() + max_age + expires = http_date(expires_time) + # Set the cookie + CookieMiddleware.set_cookie( + message, + self.middleware.cookie_name, + self.scope["session"].session_key, + max_age=max_age, + expires=expires, + domain=settings.SESSION_COOKIE_DOMAIN, + path=settings.SESSION_COOKIE_PATH, + secure=settings.SESSION_COOKIE_SECURE or None, + httponly=settings.SESSION_COOKIE_HTTPONLY or None, + ) + # Pass up the send + return await self.real_send(message) + + def save_session(self): + """ + Saves the current session. + """ + try: + self.scope["session"].save() + except UpdateError: + raise SuspiciousOperation( + "The request's session was deleted before the " + "request completed. The user may have logged " + "out in a concurrent request, for example." + ) + + +# Shortcut to include cookie middleware +SessionMiddlewareStack = lambda inner: CookieMiddleware(SessionMiddleware(inner)) diff --git a/venv/lib/python3.7/site-packages/channels/testing/http.py b/venv/lib/python3.7/site-packages/channels/testing/http.py new file mode 100644 index 0000000..6b1514c --- /dev/null +++ b/venv/lib/python3.7/site-packages/channels/testing/http.py @@ -0,0 +1,56 @@ +from urllib.parse import unquote, urlparse + +from asgiref.testing import ApplicationCommunicator + + +class HttpCommunicator(ApplicationCommunicator): + """ + ApplicationCommunicator subclass that has HTTP shortcut methods. + + It will construct the scope for you, so you need to pass the application + (uninstantiated) along with HTTP parameters. + + This does not support full chunking - for that, just use ApplicationCommunicator + directly. + """ + + def __init__(self, application, method, path, body=b"", headers=None): + parsed = urlparse(path) + self.scope = { + "type": "http", + "http_version": "1.1", + "method": method.upper(), + "path": unquote(parsed.path), + "query_string": parsed.query.encode("utf-8"), + "headers": headers or [], + } + assert isinstance(body, bytes) + self.body = body + self.sent_request = False + super().__init__(application, self.scope) + + async def get_response(self, timeout=1): + """ + Get the application's response. Returns a dict with keys of + "body", "headers" and "status". + """ + # If we've not sent the request yet, do so + if not self.sent_request: + self.sent_request = True + await self.send_input({"type": "http.request", "body": self.body}) + # Get the response start + response_start = await self.receive_output(timeout) + assert response_start["type"] == "http.response.start" + # Get all body parts + response_start["body"] = b"" + while True: + chunk = await self.receive_output(timeout) + assert chunk["type"] == "http.response.body" + assert isinstance(chunk["body"], bytes) + response_start["body"] += chunk["body"] + if not chunk.get("more_body", False): + break + # Return structured info + del response_start["type"] + response_start.setdefault("headers", []) + return response_start diff --git a/venv/lib/python3.7/site-packages/channels/testing/live.py b/venv/lib/python3.7/site-packages/channels/testing/live.py new file mode 100644 index 0000000..42d9a46 --- /dev/null +++ b/venv/lib/python3.7/site-packages/channels/testing/live.py @@ -0,0 +1,67 @@ +from django.core.exceptions import ImproperlyConfigured +from django.db import connections +from django.test.testcases import TransactionTestCase +from django.test.utils import modify_settings + +from channels.routing import get_default_application +from channels.staticfiles import StaticFilesWrapper +from daphne.testing import DaphneProcess + + +class ChannelsLiveServerTestCase(TransactionTestCase): + """ + Does basically the same as TransactionTestCase but also launches a + live Daphne server in a separate process, so + that the tests may use another test framework, such as Selenium, + instead of the built-in dummy client. + """ + + host = "localhost" + ProtocolServerProcess = DaphneProcess + static_wrapper = StaticFilesWrapper + serve_static = True + + @property + def live_server_url(self): + return "http://%s:%s" % (self.host, self._port) + + @property + def live_server_ws_url(self): + return "ws://%s:%s" % (self.host, self._port) + + def _pre_setup(self): + for connection in connections.all(): + if self._is_in_memory_db(connection): + raise ImproperlyConfigured( + "ChannelLiveServerTestCase can not be used with in memory databases" + ) + + super(ChannelsLiveServerTestCase, self)._pre_setup() + + self._live_server_modified_settings = modify_settings( + ALLOWED_HOSTS={"append": self.host} + ) + self._live_server_modified_settings.enable() + + if self.serve_static: + application = self.static_wrapper(get_default_application()) + else: + application = get_default_application() + + self._server_process = self.ProtocolServerProcess(self.host, application) + self._server_process.start() + self._server_process.ready.wait() + self._port = self._server_process.port.value + + def _post_teardown(self): + self._server_process.terminate() + self._server_process.join() + self._live_server_modified_settings.disable() + super(ChannelsLiveServerTestCase, self)._post_teardown() + + def _is_in_memory_db(self, connection): + """ + Check if DatabaseWrapper holds in memory database. + """ + if connection.vendor == "sqlite": + return connection.is_in_memory_db() diff --git a/venv/lib/python3.7/site-packages/channels/testing/websocket.py b/venv/lib/python3.7/site-packages/channels/testing/websocket.py new file mode 100644 index 0000000..e176321 --- /dev/null +++ b/venv/lib/python3.7/site-packages/channels/testing/websocket.py @@ -0,0 +1,102 @@ +import json +from urllib.parse import unquote, urlparse + +from asgiref.testing import ApplicationCommunicator + + +class WebsocketCommunicator(ApplicationCommunicator): + """ + ApplicationCommunicator subclass that has WebSocket shortcut methods. + + It will construct the scope for you, so you need to pass the application + (uninstantiated) along with the initial connection parameters. + """ + + def __init__(self, application, path, headers=None, subprotocols=None): + if not isinstance(path, str): + raise TypeError("Expected str, got {}".format(type(path))) + parsed = urlparse(path) + self.scope = { + "type": "websocket", + "path": unquote(parsed.path), + "query_string": parsed.query.encode("utf-8"), + "headers": headers or [], + "subprotocols": subprotocols or [], + } + super().__init__(application, self.scope) + + async def connect(self, timeout=1): + """ + Trigger the connection code. + + On an accepted connection, returns (True, ) + On a rejected connection, returns (False, ) + """ + await self.send_input({"type": "websocket.connect"}) + response = await self.receive_output(timeout) + if response["type"] == "websocket.close": + return (False, response.get("code", 1000)) + else: + return (True, response.get("subprotocol", None)) + + async def send_to(self, text_data=None, bytes_data=None): + """ + Sends a WebSocket frame to the application. + """ + # Make sure we have exactly one of the arguments + assert bool(text_data) != bool( + bytes_data + ), "You must supply exactly one of text_data or bytes_data" + # Send the right kind of event + if text_data: + assert isinstance(text_data, str), "The text_data argument must be a str" + await self.send_input({"type": "websocket.receive", "text": text_data}) + else: + assert isinstance( + bytes_data, bytes + ), "The bytes_data argument must be bytes" + await self.send_input({"type": "websocket.receive", "bytes": bytes_data}) + + async def send_json_to(self, data): + """ + Sends JSON data as a text frame + """ + await self.send_to(text_data=json.dumps(data)) + + async def receive_from(self, timeout=1): + """ + Receives a data frame from the view. Will fail if the connection + closes instead. Returns either a bytestring or a unicode string + depending on what sort of frame you got. + """ + response = await self.receive_output(timeout) + # Make sure this is a send message + assert response["type"] == "websocket.send" + # Make sure there's exactly one key in the response + assert ("text" in response) != ( + "bytes" in response + ), "The response needs exactly one of 'text' or 'bytes'" + # Pull out the right key and typecheck it for our users + if "text" in response: + assert isinstance(response["text"], str), "Text frame payload is not str" + return response["text"] + else: + assert isinstance( + response["bytes"], bytes + ), "Binary frame payload is not bytes" + return response["bytes"] + + async def receive_json_from(self, timeout=1): + """ + Receives a JSON text frame payload and decodes it + """ + payload = await self.receive_from(timeout) + assert isinstance(payload, str), "JSON data is not a text frame" + return json.loads(payload) + + async def disconnect(self, code=1000, timeout=1): + """ + Closes the socket + """ + await self.send_input({"type": "websocket.disconnect", "code": code}) + await self.wait(timeout) diff --git a/venv/lib/python3.7/site-packages/channels/worker.py b/venv/lib/python3.7/site-packages/channels/worker.py new file mode 100644 index 0000000..7ea23a7 --- /dev/null +++ b/venv/lib/python3.7/site-packages/channels/worker.py @@ -0,0 +1,44 @@ +import asyncio + +from asgiref.server import StatelessServer + + +class Worker(StatelessServer): + """ + ASGI protocol server that surfaces events sent to specific channels + on the channel layer into a single application instance. + """ + + def __init__(self, application, channels, channel_layer, max_applications=1000): + super().__init__(application, max_applications) + self.channels = channels + self.channel_layer = channel_layer + if self.channel_layer is None: + raise ValueError("Channel layer is not valid") + + async def handle(self): + """ + Listens on all the provided channels and handles the messages. + """ + # For each channel, launch its own listening coroutine + listeners = [] + for channel in self.channels: + listeners.append(asyncio.ensure_future(self.listener(channel))) + # Wait for them all to exit + await asyncio.wait(listeners) + # See if any of the listeners had an error (e.g. channel layer error) + [listener.result() for listener in listeners] + + async def listener(self, channel): + """ + Single-channel listener + """ + while True: + message = await self.channel_layer.receive(channel) + if not message.get("type", None): + raise ValueError("Worker received message with no type.") + # Make a scope and get an application instance for it + scope = {"type": "channel", "channel": channel} + instance_queue = self.get_or_create_application_instance(channel, scope) + # Run the message into the app + await instance_queue.put(message) diff --git a/venv/lib/python3.7/site-packages/chardet-3.0.4.dist-info/INSTALLER b/venv/lib/python3.7/site-packages/chardet-3.0.4.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/lib/python3.7/site-packages/chardet-3.0.4.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/lib/python3.7/site-packages/chardet-3.0.4.dist-info/entry_points.txt b/venv/lib/python3.7/site-packages/chardet-3.0.4.dist-info/entry_points.txt new file mode 100644 index 0000000..a884269 --- /dev/null +++ b/venv/lib/python3.7/site-packages/chardet-3.0.4.dist-info/entry_points.txt @@ -0,0 +1,3 @@ +[console_scripts] +chardetect = chardet.cli.chardetect:main + diff --git a/venv/lib/python3.7/site-packages/chardet-3.0.4.dist-info/metadata.json b/venv/lib/python3.7/site-packages/chardet-3.0.4.dist-info/metadata.json new file mode 100644 index 0000000..8cdf025 --- /dev/null +++ b/venv/lib/python3.7/site-packages/chardet-3.0.4.dist-info/metadata.json @@ -0,0 +1 @@ +{"classifiers": ["Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Text Processing :: Linguistic"], "extensions": {"python.commands": {"wrap_console": {"chardetect": "chardet.cli.chardetect:main"}}, "python.details": {"contacts": [{"email": "dan.blanchard@gmail.com", "name": "Daniel Blanchard", "role": "author"}], "document_names": {"description": "DESCRIPTION.rst"}, "project_urls": {"Home": "https://github.com/chardet/chardet"}}, "python.exports": {"console_scripts": {"chardetect": "chardet.cli.chardetect:main"}}}, "generator": "bdist_wheel (0.29.0)", "keywords": ["encoding", "i18n", "xml"], "license": "LGPL", "metadata_version": "2.0", "name": "chardet", "summary": "Universal encoding detector for Python 2 and 3", "test_requires": [{"requires": ["hypothesis", "pytest"]}], "version": "3.0.4"} \ No newline at end of file diff --git a/venv/lib/python3.7/site-packages/chardet/big5freq.py b/venv/lib/python3.7/site-packages/chardet/big5freq.py new file mode 100644 index 0000000..38f3251 --- /dev/null +++ b/venv/lib/python3.7/site-packages/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 + +BIG5_CHAR_TO_FREQ_ORDER = ( + 1,1801,1506, 255,1431, 198, 9, 82, 6,5008, 177, 202,3681,1256,2821, 110, # 16 +3814, 33,3274, 261, 76, 44,2114, 16,2946,2187,1176, 659,3971, 26,3451,2653, # 32 +1198,3972,3350,4202, 410,2215, 302, 590, 361,1964, 8, 204, 58,4510,5009,1932, # 48 + 63,5010,5011, 317,1614, 75, 222, 159,4203,2417,1480,5012,3555,3091, 224,2822, # 64 +3682, 3, 10,3973,1471, 29,2787,1135,2866,1940, 873, 130,3275,1123, 312,5013, # 80 +4511,2052, 507, 252, 682,5014, 142,1915, 124, 206,2947, 34,3556,3204, 64, 604, # 96 +5015,2501,1977,1978, 155,1991, 645, 641,1606,5016,3452, 337, 72, 406,5017, 80, # 112 + 630, 238,3205,1509, 263, 939,1092,2654, 756,1440,1094,3453, 449, 69,2987, 591, # 128 + 179,2096, 471, 115,2035,1844, 60, 50,2988, 134, 806,1869, 734,2036,3454, 180, # 144 + 995,1607, 156, 537,2907, 688,5018, 319,1305, 779,2145, 514,2379, 298,4512, 359, # 160 +2502, 90,2716,1338, 663, 11, 906,1099,2553, 20,2441, 182, 532,1716,5019, 732, # 176 +1376,4204,1311,1420,3206, 25,2317,1056, 113, 399, 382,1950, 242,3455,2474, 529, # 192 +3276, 475,1447,3683,5020, 117, 21, 656, 810,1297,2300,2334,3557,5021, 126,4205, # 208 + 706, 456, 150, 613,4513, 71,1118,2037,4206, 145,3092, 85, 835, 486,2115,1246, # 224 +1426, 428, 727,1285,1015, 800, 106, 623, 303,1281,5022,2128,2359, 347,3815, 221, # 240 +3558,3135,5023,1956,1153,4207, 83, 296,1199,3093, 192, 624, 93,5024, 822,1898, # 256 +2823,3136, 795,2065, 991,1554,1542,1592, 27, 43,2867, 859, 139,1456, 860,4514, # 272 + 437, 712,3974, 164,2397,3137, 695, 211,3037,2097, 195,3975,1608,3559,3560,3684, # 288 +3976, 234, 811,2989,2098,3977,2233,1441,3561,1615,2380, 668,2077,1638, 305, 228, # 304 +1664,4515, 467, 415,5025, 262,2099,1593, 239, 108, 300, 200,1033, 512,1247,2078, # 320 +5026,5027,2176,3207,3685,2682, 593, 845,1062,3277, 88,1723,2038,3978,1951, 212, # 336 + 266, 152, 149, 468,1899,4208,4516, 77, 187,5028,3038, 37, 5,2990,5029,3979, # 352 +5030,5031, 39,2524,4517,2908,3208,2079, 55, 148, 74,4518, 545, 483,1474,1029, # 368 +1665, 217,1870,1531,3138,1104,2655,4209, 24, 172,3562, 900,3980,3563,3564,4519, # 384 + 32,1408,2824,1312, 329, 487,2360,2251,2717, 784,2683, 4,3039,3351,1427,1789, # 400 + 188, 109, 499,5032,3686,1717,1790, 888,1217,3040,4520,5033,3565,5034,3352,1520, # 416 +3687,3981, 196,1034, 775,5035,5036, 929,1816, 249, 439, 38,5037,1063,5038, 794, # 432 +3982,1435,2301, 46, 178,3278,2066,5039,2381,5040, 214,1709,4521, 804, 35, 707, # 448 + 324,3688,1601,2554, 140, 459,4210,5041,5042,1365, 839, 272, 978,2262,2580,3456, # 464 +2129,1363,3689,1423, 697, 100,3094, 48, 70,1231, 495,3139,2196,5043,1294,5044, # 480 +2080, 462, 586,1042,3279, 853, 256, 988, 185,2382,3457,1698, 434,1084,5045,3458, # 496 + 314,2625,2788,4522,2335,2336, 569,2285, 637,1817,2525, 757,1162,1879,1616,3459, # 512 + 287,1577,2116, 768,4523,1671,2868,3566,2526,1321,3816, 909,2418,5046,4211, 933, # 528 +3817,4212,2053,2361,1222,4524, 765,2419,1322, 786,4525,5047,1920,1462,1677,2909, # 544 +1699,5048,4526,1424,2442,3140,3690,2600,3353,1775,1941,3460,3983,4213, 309,1369, # 560 +1130,2825, 364,2234,1653,1299,3984,3567,3985,3986,2656, 525,1085,3041, 902,2001, # 576 +1475, 964,4527, 421,1845,1415,1057,2286, 940,1364,3141, 376,4528,4529,1381, 7, # 592 +2527, 983,2383, 336,1710,2684,1846, 321,3461, 559,1131,3042,2752,1809,1132,1313, # 608 + 265,1481,1858,5049, 352,1203,2826,3280, 167,1089, 420,2827, 776, 792,1724,3568, # 624 +4214,2443,3281,5050,4215,5051, 446, 229, 333,2753, 901,3818,1200,1557,4530,2657, # 640 +1921, 395,2754,2685,3819,4216,1836, 125, 916,3209,2626,4531,5052,5053,3820,5054, # 656 +5055,5056,4532,3142,3691,1133,2555,1757,3462,1510,2318,1409,3569,5057,2146, 438, # 672 +2601,2910,2384,3354,1068, 958,3043, 461, 311,2869,2686,4217,1916,3210,4218,1979, # 688 + 383, 750,2755,2627,4219, 274, 539, 385,1278,1442,5058,1154,1965, 384, 561, 210, # 704 + 98,1295,2556,3570,5059,1711,2420,1482,3463,3987,2911,1257, 129,5060,3821, 642, # 720 + 523,2789,2790,2658,5061, 141,2235,1333, 68, 176, 441, 876, 907,4220, 603,2602, # 736 + 710, 171,3464, 404, 549, 18,3143,2398,1410,3692,1666,5062,3571,4533,2912,4534, # 752 +5063,2991, 368,5064, 146, 366, 99, 871,3693,1543, 748, 807,1586,1185, 22,2263, # 768 + 379,3822,3211,5065,3212, 505,1942,2628,1992,1382,2319,5066, 380,2362, 218, 702, # 784 +1818,1248,3465,3044,3572,3355,3282,5067,2992,3694, 930,3283,3823,5068, 59,5069, # 800 + 585, 601,4221, 497,3466,1112,1314,4535,1802,5070,1223,1472,2177,5071, 749,1837, # 816 + 690,1900,3824,1773,3988,1476, 429,1043,1791,2236,2117, 917,4222, 447,1086,1629, # 832 +5072, 556,5073,5074,2021,1654, 844,1090, 105, 550, 966,1758,2828,1008,1783, 686, # 848 +1095,5075,2287, 793,1602,5076,3573,2603,4536,4223,2948,2302,4537,3825, 980,2503, # 864 + 544, 353, 527,4538, 908,2687,2913,5077, 381,2629,1943,1348,5078,1341,1252, 560, # 880 +3095,5079,3467,2870,5080,2054, 973, 886,2081, 143,4539,5081,5082, 157,3989, 496, # 896 +4224, 57, 840, 540,2039,4540,4541,3468,2118,1445, 970,2264,1748,1966,2082,4225, # 912 +3144,1234,1776,3284,2829,3695, 773,1206,2130,1066,2040,1326,3990,1738,1725,4226, # 928 + 279,3145, 51,1544,2604, 423,1578,2131,2067, 173,4542,1880,5083,5084,1583, 264, # 944 + 610,3696,4543,2444, 280, 154,5085,5086,5087,1739, 338,1282,3096, 693,2871,1411, # 960 +1074,3826,2445,5088,4544,5089,5090,1240, 952,2399,5091,2914,1538,2688, 685,1483, # 976 +4227,2475,1436, 953,4228,2055,4545, 671,2400, 79,4229,2446,3285, 608, 567,2689, # 992 +3469,4230,4231,1691, 393,1261,1792,2401,5092,4546,5093,5094,5095,5096,1383,1672, # 1008 +3827,3213,1464, 522,1119, 661,1150, 216, 675,4547,3991,1432,3574, 609,4548,2690, # 1024 +2402,5097,5098,5099,4232,3045, 0,5100,2476, 315, 231,2447, 301,3356,4549,2385, # 1040 +5101, 233,4233,3697,1819,4550,4551,5102, 96,1777,1315,2083,5103, 257,5104,1810, # 1056 +3698,2718,1139,1820,4234,2022,1124,2164,2791,1778,2659,5105,3097, 363,1655,3214, # 1072 +5106,2993,5107,5108,5109,3992,1567,3993, 718, 103,3215, 849,1443, 341,3357,2949, # 1088 +1484,5110,1712, 127, 67, 339,4235,2403, 679,1412, 821,5111,5112, 834, 738, 351, # 1104 +2994,2147, 846, 235,1497,1881, 418,1993,3828,2719, 186,1100,2148,2756,3575,1545, # 1120 +1355,2950,2872,1377, 583,3994,4236,2581,2995,5113,1298,3699,1078,2557,3700,2363, # 1136 + 78,3829,3830, 267,1289,2100,2002,1594,4237, 348, 369,1274,2197,2178,1838,4552, # 1152 +1821,2830,3701,2757,2288,2003,4553,2951,2758, 144,3358, 882,4554,3995,2759,3470, # 1168 +4555,2915,5114,4238,1726, 320,5115,3996,3046, 788,2996,5116,2831,1774,1327,2873, # 1184 +3997,2832,5117,1306,4556,2004,1700,3831,3576,2364,2660, 787,2023, 506, 824,3702, # 1200 + 534, 323,4557,1044,3359,2024,1901, 946,3471,5118,1779,1500,1678,5119,1882,4558, # 1216 + 165, 243,4559,3703,2528, 123, 683,4239, 764,4560, 36,3998,1793, 589,2916, 816, # 1232 + 626,1667,3047,2237,1639,1555,1622,3832,3999,5120,4000,2874,1370,1228,1933, 891, # 1248 +2084,2917, 304,4240,5121, 292,2997,2720,3577, 691,2101,4241,1115,4561, 118, 662, # 1264 +5122, 611,1156, 854,2386,1316,2875, 2, 386, 515,2918,5123,5124,3286, 868,2238, # 1280 +1486, 855,2661, 785,2216,3048,5125,1040,3216,3578,5126,3146, 448,5127,1525,5128, # 1296 +2165,4562,5129,3833,5130,4242,2833,3579,3147, 503, 818,4001,3148,1568, 814, 676, # 1312 +1444, 306,1749,5131,3834,1416,1030, 197,1428, 805,2834,1501,4563,5132,5133,5134, # 1328 +1994,5135,4564,5136,5137,2198, 13,2792,3704,2998,3149,1229,1917,5138,3835,2132, # 1344 +5139,4243,4565,2404,3580,5140,2217,1511,1727,1120,5141,5142, 646,3836,2448, 307, # 1360 +5143,5144,1595,3217,5145,5146,5147,3705,1113,1356,4002,1465,2529,2530,5148, 519, # 1376 +5149, 128,2133, 92,2289,1980,5150,4003,1512, 342,3150,2199,5151,2793,2218,1981, # 1392 +3360,4244, 290,1656,1317, 789, 827,2365,5152,3837,4566, 562, 581,4004,5153, 401, # 1408 +4567,2252, 94,4568,5154,1399,2794,5155,1463,2025,4569,3218,1944,5156, 828,1105, # 1424 +4245,1262,1394,5157,4246, 605,4570,5158,1784,2876,5159,2835, 819,2102, 578,2200, # 1440 +2952,5160,1502, 436,3287,4247,3288,2836,4005,2919,3472,3473,5161,2721,2320,5162, # 1456 +5163,2337,2068, 23,4571, 193, 826,3838,2103, 699,1630,4248,3098, 390,1794,1064, # 1472 +3581,5164,1579,3099,3100,1400,5165,4249,1839,1640,2877,5166,4572,4573, 137,4250, # 1488 + 598,3101,1967, 780, 104, 974,2953,5167, 278, 899, 253, 402, 572, 504, 493,1339, # 1504 +5168,4006,1275,4574,2582,2558,5169,3706,3049,3102,2253, 565,1334,2722, 863, 41, # 1520 +5170,5171,4575,5172,1657,2338, 19, 463,2760,4251, 606,5173,2999,3289,1087,2085, # 1536 +1323,2662,3000,5174,1631,1623,1750,4252,2691,5175,2878, 791,2723,2663,2339, 232, # 1552 +2421,5176,3001,1498,5177,2664,2630, 755,1366,3707,3290,3151,2026,1609, 119,1918, # 1568 +3474, 862,1026,4253,5178,4007,3839,4576,4008,4577,2265,1952,2477,5179,1125, 817, # 1584 +4254,4255,4009,1513,1766,2041,1487,4256,3050,3291,2837,3840,3152,5180,5181,1507, # 1600 +5182,2692, 733, 40,1632,1106,2879, 345,4257, 841,2531, 230,4578,3002,1847,3292, # 1616 +3475,5183,1263, 986,3476,5184, 735, 879, 254,1137, 857, 622,1300,1180,1388,1562, # 1632 +4010,4011,2954, 967,2761,2665,1349, 592,2134,1692,3361,3003,1995,4258,1679,4012, # 1648 +1902,2188,5185, 739,3708,2724,1296,1290,5186,4259,2201,2202,1922,1563,2605,2559, # 1664 +1871,2762,3004,5187, 435,5188, 343,1108, 596, 17,1751,4579,2239,3477,3709,5189, # 1680 +4580, 294,3582,2955,1693, 477, 979, 281,2042,3583, 643,2043,3710,2631,2795,2266, # 1696 +1031,2340,2135,2303,3584,4581, 367,1249,2560,5190,3585,5191,4582,1283,3362,2005, # 1712 + 240,1762,3363,4583,4584, 836,1069,3153, 474,5192,2149,2532, 268,3586,5193,3219, # 1728 +1521,1284,5194,1658,1546,4260,5195,3587,3588,5196,4261,3364,2693,1685,4262, 961, # 1744 +1673,2632, 190,2006,2203,3841,4585,4586,5197, 570,2504,3711,1490,5198,4587,2633, # 1760 +3293,1957,4588, 584,1514, 396,1045,1945,5199,4589,1968,2449,5200,5201,4590,4013, # 1776 + 619,5202,3154,3294, 215,2007,2796,2561,3220,4591,3221,4592, 763,4263,3842,4593, # 1792 +5203,5204,1958,1767,2956,3365,3712,1174, 452,1477,4594,3366,3155,5205,2838,1253, # 1808 +2387,2189,1091,2290,4264, 492,5206, 638,1169,1825,2136,1752,4014, 648, 926,1021, # 1824 +1324,4595, 520,4596, 997, 847,1007, 892,4597,3843,2267,1872,3713,2405,1785,4598, # 1840 +1953,2957,3103,3222,1728,4265,2044,3714,4599,2008,1701,3156,1551, 30,2268,4266, # 1856 +5207,2027,4600,3589,5208, 501,5209,4267, 594,3478,2166,1822,3590,3479,3591,3223, # 1872 + 829,2839,4268,5210,1680,3157,1225,4269,5211,3295,4601,4270,3158,2341,5212,4602, # 1888 +4271,5213,4015,4016,5214,1848,2388,2606,3367,5215,4603, 374,4017, 652,4272,4273, # 1904 + 375,1140, 798,5216,5217,5218,2366,4604,2269, 546,1659, 138,3051,2450,4605,5219, # 1920 +2254, 612,1849, 910, 796,3844,1740,1371, 825,3845,3846,5220,2920,2562,5221, 692, # 1936 + 444,3052,2634, 801,4606,4274,5222,1491, 244,1053,3053,4275,4276, 340,5223,4018, # 1952 +1041,3005, 293,1168, 87,1357,5224,1539, 959,5225,2240, 721, 694,4277,3847, 219, # 1968 +1478, 644,1417,3368,2666,1413,1401,1335,1389,4019,5226,5227,3006,2367,3159,1826, # 1984 + 730,1515, 184,2840, 66,4607,5228,1660,2958, 246,3369, 378,1457, 226,3480, 975, # 2000 +4020,2959,1264,3592, 674, 696,5229, 163,5230,1141,2422,2167, 713,3593,3370,4608, # 2016 +4021,5231,5232,1186, 15,5233,1079,1070,5234,1522,3224,3594, 276,1050,2725, 758, # 2032 +1126, 653,2960,3296,5235,2342, 889,3595,4022,3104,3007, 903,1250,4609,4023,3481, # 2048 +3596,1342,1681,1718, 766,3297, 286, 89,2961,3715,5236,1713,5237,2607,3371,3008, # 2064 +5238,2962,2219,3225,2880,5239,4610,2505,2533, 181, 387,1075,4024, 731,2190,3372, # 2080 +5240,3298, 310, 313,3482,2304, 770,4278, 54,3054, 189,4611,3105,3848,4025,5241, # 2096 +1230,1617,1850, 355,3597,4279,4612,3373, 111,4280,3716,1350,3160,3483,3055,4281, # 2112 +2150,3299,3598,5242,2797,4026,4027,3009, 722,2009,5243,1071, 247,1207,2343,2478, # 2128 +1378,4613,2010, 864,1437,1214,4614, 373,3849,1142,2220, 667,4615, 442,2763,2563, # 2144 +3850,4028,1969,4282,3300,1840, 837, 170,1107, 934,1336,1883,5244,5245,2119,4283, # 2160 +2841, 743,1569,5246,4616,4284, 582,2389,1418,3484,5247,1803,5248, 357,1395,1729, # 2176 +3717,3301,2423,1564,2241,5249,3106,3851,1633,4617,1114,2086,4285,1532,5250, 482, # 2192 +2451,4618,5251,5252,1492, 833,1466,5253,2726,3599,1641,2842,5254,1526,1272,3718, # 2208 +4286,1686,1795, 416,2564,1903,1954,1804,5255,3852,2798,3853,1159,2321,5256,2881, # 2224 +4619,1610,1584,3056,2424,2764, 443,3302,1163,3161,5257,5258,4029,5259,4287,2506, # 2240 +3057,4620,4030,3162,2104,1647,3600,2011,1873,4288,5260,4289, 431,3485,5261, 250, # 2256 + 97, 81,4290,5262,1648,1851,1558, 160, 848,5263, 866, 740,1694,5264,2204,2843, # 2272 +3226,4291,4621,3719,1687, 950,2479, 426, 469,3227,3720,3721,4031,5265,5266,1188, # 2288 + 424,1996, 861,3601,4292,3854,2205,2694, 168,1235,3602,4293,5267,2087,1674,4622, # 2304 +3374,3303, 220,2565,1009,5268,3855, 670,3010, 332,1208, 717,5269,5270,3603,2452, # 2320 +4032,3375,5271, 513,5272,1209,2882,3376,3163,4623,1080,5273,5274,5275,5276,2534, # 2336 +3722,3604, 815,1587,4033,4034,5277,3605,3486,3856,1254,4624,1328,3058,1390,4035, # 2352 +1741,4036,3857,4037,5278, 236,3858,2453,3304,5279,5280,3723,3859,1273,3860,4625, # 2368 +5281, 308,5282,4626, 245,4627,1852,2480,1307,2583, 430, 715,2137,2454,5283, 270, # 2384 + 199,2883,4038,5284,3606,2727,1753, 761,1754, 725,1661,1841,4628,3487,3724,5285, # 2400 +5286, 587, 14,3305, 227,2608, 326, 480,2270, 943,2765,3607, 291, 650,1884,5287, # 2416 +1702,1226, 102,1547, 62,3488, 904,4629,3489,1164,4294,5288,5289,1224,1548,2766, # 2432 + 391, 498,1493,5290,1386,1419,5291,2056,1177,4630, 813, 880,1081,2368, 566,1145, # 2448 +4631,2291,1001,1035,2566,2609,2242, 394,1286,5292,5293,2069,5294, 86,1494,1730, # 2464 +4039, 491,1588, 745, 897,2963, 843,3377,4040,2767,2884,3306,1768, 998,2221,2070, # 2480 + 397,1827,1195,1970,3725,3011,3378, 284,5295,3861,2507,2138,2120,1904,5296,4041, # 2496 +2151,4042,4295,1036,3490,1905, 114,2567,4296, 209,1527,5297,5298,2964,2844,2635, # 2512 +2390,2728,3164, 812,2568,5299,3307,5300,1559, 737,1885,3726,1210, 885, 28,2695, # 2528 +3608,3862,5301,4297,1004,1780,4632,5302, 346,1982,2222,2696,4633,3863,1742, 797, # 2544 +1642,4043,1934,1072,1384,2152, 896,4044,3308,3727,3228,2885,3609,5303,2569,1959, # 2560 +4634,2455,1786,5304,5305,5306,4045,4298,1005,1308,3728,4299,2729,4635,4636,1528, # 2576 +2610, 161,1178,4300,1983, 987,4637,1101,4301, 631,4046,1157,3229,2425,1343,1241, # 2592 +1016,2243,2570, 372, 877,2344,2508,1160, 555,1935, 911,4047,5307, 466,1170, 169, # 2608 +1051,2921,2697,3729,2481,3012,1182,2012,2571,1251,2636,5308, 992,2345,3491,1540, # 2624 +2730,1201,2071,2406,1997,2482,5309,4638, 528,1923,2191,1503,1874,1570,2369,3379, # 2640 +3309,5310, 557,1073,5311,1828,3492,2088,2271,3165,3059,3107, 767,3108,2799,4639, # 2656 +1006,4302,4640,2346,1267,2179,3730,3230, 778,4048,3231,2731,1597,2667,5312,4641, # 2672 +5313,3493,5314,5315,5316,3310,2698,1433,3311, 131, 95,1504,4049, 723,4303,3166, # 2688 +1842,3610,2768,2192,4050,2028,2105,3731,5317,3013,4051,1218,5318,3380,3232,4052, # 2704 +4304,2584, 248,1634,3864, 912,5319,2845,3732,3060,3865, 654, 53,5320,3014,5321, # 2720 +1688,4642, 777,3494,1032,4053,1425,5322, 191, 820,2121,2846, 971,4643, 931,3233, # 2736 + 135, 664, 783,3866,1998, 772,2922,1936,4054,3867,4644,2923,3234, 282,2732, 640, # 2752 +1372,3495,1127, 922, 325,3381,5323,5324, 711,2045,5325,5326,4055,2223,2800,1937, # 2768 +4056,3382,2224,2255,3868,2305,5327,4645,3869,1258,3312,4057,3235,2139,2965,4058, # 2784 +4059,5328,2225, 258,3236,4646, 101,1227,5329,3313,1755,5330,1391,3314,5331,2924, # 2800 +2057, 893,5332,5333,5334,1402,4305,2347,5335,5336,3237,3611,5337,5338, 878,1325, # 2816 +1781,2801,4647, 259,1385,2585, 744,1183,2272,4648,5339,4060,2509,5340, 684,1024, # 2832 +4306,5341, 472,3612,3496,1165,3315,4061,4062, 322,2153, 881, 455,1695,1152,1340, # 2848 + 660, 554,2154,4649,1058,4650,4307, 830,1065,3383,4063,4651,1924,5342,1703,1919, # 2864 +5343, 932,2273, 122,5344,4652, 947, 677,5345,3870,2637, 297,1906,1925,2274,4653, # 2880 +2322,3316,5346,5347,4308,5348,4309, 84,4310, 112, 989,5349, 547,1059,4064, 701, # 2896 +3613,1019,5350,4311,5351,3497, 942, 639, 457,2306,2456, 993,2966, 407, 851, 494, # 2912 +4654,3384, 927,5352,1237,5353,2426,3385, 573,4312, 680, 921,2925,1279,1875, 285, # 2928 + 790,1448,1984, 719,2168,5354,5355,4655,4065,4066,1649,5356,1541, 563,5357,1077, # 2944 +5358,3386,3061,3498, 511,3015,4067,4068,3733,4069,1268,2572,3387,3238,4656,4657, # 2960 +5359, 535,1048,1276,1189,2926,2029,3167,1438,1373,2847,2967,1134,2013,5360,4313, # 2976 +1238,2586,3109,1259,5361, 700,5362,2968,3168,3734,4314,5363,4315,1146,1876,1907, # 2992 +4658,2611,4070, 781,2427, 132,1589, 203, 147, 273,2802,2407, 898,1787,2155,4071, # 3008 +4072,5364,3871,2803,5365,5366,4659,4660,5367,3239,5368,1635,3872, 965,5369,1805, # 3024 +2699,1516,3614,1121,1082,1329,3317,4073,1449,3873, 65,1128,2848,2927,2769,1590, # 3040 +3874,5370,5371, 12,2668, 45, 976,2587,3169,4661, 517,2535,1013,1037,3240,5372, # 3056 +3875,2849,5373,3876,5374,3499,5375,2612, 614,1999,2323,3877,3110,2733,2638,5376, # 3072 +2588,4316, 599,1269,5377,1811,3735,5378,2700,3111, 759,1060, 489,1806,3388,3318, # 3088 +1358,5379,5380,2391,1387,1215,2639,2256, 490,5381,5382,4317,1759,2392,2348,5383, # 3104 +4662,3878,1908,4074,2640,1807,3241,4663,3500,3319,2770,2349, 874,5384,5385,3501, # 3120 +3736,1859, 91,2928,3737,3062,3879,4664,5386,3170,4075,2669,5387,3502,1202,1403, # 3136 +3880,2969,2536,1517,2510,4665,3503,2511,5388,4666,5389,2701,1886,1495,1731,4076, # 3152 +2370,4667,5390,2030,5391,5392,4077,2702,1216, 237,2589,4318,2324,4078,3881,4668, # 3168 +4669,2703,3615,3504, 445,4670,5393,5394,5395,5396,2771, 61,4079,3738,1823,4080, # 3184 +5397, 687,2046, 935, 925, 405,2670, 703,1096,1860,2734,4671,4081,1877,1367,2704, # 3200 +3389, 918,2106,1782,2483, 334,3320,1611,1093,4672, 564,3171,3505,3739,3390, 945, # 3216 +2641,2058,4673,5398,1926, 872,4319,5399,3506,2705,3112, 349,4320,3740,4082,4674, # 3232 +3882,4321,3741,2156,4083,4675,4676,4322,4677,2408,2047, 782,4084, 400, 251,4323, # 3248 +1624,5400,5401, 277,3742, 299,1265, 476,1191,3883,2122,4324,4325,1109, 205,5402, # 3264 +2590,1000,2157,3616,1861,5403,5404,5405,4678,5406,4679,2573, 107,2484,2158,4085, # 3280 +3507,3172,5407,1533, 541,1301, 158, 753,4326,2886,3617,5408,1696, 370,1088,4327, # 3296 +4680,3618, 579, 327, 440, 162,2244, 269,1938,1374,3508, 968,3063, 56,1396,3113, # 3312 +2107,3321,3391,5409,1927,2159,4681,3016,5410,3619,5411,5412,3743,4682,2485,5413, # 3328 +2804,5414,1650,4683,5415,2613,5416,5417,4086,2671,3392,1149,3393,4087,3884,4088, # 3344 +5418,1076, 49,5419, 951,3242,3322,3323, 450,2850, 920,5420,1812,2805,2371,4328, # 3360 +1909,1138,2372,3885,3509,5421,3243,4684,1910,1147,1518,2428,4685,3886,5422,4686, # 3376 +2393,2614, 260,1796,3244,5423,5424,3887,3324, 708,5425,3620,1704,5426,3621,1351, # 3392 +1618,3394,3017,1887, 944,4329,3395,4330,3064,3396,4331,5427,3744, 422, 413,1714, # 3408 +3325, 500,2059,2350,4332,2486,5428,1344,1911, 954,5429,1668,5430,5431,4089,2409, # 3424 +4333,3622,3888,4334,5432,2307,1318,2512,3114, 133,3115,2887,4687, 629, 31,2851, # 3440 +2706,3889,4688, 850, 949,4689,4090,2970,1732,2089,4335,1496,1853,5433,4091, 620, # 3456 +3245, 981,1242,3745,3397,1619,3746,1643,3326,2140,2457,1971,1719,3510,2169,5434, # 3472 +3246,5435,5436,3398,1829,5437,1277,4690,1565,2048,5438,1636,3623,3116,5439, 869, # 3488 +2852, 655,3890,3891,3117,4092,3018,3892,1310,3624,4691,5440,5441,5442,1733, 558, # 3504 +4692,3747, 335,1549,3065,1756,4336,3748,1946,3511,1830,1291,1192, 470,2735,2108, # 3520 +2806, 913,1054,4093,5443,1027,5444,3066,4094,4693, 982,2672,3399,3173,3512,3247, # 3536 +3248,1947,2807,5445, 571,4694,5446,1831,5447,3625,2591,1523,2429,5448,2090, 984, # 3552 +4695,3749,1960,5449,3750, 852, 923,2808,3513,3751, 969,1519, 999,2049,2325,1705, # 3568 +5450,3118, 615,1662, 151, 597,4095,2410,2326,1049, 275,4696,3752,4337, 568,3753, # 3584 +3626,2487,4338,3754,5451,2430,2275, 409,3249,5452,1566,2888,3514,1002, 769,2853, # 3600 + 194,2091,3174,3755,2226,3327,4339, 628,1505,5453,5454,1763,2180,3019,4096, 521, # 3616 +1161,2592,1788,2206,2411,4697,4097,1625,4340,4341, 412, 42,3119, 464,5455,2642, # 3632 +4698,3400,1760,1571,2889,3515,2537,1219,2207,3893,2643,2141,2373,4699,4700,3328, # 3648 +1651,3401,3627,5456,5457,3628,2488,3516,5458,3756,5459,5460,2276,2092, 460,5461, # 3664 +4701,5462,3020, 962, 588,3629, 289,3250,2644,1116, 52,5463,3067,1797,5464,5465, # 3680 +5466,1467,5467,1598,1143,3757,4342,1985,1734,1067,4702,1280,3402, 465,4703,1572, # 3696 + 510,5468,1928,2245,1813,1644,3630,5469,4704,3758,5470,5471,2673,1573,1534,5472, # 3712 +5473, 536,1808,1761,3517,3894,3175,2645,5474,5475,5476,4705,3518,2929,1912,2809, # 3728 +5477,3329,1122, 377,3251,5478, 360,5479,5480,4343,1529, 551,5481,2060,3759,1769, # 3744 +2431,5482,2930,4344,3330,3120,2327,2109,2031,4706,1404, 136,1468,1479, 672,1171, # 3760 +3252,2308, 271,3176,5483,2772,5484,2050, 678,2736, 865,1948,4707,5485,2014,4098, # 3776 +2971,5486,2737,2227,1397,3068,3760,4708,4709,1735,2931,3403,3631,5487,3895, 509, # 3792 +2854,2458,2890,3896,5488,5489,3177,3178,4710,4345,2538,4711,2309,1166,1010, 552, # 3808 + 681,1888,5490,5491,2972,2973,4099,1287,1596,1862,3179, 358, 453, 736, 175, 478, # 3824 +1117, 905,1167,1097,5492,1854,1530,5493,1706,5494,2181,3519,2292,3761,3520,3632, # 3840 +4346,2093,4347,5495,3404,1193,2489,4348,1458,2193,2208,1863,1889,1421,3331,2932, # 3856 +3069,2182,3521, 595,2123,5496,4100,5497,5498,4349,1707,2646, 223,3762,1359, 751, # 3872 +3121, 183,3522,5499,2810,3021, 419,2374, 633, 704,3897,2394, 241,5500,5501,5502, # 3888 + 838,3022,3763,2277,2773,2459,3898,1939,2051,4101,1309,3122,2246,1181,5503,1136, # 3904 +2209,3899,2375,1446,4350,2310,4712,5504,5505,4351,1055,2615, 484,3764,5506,4102, # 3920 + 625,4352,2278,3405,1499,4353,4103,5507,4104,4354,3253,2279,2280,3523,5508,5509, # 3936 +2774, 808,2616,3765,3406,4105,4355,3123,2539, 526,3407,3900,4356, 955,5510,1620, # 3952 +4357,2647,2432,5511,1429,3766,1669,1832, 994, 928,5512,3633,1260,5513,5514,5515, # 3968 +1949,2293, 741,2933,1626,4358,2738,2460, 867,1184, 362,3408,1392,5516,5517,4106, # 3984 +4359,1770,1736,3254,2934,4713,4714,1929,2707,1459,1158,5518,3070,3409,2891,1292, # 4000 +1930,2513,2855,3767,1986,1187,2072,2015,2617,4360,5519,2574,2514,2170,3768,2490, # 4016 +3332,5520,3769,4715,5521,5522, 666,1003,3023,1022,3634,4361,5523,4716,1814,2257, # 4032 + 574,3901,1603, 295,1535, 705,3902,4362, 283, 858, 417,5524,5525,3255,4717,4718, # 4048 +3071,1220,1890,1046,2281,2461,4107,1393,1599, 689,2575, 388,4363,5526,2491, 802, # 4064 +5527,2811,3903,2061,1405,2258,5528,4719,3904,2110,1052,1345,3256,1585,5529, 809, # 4080 +5530,5531,5532, 575,2739,3524, 956,1552,1469,1144,2328,5533,2329,1560,2462,3635, # 4096 +3257,4108, 616,2210,4364,3180,2183,2294,5534,1833,5535,3525,4720,5536,1319,3770, # 4112 +3771,1211,3636,1023,3258,1293,2812,5537,5538,5539,3905, 607,2311,3906, 762,2892, # 4128 +1439,4365,1360,4721,1485,3072,5540,4722,1038,4366,1450,2062,2648,4367,1379,4723, # 4144 +2593,5541,5542,4368,1352,1414,2330,2935,1172,5543,5544,3907,3908,4724,1798,1451, # 4160 +5545,5546,5547,5548,2936,4109,4110,2492,2351, 411,4111,4112,3637,3333,3124,4725, # 4176 +1561,2674,1452,4113,1375,5549,5550, 47,2974, 316,5551,1406,1591,2937,3181,5552, # 4192 +1025,2142,3125,3182, 354,2740, 884,2228,4369,2412, 508,3772, 726,3638, 996,2433, # 4208 +3639, 729,5553, 392,2194,1453,4114,4726,3773,5554,5555,2463,3640,2618,1675,2813, # 4224 + 919,2352,2975,2353,1270,4727,4115, 73,5556,5557, 647,5558,3259,2856,2259,1550, # 4240 +1346,3024,5559,1332, 883,3526,5560,5561,5562,5563,3334,2775,5564,1212, 831,1347, # 4256 +4370,4728,2331,3909,1864,3073, 720,3910,4729,4730,3911,5565,4371,5566,5567,4731, # 4272 +5568,5569,1799,4732,3774,2619,4733,3641,1645,2376,4734,5570,2938, 669,2211,2675, # 4288 +2434,5571,2893,5572,5573,1028,3260,5574,4372,2413,5575,2260,1353,5576,5577,4735, # 4304 +3183, 518,5578,4116,5579,4373,1961,5580,2143,4374,5581,5582,3025,2354,2355,3912, # 4320 + 516,1834,1454,4117,2708,4375,4736,2229,2620,1972,1129,3642,5583,2776,5584,2976, # 4336 +1422, 577,1470,3026,1524,3410,5585,5586, 432,4376,3074,3527,5587,2594,1455,2515, # 4352 +2230,1973,1175,5588,1020,2741,4118,3528,4737,5589,2742,5590,1743,1361,3075,3529, # 4368 +2649,4119,4377,4738,2295, 895, 924,4378,2171, 331,2247,3076, 166,1627,3077,1098, # 4384 +5591,1232,2894,2231,3411,4739, 657, 403,1196,2377, 542,3775,3412,1600,4379,3530, # 4400 +5592,4740,2777,3261, 576, 530,1362,4741,4742,2540,2676,3776,4120,5593, 842,3913, # 4416 +5594,2814,2032,1014,4121, 213,2709,3413, 665, 621,4380,5595,3777,2939,2435,5596, # 4432 +2436,3335,3643,3414,4743,4381,2541,4382,4744,3644,1682,4383,3531,1380,5597, 724, # 4448 +2282, 600,1670,5598,1337,1233,4745,3126,2248,5599,1621,4746,5600, 651,4384,5601, # 4464 +1612,4385,2621,5602,2857,5603,2743,2312,3078,5604, 716,2464,3079, 174,1255,2710, # 4480 +4122,3645, 548,1320,1398, 728,4123,1574,5605,1891,1197,3080,4124,5606,3081,3082, # 4496 +3778,3646,3779, 747,5607, 635,4386,4747,5608,5609,5610,4387,5611,5612,4748,5613, # 4512 +3415,4749,2437, 451,5614,3780,2542,2073,4388,2744,4389,4125,5615,1764,4750,5616, # 4528 +4390, 350,4751,2283,2395,2493,5617,4391,4126,2249,1434,4127, 488,4752, 458,4392, # 4544 +4128,3781, 771,1330,2396,3914,2576,3184,2160,2414,1553,2677,3185,4393,5618,2494, # 4560 +2895,2622,1720,2711,4394,3416,4753,5619,2543,4395,5620,3262,4396,2778,5621,2016, # 4576 +2745,5622,1155,1017,3782,3915,5623,3336,2313, 201,1865,4397,1430,5624,4129,5625, # 4592 +5626,5627,5628,5629,4398,1604,5630, 414,1866, 371,2595,4754,4755,3532,2017,3127, # 4608 +4756,1708, 960,4399, 887, 389,2172,1536,1663,1721,5631,2232,4130,2356,2940,1580, # 4624 +5632,5633,1744,4757,2544,4758,4759,5634,4760,5635,2074,5636,4761,3647,3417,2896, # 4640 +4400,5637,4401,2650,3418,2815, 673,2712,2465, 709,3533,4131,3648,4402,5638,1148, # 4656 + 502, 634,5639,5640,1204,4762,3649,1575,4763,2623,3783,5641,3784,3128, 948,3263, # 4672 + 121,1745,3916,1110,5642,4403,3083,2516,3027,4132,3785,1151,1771,3917,1488,4133, # 4688 +1987,5643,2438,3534,5644,5645,2094,5646,4404,3918,1213,1407,2816, 531,2746,2545, # 4704 +3264,1011,1537,4764,2779,4405,3129,1061,5647,3786,3787,1867,2897,5648,2018, 120, # 4720 +4406,4407,2063,3650,3265,2314,3919,2678,3419,1955,4765,4134,5649,3535,1047,2713, # 4736 +1266,5650,1368,4766,2858, 649,3420,3920,2546,2747,1102,2859,2679,5651,5652,2000, # 4752 +5653,1111,3651,2977,5654,2495,3921,3652,2817,1855,3421,3788,5655,5656,3422,2415, # 4768 +2898,3337,3266,3653,5657,2577,5658,3654,2818,4135,1460, 856,5659,3655,5660,2899, # 4784 +2978,5661,2900,3922,5662,4408, 632,2517, 875,3923,1697,3924,2296,5663,5664,4767, # 4800 +3028,1239, 580,4768,4409,5665, 914, 936,2075,1190,4136,1039,2124,5666,5667,5668, # 4816 +5669,3423,1473,5670,1354,4410,3925,4769,2173,3084,4137, 915,3338,4411,4412,3339, # 4832 +1605,1835,5671,2748, 398,3656,4413,3926,4138, 328,1913,2860,4139,3927,1331,4414, # 4848 +3029, 937,4415,5672,3657,4140,4141,3424,2161,4770,3425, 524, 742, 538,3085,1012, # 4864 +5673,5674,3928,2466,5675, 658,1103, 225,3929,5676,5677,4771,5678,4772,5679,3267, # 4880 +1243,5680,4142, 963,2250,4773,5681,2714,3658,3186,5682,5683,2596,2332,5684,4774, # 4896 +5685,5686,5687,3536, 957,3426,2547,2033,1931,2941,2467, 870,2019,3659,1746,2780, # 4912 +2781,2439,2468,5688,3930,5689,3789,3130,3790,3537,3427,3791,5690,1179,3086,5691, # 4928 +3187,2378,4416,3792,2548,3188,3131,2749,4143,5692,3428,1556,2549,2297, 977,2901, # 4944 +2034,4144,1205,3429,5693,1765,3430,3189,2125,1271, 714,1689,4775,3538,5694,2333, # 4960 +3931, 533,4417,3660,2184, 617,5695,2469,3340,3539,2315,5696,5697,3190,5698,5699, # 4976 +3932,1988, 618, 427,2651,3540,3431,5700,5701,1244,1690,5702,2819,4418,4776,5703, # 4992 +3541,4777,5704,2284,1576, 473,3661,4419,3432, 972,5705,3662,5706,3087,5707,5708, # 5008 +4778,4779,5709,3793,4145,4146,5710, 153,4780, 356,5711,1892,2902,4420,2144, 408, # 5024 + 803,2357,5712,3933,5713,4421,1646,2578,2518,4781,4782,3934,5714,3935,4422,5715, # 5040 +2416,3433, 752,5716,5717,1962,3341,2979,5718, 746,3030,2470,4783,4423,3794, 698, # 5056 +4784,1893,4424,3663,2550,4785,3664,3936,5719,3191,3434,5720,1824,1302,4147,2715, # 5072 +3937,1974,4425,5721,4426,3192, 823,1303,1288,1236,2861,3542,4148,3435, 774,3938, # 5088 +5722,1581,4786,1304,2862,3939,4787,5723,2440,2162,1083,3268,4427,4149,4428, 344, # 5104 +1173, 288,2316, 454,1683,5724,5725,1461,4788,4150,2597,5726,5727,4789, 985, 894, # 5120 +5728,3436,3193,5729,1914,2942,3795,1989,5730,2111,1975,5731,4151,5732,2579,1194, # 5136 + 425,5733,4790,3194,1245,3796,4429,5734,5735,2863,5736, 636,4791,1856,3940, 760, # 5152 +1800,5737,4430,2212,1508,4792,4152,1894,1684,2298,5738,5739,4793,4431,4432,2213, # 5168 + 479,5740,5741, 832,5742,4153,2496,5743,2980,2497,3797, 990,3132, 627,1815,2652, # 5184 +4433,1582,4434,2126,2112,3543,4794,5744, 799,4435,3195,5745,4795,2113,1737,3031, # 5200 +1018, 543, 754,4436,3342,1676,4796,4797,4154,4798,1489,5746,3544,5747,2624,2903, # 5216 +4155,5748,5749,2981,5750,5751,5752,5753,3196,4799,4800,2185,1722,5754,3269,3270, # 5232 +1843,3665,1715, 481, 365,1976,1857,5755,5756,1963,2498,4801,5757,2127,3666,3271, # 5248 + 433,1895,2064,2076,5758, 602,2750,5759,5760,5761,5762,5763,3032,1628,3437,5764, # 5264 +3197,4802,4156,2904,4803,2519,5765,2551,2782,5766,5767,5768,3343,4804,2905,5769, # 5280 +4805,5770,2864,4806,4807,1221,2982,4157,2520,5771,5772,5773,1868,1990,5774,5775, # 5296 +5776,1896,5777,5778,4808,1897,4158, 318,5779,2095,4159,4437,5780,5781, 485,5782, # 5312 + 938,3941, 553,2680, 116,5783,3942,3667,5784,3545,2681,2783,3438,3344,2820,5785, # 5328 +3668,2943,4160,1747,2944,2983,5786,5787, 207,5788,4809,5789,4810,2521,5790,3033, # 5344 + 890,3669,3943,5791,1878,3798,3439,5792,2186,2358,3440,1652,5793,5794,5795, 941, # 5360 +2299, 208,3546,4161,2020, 330,4438,3944,2906,2499,3799,4439,4811,5796,5797,5798, # 5376 +) + diff --git a/venv/lib/python3.7/site-packages/chardet/cli/__init__.py b/venv/lib/python3.7/site-packages/chardet/cli/__init__.py new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/venv/lib/python3.7/site-packages/chardet/cli/__init__.py @@ -0,0 +1 @@ + diff --git a/venv/lib/python3.7/site-packages/chardet/codingstatemachine.py b/venv/lib/python3.7/site-packages/chardet/codingstatemachine.py new file mode 100644 index 0000000..68fba44 --- /dev/null +++ b/venv/lib/python3.7/site-packages/chardet/codingstatemachine.py @@ -0,0 +1,88 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +import logging + +from .enums import MachineState + + +class CodingStateMachine(object): + """ + A state machine to verify a byte sequence for a particular encoding. For + each byte the detector receives, it will feed that byte to every active + state machine available, one byte at a time. The state machine changes its + state based on its previous state and the byte it receives. There are 3 + states in a state machine that are of interest to an auto-detector: + + START state: This is the state to start with, or a legal byte sequence + (i.e. a valid code point) for character has been identified. + + ME state: This indicates that the state machine identified a byte sequence + that is specific to the charset it is designed for and that + there is no other possible encoding which can contain this byte + sequence. This will to lead to an immediate positive answer for + the detector. + + ERROR state: This indicates the state machine identified an illegal byte + sequence for that encoding. This will lead to an immediate + negative answer for this encoding. Detector will exclude this + encoding from consideration from here on. + """ + def __init__(self, sm): + self._model = sm + self._curr_byte_pos = 0 + self._curr_char_len = 0 + self._curr_state = None + self.logger = logging.getLogger(__name__) + self.reset() + + def reset(self): + self._curr_state = MachineState.START + + def next_state(self, c): + # for each byte we get its class + # if it is first byte, we also get byte length + byte_class = self._model['class_table'][c] + if self._curr_state == MachineState.START: + self._curr_byte_pos = 0 + self._curr_char_len = self._model['char_len_table'][byte_class] + # from byte's class and state_table, we get its next state + curr_state = (self._curr_state * self._model['class_factor'] + + byte_class) + self._curr_state = self._model['state_table'][curr_state] + self._curr_byte_pos += 1 + return self._curr_state + + def get_current_charlen(self): + return self._curr_char_len + + def get_coding_state_machine(self): + return self._model['name'] + + @property + def language(self): + return self._model['language'] diff --git a/venv/lib/python3.7/site-packages/chardet/escprober.py b/venv/lib/python3.7/site-packages/chardet/escprober.py new file mode 100644 index 0000000..c70493f --- /dev/null +++ b/venv/lib/python3.7/site-packages/chardet/escprober.py @@ -0,0 +1,101 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .charsetprober import CharSetProber +from .codingstatemachine import CodingStateMachine +from .enums import LanguageFilter, ProbingState, MachineState +from .escsm import (HZ_SM_MODEL, ISO2022CN_SM_MODEL, ISO2022JP_SM_MODEL, + ISO2022KR_SM_MODEL) + + +class EscCharSetProber(CharSetProber): + """ + This CharSetProber uses a "code scheme" approach for detecting encodings, + whereby easily recognizable escape or shift sequences are relied on to + identify these encodings. + """ + + def __init__(self, lang_filter=None): + super(EscCharSetProber, self).__init__(lang_filter=lang_filter) + self.coding_sm = [] + if self.lang_filter & LanguageFilter.CHINESE_SIMPLIFIED: + self.coding_sm.append(CodingStateMachine(HZ_SM_MODEL)) + self.coding_sm.append(CodingStateMachine(ISO2022CN_SM_MODEL)) + if self.lang_filter & LanguageFilter.JAPANESE: + self.coding_sm.append(CodingStateMachine(ISO2022JP_SM_MODEL)) + if self.lang_filter & LanguageFilter.KOREAN: + self.coding_sm.append(CodingStateMachine(ISO2022KR_SM_MODEL)) + self.active_sm_count = None + self._detected_charset = None + self._detected_language = None + self._state = None + self.reset() + + def reset(self): + super(EscCharSetProber, self).reset() + for coding_sm in self.coding_sm: + if not coding_sm: + continue + coding_sm.active = True + coding_sm.reset() + self.active_sm_count = len(self.coding_sm) + self._detected_charset = None + self._detected_language = None + + @property + def charset_name(self): + return self._detected_charset + + @property + def language(self): + return self._detected_language + + def get_confidence(self): + if self._detected_charset: + return 0.99 + else: + return 0.00 + + def feed(self, byte_str): + for c in byte_str: + for coding_sm in self.coding_sm: + if not coding_sm or not coding_sm.active: + continue + coding_state = coding_sm.next_state(c) + if coding_state == MachineState.ERROR: + coding_sm.active = False + self.active_sm_count -= 1 + if self.active_sm_count <= 0: + self._state = ProbingState.NOT_ME + return self.state + elif coding_state == MachineState.ITS_ME: + self._state = ProbingState.FOUND_IT + self._detected_charset = coding_sm.get_coding_state_machine() + self._detected_language = coding_sm.language + return self.state + + return self.state diff --git a/venv/lib/python3.7/site-packages/chardet/escsm.py b/venv/lib/python3.7/site-packages/chardet/escsm.py new file mode 100644 index 0000000..0069523 --- /dev/null +++ b/venv/lib/python3.7/site-packages/chardet/escsm.py @@ -0,0 +1,246 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .enums import MachineState + +HZ_CLS = ( +1,0,0,0,0,0,0,0, # 00 - 07 +0,0,0,0,0,0,0,0, # 08 - 0f +0,0,0,0,0,0,0,0, # 10 - 17 +0,0,0,1,0,0,0,0, # 18 - 1f +0,0,0,0,0,0,0,0, # 20 - 27 +0,0,0,0,0,0,0,0, # 28 - 2f +0,0,0,0,0,0,0,0, # 30 - 37 +0,0,0,0,0,0,0,0, # 38 - 3f +0,0,0,0,0,0,0,0, # 40 - 47 +0,0,0,0,0,0,0,0, # 48 - 4f +0,0,0,0,0,0,0,0, # 50 - 57 +0,0,0,0,0,0,0,0, # 58 - 5f +0,0,0,0,0,0,0,0, # 60 - 67 +0,0,0,0,0,0,0,0, # 68 - 6f +0,0,0,0,0,0,0,0, # 70 - 77 +0,0,0,4,0,5,2,0, # 78 - 7f +1,1,1,1,1,1,1,1, # 80 - 87 +1,1,1,1,1,1,1,1, # 88 - 8f +1,1,1,1,1,1,1,1, # 90 - 97 +1,1,1,1,1,1,1,1, # 98 - 9f +1,1,1,1,1,1,1,1, # a0 - a7 +1,1,1,1,1,1,1,1, # a8 - af +1,1,1,1,1,1,1,1, # b0 - b7 +1,1,1,1,1,1,1,1, # b8 - bf +1,1,1,1,1,1,1,1, # c0 - c7 +1,1,1,1,1,1,1,1, # c8 - cf +1,1,1,1,1,1,1,1, # d0 - d7 +1,1,1,1,1,1,1,1, # d8 - df +1,1,1,1,1,1,1,1, # e0 - e7 +1,1,1,1,1,1,1,1, # e8 - ef +1,1,1,1,1,1,1,1, # f0 - f7 +1,1,1,1,1,1,1,1, # f8 - ff +) + +HZ_ST = ( +MachineState.START,MachineState.ERROR, 3,MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,# 00-07 +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,# 08-0f +MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START, 4,MachineState.ERROR,# 10-17 + 5,MachineState.ERROR, 6,MachineState.ERROR, 5, 5, 4,MachineState.ERROR,# 18-1f + 4,MachineState.ERROR, 4, 4, 4,MachineState.ERROR, 4,MachineState.ERROR,# 20-27 + 4,MachineState.ITS_ME,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,# 28-2f +) + +HZ_CHAR_LEN_TABLE = (0, 0, 0, 0, 0, 0) + +HZ_SM_MODEL = {'class_table': HZ_CLS, + 'class_factor': 6, + 'state_table': HZ_ST, + 'char_len_table': HZ_CHAR_LEN_TABLE, + 'name': "HZ-GB-2312", + 'language': 'Chinese'} + +ISO2022CN_CLS = ( +2,0,0,0,0,0,0,0, # 00 - 07 +0,0,0,0,0,0,0,0, # 08 - 0f +0,0,0,0,0,0,0,0, # 10 - 17 +0,0,0,1,0,0,0,0, # 18 - 1f +0,0,0,0,0,0,0,0, # 20 - 27 +0,3,0,0,0,0,0,0, # 28 - 2f +0,0,0,0,0,0,0,0, # 30 - 37 +0,0,0,0,0,0,0,0, # 38 - 3f +0,0,0,4,0,0,0,0, # 40 - 47 +0,0,0,0,0,0,0,0, # 48 - 4f +0,0,0,0,0,0,0,0, # 50 - 57 +0,0,0,0,0,0,0,0, # 58 - 5f +0,0,0,0,0,0,0,0, # 60 - 67 +0,0,0,0,0,0,0,0, # 68 - 6f +0,0,0,0,0,0,0,0, # 70 - 77 +0,0,0,0,0,0,0,0, # 78 - 7f +2,2,2,2,2,2,2,2, # 80 - 87 +2,2,2,2,2,2,2,2, # 88 - 8f +2,2,2,2,2,2,2,2, # 90 - 97 +2,2,2,2,2,2,2,2, # 98 - 9f +2,2,2,2,2,2,2,2, # a0 - a7 +2,2,2,2,2,2,2,2, # a8 - af +2,2,2,2,2,2,2,2, # b0 - b7 +2,2,2,2,2,2,2,2, # b8 - bf +2,2,2,2,2,2,2,2, # c0 - c7 +2,2,2,2,2,2,2,2, # c8 - cf +2,2,2,2,2,2,2,2, # d0 - d7 +2,2,2,2,2,2,2,2, # d8 - df +2,2,2,2,2,2,2,2, # e0 - e7 +2,2,2,2,2,2,2,2, # e8 - ef +2,2,2,2,2,2,2,2, # f0 - f7 +2,2,2,2,2,2,2,2, # f8 - ff +) + +ISO2022CN_ST = ( +MachineState.START, 3,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,# 00-07 +MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 08-0f +MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,# 10-17 +MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 4,MachineState.ERROR,# 18-1f +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 20-27 + 5, 6,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 28-2f +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 30-37 +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,MachineState.START,# 38-3f +) + +ISO2022CN_CHAR_LEN_TABLE = (0, 0, 0, 0, 0, 0, 0, 0, 0) + +ISO2022CN_SM_MODEL = {'class_table': ISO2022CN_CLS, + 'class_factor': 9, + 'state_table': ISO2022CN_ST, + 'char_len_table': ISO2022CN_CHAR_LEN_TABLE, + 'name': "ISO-2022-CN", + 'language': 'Chinese'} + +ISO2022JP_CLS = ( +2,0,0,0,0,0,0,0, # 00 - 07 +0,0,0,0,0,0,2,2, # 08 - 0f +0,0,0,0,0,0,0,0, # 10 - 17 +0,0,0,1,0,0,0,0, # 18 - 1f +0,0,0,0,7,0,0,0, # 20 - 27 +3,0,0,0,0,0,0,0, # 28 - 2f +0,0,0,0,0,0,0,0, # 30 - 37 +0,0,0,0,0,0,0,0, # 38 - 3f +6,0,4,0,8,0,0,0, # 40 - 47 +0,9,5,0,0,0,0,0, # 48 - 4f +0,0,0,0,0,0,0,0, # 50 - 57 +0,0,0,0,0,0,0,0, # 58 - 5f +0,0,0,0,0,0,0,0, # 60 - 67 +0,0,0,0,0,0,0,0, # 68 - 6f +0,0,0,0,0,0,0,0, # 70 - 77 +0,0,0,0,0,0,0,0, # 78 - 7f +2,2,2,2,2,2,2,2, # 80 - 87 +2,2,2,2,2,2,2,2, # 88 - 8f +2,2,2,2,2,2,2,2, # 90 - 97 +2,2,2,2,2,2,2,2, # 98 - 9f +2,2,2,2,2,2,2,2, # a0 - a7 +2,2,2,2,2,2,2,2, # a8 - af +2,2,2,2,2,2,2,2, # b0 - b7 +2,2,2,2,2,2,2,2, # b8 - bf +2,2,2,2,2,2,2,2, # c0 - c7 +2,2,2,2,2,2,2,2, # c8 - cf +2,2,2,2,2,2,2,2, # d0 - d7 +2,2,2,2,2,2,2,2, # d8 - df +2,2,2,2,2,2,2,2, # e0 - e7 +2,2,2,2,2,2,2,2, # e8 - ef +2,2,2,2,2,2,2,2, # f0 - f7 +2,2,2,2,2,2,2,2, # f8 - ff +) + +ISO2022JP_ST = ( +MachineState.START, 3,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,# 00-07 +MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 08-0f +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,# 10-17 +MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,# 18-1f +MachineState.ERROR, 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 4,MachineState.ERROR,MachineState.ERROR,# 20-27 +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 6,MachineState.ITS_ME,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,# 28-2f +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,# 30-37 +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 38-3f +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,MachineState.START,MachineState.START,# 40-47 +) + +ISO2022JP_CHAR_LEN_TABLE = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0) + +ISO2022JP_SM_MODEL = {'class_table': ISO2022JP_CLS, + 'class_factor': 10, + 'state_table': ISO2022JP_ST, + 'char_len_table': ISO2022JP_CHAR_LEN_TABLE, + 'name': "ISO-2022-JP", + 'language': 'Japanese'} + +ISO2022KR_CLS = ( +2,0,0,0,0,0,0,0, # 00 - 07 +0,0,0,0,0,0,0,0, # 08 - 0f +0,0,0,0,0,0,0,0, # 10 - 17 +0,0,0,1,0,0,0,0, # 18 - 1f +0,0,0,0,3,0,0,0, # 20 - 27 +0,4,0,0,0,0,0,0, # 28 - 2f +0,0,0,0,0,0,0,0, # 30 - 37 +0,0,0,0,0,0,0,0, # 38 - 3f +0,0,0,5,0,0,0,0, # 40 - 47 +0,0,0,0,0,0,0,0, # 48 - 4f +0,0,0,0,0,0,0,0, # 50 - 57 +0,0,0,0,0,0,0,0, # 58 - 5f +0,0,0,0,0,0,0,0, # 60 - 67 +0,0,0,0,0,0,0,0, # 68 - 6f +0,0,0,0,0,0,0,0, # 70 - 77 +0,0,0,0,0,0,0,0, # 78 - 7f +2,2,2,2,2,2,2,2, # 80 - 87 +2,2,2,2,2,2,2,2, # 88 - 8f +2,2,2,2,2,2,2,2, # 90 - 97 +2,2,2,2,2,2,2,2, # 98 - 9f +2,2,2,2,2,2,2,2, # a0 - a7 +2,2,2,2,2,2,2,2, # a8 - af +2,2,2,2,2,2,2,2, # b0 - b7 +2,2,2,2,2,2,2,2, # b8 - bf +2,2,2,2,2,2,2,2, # c0 - c7 +2,2,2,2,2,2,2,2, # c8 - cf +2,2,2,2,2,2,2,2, # d0 - d7 +2,2,2,2,2,2,2,2, # d8 - df +2,2,2,2,2,2,2,2, # e0 - e7 +2,2,2,2,2,2,2,2, # e8 - ef +2,2,2,2,2,2,2,2, # f0 - f7 +2,2,2,2,2,2,2,2, # f8 - ff +) + +ISO2022KR_ST = ( +MachineState.START, 3,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,# 00-07 +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,# 08-0f +MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 4,MachineState.ERROR,MachineState.ERROR,# 10-17 +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 18-1f +MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.START,MachineState.START,MachineState.START,MachineState.START,# 20-27 +) + +ISO2022KR_CHAR_LEN_TABLE = (0, 0, 0, 0, 0, 0) + +ISO2022KR_SM_MODEL = {'class_table': ISO2022KR_CLS, + 'class_factor': 6, + 'state_table': ISO2022KR_ST, + 'char_len_table': ISO2022KR_CHAR_LEN_TABLE, + 'name': "ISO-2022-KR", + 'language': 'Korean'} + + diff --git a/venv/lib/python3.7/site-packages/chardet/euckrfreq.py b/venv/lib/python3.7/site-packages/chardet/euckrfreq.py new file mode 100644 index 0000000..b68078c --- /dev/null +++ b/venv/lib/python3.7/site-packages/chardet/euckrfreq.py @@ -0,0 +1,195 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# Sampling from about 20M text materials include literature and computer technology + +# 128 --> 0.79 +# 256 --> 0.92 +# 512 --> 0.986 +# 1024 --> 0.99944 +# 2048 --> 0.99999 +# +# Idea Distribution Ratio = 0.98653 / (1-0.98653) = 73.24 +# Random Distribution Ration = 512 / (2350-512) = 0.279. +# +# Typical Distribution Ratio + +EUCKR_TYPICAL_DISTRIBUTION_RATIO = 6.0 + +EUCKR_TABLE_SIZE = 2352 + +# Char to FreqOrder table , +EUCKR_CHAR_TO_FREQ_ORDER = ( + 13, 130, 120,1396, 481,1719,1720, 328, 609, 212,1721, 707, 400, 299,1722, 87, +1397,1723, 104, 536,1117,1203,1724,1267, 685,1268, 508,1725,1726,1727,1728,1398, +1399,1729,1730,1731, 141, 621, 326,1057, 368,1732, 267, 488, 20,1733,1269,1734, + 945,1400,1735, 47, 904,1270,1736,1737, 773, 248,1738, 409, 313, 786, 429,1739, + 116, 987, 813,1401, 683, 75,1204, 145,1740,1741,1742,1743, 16, 847, 667, 622, + 708,1744,1745,1746, 966, 787, 304, 129,1747, 60, 820, 123, 676,1748,1749,1750, +1751, 617,1752, 626,1753,1754,1755,1756, 653,1757,1758,1759,1760,1761,1762, 856, + 344,1763,1764,1765,1766, 89, 401, 418, 806, 905, 848,1767,1768,1769, 946,1205, + 709,1770,1118,1771, 241,1772,1773,1774,1271,1775, 569,1776, 999,1777,1778,1779, +1780, 337, 751,1058, 28, 628, 254,1781, 177, 906, 270, 349, 891,1079,1782, 19, +1783, 379,1784, 315,1785, 629, 754,1402, 559,1786, 636, 203,1206,1787, 710, 567, +1788, 935, 814,1789,1790,1207, 766, 528,1791,1792,1208,1793,1794,1795,1796,1797, +1403,1798,1799, 533,1059,1404,1405,1156,1406, 936, 884,1080,1800, 351,1801,1802, +1803,1804,1805, 801,1806,1807,1808,1119,1809,1157, 714, 474,1407,1810, 298, 899, + 885,1811,1120, 802,1158,1812, 892,1813,1814,1408, 659,1815,1816,1121,1817,1818, +1819,1820,1821,1822, 319,1823, 594, 545,1824, 815, 937,1209,1825,1826, 573,1409, +1022,1827,1210,1828,1829,1830,1831,1832,1833, 556, 722, 807,1122,1060,1834, 697, +1835, 900, 557, 715,1836,1410, 540,1411, 752,1159, 294, 597,1211, 976, 803, 770, +1412,1837,1838, 39, 794,1413, 358,1839, 371, 925,1840, 453, 661, 788, 531, 723, + 544,1023,1081, 869, 91,1841, 392, 430, 790, 602,1414, 677,1082, 457,1415,1416, +1842,1843, 475, 327,1024,1417, 795, 121,1844, 733, 403,1418,1845,1846,1847, 300, + 119, 711,1212, 627,1848,1272, 207,1849,1850, 796,1213, 382,1851, 519,1852,1083, + 893,1853,1854,1855, 367, 809, 487, 671,1856, 663,1857,1858, 956, 471, 306, 857, +1859,1860,1160,1084,1861,1862,1863,1864,1865,1061,1866,1867,1868,1869,1870,1871, + 282, 96, 574,1872, 502,1085,1873,1214,1874, 907,1875,1876, 827, 977,1419,1420, +1421, 268,1877,1422,1878,1879,1880, 308,1881, 2, 537,1882,1883,1215,1884,1885, + 127, 791,1886,1273,1423,1887, 34, 336, 404, 643,1888, 571, 654, 894, 840,1889, + 0, 886,1274, 122, 575, 260, 908, 938,1890,1275, 410, 316,1891,1892, 100,1893, +1894,1123, 48,1161,1124,1025,1895, 633, 901,1276,1896,1897, 115, 816,1898, 317, +1899, 694,1900, 909, 734,1424, 572, 866,1425, 691, 85, 524,1010, 543, 394, 841, +1901,1902,1903,1026,1904,1905,1906,1907,1908,1909, 30, 451, 651, 988, 310,1910, +1911,1426, 810,1216, 93,1912,1913,1277,1217,1914, 858, 759, 45, 58, 181, 610, + 269,1915,1916, 131,1062, 551, 443,1000, 821,1427, 957, 895,1086,1917,1918, 375, +1919, 359,1920, 687,1921, 822,1922, 293,1923,1924, 40, 662, 118, 692, 29, 939, + 887, 640, 482, 174,1925, 69,1162, 728,1428, 910,1926,1278,1218,1279, 386, 870, + 217, 854,1163, 823,1927,1928,1929,1930, 834,1931, 78,1932, 859,1933,1063,1934, +1935,1936,1937, 438,1164, 208, 595,1938,1939,1940,1941,1219,1125,1942, 280, 888, +1429,1430,1220,1431,1943,1944,1945,1946,1947,1280, 150, 510,1432,1948,1949,1950, +1951,1952,1953,1954,1011,1087,1955,1433,1043,1956, 881,1957, 614, 958,1064,1065, +1221,1958, 638,1001, 860, 967, 896,1434, 989, 492, 553,1281,1165,1959,1282,1002, +1283,1222,1960,1961,1962,1963, 36, 383, 228, 753, 247, 454,1964, 876, 678,1965, +1966,1284, 126, 464, 490, 835, 136, 672, 529, 940,1088,1435, 473,1967,1968, 467, + 50, 390, 227, 587, 279, 378, 598, 792, 968, 240, 151, 160, 849, 882,1126,1285, + 639,1044, 133, 140, 288, 360, 811, 563,1027, 561, 142, 523,1969,1970,1971, 7, + 103, 296, 439, 407, 506, 634, 990,1972,1973,1974,1975, 645,1976,1977,1978,1979, +1980,1981, 236,1982,1436,1983,1984,1089, 192, 828, 618, 518,1166, 333,1127,1985, + 818,1223,1986,1987,1988,1989,1990,1991,1992,1993, 342,1128,1286, 746, 842,1994, +1995, 560, 223,1287, 98, 8, 189, 650, 978,1288,1996,1437,1997, 17, 345, 250, + 423, 277, 234, 512, 226, 97, 289, 42, 167,1998, 201,1999,2000, 843, 836, 824, + 532, 338, 783,1090, 182, 576, 436,1438,1439, 527, 500,2001, 947, 889,2002,2003, +2004,2005, 262, 600, 314, 447,2006, 547,2007, 693, 738,1129,2008, 71,1440, 745, + 619, 688,2009, 829,2010,2011, 147,2012, 33, 948,2013,2014, 74, 224,2015, 61, + 191, 918, 399, 637,2016,1028,1130, 257, 902,2017,2018,2019,2020,2021,2022,2023, +2024,2025,2026, 837,2027,2028,2029,2030, 179, 874, 591, 52, 724, 246,2031,2032, +2033,2034,1167, 969,2035,1289, 630, 605, 911,1091,1168,2036,2037,2038,1441, 912, +2039, 623,2040,2041, 253,1169,1290,2042,1442, 146, 620, 611, 577, 433,2043,1224, + 719,1170, 959, 440, 437, 534, 84, 388, 480,1131, 159, 220, 198, 679,2044,1012, + 819,1066,1443, 113,1225, 194, 318,1003,1029,2045,2046,2047,2048,1067,2049,2050, +2051,2052,2053, 59, 913, 112,2054, 632,2055, 455, 144, 739,1291,2056, 273, 681, + 499,2057, 448,2058,2059, 760,2060,2061, 970, 384, 169, 245,1132,2062,2063, 414, +1444,2064,2065, 41, 235,2066, 157, 252, 877, 568, 919, 789, 580,2067, 725,2068, +2069,1292,2070,2071,1445,2072,1446,2073,2074, 55, 588, 66,1447, 271,1092,2075, +1226,2076, 960,1013, 372,2077,2078,2079,2080,2081,1293,2082,2083,2084,2085, 850, +2086,2087,2088,2089,2090, 186,2091,1068, 180,2092,2093,2094, 109,1227, 522, 606, +2095, 867,1448,1093, 991,1171, 926, 353,1133,2096, 581,2097,2098,2099,1294,1449, +1450,2100, 596,1172,1014,1228,2101,1451,1295,1173,1229,2102,2103,1296,1134,1452, + 949,1135,2104,2105,1094,1453,1454,1455,2106,1095,2107,2108,2109,2110,2111,2112, +2113,2114,2115,2116,2117, 804,2118,2119,1230,1231, 805,1456, 405,1136,2120,2121, +2122,2123,2124, 720, 701,1297, 992,1457, 927,1004,2125,2126,2127,2128,2129,2130, + 22, 417,2131, 303,2132, 385,2133, 971, 520, 513,2134,1174, 73,1096, 231, 274, + 962,1458, 673,2135,1459,2136, 152,1137,2137,2138,2139,2140,1005,1138,1460,1139, +2141,2142,2143,2144, 11, 374, 844,2145, 154,1232, 46,1461,2146, 838, 830, 721, +1233, 106,2147, 90, 428, 462, 578, 566,1175, 352,2148,2149, 538,1234, 124,1298, +2150,1462, 761, 565,2151, 686,2152, 649,2153, 72, 173,2154, 460, 415,2155,1463, +2156,1235, 305,2157,2158,2159,2160,2161,2162, 579,2163,2164,2165,2166,2167, 747, +2168,2169,2170,2171,1464, 669,2172,2173,2174,2175,2176,1465,2177, 23, 530, 285, +2178, 335, 729,2179, 397,2180,2181,2182,1030,2183,2184, 698,2185,2186, 325,2187, +2188, 369,2189, 799,1097,1015, 348,2190,1069, 680,2191, 851,1466,2192,2193, 10, +2194, 613, 424,2195, 979, 108, 449, 589, 27, 172, 81,1031, 80, 774, 281, 350, +1032, 525, 301, 582,1176,2196, 674,1045,2197,2198,1467, 730, 762,2199,2200,2201, +2202,1468,2203, 993,2204,2205, 266,1070, 963,1140,2206,2207,2208, 664,1098, 972, +2209,2210,2211,1177,1469,1470, 871,2212,2213,2214,2215,2216,1471,2217,2218,2219, +2220,2221,2222,2223,2224,2225,2226,2227,1472,1236,2228,2229,2230,2231,2232,2233, +2234,2235,1299,2236,2237, 200,2238, 477, 373,2239,2240, 731, 825, 777,2241,2242, +2243, 521, 486, 548,2244,2245,2246,1473,1300, 53, 549, 137, 875, 76, 158,2247, +1301,1474, 469, 396,1016, 278, 712,2248, 321, 442, 503, 767, 744, 941,1237,1178, +1475,2249, 82, 178,1141,1179, 973,2250,1302,2251, 297,2252,2253, 570,2254,2255, +2256, 18, 450, 206,2257, 290, 292,1142,2258, 511, 162, 99, 346, 164, 735,2259, +1476,1477, 4, 554, 343, 798,1099,2260,1100,2261, 43, 171,1303, 139, 215,2262, +2263, 717, 775,2264,1033, 322, 216,2265, 831,2266, 149,2267,1304,2268,2269, 702, +1238, 135, 845, 347, 309,2270, 484,2271, 878, 655, 238,1006,1478,2272, 67,2273, + 295,2274,2275, 461,2276, 478, 942, 412,2277,1034,2278,2279,2280, 265,2281, 541, +2282,2283,2284,2285,2286, 70, 852,1071,2287,2288,2289,2290, 21, 56, 509, 117, + 432,2291,2292, 331, 980, 552,1101, 148, 284, 105, 393,1180,1239, 755,2293, 187, +2294,1046,1479,2295, 340,2296, 63,1047, 230,2297,2298,1305, 763,1306, 101, 800, + 808, 494,2299,2300,2301, 903,2302, 37,1072, 14, 5,2303, 79, 675,2304, 312, +2305,2306,2307,2308,2309,1480, 6,1307,2310,2311,2312, 1, 470, 35, 24, 229, +2313, 695, 210, 86, 778, 15, 784, 592, 779, 32, 77, 855, 964,2314, 259,2315, + 501, 380,2316,2317, 83, 981, 153, 689,1308,1481,1482,1483,2318,2319, 716,1484, +2320,2321,2322,2323,2324,2325,1485,2326,2327, 128, 57, 68, 261,1048, 211, 170, +1240, 31,2328, 51, 435, 742,2329,2330,2331, 635,2332, 264, 456,2333,2334,2335, + 425,2336,1486, 143, 507, 263, 943,2337, 363, 920,1487, 256,1488,1102, 243, 601, +1489,2338,2339,2340,2341,2342,2343,2344, 861,2345,2346,2347,2348,2349,2350, 395, +2351,1490,1491, 62, 535, 166, 225,2352,2353, 668, 419,1241, 138, 604, 928,2354, +1181,2355,1492,1493,2356,2357,2358,1143,2359, 696,2360, 387, 307,1309, 682, 476, +2361,2362, 332, 12, 222, 156,2363, 232,2364, 641, 276, 656, 517,1494,1495,1035, + 416, 736,1496,2365,1017, 586,2366,2367,2368,1497,2369, 242,2370,2371,2372,1498, +2373, 965, 713,2374,2375,2376,2377, 740, 982,1499, 944,1500,1007,2378,2379,1310, +1501,2380,2381,2382, 785, 329,2383,2384,1502,2385,2386,2387, 932,2388,1503,2389, +2390,2391,2392,1242,2393,2394,2395,2396,2397, 994, 950,2398,2399,2400,2401,1504, +1311,2402,2403,2404,2405,1049, 749,2406,2407, 853, 718,1144,1312,2408,1182,1505, +2409,2410, 255, 516, 479, 564, 550, 214,1506,1507,1313, 413, 239, 444, 339,1145, +1036,1508,1509,1314,1037,1510,1315,2411,1511,2412,2413,2414, 176, 703, 497, 624, + 593, 921, 302,2415, 341, 165,1103,1512,2416,1513,2417,2418,2419, 376,2420, 700, +2421,2422,2423, 258, 768,1316,2424,1183,2425, 995, 608,2426,2427,2428,2429, 221, +2430,2431,2432,2433,2434,2435,2436,2437, 195, 323, 726, 188, 897, 983,1317, 377, + 644,1050, 879,2438, 452,2439,2440,2441,2442,2443,2444, 914,2445,2446,2447,2448, + 915, 489,2449,1514,1184,2450,2451, 515, 64, 427, 495,2452, 583,2453, 483, 485, +1038, 562, 213,1515, 748, 666,2454,2455,2456,2457, 334,2458, 780, 996,1008, 705, +1243,2459,2460,2461,2462,2463, 114,2464, 493,1146, 366, 163,1516, 961,1104,2465, + 291,2466,1318,1105,2467,1517, 365,2468, 355, 951,1244,2469,1319,2470, 631,2471, +2472, 218,1320, 364, 320, 756,1518,1519,1321,1520,1322,2473,2474,2475,2476, 997, +2477,2478,2479,2480, 665,1185,2481, 916,1521,2482,2483,2484, 584, 684,2485,2486, + 797,2487,1051,1186,2488,2489,2490,1522,2491,2492, 370,2493,1039,1187, 65,2494, + 434, 205, 463,1188,2495, 125, 812, 391, 402, 826, 699, 286, 398, 155, 781, 771, + 585,2496, 590, 505,1073,2497, 599, 244, 219, 917,1018, 952, 646,1523,2498,1323, +2499,2500, 49, 984, 354, 741,2501, 625,2502,1324,2503,1019, 190, 357, 757, 491, + 95, 782, 868,2504,2505,2506,2507,2508,2509, 134,1524,1074, 422,1525, 898,2510, + 161,2511,2512,2513,2514, 769,2515,1526,2516,2517, 411,1325,2518, 472,1527,2519, +2520,2521,2522,2523,2524, 985,2525,2526,2527,2528,2529,2530, 764,2531,1245,2532, +2533, 25, 204, 311,2534, 496,2535,1052,2536,2537,2538,2539,2540,2541,2542, 199, + 704, 504, 468, 758, 657,1528, 196, 44, 839,1246, 272, 750,2543, 765, 862,2544, +2545,1326,2546, 132, 615, 933,2547, 732,2548,2549,2550,1189,1529,2551, 283,1247, +1053, 607, 929,2552,2553,2554, 930, 183, 872, 616,1040,1147,2555,1148,1020, 441, + 249,1075,2556,2557,2558, 466, 743,2559,2560,2561, 92, 514, 426, 420, 526,2562, +2563,2564,2565,2566,2567,2568, 185,2569,2570,2571,2572, 776,1530, 658,2573, 362, +2574, 361, 922,1076, 793,2575,2576,2577,2578,2579,2580,1531, 251,2581,2582,2583, +2584,1532, 54, 612, 237,1327,2585,2586, 275, 408, 647, 111,2587,1533,1106, 465, + 3, 458, 9, 38,2588, 107, 110, 890, 209, 26, 737, 498,2589,1534,2590, 431, + 202, 88,1535, 356, 287,1107, 660,1149,2591, 381,1536, 986,1150, 445,1248,1151, + 974,2592,2593, 846,2594, 446, 953, 184,1249,1250, 727,2595, 923, 193, 883,2596, +2597,2598, 102, 324, 539, 817,2599, 421,1041,2600, 832,2601, 94, 175, 197, 406, +2602, 459,2603,2604,2605,2606,2607, 330, 555,2608,2609,2610, 706,1108, 389,2611, +2612,2613,2614, 233,2615, 833, 558, 931, 954,1251,2616,2617,1537, 546,2618,2619, +1009,2620,2621,2622,1538, 690,1328,2623, 955,2624,1539,2625,2626, 772,2627,2628, +2629,2630,2631, 924, 648, 863, 603,2632,2633, 934,1540, 864, 865,2634, 642,1042, + 670,1190,2635,2636,2637,2638, 168,2639, 652, 873, 542,1054,1541,2640,2641,2642, # 512, 256 +) + diff --git a/venv/lib/python3.7/site-packages/chardet/euctwprober.py b/venv/lib/python3.7/site-packages/chardet/euctwprober.py new file mode 100644 index 0000000..35669cc --- /dev/null +++ b/venv/lib/python3.7/site-packages/chardet/euctwprober.py @@ -0,0 +1,46 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .mbcharsetprober import MultiByteCharSetProber +from .codingstatemachine import CodingStateMachine +from .chardistribution import EUCTWDistributionAnalysis +from .mbcssm import EUCTW_SM_MODEL + +class EUCTWProber(MultiByteCharSetProber): + def __init__(self): + super(EUCTWProber, self).__init__() + self.coding_sm = CodingStateMachine(EUCTW_SM_MODEL) + self.distribution_analyzer = EUCTWDistributionAnalysis() + self.reset() + + @property + def charset_name(self): + return "EUC-TW" + + @property + def language(self): + return "Taiwan" diff --git a/venv/lib/python3.7/site-packages/chardet/jisfreq.py b/venv/lib/python3.7/site-packages/chardet/jisfreq.py new file mode 100644 index 0000000..83fc082 --- /dev/null +++ b/venv/lib/python3.7/site-packages/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 + +JIS_CHAR_TO_FREQ_ORDER = ( + 40, 1, 6, 182, 152, 180, 295,2127, 285, 381,3295,4304,3068,4606,3165,3510, # 16 +3511,1822,2785,4607,1193,2226,5070,4608, 171,2996,1247, 18, 179,5071, 856,1661, # 32 +1262,5072, 619, 127,3431,3512,3230,1899,1700, 232, 228,1294,1298, 284, 283,2041, # 48 +2042,1061,1062, 48, 49, 44, 45, 433, 434,1040,1041, 996, 787,2997,1255,4305, # 64 +2108,4609,1684,1648,5073,5074,5075,5076,5077,5078,3687,5079,4610,5080,3927,3928, # 80 +5081,3296,3432, 290,2285,1471,2187,5082,2580,2825,1303,2140,1739,1445,2691,3375, # 96 +1691,3297,4306,4307,4611, 452,3376,1182,2713,3688,3069,4308,5083,5084,5085,5086, # 112 +5087,5088,5089,5090,5091,5092,5093,5094,5095,5096,5097,5098,5099,5100,5101,5102, # 128 +5103,5104,5105,5106,5107,5108,5109,5110,5111,5112,4097,5113,5114,5115,5116,5117, # 144 +5118,5119,5120,5121,5122,5123,5124,5125,5126,5127,5128,5129,5130,5131,5132,5133, # 160 +5134,5135,5136,5137,5138,5139,5140,5141,5142,5143,5144,5145,5146,5147,5148,5149, # 176 +5150,5151,5152,4612,5153,5154,5155,5156,5157,5158,5159,5160,5161,5162,5163,5164, # 192 +5165,5166,5167,5168,5169,5170,5171,5172,5173,5174,5175,1472, 598, 618, 820,1205, # 208 +1309,1412,1858,1307,1692,5176,5177,5178,5179,5180,5181,5182,1142,1452,1234,1172, # 224 +1875,2043,2149,1793,1382,2973, 925,2404,1067,1241, 960,1377,2935,1491, 919,1217, # 240 +1865,2030,1406,1499,2749,4098,5183,5184,5185,5186,5187,5188,2561,4099,3117,1804, # 256 +2049,3689,4309,3513,1663,5189,3166,3118,3298,1587,1561,3433,5190,3119,1625,2998, # 272 +3299,4613,1766,3690,2786,4614,5191,5192,5193,5194,2161, 26,3377, 2,3929, 20, # 288 +3691, 47,4100, 50, 17, 16, 35, 268, 27, 243, 42, 155, 24, 154, 29, 184, # 304 + 4, 91, 14, 92, 53, 396, 33, 289, 9, 37, 64, 620, 21, 39, 321, 5, # 320 + 12, 11, 52, 13, 3, 208, 138, 0, 7, 60, 526, 141, 151,1069, 181, 275, # 336 +1591, 83, 132,1475, 126, 331, 829, 15, 69, 160, 59, 22, 157, 55,1079, 312, # 352 + 109, 38, 23, 25, 10, 19, 79,5195, 61, 382,1124, 8, 30,5196,5197,5198, # 368 +5199,5200,5201,5202,5203,5204,5205,5206, 89, 62, 74, 34,2416, 112, 139, 196, # 384 + 271, 149, 84, 607, 131, 765, 46, 88, 153, 683, 76, 874, 101, 258, 57, 80, # 400 + 32, 364, 121,1508, 169,1547, 68, 235, 145,2999, 41, 360,3027, 70, 63, 31, # 416 + 43, 259, 262,1383, 99, 533, 194, 66, 93, 846, 217, 192, 56, 106, 58, 565, # 432 + 280, 272, 311, 256, 146, 82, 308, 71, 100, 128, 214, 655, 110, 261, 104,1140, # 448 + 54, 51, 36, 87, 67,3070, 185,2618,2936,2020, 28,1066,2390,2059,5207,5208, # 464 +5209,5210,5211,5212,5213,5214,5215,5216,4615,5217,5218,5219,5220,5221,5222,5223, # 480 +5224,5225,5226,5227,5228,5229,5230,5231,5232,5233,5234,5235,5236,3514,5237,5238, # 496 +5239,5240,5241,5242,5243,5244,2297,2031,4616,4310,3692,5245,3071,5246,3598,5247, # 512 +4617,3231,3515,5248,4101,4311,4618,3808,4312,4102,5249,4103,4104,3599,5250,5251, # 528 +5252,5253,5254,5255,5256,5257,5258,5259,5260,5261,5262,5263,5264,5265,5266,5267, # 544 +5268,5269,5270,5271,5272,5273,5274,5275,5276,5277,5278,5279,5280,5281,5282,5283, # 560 +5284,5285,5286,5287,5288,5289,5290,5291,5292,5293,5294,5295,5296,5297,5298,5299, # 576 +5300,5301,5302,5303,5304,5305,5306,5307,5308,5309,5310,5311,5312,5313,5314,5315, # 592 +5316,5317,5318,5319,5320,5321,5322,5323,5324,5325,5326,5327,5328,5329,5330,5331, # 608 +5332,5333,5334,5335,5336,5337,5338,5339,5340,5341,5342,5343,5344,5345,5346,5347, # 624 +5348,5349,5350,5351,5352,5353,5354,5355,5356,5357,5358,5359,5360,5361,5362,5363, # 640 +5364,5365,5366,5367,5368,5369,5370,5371,5372,5373,5374,5375,5376,5377,5378,5379, # 656 +5380,5381, 363, 642,2787,2878,2788,2789,2316,3232,2317,3434,2011, 165,1942,3930, # 672 +3931,3932,3933,5382,4619,5383,4620,5384,5385,5386,5387,5388,5389,5390,5391,5392, # 688 +5393,5394,5395,5396,5397,5398,5399,5400,5401,5402,5403,5404,5405,5406,5407,5408, # 704 +5409,5410,5411,5412,5413,5414,5415,5416,5417,5418,5419,5420,5421,5422,5423,5424, # 720 +5425,5426,5427,5428,5429,5430,5431,5432,5433,5434,5435,5436,5437,5438,5439,5440, # 736 +5441,5442,5443,5444,5445,5446,5447,5448,5449,5450,5451,5452,5453,5454,5455,5456, # 752 +5457,5458,5459,5460,5461,5462,5463,5464,5465,5466,5467,5468,5469,5470,5471,5472, # 768 +5473,5474,5475,5476,5477,5478,5479,5480,5481,5482,5483,5484,5485,5486,5487,5488, # 784 +5489,5490,5491,5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,5502,5503,5504, # 800 +5505,5506,5507,5508,5509,5510,5511,5512,5513,5514,5515,5516,5517,5518,5519,5520, # 816 +5521,5522,5523,5524,5525,5526,5527,5528,5529,5530,5531,5532,5533,5534,5535,5536, # 832 +5537,5538,5539,5540,5541,5542,5543,5544,5545,5546,5547,5548,5549,5550,5551,5552, # 848 +5553,5554,5555,5556,5557,5558,5559,5560,5561,5562,5563,5564,5565,5566,5567,5568, # 864 +5569,5570,5571,5572,5573,5574,5575,5576,5577,5578,5579,5580,5581,5582,5583,5584, # 880 +5585,5586,5587,5588,5589,5590,5591,5592,5593,5594,5595,5596,5597,5598,5599,5600, # 896 +5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,5613,5614,5615,5616, # 912 +5617,5618,5619,5620,5621,5622,5623,5624,5625,5626,5627,5628,5629,5630,5631,5632, # 928 +5633,5634,5635,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646,5647,5648, # 944 +5649,5650,5651,5652,5653,5654,5655,5656,5657,5658,5659,5660,5661,5662,5663,5664, # 960 +5665,5666,5667,5668,5669,5670,5671,5672,5673,5674,5675,5676,5677,5678,5679,5680, # 976 +5681,5682,5683,5684,5685,5686,5687,5688,5689,5690,5691,5692,5693,5694,5695,5696, # 992 +5697,5698,5699,5700,5701,5702,5703,5704,5705,5706,5707,5708,5709,5710,5711,5712, # 1008 +5713,5714,5715,5716,5717,5718,5719,5720,5721,5722,5723,5724,5725,5726,5727,5728, # 1024 +5729,5730,5731,5732,5733,5734,5735,5736,5737,5738,5739,5740,5741,5742,5743,5744, # 1040 +5745,5746,5747,5748,5749,5750,5751,5752,5753,5754,5755,5756,5757,5758,5759,5760, # 1056 +5761,5762,5763,5764,5765,5766,5767,5768,5769,5770,5771,5772,5773,5774,5775,5776, # 1072 +5777,5778,5779,5780,5781,5782,5783,5784,5785,5786,5787,5788,5789,5790,5791,5792, # 1088 +5793,5794,5795,5796,5797,5798,5799,5800,5801,5802,5803,5804,5805,5806,5807,5808, # 1104 +5809,5810,5811,5812,5813,5814,5815,5816,5817,5818,5819,5820,5821,5822,5823,5824, # 1120 +5825,5826,5827,5828,5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840, # 1136 +5841,5842,5843,5844,5845,5846,5847,5848,5849,5850,5851,5852,5853,5854,5855,5856, # 1152 +5857,5858,5859,5860,5861,5862,5863,5864,5865,5866,5867,5868,5869,5870,5871,5872, # 1168 +5873,5874,5875,5876,5877,5878,5879,5880,5881,5882,5883,5884,5885,5886,5887,5888, # 1184 +5889,5890,5891,5892,5893,5894,5895,5896,5897,5898,5899,5900,5901,5902,5903,5904, # 1200 +5905,5906,5907,5908,5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,5920, # 1216 +5921,5922,5923,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5936, # 1232 +5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952, # 1248 +5953,5954,5955,5956,5957,5958,5959,5960,5961,5962,5963,5964,5965,5966,5967,5968, # 1264 +5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981,5982,5983,5984, # 1280 +5985,5986,5987,5988,5989,5990,5991,5992,5993,5994,5995,5996,5997,5998,5999,6000, # 1296 +6001,6002,6003,6004,6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016, # 1312 +6017,6018,6019,6020,6021,6022,6023,6024,6025,6026,6027,6028,6029,6030,6031,6032, # 1328 +6033,6034,6035,6036,6037,6038,6039,6040,6041,6042,6043,6044,6045,6046,6047,6048, # 1344 +6049,6050,6051,6052,6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064, # 1360 +6065,6066,6067,6068,6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080, # 1376 +6081,6082,6083,6084,6085,6086,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096, # 1392 +6097,6098,6099,6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112, # 1408 +6113,6114,2044,2060,4621, 997,1235, 473,1186,4622, 920,3378,6115,6116, 379,1108, # 1424 +4313,2657,2735,3934,6117,3809, 636,3233, 573,1026,3693,3435,2974,3300,2298,4105, # 1440 + 854,2937,2463, 393,2581,2417, 539, 752,1280,2750,2480, 140,1161, 440, 708,1569, # 1456 + 665,2497,1746,1291,1523,3000, 164,1603, 847,1331, 537,1997, 486, 508,1693,2418, # 1472 +1970,2227, 878,1220, 299,1030, 969, 652,2751, 624,1137,3301,2619, 65,3302,2045, # 1488 +1761,1859,3120,1930,3694,3516, 663,1767, 852, 835,3695, 269, 767,2826,2339,1305, # 1504 + 896,1150, 770,1616,6118, 506,1502,2075,1012,2519, 775,2520,2975,2340,2938,4314, # 1520 +3028,2086,1224,1943,2286,6119,3072,4315,2240,1273,1987,3935,1557, 175, 597, 985, # 1536 +3517,2419,2521,1416,3029, 585, 938,1931,1007,1052,1932,1685,6120,3379,4316,4623, # 1552 + 804, 599,3121,1333,2128,2539,1159,1554,2032,3810, 687,2033,2904, 952, 675,1467, # 1568 +3436,6121,2241,1096,1786,2440,1543,1924, 980,1813,2228, 781,2692,1879, 728,1918, # 1584 +3696,4624, 548,1950,4625,1809,1088,1356,3303,2522,1944, 502, 972, 373, 513,2827, # 1600 + 586,2377,2391,1003,1976,1631,6122,2464,1084, 648,1776,4626,2141, 324, 962,2012, # 1616 +2177,2076,1384, 742,2178,1448,1173,1810, 222, 102, 301, 445, 125,2420, 662,2498, # 1632 + 277, 200,1476,1165,1068, 224,2562,1378,1446, 450,1880, 659, 791, 582,4627,2939, # 1648 +3936,1516,1274, 555,2099,3697,1020,1389,1526,3380,1762,1723,1787,2229, 412,2114, # 1664 +1900,2392,3518, 512,2597, 427,1925,2341,3122,1653,1686,2465,2499, 697, 330, 273, # 1680 + 380,2162, 951, 832, 780, 991,1301,3073, 965,2270,3519, 668,2523,2636,1286, 535, # 1696 +1407, 518, 671, 957,2658,2378, 267, 611,2197,3030,6123, 248,2299, 967,1799,2356, # 1712 + 850,1418,3437,1876,1256,1480,2828,1718,6124,6125,1755,1664,2405,6126,4628,2879, # 1728 +2829, 499,2179, 676,4629, 557,2329,2214,2090, 325,3234, 464, 811,3001, 992,2342, # 1744 +2481,1232,1469, 303,2242, 466,1070,2163, 603,1777,2091,4630,2752,4631,2714, 322, # 1760 +2659,1964,1768, 481,2188,1463,2330,2857,3600,2092,3031,2421,4632,2318,2070,1849, # 1776 +2598,4633,1302,2254,1668,1701,2422,3811,2905,3032,3123,2046,4106,1763,1694,4634, # 1792 +1604, 943,1724,1454, 917, 868,2215,1169,2940, 552,1145,1800,1228,1823,1955, 316, # 1808 +1080,2510, 361,1807,2830,4107,2660,3381,1346,1423,1134,4108,6127, 541,1263,1229, # 1824 +1148,2540, 545, 465,1833,2880,3438,1901,3074,2482, 816,3937, 713,1788,2500, 122, # 1840 +1575, 195,1451,2501,1111,6128, 859, 374,1225,2243,2483,4317, 390,1033,3439,3075, # 1856 +2524,1687, 266, 793,1440,2599, 946, 779, 802, 507, 897,1081, 528,2189,1292, 711, # 1872 +1866,1725,1167,1640, 753, 398,2661,1053, 246, 348,4318, 137,1024,3440,1600,2077, # 1888 +2129, 825,4319, 698, 238, 521, 187,2300,1157,2423,1641,1605,1464,1610,1097,2541, # 1904 +1260,1436, 759,2255,1814,2150, 705,3235, 409,2563,3304, 561,3033,2005,2564, 726, # 1920 +1956,2343,3698,4109, 949,3812,3813,3520,1669, 653,1379,2525, 881,2198, 632,2256, # 1936 +1027, 778,1074, 733,1957, 514,1481,2466, 554,2180, 702,3938,1606,1017,1398,6129, # 1952 +1380,3521, 921, 993,1313, 594, 449,1489,1617,1166, 768,1426,1360, 495,1794,3601, # 1968 +1177,3602,1170,4320,2344, 476, 425,3167,4635,3168,1424, 401,2662,1171,3382,1998, # 1984 +1089,4110, 477,3169, 474,6130,1909, 596,2831,1842, 494, 693,1051,1028,1207,3076, # 2000 + 606,2115, 727,2790,1473,1115, 743,3522, 630, 805,1532,4321,2021, 366,1057, 838, # 2016 + 684,1114,2142,4322,2050,1492,1892,1808,2271,3814,2424,1971,1447,1373,3305,1090, # 2032 +1536,3939,3523,3306,1455,2199, 336, 369,2331,1035, 584,2393, 902, 718,2600,6131, # 2048 +2753, 463,2151,1149,1611,2467, 715,1308,3124,1268, 343,1413,3236,1517,1347,2663, # 2064 +2093,3940,2022,1131,1553,2100,2941,1427,3441,2942,1323,2484,6132,1980, 872,2368, # 2080 +2441,2943, 320,2369,2116,1082, 679,1933,3941,2791,3815, 625,1143,2023, 422,2200, # 2096 +3816,6133, 730,1695, 356,2257,1626,2301,2858,2637,1627,1778, 937, 883,2906,2693, # 2112 +3002,1769,1086, 400,1063,1325,3307,2792,4111,3077, 456,2345,1046, 747,6134,1524, # 2128 + 884,1094,3383,1474,2164,1059, 974,1688,2181,2258,1047, 345,1665,1187, 358, 875, # 2144 +3170, 305, 660,3524,2190,1334,1135,3171,1540,1649,2542,1527, 927, 968,2793, 885, # 2160 +1972,1850, 482, 500,2638,1218,1109,1085,2543,1654,2034, 876, 78,2287,1482,1277, # 2176 + 861,1675,1083,1779, 724,2754, 454, 397,1132,1612,2332, 893, 672,1237, 257,2259, # 2192 +2370, 135,3384, 337,2244, 547, 352, 340, 709,2485,1400, 788,1138,2511, 540, 772, # 2208 +1682,2260,2272,2544,2013,1843,1902,4636,1999,1562,2288,4637,2201,1403,1533, 407, # 2224 + 576,3308,1254,2071, 978,3385, 170, 136,1201,3125,2664,3172,2394, 213, 912, 873, # 2240 +3603,1713,2202, 699,3604,3699, 813,3442, 493, 531,1054, 468,2907,1483, 304, 281, # 2256 +4112,1726,1252,2094, 339,2319,2130,2639, 756,1563,2944, 748, 571,2976,1588,2425, # 2272 +2715,1851,1460,2426,1528,1392,1973,3237, 288,3309, 685,3386, 296, 892,2716,2216, # 2288 +1570,2245, 722,1747,2217, 905,3238,1103,6135,1893,1441,1965, 251,1805,2371,3700, # 2304 +2601,1919,1078, 75,2182,1509,1592,1270,2640,4638,2152,6136,3310,3817, 524, 706, # 2320 +1075, 292,3818,1756,2602, 317, 98,3173,3605,3525,1844,2218,3819,2502, 814, 567, # 2336 + 385,2908,1534,6137, 534,1642,3239, 797,6138,1670,1529, 953,4323, 188,1071, 538, # 2352 + 178, 729,3240,2109,1226,1374,2000,2357,2977, 731,2468,1116,2014,2051,6139,1261, # 2368 +1593, 803,2859,2736,3443, 556, 682, 823,1541,6140,1369,2289,1706,2794, 845, 462, # 2384 +2603,2665,1361, 387, 162,2358,1740, 739,1770,1720,1304,1401,3241,1049, 627,1571, # 2400 +2427,3526,1877,3942,1852,1500, 431,1910,1503, 677, 297,2795, 286,1433,1038,1198, # 2416 +2290,1133,1596,4113,4639,2469,1510,1484,3943,6141,2442, 108, 712,4640,2372, 866, # 2432 +3701,2755,3242,1348, 834,1945,1408,3527,2395,3243,1811, 824, 994,1179,2110,1548, # 2448 +1453, 790,3003, 690,4324,4325,2832,2909,3820,1860,3821, 225,1748, 310, 346,1780, # 2464 +2470, 821,1993,2717,2796, 828, 877,3528,2860,2471,1702,2165,2910,2486,1789, 453, # 2480 + 359,2291,1676, 73,1164,1461,1127,3311, 421, 604, 314,1037, 589, 116,2487, 737, # 2496 + 837,1180, 111, 244, 735,6142,2261,1861,1362, 986, 523, 418, 581,2666,3822, 103, # 2512 + 855, 503,1414,1867,2488,1091, 657,1597, 979, 605,1316,4641,1021,2443,2078,2001, # 2528 +1209, 96, 587,2166,1032, 260,1072,2153, 173, 94, 226,3244, 819,2006,4642,4114, # 2544 +2203, 231,1744, 782, 97,2667, 786,3387, 887, 391, 442,2219,4326,1425,6143,2694, # 2560 + 633,1544,1202, 483,2015, 592,2052,1958,2472,1655, 419, 129,4327,3444,3312,1714, # 2576 +1257,3078,4328,1518,1098, 865,1310,1019,1885,1512,1734, 469,2444, 148, 773, 436, # 2592 +1815,1868,1128,1055,4329,1245,2756,3445,2154,1934,1039,4643, 579,1238, 932,2320, # 2608 + 353, 205, 801, 115,2428, 944,2321,1881, 399,2565,1211, 678, 766,3944, 335,2101, # 2624 +1459,1781,1402,3945,2737,2131,1010, 844, 981,1326,1013, 550,1816,1545,2620,1335, # 2640 +1008, 371,2881, 936,1419,1613,3529,1456,1395,2273,1834,2604,1317,2738,2503, 416, # 2656 +1643,4330, 806,1126, 229, 591,3946,1314,1981,1576,1837,1666, 347,1790, 977,3313, # 2672 + 764,2861,1853, 688,2429,1920,1462, 77, 595, 415,2002,3034, 798,1192,4115,6144, # 2688 +2978,4331,3035,2695,2582,2072,2566, 430,2430,1727, 842,1396,3947,3702, 613, 377, # 2704 + 278, 236,1417,3388,3314,3174, 757,1869, 107,3530,6145,1194, 623,2262, 207,1253, # 2720 +2167,3446,3948, 492,1117,1935, 536,1838,2757,1246,4332, 696,2095,2406,1393,1572, # 2736 +3175,1782, 583, 190, 253,1390,2230, 830,3126,3389, 934,3245,1703,1749,2979,1870, # 2752 +2545,1656,2204, 869,2346,4116,3176,1817, 496,1764,4644, 942,1504, 404,1903,1122, # 2768 +1580,3606,2945,1022, 515, 372,1735, 955,2431,3036,6146,2797,1110,2302,2798, 617, # 2784 +6147, 441, 762,1771,3447,3607,3608,1904, 840,3037, 86, 939,1385, 572,1370,2445, # 2800 +1336, 114,3703, 898, 294, 203,3315, 703,1583,2274, 429, 961,4333,1854,1951,3390, # 2816 +2373,3704,4334,1318,1381, 966,1911,2322,1006,1155, 309, 989, 458,2718,1795,1372, # 2832 +1203, 252,1689,1363,3177, 517,1936, 168,1490, 562, 193,3823,1042,4117,1835, 551, # 2848 + 470,4645, 395, 489,3448,1871,1465,2583,2641, 417,1493, 279,1295, 511,1236,1119, # 2864 + 72,1231,1982,1812,3004, 871,1564, 984,3449,1667,2696,2096,4646,2347,2833,1673, # 2880 +3609, 695,3246,2668, 807,1183,4647, 890, 388,2333,1801,1457,2911,1765,1477,1031, # 2896 +3316,3317,1278,3391,2799,2292,2526, 163,3450,4335,2669,1404,1802,6148,2323,2407, # 2912 +1584,1728,1494,1824,1269, 298, 909,3318,1034,1632, 375, 776,1683,2061, 291, 210, # 2928 +1123, 809,1249,1002,2642,3038, 206,1011,2132, 144, 975, 882,1565, 342, 667, 754, # 2944 +1442,2143,1299,2303,2062, 447, 626,2205,1221,2739,2912,1144,1214,2206,2584, 760, # 2960 +1715, 614, 950,1281,2670,2621, 810, 577,1287,2546,4648, 242,2168, 250,2643, 691, # 2976 + 123,2644, 647, 313,1029, 689,1357,2946,1650, 216, 771,1339,1306, 808,2063, 549, # 2992 + 913,1371,2913,2914,6149,1466,1092,1174,1196,1311,2605,2396,1783,1796,3079, 406, # 3008 +2671,2117,3949,4649, 487,1825,2220,6150,2915, 448,2348,1073,6151,2397,1707, 130, # 3024 + 900,1598, 329, 176,1959,2527,1620,6152,2275,4336,3319,1983,2191,3705,3610,2155, # 3040 +3706,1912,1513,1614,6153,1988, 646, 392,2304,1589,3320,3039,1826,1239,1352,1340, # 3056 +2916, 505,2567,1709,1437,2408,2547, 906,6154,2672, 384,1458,1594,1100,1329, 710, # 3072 + 423,3531,2064,2231,2622,1989,2673,1087,1882, 333, 841,3005,1296,2882,2379, 580, # 3088 +1937,1827,1293,2585, 601, 574, 249,1772,4118,2079,1120, 645, 901,1176,1690, 795, # 3104 +2207, 478,1434, 516,1190,1530, 761,2080, 930,1264, 355, 435,1552, 644,1791, 987, # 3120 + 220,1364,1163,1121,1538, 306,2169,1327,1222, 546,2645, 218, 241, 610,1704,3321, # 3136 +1984,1839,1966,2528, 451,6155,2586,3707,2568, 907,3178, 254,2947, 186,1845,4650, # 3152 + 745, 432,1757, 428,1633, 888,2246,2221,2489,3611,2118,1258,1265, 956,3127,1784, # 3168 +4337,2490, 319, 510, 119, 457,3612, 274,2035,2007,4651,1409,3128, 970,2758, 590, # 3184 +2800, 661,2247,4652,2008,3950,1420,1549,3080,3322,3951,1651,1375,2111, 485,2491, # 3200 +1429,1156,6156,2548,2183,1495, 831,1840,2529,2446, 501,1657, 307,1894,3247,1341, # 3216 + 666, 899,2156,1539,2549,1559, 886, 349,2208,3081,2305,1736,3824,2170,2759,1014, # 3232 +1913,1386, 542,1397,2948, 490, 368, 716, 362, 159, 282,2569,1129,1658,1288,1750, # 3248 +2674, 276, 649,2016, 751,1496, 658,1818,1284,1862,2209,2087,2512,3451, 622,2834, # 3264 + 376, 117,1060,2053,1208,1721,1101,1443, 247,1250,3179,1792,3952,2760,2398,3953, # 3280 +6157,2144,3708, 446,2432,1151,2570,3452,2447,2761,2835,1210,2448,3082, 424,2222, # 3296 +1251,2449,2119,2836, 504,1581,4338, 602, 817, 857,3825,2349,2306, 357,3826,1470, # 3312 +1883,2883, 255, 958, 929,2917,3248, 302,4653,1050,1271,1751,2307,1952,1430,2697, # 3328 +2719,2359, 354,3180, 777, 158,2036,4339,1659,4340,4654,2308,2949,2248,1146,2232, # 3344 +3532,2720,1696,2623,3827,6158,3129,1550,2698,1485,1297,1428, 637, 931,2721,2145, # 3360 + 914,2550,2587, 81,2450, 612, 827,2646,1242,4655,1118,2884, 472,1855,3181,3533, # 3376 +3534, 569,1353,2699,1244,1758,2588,4119,2009,2762,2171,3709,1312,1531,6159,1152, # 3392 +1938, 134,1830, 471,3710,2276,1112,1535,3323,3453,3535, 982,1337,2950, 488, 826, # 3408 + 674,1058,1628,4120,2017, 522,2399, 211, 568,1367,3454, 350, 293,1872,1139,3249, # 3424 +1399,1946,3006,1300,2360,3324, 588, 736,6160,2606, 744, 669,3536,3828,6161,1358, # 3440 + 199, 723, 848, 933, 851,1939,1505,1514,1338,1618,1831,4656,1634,3613, 443,2740, # 3456 +3829, 717,1947, 491,1914,6162,2551,1542,4121,1025,6163,1099,1223, 198,3040,2722, # 3472 + 370, 410,1905,2589, 998,1248,3182,2380, 519,1449,4122,1710, 947, 928,1153,4341, # 3488 +2277, 344,2624,1511, 615, 105, 161,1212,1076,1960,3130,2054,1926,1175,1906,2473, # 3504 + 414,1873,2801,6164,2309, 315,1319,3325, 318,2018,2146,2157, 963, 631, 223,4342, # 3520 +4343,2675, 479,3711,1197,2625,3712,2676,2361,6165,4344,4123,6166,2451,3183,1886, # 3536 +2184,1674,1330,1711,1635,1506, 799, 219,3250,3083,3954,1677,3713,3326,2081,3614, # 3552 +1652,2073,4657,1147,3041,1752, 643,1961, 147,1974,3955,6167,1716,2037, 918,3007, # 3568 +1994, 120,1537, 118, 609,3184,4345, 740,3455,1219, 332,1615,3830,6168,1621,2980, # 3584 +1582, 783, 212, 553,2350,3714,1349,2433,2082,4124, 889,6169,2310,1275,1410, 973, # 3600 + 166,1320,3456,1797,1215,3185,2885,1846,2590,2763,4658, 629, 822,3008, 763, 940, # 3616 +1990,2862, 439,2409,1566,1240,1622, 926,1282,1907,2764, 654,2210,1607, 327,1130, # 3632 +3956,1678,1623,6170,2434,2192, 686, 608,3831,3715, 903,3957,3042,6171,2741,1522, # 3648 +1915,1105,1555,2552,1359, 323,3251,4346,3457, 738,1354,2553,2311,2334,1828,2003, # 3664 +3832,1753,2351,1227,6172,1887,4125,1478,6173,2410,1874,1712,1847, 520,1204,2607, # 3680 + 264,4659, 836,2677,2102, 600,4660,3833,2278,3084,6174,4347,3615,1342, 640, 532, # 3696 + 543,2608,1888,2400,2591,1009,4348,1497, 341,1737,3616,2723,1394, 529,3252,1321, # 3712 + 983,4661,1515,2120, 971,2592, 924, 287,1662,3186,4349,2700,4350,1519, 908,1948, # 3728 +2452, 156, 796,1629,1486,2223,2055, 694,4126,1259,1036,3392,1213,2249,2742,1889, # 3744 +1230,3958,1015, 910, 408, 559,3617,4662, 746, 725, 935,4663,3959,3009,1289, 563, # 3760 + 867,4664,3960,1567,2981,2038,2626, 988,2263,2381,4351, 143,2374, 704,1895,6175, # 3776 +1188,3716,2088, 673,3085,2362,4352, 484,1608,1921,2765,2918, 215, 904,3618,3537, # 3792 + 894, 509, 976,3043,2701,3961,4353,2837,2982, 498,6176,6177,1102,3538,1332,3393, # 3808 +1487,1636,1637, 233, 245,3962, 383, 650, 995,3044, 460,1520,1206,2352, 749,3327, # 3824 + 530, 700, 389,1438,1560,1773,3963,2264, 719,2951,2724,3834, 870,1832,1644,1000, # 3840 + 839,2474,3717, 197,1630,3394, 365,2886,3964,1285,2133, 734, 922, 818,1106, 732, # 3856 + 480,2083,1774,3458, 923,2279,1350, 221,3086, 85,2233,2234,3835,1585,3010,2147, # 3872 +1387,1705,2382,1619,2475, 133, 239,2802,1991,1016,2084,2383, 411,2838,1113, 651, # 3888 +1985,1160,3328, 990,1863,3087,1048,1276,2647, 265,2627,1599,3253,2056, 150, 638, # 3904 +2019, 656, 853, 326,1479, 680,1439,4354,1001,1759, 413,3459,3395,2492,1431, 459, # 3920 +4355,1125,3329,2265,1953,1450,2065,2863, 849, 351,2678,3131,3254,3255,1104,1577, # 3936 + 227,1351,1645,2453,2193,1421,2887, 812,2121, 634, 95,2435, 201,2312,4665,1646, # 3952 +1671,2743,1601,2554,2702,2648,2280,1315,1366,2089,3132,1573,3718,3965,1729,1189, # 3968 + 328,2679,1077,1940,1136, 558,1283, 964,1195, 621,2074,1199,1743,3460,3619,1896, # 3984 +1916,1890,3836,2952,1154,2112,1064, 862, 378,3011,2066,2113,2803,1568,2839,6178, # 4000 +3088,2919,1941,1660,2004,1992,2194, 142, 707,1590,1708,1624,1922,1023,1836,1233, # 4016 +1004,2313, 789, 741,3620,6179,1609,2411,1200,4127,3719,3720,4666,2057,3721, 593, # 4032 +2840, 367,2920,1878,6180,3461,1521, 628,1168, 692,2211,2649, 300, 720,2067,2571, # 4048 +2953,3396, 959,2504,3966,3539,3462,1977, 701,6181, 954,1043, 800, 681, 183,3722, # 4064 +1803,1730,3540,4128,2103, 815,2314, 174, 467, 230,2454,1093,2134, 755,3541,3397, # 4080 +1141,1162,6182,1738,2039, 270,3256,2513,1005,1647,2185,3837, 858,1679,1897,1719, # 4096 +2954,2324,1806, 402, 670, 167,4129,1498,2158,2104, 750,6183, 915, 189,1680,1551, # 4112 + 455,4356,1501,2455, 405,1095,2955, 338,1586,1266,1819, 570, 641,1324, 237,1556, # 4128 +2650,1388,3723,6184,1368,2384,1343,1978,3089,2436, 879,3724, 792,1191, 758,3012, # 4144 +1411,2135,1322,4357, 240,4667,1848,3725,1574,6185, 420,3045,1546,1391, 714,4358, # 4160 +1967, 941,1864, 863, 664, 426, 560,1731,2680,1785,2864,1949,2363, 403,3330,1415, # 4176 +1279,2136,1697,2335, 204, 721,2097,3838, 90,6186,2085,2505, 191,3967, 124,2148, # 4192 +1376,1798,1178,1107,1898,1405, 860,4359,1243,1272,2375,2983,1558,2456,1638, 113, # 4208 +3621, 578,1923,2609, 880, 386,4130, 784,2186,2266,1422,2956,2172,1722, 497, 263, # 4224 +2514,1267,2412,2610, 177,2703,3542, 774,1927,1344, 616,1432,1595,1018, 172,4360, # 4240 +2325, 911,4361, 438,1468,3622, 794,3968,2024,2173,1681,1829,2957, 945, 895,3090, # 4256 + 575,2212,2476, 475,2401,2681, 785,2744,1745,2293,2555,1975,3133,2865, 394,4668, # 4272 +3839, 635,4131, 639, 202,1507,2195,2766,1345,1435,2572,3726,1908,1184,1181,2457, # 4288 +3727,3134,4362, 843,2611, 437, 916,4669, 234, 769,1884,3046,3047,3623, 833,6187, # 4304 +1639,2250,2402,1355,1185,2010,2047, 999, 525,1732,1290,1488,2612, 948,1578,3728, # 4320 +2413,2477,1216,2725,2159, 334,3840,1328,3624,2921,1525,4132, 564,1056, 891,4363, # 4336 +1444,1698,2385,2251,3729,1365,2281,2235,1717,6188, 864,3841,2515, 444, 527,2767, # 4352 +2922,3625, 544, 461,6189, 566, 209,2437,3398,2098,1065,2068,3331,3626,3257,2137, # 4368 #last 512 +) + + diff --git a/venv/lib/python3.7/site-packages/chardet/jpcntx.py b/venv/lib/python3.7/site-packages/chardet/jpcntx.py new file mode 100644 index 0000000..20044e4 --- /dev/null +++ b/venv/lib/python3.7/site-packages/chardet/jpcntx.py @@ -0,0 +1,233 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + + +# This is hiragana 2-char sequence table, the number in each cell represents its frequency category +jp2CharContext = ( +(0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1), +(2,4,0,4,0,3,0,4,0,3,4,4,4,2,4,3,3,4,3,2,3,3,4,2,3,3,3,2,4,1,4,3,3,1,5,4,3,4,3,4,3,5,3,0,3,5,4,2,0,3,1,0,3,3,0,3,3,0,1,1,0,4,3,0,3,3,0,4,0,2,0,3,5,5,5,5,4,0,4,1,0,3,4), +(0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2), +(0,4,0,5,0,5,0,4,0,4,5,4,4,3,5,3,5,1,5,3,4,3,4,4,3,4,3,3,4,3,5,4,4,3,5,5,3,5,5,5,3,5,5,3,4,5,5,3,1,3,2,0,3,4,0,4,2,0,4,2,1,5,3,2,3,5,0,4,0,2,0,5,4,4,5,4,5,0,4,0,0,4,4), +(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), +(0,3,0,4,0,3,0,3,0,4,5,4,3,3,3,3,4,3,5,4,4,3,5,4,4,3,4,3,4,4,4,4,5,3,4,4,3,4,5,5,4,5,5,1,4,5,4,3,0,3,3,1,3,3,0,4,4,0,3,3,1,5,3,3,3,5,0,4,0,3,0,4,4,3,4,3,3,0,4,1,1,3,4), +(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), +(0,4,0,3,0,3,0,4,0,3,4,4,3,2,2,1,2,1,3,1,3,3,3,3,3,4,3,1,3,3,5,3,3,0,4,3,0,5,4,3,3,5,4,4,3,4,4,5,0,1,2,0,1,2,0,2,2,0,1,0,0,5,2,2,1,4,0,3,0,1,0,4,4,3,5,4,3,0,2,1,0,4,3), +(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), +(0,3,0,5,0,4,0,2,1,4,4,2,4,1,4,2,4,2,4,3,3,3,4,3,3,3,3,1,4,2,3,3,3,1,4,4,1,1,1,4,3,3,2,0,2,4,3,2,0,3,3,0,3,1,1,0,0,0,3,3,0,4,2,2,3,4,0,4,0,3,0,4,4,5,3,4,4,0,3,0,0,1,4), +(1,4,0,4,0,4,0,4,0,3,5,4,4,3,4,3,5,4,3,3,4,3,5,4,4,4,4,3,4,2,4,3,3,1,5,4,3,2,4,5,4,5,5,4,4,5,4,4,0,3,2,2,3,3,0,4,3,1,3,2,1,4,3,3,4,5,0,3,0,2,0,4,5,5,4,5,4,0,4,0,0,5,4), +(0,5,0,5,0,4,0,3,0,4,4,3,4,3,3,3,4,0,4,4,4,3,4,3,4,3,3,1,4,2,4,3,4,0,5,4,1,4,5,4,4,5,3,2,4,3,4,3,2,4,1,3,3,3,2,3,2,0,4,3,3,4,3,3,3,4,0,4,0,3,0,4,5,4,4,4,3,0,4,1,0,1,3), +(0,3,1,4,0,3,0,2,0,3,4,4,3,1,4,2,3,3,4,3,4,3,4,3,4,4,3,2,3,1,5,4,4,1,4,4,3,5,4,4,3,5,5,4,3,4,4,3,1,2,3,1,2,2,0,3,2,0,3,1,0,5,3,3,3,4,3,3,3,3,4,4,4,4,5,4,2,0,3,3,2,4,3), +(0,2,0,3,0,1,0,1,0,0,3,2,0,0,2,0,1,0,2,1,3,3,3,1,2,3,1,0,1,0,4,2,1,1,3,3,0,4,3,3,1,4,3,3,0,3,3,2,0,0,0,0,1,0,0,2,0,0,0,0,0,4,1,0,2,3,2,2,2,1,3,3,3,4,4,3,2,0,3,1,0,3,3), +(0,4,0,4,0,3,0,3,0,4,4,4,3,3,3,3,3,3,4,3,4,2,4,3,4,3,3,2,4,3,4,5,4,1,4,5,3,5,4,5,3,5,4,0,3,5,5,3,1,3,3,2,2,3,0,3,4,1,3,3,2,4,3,3,3,4,0,4,0,3,0,4,5,4,4,5,3,0,4,1,0,3,4), +(0,2,0,3,0,3,0,0,0,2,2,2,1,0,1,0,0,0,3,0,3,0,3,0,1,3,1,0,3,1,3,3,3,1,3,3,3,0,1,3,1,3,4,0,0,3,1,1,0,3,2,0,0,0,0,1,3,0,1,0,0,3,3,2,0,3,0,0,0,0,0,3,4,3,4,3,3,0,3,0,0,2,3), +(2,3,0,3,0,2,0,1,0,3,3,4,3,1,3,1,1,1,3,1,4,3,4,3,3,3,0,0,3,1,5,4,3,1,4,3,2,5,5,4,4,4,4,3,3,4,4,4,0,2,1,1,3,2,0,1,2,0,0,1,0,4,1,3,3,3,0,3,0,1,0,4,4,4,5,5,3,0,2,0,0,4,4), +(0,2,0,1,0,3,1,3,0,2,3,3,3,0,3,1,0,0,3,0,3,2,3,1,3,2,1,1,0,0,4,2,1,0,2,3,1,4,3,2,0,4,4,3,1,3,1,3,0,1,0,0,1,0,0,0,1,0,0,0,0,4,1,1,1,2,0,3,0,0,0,3,4,2,4,3,2,0,1,0,0,3,3), +(0,1,0,4,0,5,0,4,0,2,4,4,2,3,3,2,3,3,5,3,3,3,4,3,4,2,3,0,4,3,3,3,4,1,4,3,2,1,5,5,3,4,5,1,3,5,4,2,0,3,3,0,1,3,0,4,2,0,1,3,1,4,3,3,3,3,0,3,0,1,0,3,4,4,4,5,5,0,3,0,1,4,5), +(0,2,0,3,0,3,0,0,0,2,3,1,3,0,4,0,1,1,3,0,3,4,3,2,3,1,0,3,3,2,3,1,3,0,2,3,0,2,1,4,1,2,2,0,0,3,3,0,0,2,0,0,0,1,0,0,0,0,2,2,0,3,2,1,3,3,0,2,0,2,0,0,3,3,1,2,4,0,3,0,2,2,3), +(2,4,0,5,0,4,0,4,0,2,4,4,4,3,4,3,3,3,1,2,4,3,4,3,4,4,5,0,3,3,3,3,2,0,4,3,1,4,3,4,1,4,4,3,3,4,4,3,1,2,3,0,4,2,0,4,1,0,3,3,0,4,3,3,3,4,0,4,0,2,0,3,5,3,4,5,2,0,3,0,0,4,5), +(0,3,0,4,0,1,0,1,0,1,3,2,2,1,3,0,3,0,2,0,2,0,3,0,2,0,0,0,1,0,1,1,0,0,3,1,0,0,0,4,0,3,1,0,2,1,3,0,0,0,0,0,0,3,0,0,0,0,0,0,0,4,2,2,3,1,0,3,0,0,0,1,4,4,4,3,0,0,4,0,0,1,4), +(1,4,1,5,0,3,0,3,0,4,5,4,4,3,5,3,3,4,4,3,4,1,3,3,3,3,2,1,4,1,5,4,3,1,4,4,3,5,4,4,3,5,4,3,3,4,4,4,0,3,3,1,2,3,0,3,1,0,3,3,0,5,4,4,4,4,4,4,3,3,5,4,4,3,3,5,4,0,3,2,0,4,4), +(0,2,0,3,0,1,0,0,0,1,3,3,3,2,4,1,3,0,3,1,3,0,2,2,1,1,0,0,2,0,4,3,1,0,4,3,0,4,4,4,1,4,3,1,1,3,3,1,0,2,0,0,1,3,0,0,0,0,2,0,0,4,3,2,4,3,5,4,3,3,3,4,3,3,4,3,3,0,2,1,0,3,3), +(0,2,0,4,0,3,0,2,0,2,5,5,3,4,4,4,4,1,4,3,3,0,4,3,4,3,1,3,3,2,4,3,0,3,4,3,0,3,4,4,2,4,4,0,4,5,3,3,2,2,1,1,1,2,0,1,5,0,3,3,2,4,3,3,3,4,0,3,0,2,0,4,4,3,5,5,0,0,3,0,2,3,3), +(0,3,0,4,0,3,0,1,0,3,4,3,3,1,3,3,3,0,3,1,3,0,4,3,3,1,1,0,3,0,3,3,0,0,4,4,0,1,5,4,3,3,5,0,3,3,4,3,0,2,0,1,1,1,0,1,3,0,1,2,1,3,3,2,3,3,0,3,0,1,0,1,3,3,4,4,1,0,1,2,2,1,3), +(0,1,0,4,0,4,0,3,0,1,3,3,3,2,3,1,1,0,3,0,3,3,4,3,2,4,2,0,1,0,4,3,2,0,4,3,0,5,3,3,2,4,4,4,3,3,3,4,0,1,3,0,0,1,0,0,1,0,0,0,0,4,2,3,3,3,0,3,0,0,0,4,4,4,5,3,2,0,3,3,0,3,5), +(0,2,0,3,0,0,0,3,0,1,3,0,2,0,0,0,1,0,3,1,1,3,3,0,0,3,0,0,3,0,2,3,1,0,3,1,0,3,3,2,0,4,2,2,0,2,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,2,1,2,0,1,0,1,0,0,0,1,3,1,2,0,0,0,1,0,0,1,4), +(0,3,0,3,0,5,0,1,0,2,4,3,1,3,3,2,1,1,5,2,1,0,5,1,2,0,0,0,3,3,2,2,3,2,4,3,0,0,3,3,1,3,3,0,2,5,3,4,0,3,3,0,1,2,0,2,2,0,3,2,0,2,2,3,3,3,0,2,0,1,0,3,4,4,2,5,4,0,3,0,0,3,5), +(0,3,0,3,0,3,0,1,0,3,3,3,3,0,3,0,2,0,2,1,1,0,2,0,1,0,0,0,2,1,0,0,1,0,3,2,0,0,3,3,1,2,3,1,0,3,3,0,0,1,0,0,0,0,0,2,0,0,0,0,0,2,3,1,2,3,0,3,0,1,0,3,2,1,0,4,3,0,1,1,0,3,3), +(0,4,0,5,0,3,0,3,0,4,5,5,4,3,5,3,4,3,5,3,3,2,5,3,4,4,4,3,4,3,4,5,5,3,4,4,3,4,4,5,4,4,4,3,4,5,5,4,2,3,4,2,3,4,0,3,3,1,4,3,2,4,3,3,5,5,0,3,0,3,0,5,5,5,5,4,4,0,4,0,1,4,4), +(0,4,0,4,0,3,0,3,0,3,5,4,4,2,3,2,5,1,3,2,5,1,4,2,3,2,3,3,4,3,3,3,3,2,5,4,1,3,3,5,3,4,4,0,4,4,3,1,1,3,1,0,2,3,0,2,3,0,3,0,0,4,3,1,3,4,0,3,0,2,0,4,4,4,3,4,5,0,4,0,0,3,4), +(0,3,0,3,0,3,1,2,0,3,4,4,3,3,3,0,2,2,4,3,3,1,3,3,3,1,1,0,3,1,4,3,2,3,4,4,2,4,4,4,3,4,4,3,2,4,4,3,1,3,3,1,3,3,0,4,1,0,2,2,1,4,3,2,3,3,5,4,3,3,5,4,4,3,3,0,4,0,3,2,2,4,4), +(0,2,0,1,0,0,0,0,0,1,2,1,3,0,0,0,0,0,2,0,1,2,1,0,0,1,0,0,0,0,3,0,0,1,0,1,1,3,1,0,0,0,1,1,0,1,1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,1,1,2,2,0,3,4,0,0,0,1,1,0,0,1,0,0,0,0,0,1,1), +(0,1,0,0,0,1,0,0,0,0,4,0,4,1,4,0,3,0,4,0,3,0,4,0,3,0,3,0,4,1,5,1,4,0,0,3,0,5,0,5,2,0,1,0,0,0,2,1,4,0,1,3,0,0,3,0,0,3,1,1,4,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0), +(1,4,0,5,0,3,0,2,0,3,5,4,4,3,4,3,5,3,4,3,3,0,4,3,3,3,3,3,3,2,4,4,3,1,3,4,4,5,4,4,3,4,4,1,3,5,4,3,3,3,1,2,2,3,3,1,3,1,3,3,3,5,3,3,4,5,0,3,0,3,0,3,4,3,4,4,3,0,3,0,2,4,3), +(0,1,0,4,0,0,0,0,0,1,4,0,4,1,4,2,4,0,3,0,1,0,1,0,0,0,0,0,2,0,3,1,1,1,0,3,0,0,0,1,2,1,0,0,1,1,1,1,0,1,0,0,0,1,0,0,3,0,0,0,0,3,2,0,2,2,0,1,0,0,0,2,3,2,3,3,0,0,0,0,2,1,0), +(0,5,1,5,0,3,0,3,0,5,4,4,5,1,5,3,3,0,4,3,4,3,5,3,4,3,3,2,4,3,4,3,3,0,3,3,1,4,4,3,4,4,4,3,4,5,5,3,2,3,1,1,3,3,1,3,1,1,3,3,2,4,5,3,3,5,0,4,0,3,0,4,4,3,5,3,3,0,3,4,0,4,3), +(0,5,0,5,0,3,0,2,0,4,4,3,5,2,4,3,3,3,4,4,4,3,5,3,5,3,3,1,4,0,4,3,3,0,3,3,0,4,4,4,4,5,4,3,3,5,5,3,2,3,1,2,3,2,0,1,0,0,3,2,2,4,4,3,1,5,0,4,0,3,0,4,3,1,3,2,1,0,3,3,0,3,3), +(0,4,0,5,0,5,0,4,0,4,5,5,5,3,4,3,3,2,5,4,4,3,5,3,5,3,4,0,4,3,4,4,3,2,4,4,3,4,5,4,4,5,5,0,3,5,5,4,1,3,3,2,3,3,1,3,1,0,4,3,1,4,4,3,4,5,0,4,0,2,0,4,3,4,4,3,3,0,4,0,0,5,5), +(0,4,0,4,0,5,0,1,1,3,3,4,4,3,4,1,3,0,5,1,3,0,3,1,3,1,1,0,3,0,3,3,4,0,4,3,0,4,4,4,3,4,4,0,3,5,4,1,0,3,0,0,2,3,0,3,1,0,3,1,0,3,2,1,3,5,0,3,0,1,0,3,2,3,3,4,4,0,2,2,0,4,4), +(2,4,0,5,0,4,0,3,0,4,5,5,4,3,5,3,5,3,5,3,5,2,5,3,4,3,3,4,3,4,5,3,2,1,5,4,3,2,3,4,5,3,4,1,2,5,4,3,0,3,3,0,3,2,0,2,3,0,4,1,0,3,4,3,3,5,0,3,0,1,0,4,5,5,5,4,3,0,4,2,0,3,5), +(0,5,0,4,0,4,0,2,0,5,4,3,4,3,4,3,3,3,4,3,4,2,5,3,5,3,4,1,4,3,4,4,4,0,3,5,0,4,4,4,4,5,3,1,3,4,5,3,3,3,3,3,3,3,0,2,2,0,3,3,2,4,3,3,3,5,3,4,1,3,3,5,3,2,0,0,0,0,4,3,1,3,3), +(0,1,0,3,0,3,0,1,0,1,3,3,3,2,3,3,3,0,3,0,0,0,3,1,3,0,0,0,2,2,2,3,0,0,3,2,0,1,2,4,1,3,3,0,0,3,3,3,0,1,0,0,2,1,0,0,3,0,3,1,0,3,0,0,1,3,0,2,0,1,0,3,3,1,3,3,0,0,1,1,0,3,3), +(0,2,0,3,0,2,1,4,0,2,2,3,1,1,3,1,1,0,2,0,3,1,2,3,1,3,0,0,1,0,4,3,2,3,3,3,1,4,2,3,3,3,3,1,0,3,1,4,0,1,1,0,1,2,0,1,1,0,1,1,0,3,1,3,2,2,0,1,0,0,0,2,3,3,3,1,0,0,0,0,0,2,3), +(0,5,0,4,0,5,0,2,0,4,5,5,3,3,4,3,3,1,5,4,4,2,4,4,4,3,4,2,4,3,5,5,4,3,3,4,3,3,5,5,4,5,5,1,3,4,5,3,1,4,3,1,3,3,0,3,3,1,4,3,1,4,5,3,3,5,0,4,0,3,0,5,3,3,1,4,3,0,4,0,1,5,3), +(0,5,0,5,0,4,0,2,0,4,4,3,4,3,3,3,3,3,5,4,4,4,4,4,4,5,3,3,5,2,4,4,4,3,4,4,3,3,4,4,5,5,3,3,4,3,4,3,3,4,3,3,3,3,1,2,2,1,4,3,3,5,4,4,3,4,0,4,0,3,0,4,4,4,4,4,1,0,4,2,0,2,4), +(0,4,0,4,0,3,0,1,0,3,5,2,3,0,3,0,2,1,4,2,3,3,4,1,4,3,3,2,4,1,3,3,3,0,3,3,0,0,3,3,3,5,3,3,3,3,3,2,0,2,0,0,2,0,0,2,0,0,1,0,0,3,1,2,2,3,0,3,0,2,0,4,4,3,3,4,1,0,3,0,0,2,4), +(0,0,0,4,0,0,0,0,0,0,1,0,1,0,2,0,0,0,0,0,1,0,2,0,1,0,0,0,0,0,3,1,3,0,3,2,0,0,0,1,0,3,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,0,2,0,0,0,0,0,0,2), +(0,2,1,3,0,2,0,2,0,3,3,3,3,1,3,1,3,3,3,3,3,3,4,2,2,1,2,1,4,0,4,3,1,3,3,3,2,4,3,5,4,3,3,3,3,3,3,3,0,1,3,0,2,0,0,1,0,0,1,0,0,4,2,0,2,3,0,3,3,0,3,3,4,2,3,1,4,0,1,2,0,2,3), +(0,3,0,3,0,1,0,3,0,2,3,3,3,0,3,1,2,0,3,3,2,3,3,2,3,2,3,1,3,0,4,3,2,0,3,3,1,4,3,3,2,3,4,3,1,3,3,1,1,0,1,1,0,1,0,1,0,1,0,0,0,4,1,1,0,3,0,3,1,0,2,3,3,3,3,3,1,0,0,2,0,3,3), +(0,0,0,0,0,0,0,0,0,0,3,0,2,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,3,0,3,0,3,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,2,0,2,3,0,0,0,0,0,0,0,0,3), +(0,2,0,3,1,3,0,3,0,2,3,3,3,1,3,1,3,1,3,1,3,3,3,1,3,0,2,3,1,1,4,3,3,2,3,3,1,2,2,4,1,3,3,0,1,4,2,3,0,1,3,0,3,0,0,1,3,0,2,0,0,3,3,2,1,3,0,3,0,2,0,3,4,4,4,3,1,0,3,0,0,3,3), +(0,2,0,1,0,2,0,0,0,1,3,2,2,1,3,0,1,1,3,0,3,2,3,1,2,0,2,0,1,1,3,3,3,0,3,3,1,1,2,3,2,3,3,1,2,3,2,0,0,1,0,0,0,0,0,0,3,0,1,0,0,2,1,2,1,3,0,3,0,0,0,3,4,4,4,3,2,0,2,0,0,2,4), +(0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,3,1,0,0,0,0,0,0,0,3), +(0,3,0,3,0,2,0,3,0,3,3,3,2,3,2,2,2,0,3,1,3,3,3,2,3,3,0,0,3,0,3,2,2,0,2,3,1,4,3,4,3,3,2,3,1,5,4,4,0,3,1,2,1,3,0,3,1,1,2,0,2,3,1,3,1,3,0,3,0,1,0,3,3,4,4,2,1,0,2,1,0,2,4), +(0,1,0,3,0,1,0,2,0,1,4,2,5,1,4,0,2,0,2,1,3,1,4,0,2,1,0,0,2,1,4,1,1,0,3,3,0,5,1,3,2,3,3,1,0,3,2,3,0,1,0,0,0,0,0,0,1,0,0,0,0,4,0,1,0,3,0,2,0,1,0,3,3,3,4,3,3,0,0,0,0,2,3), +(0,0,0,1,0,0,0,0,0,0,2,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,0,1,0,0,0,0,0,3), +(0,1,0,3,0,4,0,3,0,2,4,3,1,0,3,2,2,1,3,1,2,2,3,1,1,1,2,1,3,0,1,2,0,1,3,2,1,3,0,5,5,1,0,0,1,3,2,1,0,3,0,0,1,0,0,0,0,0,3,4,0,1,1,1,3,2,0,2,0,1,0,2,3,3,1,2,3,0,1,0,1,0,4), +(0,0,0,1,0,3,0,3,0,2,2,1,0,0,4,0,3,0,3,1,3,0,3,0,3,0,1,0,3,0,3,1,3,0,3,3,0,0,1,2,1,1,1,0,1,2,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,2,2,1,2,0,0,2,0,0,0,0,2,3,3,3,3,0,0,0,0,1,4), +(0,0,0,3,0,3,0,0,0,0,3,1,1,0,3,0,1,0,2,0,1,0,0,0,0,0,0,0,1,0,3,0,2,0,2,3,0,0,2,2,3,1,2,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,2,0,0,0,0,2,3), +(2,4,0,5,0,5,0,4,0,3,4,3,3,3,4,3,3,3,4,3,4,4,5,4,5,5,5,2,3,0,5,5,4,1,5,4,3,1,5,4,3,4,4,3,3,4,3,3,0,3,2,0,2,3,0,3,0,0,3,3,0,5,3,2,3,3,0,3,0,3,0,3,4,5,4,5,3,0,4,3,0,3,4), +(0,3,0,3,0,3,0,3,0,3,3,4,3,2,3,2,3,0,4,3,3,3,3,3,3,3,3,0,3,2,4,3,3,1,3,4,3,4,4,4,3,4,4,3,2,4,4,1,0,2,0,0,1,1,0,2,0,0,3,1,0,5,3,2,1,3,0,3,0,1,2,4,3,2,4,3,3,0,3,2,0,4,4), +(0,3,0,3,0,1,0,0,0,1,4,3,3,2,3,1,3,1,4,2,3,2,4,2,3,4,3,0,2,2,3,3,3,0,3,3,3,0,3,4,1,3,3,0,3,4,3,3,0,1,1,0,1,0,0,0,4,0,3,0,0,3,1,2,1,3,0,4,0,1,0,4,3,3,4,3,3,0,2,0,0,3,3), +(0,3,0,4,0,1,0,3,0,3,4,3,3,0,3,3,3,1,3,1,3,3,4,3,3,3,0,0,3,1,5,3,3,1,3,3,2,5,4,3,3,4,5,3,2,5,3,4,0,1,0,0,0,0,0,2,0,0,1,1,0,4,2,2,1,3,0,3,0,2,0,4,4,3,5,3,2,0,1,1,0,3,4), +(0,5,0,4,0,5,0,2,0,4,4,3,3,2,3,3,3,1,4,3,4,1,5,3,4,3,4,0,4,2,4,3,4,1,5,4,0,4,4,4,4,5,4,1,3,5,4,2,1,4,1,1,3,2,0,3,1,0,3,2,1,4,3,3,3,4,0,4,0,3,0,4,4,4,3,3,3,0,4,2,0,3,4), +(1,4,0,4,0,3,0,1,0,3,3,3,1,1,3,3,2,2,3,3,1,0,3,2,2,1,2,0,3,1,2,1,2,0,3,2,0,2,2,3,3,4,3,0,3,3,1,2,0,1,1,3,1,2,0,0,3,0,1,1,0,3,2,2,3,3,0,3,0,0,0,2,3,3,4,3,3,0,1,0,0,1,4), +(0,4,0,4,0,4,0,0,0,3,4,4,3,1,4,2,3,2,3,3,3,1,4,3,4,0,3,0,4,2,3,3,2,2,5,4,2,1,3,4,3,4,3,1,3,3,4,2,0,2,1,0,3,3,0,0,2,0,3,1,0,4,4,3,4,3,0,4,0,1,0,2,4,4,4,4,4,0,3,2,0,3,3), +(0,0,0,1,0,4,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,3,2,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,2), +(0,2,0,3,0,4,0,4,0,1,3,3,3,0,4,0,2,1,2,1,1,1,2,0,3,1,1,0,1,0,3,1,0,0,3,3,2,0,1,1,0,0,0,0,0,1,0,2,0,2,2,0,3,1,0,0,1,0,1,1,0,1,2,0,3,0,0,0,0,1,0,0,3,3,4,3,1,0,1,0,3,0,2), +(0,0,0,3,0,5,0,0,0,0,1,0,2,0,3,1,0,1,3,0,0,0,2,0,0,0,1,0,0,0,1,1,0,0,4,0,0,0,2,3,0,1,4,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,1,0,0,0,0,0,0,0,2,0,0,3,0,0,0,0,0,3), +(0,2,0,5,0,5,0,1,0,2,4,3,3,2,5,1,3,2,3,3,3,0,4,1,2,0,3,0,4,0,2,2,1,1,5,3,0,0,1,4,2,3,2,0,3,3,3,2,0,2,4,1,1,2,0,1,1,0,3,1,0,1,3,1,2,3,0,2,0,0,0,1,3,5,4,4,4,0,3,0,0,1,3), +(0,4,0,5,0,4,0,4,0,4,5,4,3,3,4,3,3,3,4,3,4,4,5,3,4,5,4,2,4,2,3,4,3,1,4,4,1,3,5,4,4,5,5,4,4,5,5,5,2,3,3,1,4,3,1,3,3,0,3,3,1,4,3,4,4,4,0,3,0,4,0,3,3,4,4,5,0,0,4,3,0,4,5), +(0,4,0,4,0,3,0,3,0,3,4,4,4,3,3,2,4,3,4,3,4,3,5,3,4,3,2,1,4,2,4,4,3,1,3,4,2,4,5,5,3,4,5,4,1,5,4,3,0,3,2,2,3,2,1,3,1,0,3,3,3,5,3,3,3,5,4,4,2,3,3,4,3,3,3,2,1,0,3,2,1,4,3), +(0,4,0,5,0,4,0,3,0,3,5,5,3,2,4,3,4,0,5,4,4,1,4,4,4,3,3,3,4,3,5,5,2,3,3,4,1,2,5,5,3,5,5,2,3,5,5,4,0,3,2,0,3,3,1,1,5,1,4,1,0,4,3,2,3,5,0,4,0,3,0,5,4,3,4,3,0,0,4,1,0,4,4), +(1,3,0,4,0,2,0,2,0,2,5,5,3,3,3,3,3,0,4,2,3,4,4,4,3,4,0,0,3,4,5,4,3,3,3,3,2,5,5,4,5,5,5,4,3,5,5,5,1,3,1,0,1,0,0,3,2,0,4,2,0,5,2,3,2,4,1,3,0,3,0,4,5,4,5,4,3,0,4,2,0,5,4), +(0,3,0,4,0,5,0,3,0,3,4,4,3,2,3,2,3,3,3,3,3,2,4,3,3,2,2,0,3,3,3,3,3,1,3,3,3,0,4,4,3,4,4,1,1,4,4,2,0,3,1,0,1,1,0,4,1,0,2,3,1,3,3,1,3,4,0,3,0,1,0,3,1,3,0,0,1,0,2,0,0,4,4), +(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), +(0,3,0,3,0,2,0,3,0,1,5,4,3,3,3,1,4,2,1,2,3,4,4,2,4,4,5,0,3,1,4,3,4,0,4,3,3,3,2,3,2,5,3,4,3,2,2,3,0,0,3,0,2,1,0,1,2,0,0,0,0,2,1,1,3,1,0,2,0,4,0,3,4,4,4,5,2,0,2,0,0,1,3), +(0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,0,1,1,0,0,0,4,2,1,1,0,1,0,3,2,0,0,3,1,1,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,1,0,0,0,2,0,0,0,1,4,0,4,2,1,0,0,0,0,0,1), +(0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,3,1,0,0,0,2,0,2,1,0,0,1,2,1,0,1,1,0,0,3,0,0,0,0,0,0,0,0,0,0,0,1,3,1,0,0,0,0,0,1,0,0,2,1,0,0,0,0,0,0,0,0,2), +(0,4,0,4,0,4,0,3,0,4,4,3,4,2,4,3,2,0,4,4,4,3,5,3,5,3,3,2,4,2,4,3,4,3,1,4,0,2,3,4,4,4,3,3,3,4,4,4,3,4,1,3,4,3,2,1,2,1,3,3,3,4,4,3,3,5,0,4,0,3,0,4,3,3,3,2,1,0,3,0,0,3,3), +(0,4,0,3,0,3,0,3,0,3,5,5,3,3,3,3,4,3,4,3,3,3,4,4,4,3,3,3,3,4,3,5,3,3,1,3,2,4,5,5,5,5,4,3,4,5,5,3,2,2,3,3,3,3,2,3,3,1,2,3,2,4,3,3,3,4,0,4,0,2,0,4,3,2,2,1,2,0,3,0,0,4,1), +) + +class JapaneseContextAnalysis(object): + NUM_OF_CATEGORY = 6 + DONT_KNOW = -1 + ENOUGH_REL_THRESHOLD = 100 + MAX_REL_THRESHOLD = 1000 + MINIMUM_DATA_THRESHOLD = 4 + + def __init__(self): + self._total_rel = None + self._rel_sample = None + self._need_to_skip_char_num = None + self._last_char_order = None + self._done = None + self.reset() + + def reset(self): + self._total_rel = 0 # total sequence received + # category counters, each integer counts sequence in its category + self._rel_sample = [0] * self.NUM_OF_CATEGORY + # if last byte in current buffer is not the last byte of a character, + # we need to know how many bytes to skip in next buffer + self._need_to_skip_char_num = 0 + self._last_char_order = -1 # The order of previous char + # If this flag is set to True, detection is done and conclusion has + # been made + self._done = False + + def feed(self, byte_str, num_bytes): + if self._done: + return + + # The buffer we got is byte oriented, and a character may span in more than one + # buffers. In case the last one or two byte in last buffer is not + # complete, we record how many byte needed to complete that character + # and skip these bytes here. We can choose to record those bytes as + # well and analyse the character once it is complete, but since a + # character will not make much difference, by simply skipping + # this character will simply our logic and improve performance. + i = self._need_to_skip_char_num + while i < num_bytes: + order, char_len = self.get_order(byte_str[i:i + 2]) + i += char_len + if i > num_bytes: + self._need_to_skip_char_num = i - num_bytes + self._last_char_order = -1 + else: + if (order != -1) and (self._last_char_order != -1): + self._total_rel += 1 + if self._total_rel > self.MAX_REL_THRESHOLD: + self._done = True + break + self._rel_sample[jp2CharContext[self._last_char_order][order]] += 1 + self._last_char_order = order + + def got_enough_data(self): + return self._total_rel > self.ENOUGH_REL_THRESHOLD + + def get_confidence(self): + # This is just one way to calculate confidence. It works well for me. + if self._total_rel > self.MINIMUM_DATA_THRESHOLD: + return (self._total_rel - self._rel_sample[0]) / self._total_rel + else: + return self.DONT_KNOW + + def get_order(self, byte_str): + return -1, 1 + +class SJISContextAnalysis(JapaneseContextAnalysis): + def __init__(self): + super(SJISContextAnalysis, self).__init__() + self._charset_name = "SHIFT_JIS" + + @property + def charset_name(self): + return self._charset_name + + def get_order(self, byte_str): + if not byte_str: + return -1, 1 + # find out current char's byte length + first_char = byte_str[0] + if (0x81 <= first_char <= 0x9F) or (0xE0 <= first_char <= 0xFC): + char_len = 2 + if (first_char == 0x87) or (0xFA <= first_char <= 0xFC): + self._charset_name = "CP932" + else: + char_len = 1 + + # return its order if it is hiragana + if len(byte_str) > 1: + second_char = byte_str[1] + if (first_char == 202) and (0x9F <= second_char <= 0xF1): + return second_char - 0x9F, char_len + + return -1, char_len + +class EUCJPContextAnalysis(JapaneseContextAnalysis): + def get_order(self, byte_str): + if not byte_str: + return -1, 1 + # find out current char's byte length + first_char = byte_str[0] + if (first_char == 0x8E) or (0xA1 <= first_char <= 0xFE): + char_len = 2 + elif first_char == 0x8F: + char_len = 3 + else: + char_len = 1 + + # return its order if it is hiragana + if len(byte_str) > 1: + second_char = byte_str[1] + if (first_char == 0xA4) and (0xA1 <= second_char <= 0xF3): + return second_char - 0xA1, char_len + + return -1, char_len + + diff --git a/venv/lib/python3.7/site-packages/constantly-15.1.0.dist-info/INSTALLER b/venv/lib/python3.7/site-packages/constantly-15.1.0.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/lib/python3.7/site-packages/constantly-15.1.0.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/lib/python3.7/site-packages/constantly-15.1.0.dist-info/METADATA b/venv/lib/python3.7/site-packages/constantly-15.1.0.dist-info/METADATA new file mode 100644 index 0000000..dd2e58d --- /dev/null +++ b/venv/lib/python3.7/site-packages/constantly-15.1.0.dist-info/METADATA @@ -0,0 +1,39 @@ +Metadata-Version: 2.0 +Name: constantly +Version: 15.1.0 +Summary: Symbolic constants in Python +Home-page: https://github.com/twisted/constantly +Author: Twisted Matrix Labs Developers +Author-email: UNKNOWN +License: MIT +Keywords: constants,enum,twisted +Platform: UNKNOWN +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3.3 +Classifier: Programming Language :: Python :: 3.4 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: Topic :: Software Development :: Libraries :: Python Modules + +Constantly +========== + +A library that provides symbolic constant support. +It includes collections and constants with text, numeric, and bit flag values. +Originally ``twisted.python.constants`` from the `Twisted `_ project. + + +Tests +----- + +To run tests:: + + $ tox + +This will run tests on Python 2.7, 3.3, 3.4, and PyPy, as well as doing coverage and pyflakes checks. + + diff --git a/venv/lib/python3.7/site-packages/constantly-15.1.0.dist-info/RECORD b/venv/lib/python3.7/site-packages/constantly-15.1.0.dist-info/RECORD new file mode 100644 index 0000000..5c733ea --- /dev/null +++ b/venv/lib/python3.7/site-packages/constantly-15.1.0.dist-info/RECORD @@ -0,0 +1,14 @@ +constantly/__init__.py,sha256=K2EFx89mIF8TkuE4F2ZhqeiE9UuB9S0DpFy0SNhu6uc,517 +constantly/_constants.py,sha256=n-QpkK73fCIyebkqp6hvUMuEe3uYeIptBtl4KahxpcI,16090 +constantly/_version.py,sha256=kp8Hoj2tpH_Xpb4CONVFfYjTpEOr3EGzNRaT_IFZ3Ao,472 +constantly-15.1.0.dist-info/DESCRIPTION.rst,sha256=sx7cfQa9trLrI06ORsPDOgA4UkW9KdPxYfygiqt50R4,397 +constantly-15.1.0.dist-info/METADATA,sha256=4Rt-WjQ0S-JhhzVk__zpXfYLaC7KaVjQzW9SVaBhwoY,1214 +constantly-15.1.0.dist-info/metadata.json,sha256=y1-W-VJW79doSoMail8qNDduY5oHC2JGG1-tBZ_dA0k,923 +constantly-15.1.0.dist-info/pbr.json,sha256=of4UIk4TOAoS3Gxf7oE2PwaRBcQW2ij9ZLRX1LMhy1A,47 +constantly-15.1.0.dist-info/RECORD,, +constantly-15.1.0.dist-info/top_level.txt,sha256=Z3LZxRT3sV7OIcLddygWy8rRaguc4a1hlGotDs-vFIM,11 +constantly-15.1.0.dist-info/WHEEL,sha256=AvR0WeTpDaxT645bl5FQxUK6NPsTls2ttpcGJg3j1Xg,110 +constantly-15.1.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +constantly/__pycache__/_version.cpython-37.pyc,, +constantly/__pycache__/_constants.cpython-37.pyc,, +constantly/__pycache__/__init__.cpython-37.pyc,, diff --git a/venv/lib/python3.7/site-packages/constantly/_version.py b/venv/lib/python3.7/site-packages/constantly/_version.py new file mode 100644 index 0000000..2b1beb5 --- /dev/null +++ b/venv/lib/python3.7/site-packages/constantly/_version.py @@ -0,0 +1,21 @@ + +# This file was generated by 'versioneer.py' (0.15) from +# revision-control system data, or from the parent directory name of an +# unpacked source archive. Distribution tarballs contain a pre-generated copy +# of this file. + +import json +import sys + +version_json = ''' +{ + "dirty": false, + "error": null, + "full-revisionid": "c8375a7e3431792ea1b1b44678f3f6878d5e8c9a", + "version": "15.1.0" +} +''' # END VERSION_JSON + + +def get_versions(): + return json.loads(version_json) diff --git a/venv/lib/python3.7/site-packages/cryptography-2.8.dist-info/AUTHORS.rst b/venv/lib/python3.7/site-packages/cryptography-2.8.dist-info/AUTHORS.rst new file mode 100644 index 0000000..8ba7e0e --- /dev/null +++ b/venv/lib/python3.7/site-packages/cryptography-2.8.dist-info/AUTHORS.rst @@ -0,0 +1,44 @@ +AUTHORS +======= + +PGP key fingerprints are enclosed in parentheses. + +* Alex Gaynor (E27D 4AA0 1651 72CB C5D2 AF2B 125F 5C67 DFE9 4084) +* Hynek Schlawack (C2A0 4F86 ACE2 8ADC F817 DBB7 AE25 3622 7F69 F181) +* Donald Stufft +* Laurens Van Houtven <_@lvh.io> (D9DC 4315 772F 8E91 DD22 B153 DFD1 3DF7 A8DD 569B) +* Christian Heimes +* Paul Kehrer (05FD 9FA1 6CF7 5735 0D91 A560 235A E5F1 29F9 ED98) +* Jarret Raim +* Alex Stapleton (A1C7 E50B 66DE 39ED C847 9665 8E3C 20D1 9BD9 5C4C) +* David Reid (0F83 CC87 B32F 482B C726 B58A 9FBF D8F4 DA89 6D74) +* Matthew Lefkowitz (06AB F638 E878 CD29 1264 18AB 7EC2 8125 0FBC 4A07) +* Konstantinos Koukopoulos (D6BD 52B6 8C99 A91C E2C8 934D 3300 566B 3A46 726E) +* Stephen Holsapple +* Terry Chia +* Matthew Iversen (2F04 3DCC D6E6 D5AC D262 2E0B C046 E8A8 7452 2973) +* Mohammed Attia +* Michael Hart +* Mark Adams (A18A 7DD3 283C CF2A B0CE FE0E C7A0 5E3F C972 098C) +* Gregory Haynes (6FB6 44BF 9FD0 EBA2 1CE9 471F B08F 42F9 0DC6 599F) +* Chelsea Winfree +* Steven Buss (1FB9 2EC1 CF93 DFD6 B47F F583 B1A5 6C22 290D A4C3) +* Andre Caron +* Jiangge Zhang (BBEC 782B 015F 71B1 5FF7 EACA 1A8C AA98 255F 5000) +* Major Hayden (1BF9 9264 9596 0033 698C 252B 7370 51E0 C101 1FB1) +* Phoebe Queen (10D4 7741 AB65 50F4 B264 3888 DA40 201A 072B C1FA) +* Google Inc. +* Amaury Forgeot d'Arc +* Dirkjan Ochtman (25BB BAC1 13C1 BFD5 AA59 4A4C 9F96 B929 3038 0381) +* Maximilian Hils +* Simo Sorce +* Thomas Sileo +* Fraser Tweedale +* Ofek Lev (FFB6 B92B 30B1 7848 546E 9912 972F E913 DAD5 A46E) +* Erik Daguerre +* Aviv Palivoda +* Chris Wolfe +* Jeremy Lainé +* Denis Gladkikh +* John Pacific (2CF6 0381 B5EF 29B7 D48C 2020 7BB9 71A0 E891 44D9) +* Marti Raudsepp diff --git a/venv/lib/python3.7/site-packages/cryptography-2.8.dist-info/INSTALLER b/venv/lib/python3.7/site-packages/cryptography-2.8.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/venv/lib/python3.7/site-packages/cryptography-2.8.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/venv/lib/python3.7/site-packages/cryptography-2.8.dist-info/WHEEL b/venv/lib/python3.7/site-packages/cryptography-2.8.dist-info/WHEEL new file mode 100644 index 0000000..dd598b5 --- /dev/null +++ b/venv/lib/python3.7/site-packages/cryptography-2.8.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.33.6) +Root-Is-Purelib: false +Tag: cp34-abi3-macosx_10_6_intel + diff --git a/venv/lib/python3.7/site-packages/cryptography/hazmat/_der.py b/venv/lib/python3.7/site-packages/cryptography/hazmat/_der.py new file mode 100644 index 0000000..51518d6 --- /dev/null +++ b/venv/lib/python3.7/site-packages/cryptography/hazmat/_der.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 absolute_import, division, print_function + +import six + +from cryptography.utils import int_from_bytes, int_to_bytes + + +# This module contains a lightweight DER encoder and decoder. See X.690 for the +# specification. This module intentionally does not implement the more complex +# BER encoding, only DER. +# +# Note this implementation treats an element's constructed bit as part of the +# tag. This is fine for DER, where the bit is always computable from the type. + + +CONSTRUCTED = 0x20 +CONTEXT_SPECIFIC = 0x80 + +INTEGER = 0x02 +BIT_STRING = 0x03 +OCTET_STRING = 0x04 +NULL = 0x05 +OBJECT_IDENTIFIER = 0x06 +SEQUENCE = 0x10 | CONSTRUCTED +SET = 0x11 | CONSTRUCTED +PRINTABLE_STRING = 0x13 +UTC_TIME = 0x17 +GENERALIZED_TIME = 0x18 + + +class DERReader(object): + def __init__(self, data): + self.data = memoryview(data) + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_value, tb): + if exc_value is None: + self.check_empty() + + def is_empty(self): + return len(self.data) == 0 + + def check_empty(self): + if not self.is_empty(): + raise ValueError("Invalid DER input: trailing data") + + def read_byte(self): + if len(self.data) < 1: + raise ValueError("Invalid DER input: insufficient data") + ret = six.indexbytes(self.data, 0) + self.data = self.data[1:] + return ret + + def read_bytes(self, n): + if len(self.data) < n: + raise ValueError("Invalid DER input: insufficient data") + ret = self.data[:n] + self.data = self.data[n:] + return ret + + def read_any_element(self): + tag = self.read_byte() + # Tag numbers 31 or higher are stored in multiple bytes. No supported + # ASN.1 types use such tags, so reject these. + if tag & 0x1f == 0x1f: + raise ValueError("Invalid DER input: unexpected high tag number") + length_byte = self.read_byte() + if length_byte & 0x80 == 0: + # If the high bit is clear, the first length byte is the length. + length = length_byte + else: + # If the high bit is set, the first length byte encodes the length + # of the length. + length_byte &= 0x7f + if length_byte == 0: + raise ValueError( + "Invalid DER input: indefinite length form is not allowed " + "in DER" + ) + length = 0 + for i in range(length_byte): + length <<= 8 + length |= self.read_byte() + if length == 0: + raise ValueError( + "Invalid DER input: length was not minimally-encoded" + ) + if length < 0x80: + # If the length could have been encoded in short form, it must + # not use long form. + raise ValueError( + "Invalid DER input: length was not minimally-encoded" + ) + body = self.read_bytes(length) + return tag, DERReader(body) + + def read_element(self, expected_tag): + tag, body = self.read_any_element() + if tag != expected_tag: + raise ValueError("Invalid DER input: unexpected tag") + return body + + def read_single_element(self, expected_tag): + with self: + return self.read_element(expected_tag) + + def read_optional_element(self, expected_tag): + if len(self.data) > 0 and six.indexbytes(self.data, 0) == expected_tag: + return self.read_element(expected_tag) + return None + + def as_integer(self): + if len(self.data) == 0: + raise ValueError("Invalid DER input: empty integer contents") + first = six.indexbytes(self.data, 0) + if first & 0x80 == 0x80: + raise ValueError("Negative DER integers are not supported") + # The first 9 bits must not all be zero or all be ones. Otherwise, the + # encoding should have been one byte shorter. + if len(self.data) > 1: + second = six.indexbytes(self.data, 1) + if first == 0 and second & 0x80 == 0: + raise ValueError( + "Invalid DER input: integer not minimally-encoded" + ) + return int_from_bytes(self.data, "big") + + +def encode_der_integer(x): + if not isinstance(x, six.integer_types): + raise ValueError("Value must be an integer") + if x < 0: + raise ValueError("Negative integers are not supported") + n = x.bit_length() // 8 + 1 + return int_to_bytes(x, n) + + +def encode_der(tag, *children): + length = 0 + for child in children: + length += len(child) + chunks = [six.int2byte(tag)] + if length < 0x80: + chunks.append(six.int2byte(length)) + else: + length_bytes = int_to_bytes(length) + chunks.append(six.int2byte(0x80 | len(length_bytes))) + chunks.append(length_bytes) + chunks.extend(children) + return b"".join(chunks) diff --git a/venv/lib/python3.7/site-packages/cryptography/hazmat/backends/openssl/aead.py b/venv/lib/python3.7/site-packages/cryptography/hazmat/backends/openssl/aead.py new file mode 100644 index 0000000..0cad15c --- /dev/null +++ b/venv/lib/python3.7/site-packages/cryptography/hazmat/backends/openssl/aead.py @@ -0,0 +1,162 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +from cryptography.exceptions import InvalidTag + + +_ENCRYPT = 1 +_DECRYPT = 0 + + +def _aead_cipher_name(cipher): + from cryptography.hazmat.primitives.ciphers.aead import ( + AESCCM, AESGCM, ChaCha20Poly1305 + ) + if isinstance(cipher, ChaCha20Poly1305): + return b"chacha20-poly1305" + elif isinstance(cipher, AESCCM): + return "aes-{}-ccm".format(len(cipher._key) * 8).encode("ascii") + else: + assert isinstance(cipher, AESGCM) + return "aes-{}-gcm".format(len(cipher._key) * 8).encode("ascii") + + +def _aead_setup(backend, cipher_name, key, nonce, tag, tag_len, operation): + evp_cipher = backend._lib.EVP_get_cipherbyname(cipher_name) + backend.openssl_assert(evp_cipher != backend._ffi.NULL) + ctx = backend._lib.EVP_CIPHER_CTX_new() + ctx = backend._ffi.gc(ctx, backend._lib.EVP_CIPHER_CTX_free) + res = backend._lib.EVP_CipherInit_ex( + ctx, evp_cipher, + backend._ffi.NULL, + backend._ffi.NULL, + backend._ffi.NULL, + int(operation == _ENCRYPT) + ) + backend.openssl_assert(res != 0) + res = backend._lib.EVP_CIPHER_CTX_set_key_length(ctx, len(key)) + backend.openssl_assert(res != 0) + res = backend._lib.EVP_CIPHER_CTX_ctrl( + ctx, backend._lib.EVP_CTRL_AEAD_SET_IVLEN, len(nonce), + backend._ffi.NULL + ) + backend.openssl_assert(res != 0) + if operation == _DECRYPT: + res = backend._lib.EVP_CIPHER_CTX_ctrl( + ctx, backend._lib.EVP_CTRL_AEAD_SET_TAG, len(tag), tag + ) + backend.openssl_assert(res != 0) + elif cipher_name.endswith(b"-ccm"): + res = backend._lib.EVP_CIPHER_CTX_ctrl( + ctx, backend._lib.EVP_CTRL_AEAD_SET_TAG, tag_len, backend._ffi.NULL + ) + backend.openssl_assert(res != 0) + + nonce_ptr = backend._ffi.from_buffer(nonce) + key_ptr = backend._ffi.from_buffer(key) + res = backend._lib.EVP_CipherInit_ex( + ctx, + backend._ffi.NULL, + backend._ffi.NULL, + key_ptr, + nonce_ptr, + int(operation == _ENCRYPT) + ) + backend.openssl_assert(res != 0) + return ctx + + +def _set_length(backend, ctx, data_len): + intptr = backend._ffi.new("int *") + res = backend._lib.EVP_CipherUpdate( + ctx, + backend._ffi.NULL, + intptr, + backend._ffi.NULL, + data_len + ) + backend.openssl_assert(res != 0) + + +def _process_aad(backend, ctx, associated_data): + outlen = backend._ffi.new("int *") + res = backend._lib.EVP_CipherUpdate( + ctx, backend._ffi.NULL, outlen, associated_data, len(associated_data) + ) + backend.openssl_assert(res != 0) + + +def _process_data(backend, ctx, data): + outlen = backend._ffi.new("int *") + buf = backend._ffi.new("unsigned char[]", len(data)) + res = backend._lib.EVP_CipherUpdate(ctx, buf, outlen, data, len(data)) + backend.openssl_assert(res != 0) + return backend._ffi.buffer(buf, outlen[0])[:] + + +def _encrypt(backend, cipher, nonce, data, associated_data, tag_length): + from cryptography.hazmat.primitives.ciphers.aead import AESCCM + cipher_name = _aead_cipher_name(cipher) + ctx = _aead_setup( + backend, cipher_name, cipher._key, nonce, None, tag_length, _ENCRYPT + ) + # CCM requires us to pass the length of the data before processing anything + # However calling this with any other AEAD results in an error + if isinstance(cipher, AESCCM): + _set_length(backend, ctx, len(data)) + + _process_aad(backend, ctx, associated_data) + processed_data = _process_data(backend, ctx, data) + outlen = backend._ffi.new("int *") + res = backend._lib.EVP_CipherFinal_ex(ctx, backend._ffi.NULL, outlen) + backend.openssl_assert(res != 0) + backend.openssl_assert(outlen[0] == 0) + tag_buf = backend._ffi.new("unsigned char[]", tag_length) + res = backend._lib.EVP_CIPHER_CTX_ctrl( + ctx, backend._lib.EVP_CTRL_AEAD_GET_TAG, tag_length, tag_buf + ) + backend.openssl_assert(res != 0) + tag = backend._ffi.buffer(tag_buf)[:] + + return processed_data + tag + + +def _decrypt(backend, cipher, nonce, data, associated_data, tag_length): + from cryptography.hazmat.primitives.ciphers.aead import AESCCM + if len(data) < tag_length: + raise InvalidTag + tag = data[-tag_length:] + data = data[:-tag_length] + cipher_name = _aead_cipher_name(cipher) + ctx = _aead_setup( + backend, cipher_name, cipher._key, nonce, tag, tag_length, _DECRYPT + ) + # CCM requires us to pass the length of the data before processing anything + # However calling this with any other AEAD results in an error + if isinstance(cipher, AESCCM): + _set_length(backend, ctx, len(data)) + + _process_aad(backend, ctx, associated_data) + # CCM has a different error path if the tag doesn't match. Errors are + # raised in Update and Final is irrelevant. + if isinstance(cipher, AESCCM): + outlen = backend._ffi.new("int *") + buf = backend._ffi.new("unsigned char[]", len(data)) + res = backend._lib.EVP_CipherUpdate(ctx, buf, outlen, data, len(data)) + if res != 1: + backend._consume_errors() + raise InvalidTag + + processed_data = backend._ffi.buffer(buf, outlen[0])[:] + else: + processed_data = _process_data(backend, ctx, data) + outlen = backend._ffi.new("int *") + res = backend._lib.EVP_CipherFinal_ex(ctx, backend._ffi.NULL, outlen) + if res == 0: + backend._consume_errors() + raise InvalidTag + + return processed_data diff --git a/venv/lib/python3.7/site-packages/cryptography/hazmat/backends/openssl/decode_asn1.py b/venv/lib/python3.7/site-packages/cryptography/hazmat/backends/openssl/decode_asn1.py new file mode 100644 index 0000000..47c6c65 --- /dev/null +++ b/venv/lib/python3.7/site-packages/cryptography/hazmat/backends/openssl/decode_asn1.py @@ -0,0 +1,900 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import datetime +import ipaddress + +import six + +from cryptography import x509 +from cryptography.hazmat._der import DERReader, INTEGER, NULL, SEQUENCE +from cryptography.x509.extensions import _TLS_FEATURE_TYPE_TO_ENUM +from cryptography.x509.name import _ASN1_TYPE_TO_ENUM +from cryptography.x509.oid import ( + CRLEntryExtensionOID, CertificatePoliciesOID, ExtensionOID, + OCSPExtensionOID, +) + + +def _obj2txt(backend, obj): + # Set to 80 on the recommendation of + # https://www.openssl.org/docs/crypto/OBJ_nid2ln.html#return_values + # + # But OIDs longer than this occur in real life (e.g. Active + # Directory makes some very long OIDs). So we need to detect + # and properly handle the case where the default buffer is not + # big enough. + # + buf_len = 80 + buf = backend._ffi.new("char[]", buf_len) + + # 'res' is the number of bytes that *would* be written if the + # buffer is large enough. If 'res' > buf_len - 1, we need to + # alloc a big-enough buffer and go again. + res = backend._lib.OBJ_obj2txt(buf, buf_len, obj, 1) + if res > buf_len - 1: # account for terminating null byte + buf_len = res + 1 + buf = backend._ffi.new("char[]", buf_len) + res = backend._lib.OBJ_obj2txt(buf, buf_len, obj, 1) + backend.openssl_assert(res > 0) + return backend._ffi.buffer(buf, res)[:].decode() + + +def _decode_x509_name_entry(backend, x509_name_entry): + obj = backend._lib.X509_NAME_ENTRY_get_object(x509_name_entry) + backend.openssl_assert(obj != backend._ffi.NULL) + data = backend._lib.X509_NAME_ENTRY_get_data(x509_name_entry) + backend.openssl_assert(data != backend._ffi.NULL) + value = _asn1_string_to_utf8(backend, data) + oid = _obj2txt(backend, obj) + type = _ASN1_TYPE_TO_ENUM[data.type] + + return x509.NameAttribute(x509.ObjectIdentifier(oid), value, type) + + +def _decode_x509_name(backend, x509_name): + count = backend._lib.X509_NAME_entry_count(x509_name) + attributes = [] + prev_set_id = -1 + for x in range(count): + entry = backend._lib.X509_NAME_get_entry(x509_name, x) + attribute = _decode_x509_name_entry(backend, entry) + set_id = backend._lib.Cryptography_X509_NAME_ENTRY_set(entry) + if set_id != prev_set_id: + attributes.append(set([attribute])) + else: + # is in the same RDN a previous entry + attributes[-1].add(attribute) + prev_set_id = set_id + + return x509.Name(x509.RelativeDistinguishedName(rdn) for rdn in attributes) + + +def _decode_general_names(backend, gns): + num = backend._lib.sk_GENERAL_NAME_num(gns) + names = [] + for i in range(num): + gn = backend._lib.sk_GENERAL_NAME_value(gns, i) + backend.openssl_assert(gn != backend._ffi.NULL) + names.append(_decode_general_name(backend, gn)) + + return names + + +def _decode_general_name(backend, gn): + if gn.type == backend._lib.GEN_DNS: + # Convert to bytes and then decode to utf8. We don't use + # asn1_string_to_utf8 here because it doesn't properly convert + # utf8 from ia5strings. + data = _asn1_string_to_bytes(backend, gn.d.dNSName).decode("utf8") + # We don't use the constructor for DNSName so we can bypass validation + # This allows us to create DNSName objects that have unicode chars + # when a certificate (against the RFC) contains them. + return x509.DNSName._init_without_validation(data) + elif gn.type == backend._lib.GEN_URI: + # Convert to bytes and then decode to utf8. We don't use + # asn1_string_to_utf8 here because it doesn't properly convert + # utf8 from ia5strings. + data = _asn1_string_to_bytes( + backend, gn.d.uniformResourceIdentifier + ).decode("utf8") + # We don't use the constructor for URI so we can bypass validation + # This allows us to create URI objects that have unicode chars + # when a certificate (against the RFC) contains them. + return x509.UniformResourceIdentifier._init_without_validation(data) + elif gn.type == backend._lib.GEN_RID: + oid = _obj2txt(backend, gn.d.registeredID) + return x509.RegisteredID(x509.ObjectIdentifier(oid)) + elif gn.type == backend._lib.GEN_IPADD: + data = _asn1_string_to_bytes(backend, gn.d.iPAddress) + data_len = len(data) + if data_len == 8 or data_len == 32: + # This is an IPv4 or IPv6 Network and not a single IP. This + # type of data appears in Name Constraints. Unfortunately, + # ipaddress doesn't support packed bytes + netmask. Additionally, + # IPv6Network can only handle CIDR rather than the full 16 byte + # netmask. To handle this we convert the netmask to integer, then + # find the first 0 bit, which will be the prefix. If another 1 + # bit is present after that the netmask is invalid. + base = ipaddress.ip_address(data[:data_len // 2]) + netmask = ipaddress.ip_address(data[data_len // 2:]) + bits = bin(int(netmask))[2:] + prefix = bits.find('0') + # If no 0 bits are found it is a /32 or /128 + if prefix == -1: + prefix = len(bits) + + if "1" in bits[prefix:]: + raise ValueError("Invalid netmask") + + ip = ipaddress.ip_network(base.exploded + u"/{}".format(prefix)) + else: + ip = ipaddress.ip_address(data) + + return x509.IPAddress(ip) + elif gn.type == backend._lib.GEN_DIRNAME: + return x509.DirectoryName( + _decode_x509_name(backend, gn.d.directoryName) + ) + elif gn.type == backend._lib.GEN_EMAIL: + # Convert to bytes and then decode to utf8. We don't use + # asn1_string_to_utf8 here because it doesn't properly convert + # utf8 from ia5strings. + data = _asn1_string_to_bytes(backend, gn.d.rfc822Name).decode("utf8") + # We don't use the constructor for RFC822Name so we can bypass + # validation. This allows us to create RFC822Name objects that have + # unicode chars when a certificate (against the RFC) contains them. + return x509.RFC822Name._init_without_validation(data) + elif gn.type == backend._lib.GEN_OTHERNAME: + type_id = _obj2txt(backend, gn.d.otherName.type_id) + value = _asn1_to_der(backend, gn.d.otherName.value) + return x509.OtherName(x509.ObjectIdentifier(type_id), value) + else: + # x400Address or ediPartyName + raise x509.UnsupportedGeneralNameType( + "{} is not a supported type".format( + x509._GENERAL_NAMES.get(gn.type, gn.type) + ), + gn.type + ) + + +def _decode_ocsp_no_check(backend, ext): + return x509.OCSPNoCheck() + + +def _decode_crl_number(backend, ext): + asn1_int = backend._ffi.cast("ASN1_INTEGER *", ext) + asn1_int = backend._ffi.gc(asn1_int, backend._lib.ASN1_INTEGER_free) + return x509.CRLNumber(_asn1_integer_to_int(backend, asn1_int)) + + +def _decode_delta_crl_indicator(backend, ext): + asn1_int = backend._ffi.cast("ASN1_INTEGER *", ext) + asn1_int = backend._ffi.gc(asn1_int, backend._lib.ASN1_INTEGER_free) + return x509.DeltaCRLIndicator(_asn1_integer_to_int(backend, asn1_int)) + + +class _X509ExtensionParser(object): + def __init__(self, ext_count, get_ext, handlers): + self.ext_count = ext_count + self.get_ext = get_ext + self.handlers = handlers + + def parse(self, backend, x509_obj): + extensions = [] + seen_oids = set() + for i in range(self.ext_count(backend, x509_obj)): + ext = self.get_ext(backend, x509_obj, i) + backend.openssl_assert(ext != backend._ffi.NULL) + crit = backend._lib.X509_EXTENSION_get_critical(ext) + critical = crit == 1 + oid = x509.ObjectIdentifier( + _obj2txt(backend, backend._lib.X509_EXTENSION_get_object(ext)) + ) + if oid in seen_oids: + raise x509.DuplicateExtension( + "Duplicate {} extension found".format(oid), oid + ) + + # These OIDs are only supported in OpenSSL 1.1.0+ but we want + # to support them in all versions of OpenSSL so we decode them + # ourselves. + if oid == ExtensionOID.TLS_FEATURE: + # The extension contents are a SEQUENCE OF INTEGERs. + data = backend._lib.X509_EXTENSION_get_data(ext) + data_bytes = _asn1_string_to_bytes(backend, data) + features = DERReader(data_bytes).read_single_element(SEQUENCE) + parsed = [] + while not features.is_empty(): + parsed.append(features.read_element(INTEGER).as_integer()) + # Map the features to their enum value. + value = x509.TLSFeature( + [_TLS_FEATURE_TYPE_TO_ENUM[x] for x in parsed] + ) + extensions.append(x509.Extension(oid, critical, value)) + seen_oids.add(oid) + continue + elif oid == ExtensionOID.PRECERT_POISON: + data = backend._lib.X509_EXTENSION_get_data(ext) + # The contents of the extension must be an ASN.1 NULL. + reader = DERReader(_asn1_string_to_bytes(backend, data)) + reader.read_single_element(NULL).check_empty() + extensions.append(x509.Extension( + oid, critical, x509.PrecertPoison() + )) + seen_oids.add(oid) + continue + + try: + handler = self.handlers[oid] + except KeyError: + # Dump the DER payload into an UnrecognizedExtension object + data = backend._lib.X509_EXTENSION_get_data(ext) + backend.openssl_assert(data != backend._ffi.NULL) + der = backend._ffi.buffer(data.data, data.length)[:] + unrecognized = x509.UnrecognizedExtension(oid, der) + extensions.append( + x509.Extension(oid, critical, unrecognized) + ) + else: + ext_data = backend._lib.X509V3_EXT_d2i(ext) + if ext_data == backend._ffi.NULL: + backend._consume_errors() + raise ValueError( + "The {} extension is invalid and can't be " + "parsed".format(oid) + ) + + value = handler(backend, ext_data) + extensions.append(x509.Extension(oid, critical, value)) + + seen_oids.add(oid) + + return x509.Extensions(extensions) + + +def _decode_certificate_policies(backend, cp): + cp = backend._ffi.cast("Cryptography_STACK_OF_POLICYINFO *", cp) + cp = backend._ffi.gc(cp, backend._lib.CERTIFICATEPOLICIES_free) + + num = backend._lib.sk_POLICYINFO_num(cp) + certificate_policies = [] + for i in range(num): + qualifiers = None + pi = backend._lib.sk_POLICYINFO_value(cp, i) + oid = x509.ObjectIdentifier(_obj2txt(backend, pi.policyid)) + if pi.qualifiers != backend._ffi.NULL: + qnum = backend._lib.sk_POLICYQUALINFO_num(pi.qualifiers) + qualifiers = [] + for j in range(qnum): + pqi = backend._lib.sk_POLICYQUALINFO_value( + pi.qualifiers, j + ) + pqualid = x509.ObjectIdentifier( + _obj2txt(backend, pqi.pqualid) + ) + if pqualid == CertificatePoliciesOID.CPS_QUALIFIER: + cpsuri = backend._ffi.buffer( + pqi.d.cpsuri.data, pqi.d.cpsuri.length + )[:].decode('ascii') + qualifiers.append(cpsuri) + else: + assert pqualid == CertificatePoliciesOID.CPS_USER_NOTICE + user_notice = _decode_user_notice( + backend, pqi.d.usernotice + ) + qualifiers.append(user_notice) + + certificate_policies.append( + x509.PolicyInformation(oid, qualifiers) + ) + + return x509.CertificatePolicies(certificate_policies) + + +def _decode_user_notice(backend, un): + explicit_text = None + notice_reference = None + + if un.exptext != backend._ffi.NULL: + explicit_text = _asn1_string_to_utf8(backend, un.exptext) + + if un.noticeref != backend._ffi.NULL: + organization = _asn1_string_to_utf8( + backend, un.noticeref.organization + ) + + num = backend._lib.sk_ASN1_INTEGER_num( + un.noticeref.noticenos + ) + notice_numbers = [] + for i in range(num): + asn1_int = backend._lib.sk_ASN1_INTEGER_value( + un.noticeref.noticenos, i + ) + notice_num = _asn1_integer_to_int(backend, asn1_int) + notice_numbers.append(notice_num) + + notice_reference = x509.NoticeReference( + organization, notice_numbers + ) + + return x509.UserNotice(notice_reference, explicit_text) + + +def _decode_basic_constraints(backend, bc_st): + basic_constraints = backend._ffi.cast("BASIC_CONSTRAINTS *", bc_st) + basic_constraints = backend._ffi.gc( + basic_constraints, backend._lib.BASIC_CONSTRAINTS_free + ) + # The byte representation of an ASN.1 boolean true is \xff. OpenSSL + # chooses to just map this to its ordinal value, so true is 255 and + # false is 0. + ca = basic_constraints.ca == 255 + path_length = _asn1_integer_to_int_or_none( + backend, basic_constraints.pathlen + ) + + return x509.BasicConstraints(ca, path_length) + + +def _decode_subject_key_identifier(backend, asn1_string): + asn1_string = backend._ffi.cast("ASN1_OCTET_STRING *", asn1_string) + asn1_string = backend._ffi.gc( + asn1_string, backend._lib.ASN1_OCTET_STRING_free + ) + return x509.SubjectKeyIdentifier( + backend._ffi.buffer(asn1_string.data, asn1_string.length)[:] + ) + + +def _decode_authority_key_identifier(backend, akid): + akid = backend._ffi.cast("AUTHORITY_KEYID *", akid) + akid = backend._ffi.gc(akid, backend._lib.AUTHORITY_KEYID_free) + key_identifier = None + authority_cert_issuer = None + + if akid.keyid != backend._ffi.NULL: + key_identifier = backend._ffi.buffer( + akid.keyid.data, akid.keyid.length + )[:] + + if akid.issuer != backend._ffi.NULL: + authority_cert_issuer = _decode_general_names( + backend, akid.issuer + ) + + authority_cert_serial_number = _asn1_integer_to_int_or_none( + backend, akid.serial + ) + + return x509.AuthorityKeyIdentifier( + key_identifier, authority_cert_issuer, authority_cert_serial_number + ) + + +def _decode_authority_information_access(backend, aia): + aia = backend._ffi.cast("Cryptography_STACK_OF_ACCESS_DESCRIPTION *", aia) + aia = backend._ffi.gc( + aia, + lambda x: backend._lib.sk_ACCESS_DESCRIPTION_pop_free( + x, backend._ffi.addressof( + backend._lib._original_lib, "ACCESS_DESCRIPTION_free" + ) + ) + ) + num = backend._lib.sk_ACCESS_DESCRIPTION_num(aia) + access_descriptions = [] + for i in range(num): + ad = backend._lib.sk_ACCESS_DESCRIPTION_value(aia, i) + backend.openssl_assert(ad.method != backend._ffi.NULL) + oid = x509.ObjectIdentifier(_obj2txt(backend, ad.method)) + backend.openssl_assert(ad.location != backend._ffi.NULL) + gn = _decode_general_name(backend, ad.location) + access_descriptions.append(x509.AccessDescription(oid, gn)) + + return x509.AuthorityInformationAccess(access_descriptions) + + +def _decode_key_usage(backend, bit_string): + bit_string = backend._ffi.cast("ASN1_BIT_STRING *", bit_string) + bit_string = backend._ffi.gc(bit_string, backend._lib.ASN1_BIT_STRING_free) + get_bit = backend._lib.ASN1_BIT_STRING_get_bit + digital_signature = get_bit(bit_string, 0) == 1 + content_commitment = get_bit(bit_string, 1) == 1 + key_encipherment = get_bit(bit_string, 2) == 1 + data_encipherment = get_bit(bit_string, 3) == 1 + key_agreement = get_bit(bit_string, 4) == 1 + key_cert_sign = get_bit(bit_string, 5) == 1 + crl_sign = get_bit(bit_string, 6) == 1 + encipher_only = get_bit(bit_string, 7) == 1 + decipher_only = get_bit(bit_string, 8) == 1 + return x509.KeyUsage( + digital_signature, + content_commitment, + key_encipherment, + data_encipherment, + key_agreement, + key_cert_sign, + crl_sign, + encipher_only, + decipher_only + ) + + +def _decode_general_names_extension(backend, gns): + gns = backend._ffi.cast("GENERAL_NAMES *", gns) + gns = backend._ffi.gc(gns, backend._lib.GENERAL_NAMES_free) + general_names = _decode_general_names(backend, gns) + return general_names + + +def _decode_subject_alt_name(backend, ext): + return x509.SubjectAlternativeName( + _decode_general_names_extension(backend, ext) + ) + + +def _decode_issuer_alt_name(backend, ext): + return x509.IssuerAlternativeName( + _decode_general_names_extension(backend, ext) + ) + + +def _decode_name_constraints(backend, nc): + nc = backend._ffi.cast("NAME_CONSTRAINTS *", nc) + nc = backend._ffi.gc(nc, backend._lib.NAME_CONSTRAINTS_free) + permitted = _decode_general_subtrees(backend, nc.permittedSubtrees) + excluded = _decode_general_subtrees(backend, nc.excludedSubtrees) + return x509.NameConstraints( + permitted_subtrees=permitted, excluded_subtrees=excluded + ) + + +def _decode_general_subtrees(backend, stack_subtrees): + if stack_subtrees == backend._ffi.NULL: + return None + + num = backend._lib.sk_GENERAL_SUBTREE_num(stack_subtrees) + subtrees = [] + + for i in range(num): + obj = backend._lib.sk_GENERAL_SUBTREE_value(stack_subtrees, i) + backend.openssl_assert(obj != backend._ffi.NULL) + name = _decode_general_name(backend, obj.base) + subtrees.append(name) + + return subtrees + + +def _decode_issuing_dist_point(backend, idp): + idp = backend._ffi.cast("ISSUING_DIST_POINT *", idp) + idp = backend._ffi.gc(idp, backend._lib.ISSUING_DIST_POINT_free) + if idp.distpoint != backend._ffi.NULL: + full_name, relative_name = _decode_distpoint(backend, idp.distpoint) + else: + full_name = None + relative_name = None + + only_user = idp.onlyuser == 255 + only_ca = idp.onlyCA == 255 + indirect_crl = idp.indirectCRL == 255 + only_attr = idp.onlyattr == 255 + if idp.onlysomereasons != backend._ffi.NULL: + only_some_reasons = _decode_reasons(backend, idp.onlysomereasons) + else: + only_some_reasons = None + + return x509.IssuingDistributionPoint( + full_name, relative_name, only_user, only_ca, only_some_reasons, + indirect_crl, only_attr + ) + + +def _decode_policy_constraints(backend, pc): + pc = backend._ffi.cast("POLICY_CONSTRAINTS *", pc) + pc = backend._ffi.gc(pc, backend._lib.POLICY_CONSTRAINTS_free) + + require_explicit_policy = _asn1_integer_to_int_or_none( + backend, pc.requireExplicitPolicy + ) + inhibit_policy_mapping = _asn1_integer_to_int_or_none( + backend, pc.inhibitPolicyMapping + ) + + return x509.PolicyConstraints( + require_explicit_policy, inhibit_policy_mapping + ) + + +def _decode_extended_key_usage(backend, sk): + sk = backend._ffi.cast("Cryptography_STACK_OF_ASN1_OBJECT *", sk) + sk = backend._ffi.gc(sk, backend._lib.sk_ASN1_OBJECT_free) + num = backend._lib.sk_ASN1_OBJECT_num(sk) + ekus = [] + + for i in range(num): + obj = backend._lib.sk_ASN1_OBJECT_value(sk, i) + backend.openssl_assert(obj != backend._ffi.NULL) + oid = x509.ObjectIdentifier(_obj2txt(backend, obj)) + ekus.append(oid) + + return x509.ExtendedKeyUsage(ekus) + + +_DISTPOINT_TYPE_FULLNAME = 0 +_DISTPOINT_TYPE_RELATIVENAME = 1 + + +def _decode_dist_points(backend, cdps): + cdps = backend._ffi.cast("Cryptography_STACK_OF_DIST_POINT *", cdps) + cdps = backend._ffi.gc(cdps, backend._lib.CRL_DIST_POINTS_free) + + num = backend._lib.sk_DIST_POINT_num(cdps) + dist_points = [] + for i in range(num): + full_name = None + relative_name = None + crl_issuer = None + reasons = None + cdp = backend._lib.sk_DIST_POINT_value(cdps, i) + if cdp.reasons != backend._ffi.NULL: + reasons = _decode_reasons(backend, cdp.reasons) + + if cdp.CRLissuer != backend._ffi.NULL: + crl_issuer = _decode_general_names(backend, cdp.CRLissuer) + + # Certificates may have a crl_issuer/reasons and no distribution + # point so make sure it's not null. + if cdp.distpoint != backend._ffi.NULL: + full_name, relative_name = _decode_distpoint( + backend, cdp.distpoint + ) + + dist_points.append( + x509.DistributionPoint( + full_name, relative_name, reasons, crl_issuer + ) + ) + + return dist_points + + +# 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: x509.ReasonFlags.key_compromise, + 2: x509.ReasonFlags.ca_compromise, + 3: x509.ReasonFlags.affiliation_changed, + 4: x509.ReasonFlags.superseded, + 5: x509.ReasonFlags.cessation_of_operation, + 6: x509.ReasonFlags.certificate_hold, + 7: x509.ReasonFlags.privilege_withdrawn, + 8: x509.ReasonFlags.aa_compromise, +} + + +def _decode_reasons(backend, reasons): + # We will check each bit from RFC 5280 + enum_reasons = [] + for bit_position, reason in six.iteritems(_REASON_BIT_MAPPING): + if backend._lib.ASN1_BIT_STRING_get_bit(reasons, bit_position): + enum_reasons.append(reason) + + return frozenset(enum_reasons) + + +def _decode_distpoint(backend, distpoint): + if distpoint.type == _DISTPOINT_TYPE_FULLNAME: + full_name = _decode_general_names(backend, distpoint.name.fullname) + return full_name, None + + # OpenSSL code doesn't test for a specific type for + # relativename, everything that isn't fullname is considered + # relativename. Per RFC 5280: + # + # DistributionPointName ::= CHOICE { + # fullName [0] GeneralNames, + # nameRelativeToCRLIssuer [1] RelativeDistinguishedName } + rns = distpoint.name.relativename + rnum = backend._lib.sk_X509_NAME_ENTRY_num(rns) + attributes = set() + for i in range(rnum): + rn = backend._lib.sk_X509_NAME_ENTRY_value( + rns, i + ) + backend.openssl_assert(rn != backend._ffi.NULL) + attributes.add( + _decode_x509_name_entry(backend, rn) + ) + + relative_name = x509.RelativeDistinguishedName(attributes) + + return None, relative_name + + +def _decode_crl_distribution_points(backend, cdps): + dist_points = _decode_dist_points(backend, cdps) + return x509.CRLDistributionPoints(dist_points) + + +def _decode_freshest_crl(backend, cdps): + dist_points = _decode_dist_points(backend, cdps) + return x509.FreshestCRL(dist_points) + + +def _decode_inhibit_any_policy(backend, asn1_int): + asn1_int = backend._ffi.cast("ASN1_INTEGER *", asn1_int) + asn1_int = backend._ffi.gc(asn1_int, backend._lib.ASN1_INTEGER_free) + skip_certs = _asn1_integer_to_int(backend, asn1_int) + return x509.InhibitAnyPolicy(skip_certs) + + +def _decode_precert_signed_certificate_timestamps(backend, asn1_scts): + from cryptography.hazmat.backends.openssl.x509 import ( + _SignedCertificateTimestamp + ) + asn1_scts = backend._ffi.cast("Cryptography_STACK_OF_SCT *", asn1_scts) + asn1_scts = backend._ffi.gc(asn1_scts, backend._lib.SCT_LIST_free) + + scts = [] + for i in range(backend._lib.sk_SCT_num(asn1_scts)): + sct = backend._lib.sk_SCT_value(asn1_scts, i) + + scts.append(_SignedCertificateTimestamp(backend, asn1_scts, sct)) + return x509.PrecertificateSignedCertificateTimestamps(scts) + + +# 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_CODE_TO_ENUM = { + 0: x509.ReasonFlags.unspecified, + 1: x509.ReasonFlags.key_compromise, + 2: x509.ReasonFlags.ca_compromise, + 3: x509.ReasonFlags.affiliation_changed, + 4: x509.ReasonFlags.superseded, + 5: x509.ReasonFlags.cessation_of_operation, + 6: x509.ReasonFlags.certificate_hold, + 8: x509.ReasonFlags.remove_from_crl, + 9: x509.ReasonFlags.privilege_withdrawn, + 10: x509.ReasonFlags.aa_compromise, +} + + +_CRL_ENTRY_REASON_ENUM_TO_CODE = { + x509.ReasonFlags.unspecified: 0, + x509.ReasonFlags.key_compromise: 1, + x509.ReasonFlags.ca_compromise: 2, + x509.ReasonFlags.affiliation_changed: 3, + x509.ReasonFlags.superseded: 4, + x509.ReasonFlags.cessation_of_operation: 5, + x509.ReasonFlags.certificate_hold: 6, + x509.ReasonFlags.remove_from_crl: 8, + x509.ReasonFlags.privilege_withdrawn: 9, + x509.ReasonFlags.aa_compromise: 10 +} + + +def _decode_crl_reason(backend, enum): + enum = backend._ffi.cast("ASN1_ENUMERATED *", enum) + enum = backend._ffi.gc(enum, backend._lib.ASN1_ENUMERATED_free) + code = backend._lib.ASN1_ENUMERATED_get(enum) + + try: + return x509.CRLReason(_CRL_ENTRY_REASON_CODE_TO_ENUM[code]) + except KeyError: + raise ValueError("Unsupported reason code: {}".format(code)) + + +def _decode_invalidity_date(backend, inv_date): + generalized_time = backend._ffi.cast( + "ASN1_GENERALIZEDTIME *", inv_date + ) + generalized_time = backend._ffi.gc( + generalized_time, backend._lib.ASN1_GENERALIZEDTIME_free + ) + return x509.InvalidityDate( + _parse_asn1_generalized_time(backend, generalized_time) + ) + + +def _decode_cert_issuer(backend, gns): + gns = backend._ffi.cast("GENERAL_NAMES *", gns) + gns = backend._ffi.gc(gns, backend._lib.GENERAL_NAMES_free) + general_names = _decode_general_names(backend, gns) + return x509.CertificateIssuer(general_names) + + +def _asn1_to_der(backend, asn1_type): + buf = backend._ffi.new("unsigned char **") + res = backend._lib.i2d_ASN1_TYPE(asn1_type, buf) + backend.openssl_assert(res >= 0) + backend.openssl_assert(buf[0] != backend._ffi.NULL) + buf = backend._ffi.gc( + buf, lambda buffer: backend._lib.OPENSSL_free(buffer[0]) + ) + return backend._ffi.buffer(buf[0], res)[:] + + +def _asn1_integer_to_int(backend, asn1_int): + bn = backend._lib.ASN1_INTEGER_to_BN(asn1_int, backend._ffi.NULL) + backend.openssl_assert(bn != backend._ffi.NULL) + bn = backend._ffi.gc(bn, backend._lib.BN_free) + return backend._bn_to_int(bn) + + +def _asn1_integer_to_int_or_none(backend, asn1_int): + if asn1_int == backend._ffi.NULL: + return None + else: + return _asn1_integer_to_int(backend, asn1_int) + + +def _asn1_string_to_bytes(backend, asn1_string): + return backend._ffi.buffer(asn1_string.data, asn1_string.length)[:] + + +def _asn1_string_to_ascii(backend, asn1_string): + return _asn1_string_to_bytes(backend, asn1_string).decode("ascii") + + +def _asn1_string_to_utf8(backend, asn1_string): + buf = backend._ffi.new("unsigned char **") + res = backend._lib.ASN1_STRING_to_UTF8(buf, asn1_string) + if res == -1: + raise ValueError( + "Unsupported ASN1 string type. Type: {}".format(asn1_string.type) + ) + + backend.openssl_assert(buf[0] != backend._ffi.NULL) + buf = backend._ffi.gc( + buf, lambda buffer: backend._lib.OPENSSL_free(buffer[0]) + ) + return backend._ffi.buffer(buf[0], res)[:].decode('utf8') + + +def _parse_asn1_time(backend, asn1_time): + backend.openssl_assert(asn1_time != backend._ffi.NULL) + generalized_time = backend._lib.ASN1_TIME_to_generalizedtime( + asn1_time, backend._ffi.NULL + ) + if generalized_time == backend._ffi.NULL: + raise ValueError( + "Couldn't parse ASN.1 time as generalizedtime {!r}".format( + _asn1_string_to_bytes(backend, asn1_time) + ) + ) + + generalized_time = backend._ffi.gc( + generalized_time, backend._lib.ASN1_GENERALIZEDTIME_free + ) + return _parse_asn1_generalized_time(backend, generalized_time) + + +def _parse_asn1_generalized_time(backend, generalized_time): + time = _asn1_string_to_ascii( + backend, backend._ffi.cast("ASN1_STRING *", generalized_time) + ) + return datetime.datetime.strptime(time, "%Y%m%d%H%M%SZ") + + +def _decode_nonce(backend, nonce): + nonce = backend._ffi.cast("ASN1_OCTET_STRING *", nonce) + nonce = backend._ffi.gc(nonce, backend._lib.ASN1_OCTET_STRING_free) + return x509.OCSPNonce(_asn1_string_to_bytes(backend, nonce)) + + +_EXTENSION_HANDLERS_NO_SCT = { + ExtensionOID.BASIC_CONSTRAINTS: _decode_basic_constraints, + ExtensionOID.SUBJECT_KEY_IDENTIFIER: _decode_subject_key_identifier, + ExtensionOID.KEY_USAGE: _decode_key_usage, + ExtensionOID.SUBJECT_ALTERNATIVE_NAME: _decode_subject_alt_name, + ExtensionOID.EXTENDED_KEY_USAGE: _decode_extended_key_usage, + ExtensionOID.AUTHORITY_KEY_IDENTIFIER: _decode_authority_key_identifier, + ExtensionOID.AUTHORITY_INFORMATION_ACCESS: ( + _decode_authority_information_access + ), + ExtensionOID.CERTIFICATE_POLICIES: _decode_certificate_policies, + ExtensionOID.CRL_DISTRIBUTION_POINTS: _decode_crl_distribution_points, + ExtensionOID.FRESHEST_CRL: _decode_freshest_crl, + ExtensionOID.OCSP_NO_CHECK: _decode_ocsp_no_check, + ExtensionOID.INHIBIT_ANY_POLICY: _decode_inhibit_any_policy, + ExtensionOID.ISSUER_ALTERNATIVE_NAME: _decode_issuer_alt_name, + ExtensionOID.NAME_CONSTRAINTS: _decode_name_constraints, + ExtensionOID.POLICY_CONSTRAINTS: _decode_policy_constraints, +} +_EXTENSION_HANDLERS = _EXTENSION_HANDLERS_NO_SCT.copy() +_EXTENSION_HANDLERS[ + ExtensionOID.PRECERT_SIGNED_CERTIFICATE_TIMESTAMPS +] = _decode_precert_signed_certificate_timestamps + + +_REVOKED_EXTENSION_HANDLERS = { + CRLEntryExtensionOID.CRL_REASON: _decode_crl_reason, + CRLEntryExtensionOID.INVALIDITY_DATE: _decode_invalidity_date, + CRLEntryExtensionOID.CERTIFICATE_ISSUER: _decode_cert_issuer, +} + +_CRL_EXTENSION_HANDLERS = { + ExtensionOID.CRL_NUMBER: _decode_crl_number, + ExtensionOID.DELTA_CRL_INDICATOR: _decode_delta_crl_indicator, + ExtensionOID.AUTHORITY_KEY_IDENTIFIER: _decode_authority_key_identifier, + ExtensionOID.ISSUER_ALTERNATIVE_NAME: _decode_issuer_alt_name, + ExtensionOID.AUTHORITY_INFORMATION_ACCESS: ( + _decode_authority_information_access + ), + ExtensionOID.ISSUING_DISTRIBUTION_POINT: _decode_issuing_dist_point, + ExtensionOID.FRESHEST_CRL: _decode_freshest_crl, +} + +_OCSP_REQ_EXTENSION_HANDLERS = { + OCSPExtensionOID.NONCE: _decode_nonce, +} + +_OCSP_BASICRESP_EXTENSION_HANDLERS = { + OCSPExtensionOID.NONCE: _decode_nonce, +} + +_CERTIFICATE_EXTENSION_PARSER_NO_SCT = _X509ExtensionParser( + ext_count=lambda backend, x: backend._lib.X509_get_ext_count(x), + get_ext=lambda backend, x, i: backend._lib.X509_get_ext(x, i), + handlers=_EXTENSION_HANDLERS_NO_SCT +) + +_CERTIFICATE_EXTENSION_PARSER = _X509ExtensionParser( + ext_count=lambda backend, x: backend._lib.X509_get_ext_count(x), + get_ext=lambda backend, x, i: backend._lib.X509_get_ext(x, i), + handlers=_EXTENSION_HANDLERS +) + +_CSR_EXTENSION_PARSER = _X509ExtensionParser( + ext_count=lambda backend, x: backend._lib.sk_X509_EXTENSION_num(x), + get_ext=lambda backend, x, i: backend._lib.sk_X509_EXTENSION_value(x, i), + handlers=_EXTENSION_HANDLERS +) + +_REVOKED_CERTIFICATE_EXTENSION_PARSER = _X509ExtensionParser( + ext_count=lambda backend, x: backend._lib.X509_REVOKED_get_ext_count(x), + get_ext=lambda backend, x, i: backend._lib.X509_REVOKED_get_ext(x, i), + handlers=_REVOKED_EXTENSION_HANDLERS, +) + +_CRL_EXTENSION_PARSER = _X509ExtensionParser( + ext_count=lambda backend, x: backend._lib.X509_CRL_get_ext_count(x), + get_ext=lambda backend, x, i: backend._lib.X509_CRL_get_ext(x, i), + handlers=_CRL_EXTENSION_HANDLERS, +) + +_OCSP_REQ_EXT_PARSER = _X509ExtensionParser( + ext_count=lambda backend, x: backend._lib.OCSP_REQUEST_get_ext_count(x), + get_ext=lambda backend, x, i: backend._lib.OCSP_REQUEST_get_ext(x, i), + handlers=_OCSP_REQ_EXTENSION_HANDLERS, +) + +_OCSP_BASICRESP_EXT_PARSER = _X509ExtensionParser( + ext_count=lambda backend, x: backend._lib.OCSP_BASICRESP_get_ext_count(x), + get_ext=lambda backend, x, i: backend._lib.OCSP_BASICRESP_get_ext(x, i), + handlers=_OCSP_BASICRESP_EXTENSION_HANDLERS, +) diff --git a/venv/lib/python3.7/site-packages/cryptography/hazmat/backends/openssl/dsa.py b/venv/lib/python3.7/site-packages/cryptography/hazmat/backends/openssl/dsa.py new file mode 100644 index 0000000..de61f08 --- /dev/null +++ b/venv/lib/python3.7/site-packages/cryptography/hazmat/backends/openssl/dsa.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 absolute_import, division, print_function + +from cryptography import utils +from cryptography.exceptions import InvalidSignature +from cryptography.hazmat.backends.openssl.utils import ( + _calculate_digest_and_algorithm, _check_not_prehashed, + _warn_sign_verify_deprecated +) +from cryptography.hazmat.primitives import hashes, serialization +from cryptography.hazmat.primitives.asymmetric import ( + AsymmetricSignatureContext, AsymmetricVerificationContext, dsa +) + + +def _dsa_sig_sign(backend, private_key, data): + sig_buf_len = backend._lib.DSA_size(private_key._dsa_cdata) + sig_buf = backend._ffi.new("unsigned char[]", sig_buf_len) + buflen = backend._ffi.new("unsigned int *") + + # The first parameter passed to DSA_sign is unused by OpenSSL but + # must be an integer. + res = backend._lib.DSA_sign( + 0, data, len(data), sig_buf, buflen, private_key._dsa_cdata + ) + backend.openssl_assert(res == 1) + backend.openssl_assert(buflen[0]) + + return backend._ffi.buffer(sig_buf)[:buflen[0]] + + +def _dsa_sig_verify(backend, public_key, signature, data): + # The first parameter passed to DSA_verify is unused by OpenSSL but + # must be an integer. + res = backend._lib.DSA_verify( + 0, data, len(data), signature, len(signature), public_key._dsa_cdata + ) + + if res != 1: + backend._consume_errors() + raise InvalidSignature + + +@utils.register_interface(AsymmetricVerificationContext) +class _DSAVerificationContext(object): + def __init__(self, backend, public_key, signature, algorithm): + self._backend = backend + self._public_key = public_key + self._signature = signature + self._algorithm = algorithm + + self._hash_ctx = hashes.Hash(self._algorithm, self._backend) + + def update(self, data): + self._hash_ctx.update(data) + + def verify(self): + data_to_verify = self._hash_ctx.finalize() + + _dsa_sig_verify( + self._backend, self._public_key, self._signature, data_to_verify + ) + + +@utils.register_interface(AsymmetricSignatureContext) +class _DSASignatureContext(object): + def __init__(self, backend, private_key, algorithm): + self._backend = backend + self._private_key = private_key + self._algorithm = algorithm + self._hash_ctx = hashes.Hash(self._algorithm, self._backend) + + def update(self, data): + self._hash_ctx.update(data) + + def finalize(self): + data_to_sign = self._hash_ctx.finalize() + return _dsa_sig_sign(self._backend, self._private_key, data_to_sign) + + +@utils.register_interface(dsa.DSAParametersWithNumbers) +class _DSAParameters(object): + def __init__(self, backend, dsa_cdata): + self._backend = backend + self._dsa_cdata = dsa_cdata + + def parameter_numbers(self): + p = self._backend._ffi.new("BIGNUM **") + q = self._backend._ffi.new("BIGNUM **") + g = self._backend._ffi.new("BIGNUM **") + self._backend._lib.DSA_get0_pqg(self._dsa_cdata, p, q, g) + self._backend.openssl_assert(p[0] != self._backend._ffi.NULL) + self._backend.openssl_assert(q[0] != self._backend._ffi.NULL) + self._backend.openssl_assert(g[0] != self._backend._ffi.NULL) + return dsa.DSAParameterNumbers( + p=self._backend._bn_to_int(p[0]), + q=self._backend._bn_to_int(q[0]), + g=self._backend._bn_to_int(g[0]) + ) + + def generate_private_key(self): + return self._backend.generate_dsa_private_key(self) + + +@utils.register_interface(dsa.DSAPrivateKeyWithSerialization) +class _DSAPrivateKey(object): + def __init__(self, backend, dsa_cdata, evp_pkey): + self._backend = backend + self._dsa_cdata = dsa_cdata + self._evp_pkey = evp_pkey + + p = self._backend._ffi.new("BIGNUM **") + self._backend._lib.DSA_get0_pqg( + dsa_cdata, p, self._backend._ffi.NULL, self._backend._ffi.NULL + ) + self._backend.openssl_assert(p[0] != backend._ffi.NULL) + self._key_size = self._backend._lib.BN_num_bits(p[0]) + + key_size = utils.read_only_property("_key_size") + + def signer(self, signature_algorithm): + _warn_sign_verify_deprecated() + _check_not_prehashed(signature_algorithm) + return _DSASignatureContext(self._backend, self, signature_algorithm) + + def private_numbers(self): + p = self._backend._ffi.new("BIGNUM **") + q = self._backend._ffi.new("BIGNUM **") + g = self._backend._ffi.new("BIGNUM **") + pub_key = self._backend._ffi.new("BIGNUM **") + priv_key = self._backend._ffi.new("BIGNUM **") + self._backend._lib.DSA_get0_pqg(self._dsa_cdata, p, q, g) + self._backend.openssl_assert(p[0] != self._backend._ffi.NULL) + self._backend.openssl_assert(q[0] != self._backend._ffi.NULL) + self._backend.openssl_assert(g[0] != self._backend._ffi.NULL) + self._backend._lib.DSA_get0_key(self._dsa_cdata, pub_key, priv_key) + self._backend.openssl_assert(pub_key[0] != self._backend._ffi.NULL) + self._backend.openssl_assert(priv_key[0] != self._backend._ffi.NULL) + return dsa.DSAPrivateNumbers( + public_numbers=dsa.DSAPublicNumbers( + parameter_numbers=dsa.DSAParameterNumbers( + p=self._backend._bn_to_int(p[0]), + q=self._backend._bn_to_int(q[0]), + g=self._backend._bn_to_int(g[0]) + ), + y=self._backend._bn_to_int(pub_key[0]) + ), + x=self._backend._bn_to_int(priv_key[0]) + ) + + def public_key(self): + dsa_cdata = self._backend._lib.DSAparams_dup(self._dsa_cdata) + self._backend.openssl_assert(dsa_cdata != self._backend._ffi.NULL) + dsa_cdata = self._backend._ffi.gc( + dsa_cdata, self._backend._lib.DSA_free + ) + pub_key = self._backend._ffi.new("BIGNUM **") + self._backend._lib.DSA_get0_key( + self._dsa_cdata, pub_key, self._backend._ffi.NULL + ) + self._backend.openssl_assert(pub_key[0] != self._backend._ffi.NULL) + pub_key_dup = self._backend._lib.BN_dup(pub_key[0]) + res = self._backend._lib.DSA_set0_key( + dsa_cdata, pub_key_dup, self._backend._ffi.NULL + ) + self._backend.openssl_assert(res == 1) + evp_pkey = self._backend._dsa_cdata_to_evp_pkey(dsa_cdata) + return _DSAPublicKey(self._backend, dsa_cdata, evp_pkey) + + def parameters(self): + dsa_cdata = self._backend._lib.DSAparams_dup(self._dsa_cdata) + self._backend.openssl_assert(dsa_cdata != self._backend._ffi.NULL) + dsa_cdata = self._backend._ffi.gc( + dsa_cdata, self._backend._lib.DSA_free + ) + return _DSAParameters(self._backend, dsa_cdata) + + def private_bytes(self, encoding, format, encryption_algorithm): + return self._backend._private_key_bytes( + encoding, + format, + encryption_algorithm, + self._evp_pkey, + self._dsa_cdata + ) + + def sign(self, data, algorithm): + data, algorithm = _calculate_digest_and_algorithm( + self._backend, data, algorithm + ) + return _dsa_sig_sign(self._backend, self, data) + + +@utils.register_interface(dsa.DSAPublicKeyWithSerialization) +class _DSAPublicKey(object): + def __init__(self, backend, dsa_cdata, evp_pkey): + self._backend = backend + self._dsa_cdata = dsa_cdata + self._evp_pkey = evp_pkey + p = self._backend._ffi.new("BIGNUM **") + self._backend._lib.DSA_get0_pqg( + dsa_cdata, p, self._backend._ffi.NULL, self._backend._ffi.NULL + ) + self._backend.openssl_assert(p[0] != backend._ffi.NULL) + self._key_size = self._backend._lib.BN_num_bits(p[0]) + + key_size = utils.read_only_property("_key_size") + + def verifier(self, signature, signature_algorithm): + _warn_sign_verify_deprecated() + utils._check_bytes("signature", signature) + + _check_not_prehashed(signature_algorithm) + return _DSAVerificationContext( + self._backend, self, signature, signature_algorithm + ) + + def public_numbers(self): + p = self._backend._ffi.new("BIGNUM **") + q = self._backend._ffi.new("BIGNUM **") + g = self._backend._ffi.new("BIGNUM **") + pub_key = self._backend._ffi.new("BIGNUM **") + self._backend._lib.DSA_get0_pqg(self._dsa_cdata, p, q, g) + self._backend.openssl_assert(p[0] != self._backend._ffi.NULL) + self._backend.openssl_assert(q[0] != self._backend._ffi.NULL) + self._backend.openssl_assert(g[0] != self._backend._ffi.NULL) + self._backend._lib.DSA_get0_key( + self._dsa_cdata, pub_key, self._backend._ffi.NULL + ) + self._backend.openssl_assert(pub_key[0] != self._backend._ffi.NULL) + return dsa.DSAPublicNumbers( + parameter_numbers=dsa.DSAParameterNumbers( + p=self._backend._bn_to_int(p[0]), + q=self._backend._bn_to_int(q[0]), + g=self._backend._bn_to_int(g[0]) + ), + y=self._backend._bn_to_int(pub_key[0]) + ) + + def parameters(self): + dsa_cdata = self._backend._lib.DSAparams_dup(self._dsa_cdata) + dsa_cdata = self._backend._ffi.gc( + dsa_cdata, self._backend._lib.DSA_free + ) + return _DSAParameters(self._backend, dsa_cdata) + + def public_bytes(self, encoding, format): + if format is serialization.PublicFormat.PKCS1: + raise ValueError( + "DSA public keys do not support PKCS1 serialization" + ) + + return self._backend._public_key_bytes( + encoding, + format, + self, + self._evp_pkey, + None + ) + + def verify(self, signature, data, algorithm): + data, algorithm = _calculate_digest_and_algorithm( + self._backend, data, algorithm + ) + return _dsa_sig_verify(self._backend, self, signature, data) diff --git a/venv/lib/python3.7/site-packages/cryptography/hazmat/backends/openssl/x25519.py b/venv/lib/python3.7/site-packages/cryptography/hazmat/backends/openssl/x25519.py new file mode 100644 index 0000000..9aab25b --- /dev/null +++ b/venv/lib/python3.7/site-packages/cryptography/hazmat/backends/openssl/x25519.py @@ -0,0 +1,149 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import warnings + +from cryptography import utils +from cryptography.hazmat.backends.openssl.utils import _evp_pkey_derive +from cryptography.hazmat.primitives import serialization +from cryptography.hazmat.primitives.asymmetric.x25519 import ( + X25519PrivateKey, X25519PublicKey +) + + +_X25519_KEY_SIZE = 32 + + +@utils.register_interface(X25519PublicKey) +class _X25519PublicKey(object): + def __init__(self, backend, evp_pkey): + self._backend = backend + self._evp_pkey = evp_pkey + + def public_bytes(self, encoding=None, format=None): + if encoding is None or format is None: + if encoding is not None or format is not None: + raise ValueError("Both encoding and format are required") + else: + warnings.warn( + "public_bytes now requires encoding and format arguments. " + "Support for calling without arguments will be removed in " + "cryptography 2.7", + utils.DeprecatedIn25, + ) + encoding = serialization.Encoding.Raw + format = serialization.PublicFormat.Raw + if ( + encoding is serialization.Encoding.Raw or + format is serialization.PublicFormat.Raw + ): + if ( + encoding is not serialization.Encoding.Raw or + format is not serialization.PublicFormat.Raw + ): + raise ValueError( + "When using Raw both encoding and format must be Raw" + ) + + return self._raw_public_bytes() + + if ( + encoding in serialization._PEM_DER and + format is not serialization.PublicFormat.SubjectPublicKeyInfo + ): + raise ValueError( + "format must be SubjectPublicKeyInfo when encoding is PEM or " + "DER" + ) + + return self._backend._public_key_bytes( + encoding, format, self, self._evp_pkey, None + ) + + def _raw_public_bytes(self): + ucharpp = self._backend._ffi.new("unsigned char **") + res = self._backend._lib.EVP_PKEY_get1_tls_encodedpoint( + self._evp_pkey, ucharpp + ) + self._backend.openssl_assert(res == 32) + self._backend.openssl_assert(ucharpp[0] != self._backend._ffi.NULL) + data = self._backend._ffi.gc( + ucharpp[0], self._backend._lib.OPENSSL_free + ) + return self._backend._ffi.buffer(data, res)[:] + + +@utils.register_interface(X25519PrivateKey) +class _X25519PrivateKey(object): + def __init__(self, backend, evp_pkey): + self._backend = backend + self._evp_pkey = evp_pkey + + def public_key(self): + bio = self._backend._create_mem_bio_gc() + res = self._backend._lib.i2d_PUBKEY_bio(bio, self._evp_pkey) + self._backend.openssl_assert(res == 1) + evp_pkey = self._backend._lib.d2i_PUBKEY_bio( + bio, self._backend._ffi.NULL + ) + self._backend.openssl_assert(evp_pkey != self._backend._ffi.NULL) + evp_pkey = self._backend._ffi.gc( + evp_pkey, self._backend._lib.EVP_PKEY_free + ) + return _X25519PublicKey(self._backend, evp_pkey) + + def exchange(self, peer_public_key): + if not isinstance(peer_public_key, X25519PublicKey): + raise TypeError("peer_public_key must be X25519PublicKey.") + + return _evp_pkey_derive( + self._backend, self._evp_pkey, peer_public_key + ) + + def private_bytes(self, encoding, format, encryption_algorithm): + if ( + encoding is serialization.Encoding.Raw or + format is serialization.PublicFormat.Raw + ): + if ( + format is not serialization.PrivateFormat.Raw or + encoding is not serialization.Encoding.Raw or not + isinstance(encryption_algorithm, serialization.NoEncryption) + ): + raise ValueError( + "When using Raw both encoding and format must be Raw " + "and encryption_algorithm must be NoEncryption()" + ) + + return self._raw_private_bytes() + + if ( + encoding in serialization._PEM_DER and + format is not serialization.PrivateFormat.PKCS8 + ): + raise ValueError( + "format must be PKCS8 when encoding is PEM or DER" + ) + + return self._backend._private_key_bytes( + encoding, format, encryption_algorithm, self._evp_pkey, None + ) + + def _raw_private_bytes(self): + # When we drop support for CRYPTOGRAPHY_OPENSSL_LESS_THAN_111 we can + # switch this to EVP_PKEY_new_raw_private_key + # The trick we use here is serializing to a PKCS8 key and just + # using the last 32 bytes, which is the key itself. + bio = self._backend._create_mem_bio_gc() + res = self._backend._lib.i2d_PKCS8PrivateKey_bio( + bio, self._evp_pkey, + self._backend._ffi.NULL, self._backend._ffi.NULL, + 0, self._backend._ffi.NULL, self._backend._ffi.NULL + ) + self._backend.openssl_assert(res == 1) + pkcs8 = self._backend._read_mem_bio(bio) + self._backend.openssl_assert(len(pkcs8) == 48) + return pkcs8[-_X25519_KEY_SIZE:] diff --git a/venv/lib/python3.7/site-packages/cryptography/hazmat/bindings/_constant_time.abi3.so b/venv/lib/python3.7/site-packages/cryptography/hazmat/bindings/_constant_time.abi3.so new file mode 100755 index 0000000000000000000000000000000000000000..7c5e80c6128f46f25a5705f4502003d9db182f13 GIT binary patch literal 27036 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 H+D7zmOmF!* literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/cryptography/hazmat/bindings/openssl/binding.py b/venv/lib/python3.7/site-packages/cryptography/hazmat/bindings/openssl/binding.py new file mode 100644 index 0000000..9740516 --- /dev/null +++ b/venv/lib/python3.7/site-packages/cryptography/hazmat/bindings/openssl/binding.py @@ -0,0 +1,197 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import collections +import threading +import types +import warnings + +import cryptography +from cryptography import utils +from cryptography.exceptions import InternalError +from cryptography.hazmat.bindings._openssl import ffi, lib +from cryptography.hazmat.bindings.openssl._conditional import CONDITIONAL_NAMES + +_OpenSSLErrorWithText = collections.namedtuple( + "_OpenSSLErrorWithText", ["code", "lib", "func", "reason", "reason_text"] +) + + +class _OpenSSLError(object): + def __init__(self, code, lib, func, reason): + self._code = code + self._lib = lib + self._func = func + self._reason = reason + + def _lib_reason_match(self, lib, reason): + return lib == self.lib and reason == self.reason + + code = utils.read_only_property("_code") + lib = utils.read_only_property("_lib") + func = utils.read_only_property("_func") + reason = utils.read_only_property("_reason") + + +def _consume_errors(lib): + errors = [] + while True: + code = lib.ERR_get_error() + if code == 0: + break + + err_lib = lib.ERR_GET_LIB(code) + err_func = lib.ERR_GET_FUNC(code) + err_reason = lib.ERR_GET_REASON(code) + + errors.append(_OpenSSLError(code, err_lib, err_func, err_reason)) + + return errors + + +def _openssl_assert(lib, ok): + if not ok: + errors = _consume_errors(lib) + errors_with_text = [] + for err in errors: + buf = ffi.new("char[]", 256) + lib.ERR_error_string_n(err.code, buf, len(buf)) + err_text_reason = ffi.string(buf) + + errors_with_text.append( + _OpenSSLErrorWithText( + err.code, err.lib, err.func, err.reason, err_text_reason + ) + ) + + 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 " + "this. ({0!r})".format(errors_with_text), + errors_with_text + ) + + +def build_conditional_library(lib, conditional_names): + conditional_lib = types.ModuleType("lib") + conditional_lib._original_lib = lib + 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(object): + """ + OpenSSL API wrapper. + """ + lib = None + ffi = ffi + _lib_loaded = False + _init_lock = threading.Lock() + _lock_init_lock = threading.Lock() + + def __init__(self): + self._ensure_ffi_initialized() + + @classmethod + def _register_osrandom_engine(cls): + # Clear any errors extant in the queue before we start. In many + # scenarios other things may be interacting with OpenSSL in the same + # process space and it has proven untenable to assume that they will + # reliably clear the error queue. Once we clear it here we will + # error on any subsequent unexpected item in the stack. + cls.lib.ERR_clear_error() + if cls.lib.Cryptography_HAS_ENGINE: + result = cls.lib.Cryptography_add_osrandom_engine() + _openssl_assert(cls.lib, result in (1, 2)) + + @classmethod + def _ensure_ffi_initialized(cls): + with cls._init_lock: + if not cls._lib_loaded: + cls.lib = build_conditional_library(lib, CONDITIONAL_NAMES) + cls._lib_loaded = True + # initialize the SSL library + cls.lib.SSL_library_init() + # adds all ciphers/digests for EVP + cls.lib.OpenSSL_add_all_algorithms() + # loads error strings for libcrypto and libssl functions + cls.lib.SSL_load_error_strings() + cls._register_osrandom_engine() + + @classmethod + def init_static_locks(cls): + with cls._lock_init_lock: + cls._ensure_ffi_initialized() + # Use Python's implementation if available, importing _ssl triggers + # the setup for this. + __import__("_ssl") + + if (not cls.lib.Cryptography_HAS_LOCKING_CALLBACKS or + cls.lib.CRYPTO_get_locking_callback() != cls.ffi.NULL): + return + + # If nothing else has setup a locking callback already, we set up + # our own + res = lib.Cryptography_setup_ssl_threads() + _openssl_assert(cls.lib, res == 1) + + +def _verify_openssl_version(lib): + if ( + lib.CRYPTOGRAPHY_OPENSSL_LESS_THAN_102 and + not lib.CRYPTOGRAPHY_IS_LIBRESSL + ): + warnings.warn( + "OpenSSL version 1.0.1 is no longer supported by the OpenSSL " + "project, please upgrade. The next version of cryptography will " + "drop support for it.", + utils.CryptographyDeprecationWarning + ) + + +def _verify_package_version(version): + # 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 = ffi.string(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. " + "Loaded python version: {}, shared object version: {}".format( + version, so_package_version + ) + ) + + +_verify_package_version(cryptography.__version__) + +# OpenSSL is not thread safe until the locks are initialized. We call this +# method in module scope so that it executes with the import lock. On +# Pythons < 3.4 this import lock is a global lock, which can prevent a race +# condition registering the OpenSSL locks. On Python 3.4+ the import lock +# is per module so this approach will not work. +Binding.init_static_locks() + +_verify_openssl_version(Binding.lib) diff --git a/venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/__init__.py b/venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/__init__.py new file mode 100644 index 0000000..4b54088 --- /dev/null +++ b/venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/__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 absolute_import, division, print_function diff --git a/venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/asymmetric/__init__.py b/venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/asymmetric/__init__.py new file mode 100644 index 0000000..494a7a1 --- /dev/null +++ b/venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/asymmetric/__init__.py @@ -0,0 +1,40 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import abc + +import six + + +@six.add_metaclass(abc.ABCMeta) +class AsymmetricSignatureContext(object): + @abc.abstractmethod + def update(self, data): + """ + Processes the provided bytes and returns nothing. + """ + + @abc.abstractmethod + def finalize(self): + """ + Returns the signature as bytes. + """ + + +@six.add_metaclass(abc.ABCMeta) +class AsymmetricVerificationContext(object): + @abc.abstractmethod + def update(self, data): + """ + Processes the provided bytes and returns nothing. + """ + + @abc.abstractmethod + def verify(self): + """ + Raises an exception if the bytes provided to update do not match the + signature or the signature does not match the public key. + """ diff --git a/venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/asymmetric/dh.py b/venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/asymmetric/dh.py new file mode 100644 index 0000000..4fc9952 --- /dev/null +++ b/venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/asymmetric/dh.py @@ -0,0 +1,212 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import abc + +import six + +from cryptography import utils + + +def generate_parameters(generator, key_size, backend): + return backend.generate_dh_parameters(generator, key_size) + + +class DHPrivateNumbers(object): + def __init__(self, x, public_numbers): + if not isinstance(x, six.integer_types): + raise TypeError("x must be an integer.") + + if not isinstance(public_numbers, DHPublicNumbers): + raise TypeError("public_numbers must be an instance of " + "DHPublicNumbers.") + + self._x = x + self._public_numbers = public_numbers + + def __eq__(self, other): + if not isinstance(other, DHPrivateNumbers): + return NotImplemented + + return ( + self._x == other._x and + self._public_numbers == other._public_numbers + ) + + def __ne__(self, other): + return not self == other + + def private_key(self, backend): + return backend.load_dh_private_numbers(self) + + public_numbers = utils.read_only_property("_public_numbers") + x = utils.read_only_property("_x") + + +class DHPublicNumbers(object): + def __init__(self, y, parameter_numbers): + if not isinstance(y, six.integer_types): + raise TypeError("y must be an integer.") + + if not isinstance(parameter_numbers, DHParameterNumbers): + raise TypeError( + "parameters must be an instance of DHParameterNumbers.") + + self._y = y + self._parameter_numbers = parameter_numbers + + def __eq__(self, other): + if not isinstance(other, DHPublicNumbers): + return NotImplemented + + return ( + self._y == other._y and + self._parameter_numbers == other._parameter_numbers + ) + + def __ne__(self, other): + return not self == other + + def public_key(self, backend): + return backend.load_dh_public_numbers(self) + + y = utils.read_only_property("_y") + parameter_numbers = utils.read_only_property("_parameter_numbers") + + +class DHParameterNumbers(object): + def __init__(self, p, g, q=None): + if ( + not isinstance(p, six.integer_types) or + not isinstance(g, six.integer_types) + ): + raise TypeError("p and g must be integers") + if q is not None and not isinstance(q, six.integer_types): + raise TypeError("q must be integer or None") + + if g < 2: + raise ValueError("DH generator must be 2 or greater") + + self._p = p + self._g = g + self._q = q + + def __eq__(self, other): + if not isinstance(other, DHParameterNumbers): + return NotImplemented + + return ( + self._p == other._p and + self._g == other._g and + self._q == other._q + ) + + def __ne__(self, other): + return not self == other + + def parameters(self, backend): + return backend.load_dh_parameter_numbers(self) + + p = utils.read_only_property("_p") + g = utils.read_only_property("_g") + q = utils.read_only_property("_q") + + +@six.add_metaclass(abc.ABCMeta) +class DHParameters(object): + @abc.abstractmethod + def generate_private_key(self): + """ + Generates and returns a DHPrivateKey. + """ + + @abc.abstractmethod + def parameter_bytes(self, encoding, format): + """ + Returns the parameters serialized as bytes. + """ + + @abc.abstractmethod + def parameter_numbers(self): + """ + Returns a DHParameterNumbers. + """ + + +DHParametersWithSerialization = DHParameters + + +@six.add_metaclass(abc.ABCMeta) +class DHPrivateKey(object): + @abc.abstractproperty + def key_size(self): + """ + The bit length of the prime modulus. + """ + + @abc.abstractmethod + def public_key(self): + """ + The DHPublicKey associated with this private key. + """ + + @abc.abstractmethod + def parameters(self): + """ + The DHParameters object associated with this private key. + """ + + @abc.abstractmethod + def exchange(self, peer_public_key): + """ + Given peer's DHPublicKey, carry out the key exchange and + return shared key as bytes. + """ + + +@six.add_metaclass(abc.ABCMeta) +class DHPrivateKeyWithSerialization(DHPrivateKey): + @abc.abstractmethod + def private_numbers(self): + """ + Returns a DHPrivateNumbers. + """ + + @abc.abstractmethod + def private_bytes(self, encoding, format, encryption_algorithm): + """ + Returns the key serialized as bytes. + """ + + +@six.add_metaclass(abc.ABCMeta) +class DHPublicKey(object): + @abc.abstractproperty + def key_size(self): + """ + The bit length of the prime modulus. + """ + + @abc.abstractmethod + def parameters(self): + """ + The DHParameters object associated with this public key. + """ + + @abc.abstractmethod + def public_numbers(self): + """ + Returns a DHPublicNumbers. + """ + + @abc.abstractmethod + def public_bytes(self, encoding, format): + """ + Returns the key serialized as bytes. + """ + + +DHPublicKeyWithSerialization = DHPublicKey diff --git a/venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/asymmetric/ed448.py b/venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/asymmetric/ed448.py new file mode 100644 index 0000000..939157a --- /dev/null +++ b/venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/asymmetric/ed448.py @@ -0,0 +1,79 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import abc + +import six + +from cryptography.exceptions import UnsupportedAlgorithm, _Reasons + + +@six.add_metaclass(abc.ABCMeta) +class Ed448PublicKey(object): + @classmethod + def from_public_bytes(cls, data): + 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 backend.ed448_load_public_bytes(data) + + @abc.abstractmethod + def public_bytes(self, encoding, format): + """ + The serialized bytes of the public key. + """ + + @abc.abstractmethod + def verify(self, signature, data): + """ + Verify the signature. + """ + + +@six.add_metaclass(abc.ABCMeta) +class Ed448PrivateKey(object): + @classmethod + def generate(cls): + 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 backend.ed448_generate_key() + + @classmethod + def from_private_bytes(cls, data): + 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 backend.ed448_load_private_bytes(data) + + @abc.abstractmethod + def public_key(self): + """ + The Ed448PublicKey derived from the private key. + """ + + @abc.abstractmethod + def sign(self, data): + """ + Signs the data. + """ + + @abc.abstractmethod + def private_bytes(self, encoding, format, encryption_algorithm): + """ + The serialized bytes of the private key. + """ diff --git a/venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/asymmetric/utils.py b/venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/asymmetric/utils.py new file mode 100644 index 0000000..14d2abe --- /dev/null +++ b/venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/asymmetric/utils.py @@ -0,0 +1,37 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +from cryptography import utils +from cryptography.hazmat._der import ( + DERReader, INTEGER, SEQUENCE, encode_der, encode_der_integer +) +from cryptography.hazmat.primitives import hashes + + +def decode_dss_signature(signature): + with DERReader(signature).read_single_element(SEQUENCE) as seq: + r = seq.read_element(INTEGER).as_integer() + s = seq.read_element(INTEGER).as_integer() + return r, s + + +def encode_dss_signature(r, s): + return encode_der( + SEQUENCE, + encode_der(INTEGER, encode_der_integer(r)), + encode_der(INTEGER, encode_der_integer(s)), + ) + + +class Prehashed(object): + def __init__(self, algorithm): + if not isinstance(algorithm, hashes.HashAlgorithm): + raise TypeError("Expected instance of HashAlgorithm.") + + self._algorithm = algorithm + self._digest_size = algorithm.digest_size + + digest_size = utils.read_only_property("_digest_size") diff --git a/venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/asymmetric/x25519.py b/venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/asymmetric/x25519.py new file mode 100644 index 0000000..4e8badf --- /dev/null +++ b/venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/asymmetric/x25519.py @@ -0,0 +1,73 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import abc + +import six + +from cryptography.exceptions import UnsupportedAlgorithm, _Reasons + + +@six.add_metaclass(abc.ABCMeta) +class X25519PublicKey(object): + @classmethod + def from_public_bytes(cls, data): + 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 backend.x25519_load_public_bytes(data) + + @abc.abstractmethod + def public_bytes(self, encoding=None, format=None): + """ + The serialized bytes of the public key. + """ + + +@six.add_metaclass(abc.ABCMeta) +class X25519PrivateKey(object): + @classmethod + def generate(cls): + 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 backend.x25519_generate_key() + + @classmethod + def from_private_bytes(cls, data): + 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 backend.x25519_load_private_bytes(data) + + @abc.abstractmethod + def public_key(self): + """ + The serialized bytes of the public key. + """ + + @abc.abstractmethod + def private_bytes(self, encoding, format, encryption_algorithm): + """ + The serialized bytes of the private key. + """ + + @abc.abstractmethod + def exchange(self, peer_public_key): + """ + Performs a key exchange operation using the provided peer's public key. + """ diff --git a/venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/ciphers/__init__.py b/venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/ciphers/__init__.py new file mode 100644 index 0000000..171b1c6 --- /dev/null +++ b/venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/ciphers/__init__.py @@ -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. + +from __future__ import absolute_import, division, print_function + +from cryptography.hazmat.primitives.ciphers.base import ( + AEADCipherContext, AEADDecryptionContext, AEADEncryptionContext, + BlockCipherAlgorithm, Cipher, CipherAlgorithm, CipherContext +) + + +__all__ = [ + "Cipher", + "CipherAlgorithm", + "BlockCipherAlgorithm", + "CipherContext", + "AEADCipherContext", + "AEADDecryptionContext", + "AEADEncryptionContext", +] diff --git a/venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/kdf/hkdf.py b/venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/kdf/hkdf.py new file mode 100644 index 0000000..01f0f28 --- /dev/null +++ b/venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/kdf/hkdf.py @@ -0,0 +1,110 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import six + +from cryptography import utils +from cryptography.exceptions import ( + AlreadyFinalized, InvalidKey, UnsupportedAlgorithm, _Reasons +) +from cryptography.hazmat.backends.interfaces import HMACBackend +from cryptography.hazmat.primitives import constant_time, hmac +from cryptography.hazmat.primitives.kdf import KeyDerivationFunction + + +@utils.register_interface(KeyDerivationFunction) +class HKDF(object): + def __init__(self, algorithm, length, salt, info, backend): + if not isinstance(backend, HMACBackend): + raise UnsupportedAlgorithm( + "Backend object does not implement HMACBackend.", + _Reasons.BACKEND_MISSING_INTERFACE + ) + + self._algorithm = algorithm + + if salt is None: + salt = b"\x00" * self._algorithm.digest_size + else: + utils._check_bytes("salt", salt) + + self._salt = salt + + self._backend = backend + + self._hkdf_expand = HKDFExpand(self._algorithm, length, info, backend) + + def _extract(self, key_material): + h = hmac.HMAC(self._salt, self._algorithm, backend=self._backend) + h.update(key_material) + return h.finalize() + + def derive(self, key_material): + utils._check_byteslike("key_material", key_material) + return self._hkdf_expand.derive(self._extract(key_material)) + + def verify(self, key_material, expected_key): + if not constant_time.bytes_eq(self.derive(key_material), expected_key): + raise InvalidKey + + +@utils.register_interface(KeyDerivationFunction) +class HKDFExpand(object): + def __init__(self, algorithm, length, info, backend): + if not isinstance(backend, HMACBackend): + raise UnsupportedAlgorithm( + "Backend object does not implement HMACBackend.", + _Reasons.BACKEND_MISSING_INTERFACE + ) + + self._algorithm = algorithm + + self._backend = backend + + max_length = 255 * algorithm.digest_size + + if length > max_length: + raise ValueError( + "Can not derive keys larger than {} octets.".format( + max_length + )) + + 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): + output = [b""] + counter = 1 + + while self._algorithm.digest_size * (len(output) - 1) < self._length: + h = hmac.HMAC(key_material, self._algorithm, backend=self._backend) + h.update(output[-1]) + h.update(self._info) + h.update(six.int2byte(counter)) + output.append(h.finalize()) + counter += 1 + + return b"".join(output)[:self._length] + + def derive(self, key_material): + 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, expected_key): + if not constant_time.bytes_eq(self.derive(key_material), expected_key): + raise InvalidKey diff --git a/venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/kdf/scrypt.py b/venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/kdf/scrypt.py new file mode 100644 index 0000000..df9745e --- /dev/null +++ b/venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/kdf/scrypt.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 absolute_import, division, print_function + +import sys + +from cryptography import utils +from cryptography.exceptions import ( + AlreadyFinalized, InvalidKey, UnsupportedAlgorithm, _Reasons +) +from cryptography.hazmat.backends.interfaces import ScryptBackend +from cryptography.hazmat.primitives import constant_time +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 + + +@utils.register_interface(KeyDerivationFunction) +class Scrypt(object): + def __init__(self, salt, length, n, r, p, backend): + if not isinstance(backend, ScryptBackend): + raise UnsupportedAlgorithm( + "Backend object does not implement ScryptBackend.", + _Reasons.BACKEND_MISSING_INTERFACE + ) + + self._length = length + utils._check_bytes("salt", salt) + if n < 2 or (n & (n - 1)) != 0: + raise ValueError("n must be greater than 1 and be a power of 2.") + + if r < 1: + raise ValueError("r must be greater than or equal to 1.") + + if p < 1: + raise ValueError("p must be greater than or equal to 1.") + + self._used = False + self._salt = salt + self._n = n + self._r = r + self._p = p + self._backend = backend + + def derive(self, key_material): + if self._used: + raise AlreadyFinalized("Scrypt instances can only be used once.") + self._used = True + + utils._check_byteslike("key_material", key_material) + return self._backend.derive_scrypt( + key_material, self._salt, self._length, self._n, self._r, self._p + ) + + def verify(self, key_material, expected_key): + 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.7/site-packages/cryptography/hazmat/primitives/kdf/x963kdf.py b/venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/kdf/x963kdf.py new file mode 100644 index 0000000..9eb50b0 --- /dev/null +++ b/venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/kdf/x963kdf.py @@ -0,0 +1,68 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import struct + +from cryptography import utils +from cryptography.exceptions import ( + AlreadyFinalized, InvalidKey, UnsupportedAlgorithm, _Reasons +) +from cryptography.hazmat.backends.interfaces import HashBackend +from cryptography.hazmat.primitives import constant_time, hashes +from cryptography.hazmat.primitives.kdf import KeyDerivationFunction + + +def _int_to_u32be(n): + return struct.pack('>I', n) + + +@utils.register_interface(KeyDerivationFunction) +class X963KDF(object): + def __init__(self, algorithm, length, sharedinfo, backend): + + max_len = algorithm.digest_size * (2 ** 32 - 1) + if length > max_len: + raise ValueError( + "Can not derive keys larger than {} bits.".format(max_len)) + if sharedinfo is not None: + utils._check_bytes("sharedinfo", sharedinfo) + + self._algorithm = algorithm + self._length = length + self._sharedinfo = sharedinfo + + if not isinstance(backend, HashBackend): + raise UnsupportedAlgorithm( + "Backend object does not implement HashBackend.", + _Reasons.BACKEND_MISSING_INTERFACE + ) + self._backend = backend + self._used = False + + def derive(self, key_material): + 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, self._backend) + 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, expected_key): + if not constant_time.bytes_eq(self.derive(key_material), expected_key): + raise InvalidKey diff --git a/venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/serialization/__init__.py b/venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/serialization/__init__.py new file mode 100644 index 0000000..f6d4ce9 --- /dev/null +++ b/venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/serialization/__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 absolute_import, division, print_function + +from cryptography.hazmat.primitives.serialization.base import ( + BestAvailableEncryption, Encoding, KeySerializationEncryption, + NoEncryption, ParameterFormat, PrivateFormat, PublicFormat, + 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 ( + load_ssh_public_key +) + + +_PEM_DER = (Encoding.PEM, Encoding.DER) + +__all__ = [ + "load_der_parameters", "load_der_private_key", "load_der_public_key", + "load_pem_parameters", "load_pem_private_key", "load_pem_public_key", + "load_ssh_public_key", "Encoding", "PrivateFormat", "PublicFormat", + "ParameterFormat", "KeySerializationEncryption", "BestAvailableEncryption", + "NoEncryption", +] diff --git a/venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/twofactor/totp.py b/venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/twofactor/totp.py new file mode 100644 index 0000000..499f282 --- /dev/null +++ b/venv/lib/python3.7/site-packages/cryptography/hazmat/primitives/twofactor/totp.py @@ -0,0 +1,40 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +from cryptography.exceptions import ( + UnsupportedAlgorithm, _Reasons +) +from cryptography.hazmat.backends.interfaces import HMACBackend +from cryptography.hazmat.primitives import constant_time +from cryptography.hazmat.primitives.twofactor import InvalidToken +from cryptography.hazmat.primitives.twofactor.hotp import HOTP +from cryptography.hazmat.primitives.twofactor.utils import _generate_uri + + +class TOTP(object): + def __init__(self, key, length, algorithm, time_step, backend, + enforce_key_length=True): + if not isinstance(backend, HMACBackend): + raise UnsupportedAlgorithm( + "Backend object does not implement HMACBackend.", + _Reasons.BACKEND_MISSING_INTERFACE + ) + + self._time_step = time_step + self._hotp = HOTP(key, length, algorithm, backend, enforce_key_length) + + def generate(self, time): + counter = int(time / self._time_step) + return self._hotp.generate(counter) + + def verify(self, totp, time): + 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, issuer): + return _generate_uri(self._hotp, "totp", account_name, issuer, [ + ("period", int(self._time_step)), + ]) diff --git a/venv/lib/python3.7/site-packages/cryptography/utils.py b/venv/lib/python3.7/site-packages/cryptography/utils.py new file mode 100644 index 0000000..0b36f63 --- /dev/null +++ b/venv/lib/python3.7/site-packages/cryptography/utils.py @@ -0,0 +1,173 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import abc +import binascii +import inspect +import sys +import warnings + + +# We use a UserWarning subclass, instead of DeprecationWarning, because CPython +# decided deprecation warnings should be invisble 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. +PersistentlyDeprecated2017 = CryptographyDeprecationWarning +PersistentlyDeprecated2018 = CryptographyDeprecationWarning +DeprecatedIn25 = CryptographyDeprecationWarning +DeprecatedIn27 = CryptographyDeprecationWarning + + +def _check_bytes(name, value): + if not isinstance(value, bytes): + raise TypeError("{} must be bytes".format(name)) + + +def _check_byteslike(name, value): + try: + memoryview(value) + except TypeError: + raise TypeError("{} must be bytes-like".format(name)) + + +def read_only_property(name): + return property(lambda self: getattr(self, name)) + + +def register_interface(iface): + def register_decorator(klass): + verify_interface(iface, klass) + iface.register(klass) + return klass + return register_decorator + + +def register_interface_if(predicate, iface): + def register_decorator(klass): + if predicate: + verify_interface(iface, klass) + iface.register(klass) + return klass + return register_decorator + + +if hasattr(int, "from_bytes"): + int_from_bytes = int.from_bytes +else: + def int_from_bytes(data, byteorder, signed=False): + assert byteorder == 'big' + assert not signed + + return int(binascii.hexlify(data), 16) + + +if hasattr(int, "to_bytes"): + def int_to_bytes(integer, length=None): + return integer.to_bytes( + length or (integer.bit_length() + 7) // 8 or 1, 'big' + ) +else: + def int_to_bytes(integer, length=None): + hex_string = '%x' % integer + if length is None: + n = len(hex_string) + else: + n = length * 2 + return binascii.unhexlify(hex_string.zfill(n + (n & 1))) + + +class InterfaceNotImplemented(Exception): + pass + + +if hasattr(inspect, "signature"): + signature = inspect.signature +else: + signature = inspect.getargspec + + +def verify_interface(iface, klass): + for method in iface.__abstractmethods__: + if not hasattr(klass, method): + raise InterfaceNotImplemented( + "{} is missing a {!r} method".format(klass, method) + ) + if isinstance(getattr(iface, method), abc.abstractproperty): + # Can't properly verify these yet. + continue + sig = signature(getattr(iface, method)) + actual = signature(getattr(klass, method)) + if sig != actual: + raise InterfaceNotImplemented( + "{}.{}'s signature differs from the expected. Expected: " + "{!r}. Received: {!r}".format( + klass, method, sig, actual + ) + ) + + +# No longer needed as of 2.2, but retained because we have external consumers +# who use it. +def bit_length(x): + return x.bit_length() + + +class _DeprecatedValue(object): + def __init__(self, value, message, warning_class): + self.value = value + self.message = message + self.warning_class = warning_class + + +class _ModuleWithDeprecations(object): + def __init__(self, module): + self.__dict__["_module"] = module + + def __getattr__(self, attr): + 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, value): + setattr(self._module, attr, value) + + def __delattr__(self, attr): + 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): + return ["_module"] + dir(self._module) + + +def deprecated(value, module_name, message, warning_class): + module = sys.modules[module_name] + if not isinstance(module, _ModuleWithDeprecations): + sys.modules[module_name] = _ModuleWithDeprecations(module) + return _DeprecatedValue(value, message, warning_class) + + +def cached_property(func): + cached_name = "_cached_{}".format(func) + sentinel = object() + + def inner(instance): + 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) diff --git a/venv/lib/python3.7/site-packages/cryptography/x509/__init__.py b/venv/lib/python3.7/site-packages/cryptography/x509/__init__.py new file mode 100644 index 0000000..b761e26 --- /dev/null +++ b/venv/lib/python3.7/site-packages/cryptography/x509/__init__.py @@ -0,0 +1,189 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +from cryptography.x509 import certificate_transparency +from cryptography.x509.base import ( + 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_crl, load_pem_x509_csr, + random_serial_number, +) +from cryptography.x509.extensions import ( + AccessDescription, AuthorityInformationAccess, + AuthorityKeyIdentifier, BasicConstraints, CRLDistributionPoints, + CRLNumber, CRLReason, CertificateIssuer, CertificatePolicies, + DeltaCRLIndicator, DistributionPoint, DuplicateExtension, ExtendedKeyUsage, + Extension, ExtensionNotFound, ExtensionType, Extensions, FreshestCRL, + GeneralNames, InhibitAnyPolicy, InvalidityDate, IssuerAlternativeName, + IssuingDistributionPoint, KeyUsage, NameConstraints, NoticeReference, + OCSPNoCheck, OCSPNonce, PolicyConstraints, PolicyInformation, + PrecertPoison, PrecertificateSignedCertificateTimestamps, ReasonFlags, + SubjectAlternativeName, SubjectKeyIdentifier, TLSFeature, TLSFeatureType, + UnrecognizedExtension, UserNotice +) +from cryptography.x509.general_name import ( + DNSName, DirectoryName, GeneralName, IPAddress, OtherName, RFC822Name, + RegisteredID, UniformResourceIdentifier, UnsupportedGeneralNameType, + _GENERAL_NAMES +) +from cryptography.x509.name import ( + Name, NameAttribute, RelativeDistinguishedName +) +from cryptography.x509.oid import ( + AuthorityInformationAccessOID, CRLEntryExtensionOID, + CertificatePoliciesOID, ExtendedKeyUsageOID, ExtensionOID, NameOID, + ObjectIdentifier, SignatureAlgorithmOID, _SIG_OIDS_TO_HASH +) + + +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__ = [ + "certificate_transparency", + "load_pem_x509_certificate", + "load_der_x509_certificate", + "load_pem_x509_csr", + "load_der_x509_csr", + "load_pem_x509_crl", + "load_der_x509_crl", + "random_serial_number", + "InvalidVersion", + "DeltaCRLIndicator", + "DuplicateExtension", + "ExtensionNotFound", + "UnsupportedGeneralNameType", + "NameAttribute", + "Name", + "RelativeDistinguishedName", + "ObjectIdentifier", + "ExtensionType", + "Extensions", + "Extension", + "ExtendedKeyUsage", + "FreshestCRL", + "IssuingDistributionPoint", + "TLSFeature", + "TLSFeatureType", + "OCSPNoCheck", + "BasicConstraints", + "CRLNumber", + "KeyUsage", + "AuthorityInformationAccess", + "AccessDescription", + "CertificatePolicies", + "PolicyInformation", + "UserNotice", + "NoticeReference", + "SubjectKeyIdentifier", + "NameConstraints", + "CRLDistributionPoints", + "DistributionPoint", + "ReasonFlags", + "InhibitAnyPolicy", + "SubjectAlternativeName", + "IssuerAlternativeName", + "AuthorityKeyIdentifier", + "GeneralNames", + "GeneralName", + "RFC822Name", + "DNSName", + "UniformResourceIdentifier", + "RegisteredID", + "DirectoryName", + "IPAddress", + "OtherName", + "Certificate", + "CertificateRevocationList", + "CertificateRevocationListBuilder", + "CertificateSigningRequest", + "RevokedCertificate", + "RevokedCertificateBuilder", + "CertificateSigningRequestBuilder", + "CertificateBuilder", + "Version", + "_SIG_OIDS_TO_HASH", + "OID_CA_ISSUERS", + "OID_OCSP", + "_GENERAL_NAMES", + "CertificateIssuer", + "CRLReason", + "InvalidityDate", + "UnrecognizedExtension", + "PolicyConstraints", + "PrecertificateSignedCertificateTimestamps", + "PrecertPoison", + "OCSPNonce", +] diff --git a/venv/lib/python3.7/site-packages/cryptography/x509/extensions.py b/venv/lib/python3.7/site-packages/cryptography/x509/extensions.py new file mode 100644 index 0000000..f60075a --- /dev/null +++ b/venv/lib/python3.7/site-packages/cryptography/x509/extensions.py @@ -0,0 +1,1609 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +import abc +import datetime +import hashlib +import ipaddress +import warnings +from enum import Enum + +import six + +from cryptography import utils +from cryptography.hazmat._der import ( + BIT_STRING, DERReader, OBJECT_IDENTIFIER, SEQUENCE +) +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.x509.certificate_transparency import ( + SignedCertificateTimestamp +) +from cryptography.x509.general_name import GeneralName, IPAddress, OtherName +from cryptography.x509.name import RelativeDistinguishedName +from cryptography.x509.oid import ( + CRLEntryExtensionOID, ExtensionOID, OCSPExtensionOID, ObjectIdentifier, +) + + +def _key_identifier_from_public_key(public_key): + 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 + ) + + reader = DERReader(serialized) + with reader.read_single_element(SEQUENCE) as public_key_info: + algorithm = public_key_info.read_element(SEQUENCE) + public_key = public_key_info.read_element(BIT_STRING) + + # Double-check the algorithm structure. + with algorithm: + algorithm.read_element(OBJECT_IDENTIFIER) + if not algorithm.is_empty(): + # Skip the optional parameters field. + algorithm.read_any_element() + + # BIT STRING contents begin with the number of padding bytes added. It + # must be zero for SubjectPublicKeyInfo structures. + if public_key.read_byte() != 0: + raise ValueError('Invalid public key encoding') + + data = public_key.data + + return hashlib.sha1(data).digest() + + +def _make_sequence_methods(field_name): + def len_method(self): + 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, oid): + super(DuplicateExtension, self).__init__(msg) + self.oid = oid + + +class ExtensionNotFound(Exception): + def __init__(self, msg, oid): + super(ExtensionNotFound, self).__init__(msg) + self.oid = oid + + +@six.add_metaclass(abc.ABCMeta) +class ExtensionType(object): + @abc.abstractproperty + def oid(self): + """ + Returns the oid associated with the given extension type. + """ + + +class Extensions(object): + def __init__(self, extensions): + self._extensions = extensions + + def get_extension_for_oid(self, oid): + for ext in self: + if ext.oid == oid: + return ext + + raise ExtensionNotFound("No {} extension was found".format(oid), oid) + + def get_extension_for_class(self, extclass): + 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( + "No {} extension was found".format(extclass), extclass.oid + ) + + __len__, __iter__, __getitem__ = _make_sequence_methods("_extensions") + + def __repr__(self): + return ( + "".format(self._extensions) + ) + + +@utils.register_interface(ExtensionType) +class CRLNumber(object): + oid = ExtensionOID.CRL_NUMBER + + def __init__(self, crl_number): + if not isinstance(crl_number, six.integer_types): + raise TypeError("crl_number must be an integer") + + self._crl_number = crl_number + + def __eq__(self, other): + if not isinstance(other, CRLNumber): + return NotImplemented + + return self.crl_number == other.crl_number + + def __ne__(self, other): + return not self == other + + def __hash__(self): + return hash(self.crl_number) + + def __repr__(self): + return "".format(self.crl_number) + + crl_number = utils.read_only_property("_crl_number") + + +@utils.register_interface(ExtensionType) +class AuthorityKeyIdentifier(object): + oid = ExtensionOID.AUTHORITY_KEY_IDENTIFIER + + def __init__(self, key_identifier, authority_cert_issuer, + authority_cert_serial_number): + 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, six.integer_types + ): + 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 + + @classmethod + def from_issuer_public_key(cls, public_key): + 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): + if isinstance(ski, SubjectKeyIdentifier): + digest = ski.digest + else: + digest = ski.value.digest + warnings.warn( + "Extension objects are deprecated as arguments to " + "from_issuer_subject_key_identifier and support will be " + "removed soon. Please migrate to passing a " + "SubjectKeyIdentifier directly.", + utils.DeprecatedIn27, + stacklevel=2, + ) + + return cls( + key_identifier=digest, + authority_cert_issuer=None, + authority_cert_serial_number=None + ) + + def __repr__(self): + return ( + "".format(self) + ) + + def __eq__(self, other): + 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 __ne__(self, other): + return not self == other + + def __hash__(self): + 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 + )) + + key_identifier = utils.read_only_property("_key_identifier") + authority_cert_issuer = utils.read_only_property("_authority_cert_issuer") + authority_cert_serial_number = utils.read_only_property( + "_authority_cert_serial_number" + ) + + +@utils.register_interface(ExtensionType) +class SubjectKeyIdentifier(object): + oid = ExtensionOID.SUBJECT_KEY_IDENTIFIER + + def __init__(self, digest): + self._digest = digest + + @classmethod + def from_public_key(cls, public_key): + return cls(_key_identifier_from_public_key(public_key)) + + digest = utils.read_only_property("_digest") + + def __repr__(self): + return "".format(self.digest) + + def __eq__(self, other): + if not isinstance(other, SubjectKeyIdentifier): + return NotImplemented + + return constant_time.bytes_eq(self.digest, other.digest) + + def __ne__(self, other): + return not self == other + + def __hash__(self): + return hash(self.digest) + + +@utils.register_interface(ExtensionType) +class AuthorityInformationAccess(object): + oid = ExtensionOID.AUTHORITY_INFORMATION_ACCESS + + def __init__(self, descriptions): + 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): + return "".format(self._descriptions) + + def __eq__(self, other): + if not isinstance(other, AuthorityInformationAccess): + return NotImplemented + + return self._descriptions == other._descriptions + + def __ne__(self, other): + return not self == other + + def __hash__(self): + return hash(tuple(self._descriptions)) + + +class AccessDescription(object): + def __init__(self, access_method, access_location): + 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): + return ( + "".format(self) + ) + + def __eq__(self, other): + if not isinstance(other, AccessDescription): + return NotImplemented + + return ( + self.access_method == other.access_method and + self.access_location == other.access_location + ) + + def __ne__(self, other): + return not self == other + + def __hash__(self): + return hash((self.access_method, self.access_location)) + + access_method = utils.read_only_property("_access_method") + access_location = utils.read_only_property("_access_location") + + +@utils.register_interface(ExtensionType) +class BasicConstraints(object): + oid = ExtensionOID.BASIC_CONSTRAINTS + + def __init__(self, ca, path_length): + 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, six.integer_types) or path_length < 0) + ): + raise TypeError( + "path_length must be a non-negative integer or None" + ) + + self._ca = ca + self._path_length = path_length + + ca = utils.read_only_property("_ca") + path_length = utils.read_only_property("_path_length") + + def __repr__(self): + return ("").format(self) + + def __eq__(self, other): + if not isinstance(other, BasicConstraints): + return NotImplemented + + return self.ca == other.ca and self.path_length == other.path_length + + def __ne__(self, other): + return not self == other + + def __hash__(self): + return hash((self.ca, self.path_length)) + + +@utils.register_interface(ExtensionType) +class DeltaCRLIndicator(object): + oid = ExtensionOID.DELTA_CRL_INDICATOR + + def __init__(self, crl_number): + if not isinstance(crl_number, six.integer_types): + raise TypeError("crl_number must be an integer") + + self._crl_number = crl_number + + crl_number = utils.read_only_property("_crl_number") + + def __eq__(self, other): + if not isinstance(other, DeltaCRLIndicator): + return NotImplemented + + return self.crl_number == other.crl_number + + def __ne__(self, other): + return not self == other + + def __hash__(self): + return hash(self.crl_number) + + def __repr__(self): + return "".format(self) + + +@utils.register_interface(ExtensionType) +class CRLDistributionPoints(object): + oid = ExtensionOID.CRL_DISTRIBUTION_POINTS + + def __init__(self, distribution_points): + 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): + return "".format(self._distribution_points) + + def __eq__(self, other): + if not isinstance(other, CRLDistributionPoints): + return NotImplemented + + return self._distribution_points == other._distribution_points + + def __ne__(self, other): + return not self == other + + def __hash__(self): + return hash(tuple(self._distribution_points)) + + +@utils.register_interface(ExtensionType) +class FreshestCRL(object): + oid = ExtensionOID.FRESHEST_CRL + + def __init__(self, distribution_points): + 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): + return "".format(self._distribution_points) + + def __eq__(self, other): + if not isinstance(other, FreshestCRL): + return NotImplemented + + return self._distribution_points == other._distribution_points + + def __ne__(self, other): + return not self == other + + def __hash__(self): + return hash(tuple(self._distribution_points)) + + +class DistributionPoint(object): + def __init__(self, full_name, relative_name, reasons, crl_issuer): + if full_name and relative_name: + raise ValueError( + "You cannot provide both full_name and relative_name, at " + "least one must be None." + ) + + if full_name: + 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: + 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" + ) + + if reasons and not crl_issuer and not (full_name or relative_name): + raise ValueError( + "You must supply crl_issuer, full_name, or relative_name when " + "reasons is not None" + ) + + self._full_name = full_name + self._relative_name = relative_name + self._reasons = reasons + self._crl_issuer = crl_issuer + + def __repr__(self): + return ( + "" + .format(self) + ) + + def __eq__(self, other): + 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 __ne__(self, other): + return not self == other + + def __hash__(self): + if self.full_name is not None: + fn = tuple(self.full_name) + else: + fn = None + + if self.crl_issuer is not None: + crl_issuer = tuple(self.crl_issuer) + else: + crl_issuer = None + + return hash((fn, self.relative_name, self.reasons, crl_issuer)) + + full_name = utils.read_only_property("_full_name") + relative_name = utils.read_only_property("_relative_name") + reasons = utils.read_only_property("_reasons") + crl_issuer = utils.read_only_property("_crl_issuer") + + +class ReasonFlags(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" + + +@utils.register_interface(ExtensionType) +class PolicyConstraints(object): + oid = ExtensionOID.POLICY_CONSTRAINTS + + def __init__(self, require_explicit_policy, inhibit_policy_mapping): + if require_explicit_policy is not None and not isinstance( + require_explicit_policy, six.integer_types + ): + 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, six.integer_types + ): + 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): + return ( + u"".format(self) + ) + + def __eq__(self, other): + 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 __ne__(self, other): + return not self == other + + def __hash__(self): + return hash( + (self.require_explicit_policy, self.inhibit_policy_mapping) + ) + + require_explicit_policy = utils.read_only_property( + "_require_explicit_policy" + ) + inhibit_policy_mapping = utils.read_only_property( + "_inhibit_policy_mapping" + ) + + +@utils.register_interface(ExtensionType) +class CertificatePolicies(object): + oid = ExtensionOID.CERTIFICATE_POLICIES + + def __init__(self, policies): + 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): + return "".format(self._policies) + + def __eq__(self, other): + if not isinstance(other, CertificatePolicies): + return NotImplemented + + return self._policies == other._policies + + def __ne__(self, other): + return not self == other + + def __hash__(self): + return hash(tuple(self._policies)) + + +class PolicyInformation(object): + def __init__(self, policy_identifier, policy_qualifiers): + if not isinstance(policy_identifier, ObjectIdentifier): + raise TypeError("policy_identifier must be an ObjectIdentifier") + + self._policy_identifier = policy_identifier + + if policy_qualifiers: + policy_qualifiers = list(policy_qualifiers) + if not all( + isinstance(x, (six.text_type, 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): + return ( + "".format(self) + ) + + def __eq__(self, other): + if not isinstance(other, PolicyInformation): + return NotImplemented + + return ( + self.policy_identifier == other.policy_identifier and + self.policy_qualifiers == other.policy_qualifiers + ) + + def __ne__(self, other): + return not self == other + + def __hash__(self): + if self.policy_qualifiers is not None: + pq = tuple(self.policy_qualifiers) + else: + pq = None + + return hash((self.policy_identifier, pq)) + + policy_identifier = utils.read_only_property("_policy_identifier") + policy_qualifiers = utils.read_only_property("_policy_qualifiers") + + +class UserNotice(object): + def __init__(self, notice_reference, explicit_text): + 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): + return ( + "".format(self) + ) + + def __eq__(self, other): + if not isinstance(other, UserNotice): + return NotImplemented + + return ( + self.notice_reference == other.notice_reference and + self.explicit_text == other.explicit_text + ) + + def __ne__(self, other): + return not self == other + + def __hash__(self): + return hash((self.notice_reference, self.explicit_text)) + + notice_reference = utils.read_only_property("_notice_reference") + explicit_text = utils.read_only_property("_explicit_text") + + +class NoticeReference(object): + def __init__(self, organization, notice_numbers): + 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): + return ( + "".format(self) + ) + + def __eq__(self, other): + if not isinstance(other, NoticeReference): + return NotImplemented + + return ( + self.organization == other.organization and + self.notice_numbers == other.notice_numbers + ) + + def __ne__(self, other): + return not self == other + + def __hash__(self): + return hash((self.organization, tuple(self.notice_numbers))) + + organization = utils.read_only_property("_organization") + notice_numbers = utils.read_only_property("_notice_numbers") + + +@utils.register_interface(ExtensionType) +class ExtendedKeyUsage(object): + oid = ExtensionOID.EXTENDED_KEY_USAGE + + def __init__(self, usages): + 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): + return "".format(self._usages) + + def __eq__(self, other): + if not isinstance(other, ExtendedKeyUsage): + return NotImplemented + + return self._usages == other._usages + + def __ne__(self, other): + return not self == other + + def __hash__(self): + return hash(tuple(self._usages)) + + +@utils.register_interface(ExtensionType) +class OCSPNoCheck(object): + oid = ExtensionOID.OCSP_NO_CHECK + + def __eq__(self, other): + if not isinstance(other, OCSPNoCheck): + return NotImplemented + + return True + + def __ne__(self, other): + return not self == other + + def __hash__(self): + return hash(OCSPNoCheck) + + def __repr__(self): + return "" + + +@utils.register_interface(ExtensionType) +class PrecertPoison(object): + oid = ExtensionOID.PRECERT_POISON + + def __eq__(self, other): + if not isinstance(other, PrecertPoison): + return NotImplemented + + return True + + def __ne__(self, other): + return not self == other + + def __hash__(self): + return hash(PrecertPoison) + + def __repr__(self): + return "" + + +@utils.register_interface(ExtensionType) +class TLSFeature(object): + oid = ExtensionOID.TLS_FEATURE + + def __init__(self, features): + 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): + return "".format(self) + + def __eq__(self, other): + if not isinstance(other, TLSFeature): + return NotImplemented + + return self._features == other._features + + def __ne__(self, other): + return not self == other + + def __hash__(self): + return hash(tuple(self._features)) + + +class TLSFeatureType(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 = dict((x.value, x) for x in TLSFeatureType) + + +@utils.register_interface(ExtensionType) +class InhibitAnyPolicy(object): + oid = ExtensionOID.INHIBIT_ANY_POLICY + + def __init__(self, skip_certs): + if not isinstance(skip_certs, six.integer_types): + 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): + return "".format(self) + + def __eq__(self, other): + if not isinstance(other, InhibitAnyPolicy): + return NotImplemented + + return self.skip_certs == other.skip_certs + + def __ne__(self, other): + return not self == other + + def __hash__(self): + return hash(self.skip_certs) + + skip_certs = utils.read_only_property("_skip_certs") + + +@utils.register_interface(ExtensionType) +class KeyUsage(object): + oid = ExtensionOID.KEY_USAGE + + def __init__(self, digital_signature, content_commitment, key_encipherment, + data_encipherment, key_agreement, key_cert_sign, crl_sign, + encipher_only, decipher_only): + 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 + + digital_signature = utils.read_only_property("_digital_signature") + content_commitment = utils.read_only_property("_content_commitment") + key_encipherment = utils.read_only_property("_key_encipherment") + data_encipherment = utils.read_only_property("_data_encipherment") + key_agreement = utils.read_only_property("_key_agreement") + key_cert_sign = utils.read_only_property("_key_cert_sign") + crl_sign = utils.read_only_property("_crl_sign") + + @property + def encipher_only(self): + 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): + if not self.key_agreement: + raise ValueError( + "decipher_only is undefined unless key_agreement is true" + ) + else: + return self._decipher_only + + def __repr__(self): + try: + encipher_only = self.encipher_only + decipher_only = self.decipher_only + except ValueError: + encipher_only = None + decipher_only = None + + return ("").format( + self, encipher_only, decipher_only) + + def __eq__(self, other): + 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 __ne__(self, other): + return not self == other + + def __hash__(self): + 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 + )) + + +@utils.register_interface(ExtensionType) +class NameConstraints(object): + oid = ExtensionOID.NAME_CONSTRAINTS + + def __init__(self, permitted_subtrees, excluded_subtrees): + if permitted_subtrees is not None: + permitted_subtrees = list(permitted_subtrees) + 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_ip_name(permitted_subtrees) + + if excluded_subtrees is not None: + excluded_subtrees = list(excluded_subtrees) + 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_ip_name(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): + if not isinstance(other, NameConstraints): + return NotImplemented + + return ( + self.excluded_subtrees == other.excluded_subtrees and + self.permitted_subtrees == other.permitted_subtrees + ) + + def __ne__(self, other): + return not self == other + + def _validate_ip_name(self, tree): + 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 __repr__(self): + return ( + u"".format(self) + ) + + def __hash__(self): + if self.permitted_subtrees is not None: + ps = tuple(self.permitted_subtrees) + else: + ps = None + + if self.excluded_subtrees is not None: + es = tuple(self.excluded_subtrees) + else: + es = None + + return hash((ps, es)) + + permitted_subtrees = utils.read_only_property("_permitted_subtrees") + excluded_subtrees = utils.read_only_property("_excluded_subtrees") + + +class Extension(object): + def __init__(self, oid, critical, value): + 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 + + oid = utils.read_only_property("_oid") + critical = utils.read_only_property("_critical") + value = utils.read_only_property("_value") + + def __repr__(self): + return ("").format(self) + + def __eq__(self, other): + if not isinstance(other, Extension): + return NotImplemented + + return ( + self.oid == other.oid and + self.critical == other.critical and + self.value == other.value + ) + + def __ne__(self, other): + return not self == other + + def __hash__(self): + return hash((self.oid, self.critical, self.value)) + + +class GeneralNames(object): + def __init__(self, general_names): + 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") + + def get_values_for_type(self, type): + # 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: + objs = (i.value for i in objs) + return list(objs) + + def __repr__(self): + return "".format(self._general_names) + + def __eq__(self, other): + if not isinstance(other, GeneralNames): + return NotImplemented + + return self._general_names == other._general_names + + def __ne__(self, other): + return not self == other + + def __hash__(self): + return hash(tuple(self._general_names)) + + +@utils.register_interface(ExtensionType) +class SubjectAlternativeName(object): + oid = ExtensionOID.SUBJECT_ALTERNATIVE_NAME + + def __init__(self, general_names): + self._general_names = GeneralNames(general_names) + + __len__, __iter__, __getitem__ = _make_sequence_methods("_general_names") + + def get_values_for_type(self, type): + return self._general_names.get_values_for_type(type) + + def __repr__(self): + return "".format(self._general_names) + + def __eq__(self, other): + if not isinstance(other, SubjectAlternativeName): + return NotImplemented + + return self._general_names == other._general_names + + def __ne__(self, other): + return not self == other + + def __hash__(self): + return hash(self._general_names) + + +@utils.register_interface(ExtensionType) +class IssuerAlternativeName(object): + oid = ExtensionOID.ISSUER_ALTERNATIVE_NAME + + def __init__(self, general_names): + self._general_names = GeneralNames(general_names) + + __len__, __iter__, __getitem__ = _make_sequence_methods("_general_names") + + def get_values_for_type(self, type): + return self._general_names.get_values_for_type(type) + + def __repr__(self): + return "".format(self._general_names) + + def __eq__(self, other): + if not isinstance(other, IssuerAlternativeName): + return NotImplemented + + return self._general_names == other._general_names + + def __ne__(self, other): + return not self == other + + def __hash__(self): + return hash(self._general_names) + + +@utils.register_interface(ExtensionType) +class CertificateIssuer(object): + oid = CRLEntryExtensionOID.CERTIFICATE_ISSUER + + def __init__(self, general_names): + self._general_names = GeneralNames(general_names) + + __len__, __iter__, __getitem__ = _make_sequence_methods("_general_names") + + def get_values_for_type(self, type): + return self._general_names.get_values_for_type(type) + + def __repr__(self): + return "".format(self._general_names) + + def __eq__(self, other): + if not isinstance(other, CertificateIssuer): + return NotImplemented + + return self._general_names == other._general_names + + def __ne__(self, other): + return not self == other + + def __hash__(self): + return hash(self._general_names) + + +@utils.register_interface(ExtensionType) +class CRLReason(object): + oid = CRLEntryExtensionOID.CRL_REASON + + def __init__(self, reason): + if not isinstance(reason, ReasonFlags): + raise TypeError("reason must be an element from ReasonFlags") + + self._reason = reason + + def __repr__(self): + return "".format(self._reason) + + def __eq__(self, other): + if not isinstance(other, CRLReason): + return NotImplemented + + return self.reason == other.reason + + def __ne__(self, other): + return not self == other + + def __hash__(self): + return hash(self.reason) + + reason = utils.read_only_property("_reason") + + +@utils.register_interface(ExtensionType) +class InvalidityDate(object): + oid = CRLEntryExtensionOID.INVALIDITY_DATE + + def __init__(self, invalidity_date): + if not isinstance(invalidity_date, datetime.datetime): + raise TypeError("invalidity_date must be a datetime.datetime") + + self._invalidity_date = invalidity_date + + def __repr__(self): + return "".format( + self._invalidity_date + ) + + def __eq__(self, other): + if not isinstance(other, InvalidityDate): + return NotImplemented + + return self.invalidity_date == other.invalidity_date + + def __ne__(self, other): + return not self == other + + def __hash__(self): + return hash(self.invalidity_date) + + invalidity_date = utils.read_only_property("_invalidity_date") + + +@utils.register_interface(ExtensionType) +class PrecertificateSignedCertificateTimestamps(object): + oid = ExtensionOID.PRECERT_SIGNED_CERTIFICATE_TIMESTAMPS + + def __init__(self, signed_certificate_timestamps): + 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): + return ( + "".format( + list(self) + ) + ) + + def __hash__(self): + return hash(tuple(self._signed_certificate_timestamps)) + + def __eq__(self, other): + if not isinstance(other, PrecertificateSignedCertificateTimestamps): + return NotImplemented + + return ( + self._signed_certificate_timestamps == + other._signed_certificate_timestamps + ) + + def __ne__(self, other): + return not self == other + + +@utils.register_interface(ExtensionType) +class OCSPNonce(object): + oid = OCSPExtensionOID.NONCE + + def __init__(self, nonce): + if not isinstance(nonce, bytes): + raise TypeError("nonce must be bytes") + + self._nonce = nonce + + def __eq__(self, other): + if not isinstance(other, OCSPNonce): + return NotImplemented + + return self.nonce == other.nonce + + def __ne__(self, other): + return not self == other + + def __hash__(self): + return hash(self.nonce) + + def __repr__(self): + return "".format(self) + + nonce = utils.read_only_property("_nonce") + + +@utils.register_interface(ExtensionType) +class IssuingDistributionPoint(object): + oid = ExtensionOID.ISSUING_DISTRIBUTION_POINT + + def __init__(self, full_name, relative_name, only_contains_user_certs, + only_contains_ca_certs, only_some_reasons, indirect_crl, + only_contains_attribute_certs): + 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." + ) + + crl_constraints = [ + only_contains_user_certs, only_contains_ca_certs, + indirect_crl, 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, " + "indirect_crl, 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): + return ( + "".format(self) + ) + + def __eq__(self, other): + 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 __ne__(self, other): + return not self == other + + def __hash__(self): + 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, + )) + + full_name = utils.read_only_property("_full_name") + relative_name = utils.read_only_property("_relative_name") + only_contains_user_certs = utils.read_only_property( + "_only_contains_user_certs" + ) + only_contains_ca_certs = utils.read_only_property( + "_only_contains_ca_certs" + ) + only_some_reasons = utils.read_only_property("_only_some_reasons") + indirect_crl = utils.read_only_property("_indirect_crl") + only_contains_attribute_certs = utils.read_only_property( + "_only_contains_attribute_certs" + ) + + +@utils.register_interface(ExtensionType) +class UnrecognizedExtension(object): + def __init__(self, oid, value): + if not isinstance(oid, ObjectIdentifier): + raise TypeError("oid must be an ObjectIdentifier") + self._oid = oid + self._value = value + + oid = utils.read_only_property("_oid") + value = utils.read_only_property("_value") + + def __repr__(self): + return ( + "".format( + self + ) + ) + + def __eq__(self, other): + if not isinstance(other, UnrecognizedExtension): + return NotImplemented + + return self.oid == other.oid and self.value == other.value + + def __ne__(self, other): + return not self == other + + def __hash__(self): + return hash((self.oid, self.value)) diff --git a/venv/lib/python3.7/site-packages/cryptography/x509/oid.py b/venv/lib/python3.7/site-packages/cryptography/x509/oid.py new file mode 100644 index 0000000..c1e5dc5 --- /dev/null +++ b/venv/lib/python3.7/site-packages/cryptography/x509/oid.py @@ -0,0 +1,232 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import absolute_import, division, print_function + +from cryptography.hazmat._oid import ObjectIdentifier +from cryptography.hazmat.primitives import hashes + + +class ExtensionOID(object): + 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") + ) + + +class OCSPExtensionOID(object): + NONCE = ObjectIdentifier("1.3.6.1.5.5.7.48.1.2") + + +class CRLEntryExtensionOID(object): + CERTIFICATE_ISSUER = ObjectIdentifier("2.5.29.29") + CRL_REASON = ObjectIdentifier("2.5.29.21") + INVALIDITY_DATE = ObjectIdentifier("2.5.29.24") + + +class NameOID(object): + 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_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") + 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") + + +class SignatureAlgorithmOID(object): + 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") + 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") + 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") + ED25519 = ObjectIdentifier("1.3.101.112") + ED448 = ObjectIdentifier("1.3.101.113") + + +_SIG_OIDS_TO_HASH = { + 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.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.DSA_WITH_SHA1: hashes.SHA1(), + SignatureAlgorithmOID.DSA_WITH_SHA224: hashes.SHA224(), + SignatureAlgorithmOID.DSA_WITH_SHA256: hashes.SHA256(), + SignatureAlgorithmOID.ED25519: None, + SignatureAlgorithmOID.ED448: None, +} + + +class ExtendedKeyUsageOID(object): + 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") + + +class AuthorityInformationAccessOID(object): + CA_ISSUERS = ObjectIdentifier("1.3.6.1.5.5.7.48.2") + OCSP = ObjectIdentifier("1.3.6.1.5.5.7.48.1") + + +class CertificatePoliciesOID(object): + 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") + + +_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", + + 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", + ExtendedKeyUsageOID.SERVER_AUTH: "serverAuth", + ExtendedKeyUsageOID.CLIENT_AUTH: "clientAuth", + ExtendedKeyUsageOID.CODE_SIGNING: "codeSigning", + ExtendedKeyUsageOID.EMAIL_PROTECTION: "emailProtection", + ExtendedKeyUsageOID.TIME_STAMPING: "timeStamping", + ExtendedKeyUsageOID.OCSP_SIGNING: "OCSPSigning", + 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.PRECERT_POISON: "ctPoison", + 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", + CertificatePoliciesOID.CPS_QUALIFIER: "id-qt-cps", + CertificatePoliciesOID.CPS_USER_NOTICE: "id-qt-unotice", + OCSPExtensionOID.NONCE: "OCSPNonce", +} diff --git a/venv/lib/python3.7/site-packages/daphne-2.4.0.dist-info/LICENSE b/venv/lib/python3.7/site-packages/daphne-2.4.0.dist-info/LICENSE new file mode 100644 index 0000000..5f4f225 --- /dev/null +++ b/venv/lib/python3.7/site-packages/daphne-2.4.0.dist-info/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) Django Software Foundation and 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 Django 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.7/site-packages/daphne-2.4.0.dist-info/WHEEL b/venv/lib/python3.7/site-packages/daphne-2.4.0.dist-info/WHEEL new file mode 100644 index 0000000..8b701e9 --- /dev/null +++ b/venv/lib/python3.7/site-packages/daphne-2.4.0.dist-info/WHEEL @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.33.6) +Root-Is-Purelib: true +Tag: py2-none-any +Tag: py3-none-any + diff --git a/venv/lib/python3.7/site-packages/daphne-2.4.0.dist-info/entry_points.txt b/venv/lib/python3.7/site-packages/daphne-2.4.0.dist-info/entry_points.txt new file mode 100644 index 0000000..af86eee --- /dev/null +++ b/venv/lib/python3.7/site-packages/daphne-2.4.0.dist-info/entry_points.txt @@ -0,0 +1,3 @@ +[console_scripts] +daphne = daphne.cli:CommandLineInterface.entrypoint + diff --git a/venv/lib/python3.7/site-packages/daphne-2.4.0.dist-info/top_level.txt b/venv/lib/python3.7/site-packages/daphne-2.4.0.dist-info/top_level.txt new file mode 100644 index 0000000..eed8051 --- /dev/null +++ b/venv/lib/python3.7/site-packages/daphne-2.4.0.dist-info/top_level.txt @@ -0,0 +1,2 @@ +daphne +twisted diff --git a/venv/lib/python3.7/site-packages/daphne/utils.py b/venv/lib/python3.7/site-packages/daphne/utils.py new file mode 100644 index 0000000..81f1f9d --- /dev/null +++ b/venv/lib/python3.7/site-packages/daphne/utils.py @@ -0,0 +1,84 @@ +import importlib + +from twisted.web.http_headers import Headers + + +def import_by_path(path): + """ + Given a dotted/colon path, like project.module:ClassName.callable, + returns the object at the end of the path. + """ + module_path, object_path = path.split(":", 1) + target = importlib.import_module(module_path) + for bit in object_path.split("."): + target = getattr(target, bit) + return target + + +def header_value(headers, header_name): + value = headers[header_name] + if isinstance(value, list): + value = value[0] + return value.decode("utf-8") + + +def parse_x_forwarded_for( + headers, + address_header_name="X-Forwarded-For", + port_header_name="X-Forwarded-Port", + proto_header_name="X-Forwarded-Proto", + original_addr=None, + original_scheme=None, +): + """ + Parses an X-Forwarded-For header and returns a host/port pair as a list. + + @param headers: The twisted-style object containing a request's headers + @param address_header_name: The name of the expected host header + @param port_header_name: The name of the expected port header + @param proto_header_name: The name of the expected proto header + @param original_addr: A host/port pair that should be returned if the headers are not in the request + @param original_scheme: A scheme that should be returned if the headers are not in the request + @return: A list containing a host (string) as the first entry and a port (int) as the second. + """ + if not address_header_name: + return original_addr, original_scheme + + # Convert twisted-style headers into dicts + if isinstance(headers, Headers): + headers = dict(headers.getAllRawHeaders()) + + # Lowercase all header names in the dict + headers = {name.lower(): values for name, values in headers.items()} + + # Make sure header names are bytes (values are checked in header_value) + assert all(isinstance(name, bytes) for name in headers.keys()) + + address_header_name = address_header_name.lower().encode("utf-8") + result_addr = original_addr + result_scheme = original_scheme + if address_header_name in headers: + address_value = header_value(headers, address_header_name) + + if "," in address_value: + address_value = address_value.split(",")[0].strip() + + result_addr = [address_value, 0] + + if port_header_name: + # We only want to parse the X-Forwarded-Port header if we also parsed the X-Forwarded-For + # header to avoid inconsistent results. + port_header_name = port_header_name.lower().encode("utf-8") + if port_header_name in headers: + port_value = header_value(headers, port_header_name) + try: + result_addr[1] = int(port_value) + except ValueError: + pass + + if proto_header_name: + proto_header_name = proto_header_name.lower().encode("utf-8") + if proto_header_name in headers: + result_scheme = header_value(headers, proto_header_name) + + return result_addr, result_scheme diff --git a/venv/lib/python3.7/site-packages/django/__init__.py b/venv/lib/python3.7/site-packages/django/__init__.py new file mode 100644 index 0000000..877ad80 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/__init__.py @@ -0,0 +1,24 @@ +from django.utils.version import get_version + +VERSION = (2, 2, 6, 'final', 0) + +__version__ = get_version(VERSION) + + +def setup(set_prefix=True): + """ + Configure the settings (this happens as a side effect of accessing the + first setting), configure logging and populate the app registry. + Set the thread-local urlresolvers script prefix if `set_prefix` is True. + """ + from django.apps import apps + from django.conf import settings + from django.urls import set_script_prefix + from django.utils.log import configure_logging + + configure_logging(settings.LOGGING_CONFIG, settings.LOGGING) + if set_prefix: + set_script_prefix( + '/' if settings.FORCE_SCRIPT_NAME is None else settings.FORCE_SCRIPT_NAME + ) + apps.populate(settings.INSTALLED_APPS) diff --git a/venv/lib/python3.7/site-packages/django/bin/django-admin.py b/venv/lib/python3.7/site-packages/django/bin/django-admin.py new file mode 100755 index 0000000..f518cdc --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/bin/django-admin.py @@ -0,0 +1,5 @@ +#!/usr/bin/env python +from django.core import management + +if __name__ == "__main__": + management.execute_from_command_line() diff --git a/venv/lib/python3.7/site-packages/django/conf/app_template/apps.py-tpl b/venv/lib/python3.7/site-packages/django/conf/app_template/apps.py-tpl new file mode 100644 index 0000000..9b2ce52 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/app_template/apps.py-tpl @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class {{ camel_case_app_name }}Config(AppConfig): + name = '{{ app_name }}' diff --git a/venv/lib/python3.7/site-packages/django/conf/global_settings.py b/venv/lib/python3.7/site-packages/django/conf/global_settings.py new file mode 100644 index 0000000..f3abfad --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/global_settings.py @@ -0,0 +1,636 @@ +""" +Default Django settings. Override these with settings in the module pointed to +by the DJANGO_SETTINGS_MODULE environment variable. +""" + + +# This is defined here as a do-nothing function because we can't import +# django.utils.translation -- that module depends on the settings. +def gettext_noop(s): + return s + + +#################### +# CORE # +#################### + +DEBUG = False + +# Whether the framework should propagate raw exceptions rather than catching +# them. This is useful under some testing situations and should never be used +# on a live site. +DEBUG_PROPAGATE_EXCEPTIONS = False + +# People who get code error notifications. +# In the format [('Full Name', 'email@example.com'), ('Full Name', 'anotheremail@example.com')] +ADMINS = [] + +# List of IP addresses, as strings, that: +# * See debug comments, when DEBUG is true +# * Receive x-headers +INTERNAL_IPS = [] + +# Hosts/domain names that are valid for this site. +# "*" matches anything, ".example.com" matches example.com and all subdomains +ALLOWED_HOSTS = [] + +# Local time zone for this installation. All choices can be found here: +# https://en.wikipedia.org/wiki/List_of_tz_zones_by_name (although not all +# systems may support all possibilities). When USE_TZ is True, this is +# interpreted as the default user time zone. +TIME_ZONE = 'America/Chicago' + +# If you set this to True, Django will use timezone-aware datetimes. +USE_TZ = False + +# Language code for this installation. All choices can be found here: +# http://www.i18nguy.com/unicode/language-identifiers.html +LANGUAGE_CODE = 'en-us' + +# Languages we provide translations for, out of the box. +LANGUAGES = [ + ('af', gettext_noop('Afrikaans')), + ('ar', gettext_noop('Arabic')), + ('ast', gettext_noop('Asturian')), + ('az', gettext_noop('Azerbaijani')), + ('bg', gettext_noop('Bulgarian')), + ('be', gettext_noop('Belarusian')), + ('bn', gettext_noop('Bengali')), + ('br', gettext_noop('Breton')), + ('bs', gettext_noop('Bosnian')), + ('ca', gettext_noop('Catalan')), + ('cs', gettext_noop('Czech')), + ('cy', gettext_noop('Welsh')), + ('da', gettext_noop('Danish')), + ('de', gettext_noop('German')), + ('dsb', gettext_noop('Lower Sorbian')), + ('el', gettext_noop('Greek')), + ('en', gettext_noop('English')), + ('en-au', gettext_noop('Australian English')), + ('en-gb', gettext_noop('British English')), + ('eo', gettext_noop('Esperanto')), + ('es', gettext_noop('Spanish')), + ('es-ar', gettext_noop('Argentinian Spanish')), + ('es-co', gettext_noop('Colombian Spanish')), + ('es-mx', gettext_noop('Mexican Spanish')), + ('es-ni', gettext_noop('Nicaraguan Spanish')), + ('es-ve', gettext_noop('Venezuelan Spanish')), + ('et', gettext_noop('Estonian')), + ('eu', gettext_noop('Basque')), + ('fa', gettext_noop('Persian')), + ('fi', gettext_noop('Finnish')), + ('fr', gettext_noop('French')), + ('fy', gettext_noop('Frisian')), + ('ga', gettext_noop('Irish')), + ('gd', gettext_noop('Scottish Gaelic')), + ('gl', gettext_noop('Galician')), + ('he', gettext_noop('Hebrew')), + ('hi', gettext_noop('Hindi')), + ('hr', gettext_noop('Croatian')), + ('hsb', gettext_noop('Upper Sorbian')), + ('hu', gettext_noop('Hungarian')), + ('hy', gettext_noop('Armenian')), + ('ia', gettext_noop('Interlingua')), + ('id', gettext_noop('Indonesian')), + ('io', gettext_noop('Ido')), + ('is', gettext_noop('Icelandic')), + ('it', gettext_noop('Italian')), + ('ja', gettext_noop('Japanese')), + ('ka', gettext_noop('Georgian')), + ('kab', gettext_noop('Kabyle')), + ('kk', gettext_noop('Kazakh')), + ('km', gettext_noop('Khmer')), + ('kn', gettext_noop('Kannada')), + ('ko', gettext_noop('Korean')), + ('lb', gettext_noop('Luxembourgish')), + ('lt', gettext_noop('Lithuanian')), + ('lv', gettext_noop('Latvian')), + ('mk', gettext_noop('Macedonian')), + ('ml', gettext_noop('Malayalam')), + ('mn', gettext_noop('Mongolian')), + ('mr', gettext_noop('Marathi')), + ('my', gettext_noop('Burmese')), + ('nb', gettext_noop('Norwegian Bokmål')), + ('ne', gettext_noop('Nepali')), + ('nl', gettext_noop('Dutch')), + ('nn', gettext_noop('Norwegian Nynorsk')), + ('os', gettext_noop('Ossetic')), + ('pa', gettext_noop('Punjabi')), + ('pl', gettext_noop('Polish')), + ('pt', gettext_noop('Portuguese')), + ('pt-br', gettext_noop('Brazilian Portuguese')), + ('ro', gettext_noop('Romanian')), + ('ru', gettext_noop('Russian')), + ('sk', gettext_noop('Slovak')), + ('sl', gettext_noop('Slovenian')), + ('sq', gettext_noop('Albanian')), + ('sr', gettext_noop('Serbian')), + ('sr-latn', gettext_noop('Serbian Latin')), + ('sv', gettext_noop('Swedish')), + ('sw', gettext_noop('Swahili')), + ('ta', gettext_noop('Tamil')), + ('te', gettext_noop('Telugu')), + ('th', gettext_noop('Thai')), + ('tr', gettext_noop('Turkish')), + ('tt', gettext_noop('Tatar')), + ('udm', gettext_noop('Udmurt')), + ('uk', gettext_noop('Ukrainian')), + ('ur', gettext_noop('Urdu')), + ('vi', gettext_noop('Vietnamese')), + ('zh-hans', gettext_noop('Simplified Chinese')), + ('zh-hant', gettext_noop('Traditional Chinese')), +] + +# Languages using BiDi (right-to-left) layout +LANGUAGES_BIDI = ["he", "ar", "fa", "ur"] + +# If you set this to False, Django will make some optimizations so as not +# to load the internationalization machinery. +USE_I18N = True +LOCALE_PATHS = [] + +# Settings for language cookie +LANGUAGE_COOKIE_NAME = 'django_language' +LANGUAGE_COOKIE_AGE = None +LANGUAGE_COOKIE_DOMAIN = None +LANGUAGE_COOKIE_PATH = '/' + + +# If you set this to True, Django will format dates, numbers and calendars +# according to user current locale. +USE_L10N = False + +# Not-necessarily-technical managers of the site. They get broken link +# notifications and other various emails. +MANAGERS = ADMINS + +# Default content type and charset to use for all HttpResponse objects, if a +# MIME type isn't manually specified. These are used to construct the +# Content-Type header. +DEFAULT_CONTENT_TYPE = 'text/html' +DEFAULT_CHARSET = 'utf-8' + +# Encoding of files read from disk (template and initial SQL files). +FILE_CHARSET = 'utf-8' + +# Email address that error messages come from. +SERVER_EMAIL = 'root@localhost' + +# Database connection info. If left empty, will default to the dummy backend. +DATABASES = {} + +# Classes used to implement DB routing behavior. +DATABASE_ROUTERS = [] + +# The email backend to use. For possible shortcuts see django.core.mail. +# The default is to use the SMTP backend. +# Third-party backends can be specified by providing a Python path +# to a module that defines an EmailBackend class. +EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' + +# Host for sending email. +EMAIL_HOST = 'localhost' + +# Port for sending email. +EMAIL_PORT = 25 + +# Whether to send SMTP 'Date' header in the local time zone or in UTC. +EMAIL_USE_LOCALTIME = False + +# Optional SMTP authentication information for EMAIL_HOST. +EMAIL_HOST_USER = '' +EMAIL_HOST_PASSWORD = '' +EMAIL_USE_TLS = False +EMAIL_USE_SSL = False +EMAIL_SSL_CERTFILE = None +EMAIL_SSL_KEYFILE = None +EMAIL_TIMEOUT = None + +# List of strings representing installed apps. +INSTALLED_APPS = [] + +TEMPLATES = [] + +# Default form rendering class. +FORM_RENDERER = 'django.forms.renderers.DjangoTemplates' + +# Default email address to use for various automated correspondence from +# the site managers. +DEFAULT_FROM_EMAIL = 'webmaster@localhost' + +# Subject-line prefix for email messages send with django.core.mail.mail_admins +# or ...mail_managers. Make sure to include the trailing space. +EMAIL_SUBJECT_PREFIX = '[Django] ' + +# Whether to append trailing slashes to URLs. +APPEND_SLASH = True + +# Whether to prepend the "www." subdomain to URLs that don't have it. +PREPEND_WWW = False + +# Override the server-derived value of SCRIPT_NAME +FORCE_SCRIPT_NAME = None + +# List of compiled regular expression objects representing User-Agent strings +# that are not allowed to visit any page, systemwide. Use this for bad +# robots/crawlers. Here are a few examples: +# import re +# DISALLOWED_USER_AGENTS = [ +# re.compile(r'^NaverBot.*'), +# re.compile(r'^EmailSiphon.*'), +# re.compile(r'^SiteSucker.*'), +# re.compile(r'^sohu-search'), +# ] +DISALLOWED_USER_AGENTS = [] + +ABSOLUTE_URL_OVERRIDES = {} + +# List of compiled regular expression objects representing URLs that need not +# be reported by BrokenLinkEmailsMiddleware. Here are a few examples: +# import re +# IGNORABLE_404_URLS = [ +# re.compile(r'^/apple-touch-icon.*\.png$'), +# re.compile(r'^/favicon.ico$'), +# re.compile(r'^/robots.txt$'), +# re.compile(r'^/phpmyadmin/'), +# re.compile(r'\.(cgi|php|pl)$'), +# ] +IGNORABLE_404_URLS = [] + +# A secret key for this particular Django installation. Used in secret-key +# hashing algorithms. Set this in your settings, or Django will complain +# loudly. +SECRET_KEY = '' + +# Default file storage mechanism that holds media. +DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage' + +# Absolute filesystem path to the directory that will hold user-uploaded files. +# Example: "/var/www/example.com/media/" +MEDIA_ROOT = '' + +# URL that handles the media served from MEDIA_ROOT. +# Examples: "http://example.com/media/", "http://media.example.com/" +MEDIA_URL = '' + +# Absolute path to the directory static files should be collected to. +# Example: "/var/www/example.com/static/" +STATIC_ROOT = None + +# URL that handles the static files served from STATIC_ROOT. +# Example: "http://example.com/static/", "http://static.example.com/" +STATIC_URL = None + +# List of upload handler classes to be applied in order. +FILE_UPLOAD_HANDLERS = [ + 'django.core.files.uploadhandler.MemoryFileUploadHandler', + 'django.core.files.uploadhandler.TemporaryFileUploadHandler', +] + +# Maximum size, in bytes, of a request before it will be streamed to the +# file system instead of into memory. +FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440 # i.e. 2.5 MB + +# Maximum size in bytes of request data (excluding file uploads) that will be +# read before a SuspiciousOperation (RequestDataTooBig) is raised. +DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440 # i.e. 2.5 MB + +# Maximum number of GET/POST parameters that will be read before a +# SuspiciousOperation (TooManyFieldsSent) is raised. +DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000 + +# Directory in which upload streamed files will be temporarily saved. A value of +# `None` will make Django use the operating system's default temporary directory +# (i.e. "/tmp" on *nix systems). +FILE_UPLOAD_TEMP_DIR = None + +# The numeric mode to set newly-uploaded files to. The value should be a mode +# you'd pass directly to os.chmod; see https://docs.python.org/library/os.html#files-and-directories. +FILE_UPLOAD_PERMISSIONS = None + +# The numeric mode to assign to newly-created directories, when uploading files. +# The value should be a mode as you'd pass to os.chmod; +# see https://docs.python.org/library/os.html#files-and-directories. +FILE_UPLOAD_DIRECTORY_PERMISSIONS = None + +# Python module path where user will place custom format definition. +# The directory where this setting is pointing should contain subdirectories +# named as the locales, containing a formats.py file +# (i.e. "myproject.locale" for myproject/locale/en/formats.py etc. use) +FORMAT_MODULE_PATH = None + +# Default formatting for date objects. See all available format strings here: +# https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = 'N j, Y' + +# Default formatting for datetime objects. See all available format strings here: +# https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATETIME_FORMAT = 'N j, Y, P' + +# Default formatting for time objects. See all available format strings here: +# https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +TIME_FORMAT = 'P' + +# Default formatting for date objects when only the year and month are relevant. +# See all available format strings here: +# https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +YEAR_MONTH_FORMAT = 'F Y' + +# Default formatting for date objects when only the month and day are relevant. +# See all available format strings here: +# https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +MONTH_DAY_FORMAT = 'F j' + +# Default short formatting for date objects. See all available format strings here: +# https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +SHORT_DATE_FORMAT = 'm/d/Y' + +# Default short formatting for datetime objects. +# See all available format strings here: +# https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +SHORT_DATETIME_FORMAT = 'm/d/Y P' + +# Default formats to be used when parsing dates from input boxes, in order +# See all available format string here: +# https://docs.python.org/library/datetime.html#strftime-behavior +# * Note that these format strings are different from the ones to display dates +DATE_INPUT_FORMATS = [ + '%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', # '2006-10-25', '10/25/2006', '10/25/06' + '%b %d %Y', '%b %d, %Y', # 'Oct 25 2006', 'Oct 25, 2006' + '%d %b %Y', '%d %b, %Y', # '25 Oct 2006', '25 Oct, 2006' + '%B %d %Y', '%B %d, %Y', # 'October 25 2006', 'October 25, 2006' + '%d %B %Y', '%d %B, %Y', # '25 October 2006', '25 October, 2006' +] + +# Default formats to be used when parsing times from input boxes, in order +# See all available format string here: +# https://docs.python.org/library/datetime.html#strftime-behavior +# * Note that these format strings are different from the ones to display dates +TIME_INPUT_FORMATS = [ + '%H:%M:%S', # '14:30:59' + '%H:%M:%S.%f', # '14:30:59.000200' + '%H:%M', # '14:30' +] + +# Default formats to be used when parsing dates and times from input boxes, +# in order +# See all available format string here: +# https://docs.python.org/library/datetime.html#strftime-behavior +# * Note that these format strings are different from the ones to display dates +DATETIME_INPUT_FORMATS = [ + '%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59' + '%Y-%m-%d %H:%M:%S.%f', # '2006-10-25 14:30:59.000200' + '%Y-%m-%d %H:%M', # '2006-10-25 14:30' + '%Y-%m-%d', # '2006-10-25' + '%m/%d/%Y %H:%M:%S', # '10/25/2006 14:30:59' + '%m/%d/%Y %H:%M:%S.%f', # '10/25/2006 14:30:59.000200' + '%m/%d/%Y %H:%M', # '10/25/2006 14:30' + '%m/%d/%Y', # '10/25/2006' + '%m/%d/%y %H:%M:%S', # '10/25/06 14:30:59' + '%m/%d/%y %H:%M:%S.%f', # '10/25/06 14:30:59.000200' + '%m/%d/%y %H:%M', # '10/25/06 14:30' + '%m/%d/%y', # '10/25/06' +] + +# First day of week, to be used on calendars +# 0 means Sunday, 1 means Monday... +FIRST_DAY_OF_WEEK = 0 + +# Decimal separator symbol +DECIMAL_SEPARATOR = '.' + +# Boolean that sets whether to add thousand separator when formatting numbers +USE_THOUSAND_SEPARATOR = False + +# Number of digits that will be together, when splitting them by +# THOUSAND_SEPARATOR. 0 means no grouping, 3 means splitting by thousands... +NUMBER_GROUPING = 0 + +# Thousand separator symbol +THOUSAND_SEPARATOR = ',' + +# The tablespaces to use for each model when not specified otherwise. +DEFAULT_TABLESPACE = '' +DEFAULT_INDEX_TABLESPACE = '' + +# Default X-Frame-Options header value +X_FRAME_OPTIONS = 'SAMEORIGIN' + +USE_X_FORWARDED_HOST = False +USE_X_FORWARDED_PORT = False + +# The Python dotted path to the WSGI application that Django's internal server +# (runserver) will use. If `None`, the return value of +# 'django.core.wsgi.get_wsgi_application' is used, thus preserving the same +# behavior as previous versions of Django. Otherwise this should point to an +# actual WSGI application object. +WSGI_APPLICATION = None + +# If your Django app is behind a proxy that sets a header to specify secure +# connections, AND that proxy ensures that user-submitted headers with the +# same name are ignored (so that people can't spoof it), set this value to +# a tuple of (header_name, header_value). For any requests that come in with +# that header/value, request.is_secure() will return True. +# WARNING! Only set this if you fully understand what you're doing. Otherwise, +# you may be opening yourself up to a security risk. +SECURE_PROXY_SSL_HEADER = None + +############## +# MIDDLEWARE # +############## + +# List of middleware to use. Order is important; in the request phase, these +# middleware will be applied in the order given, and in the response +# phase the middleware will be applied in reverse order. +MIDDLEWARE = [] + +############ +# SESSIONS # +############ + +# Cache to store session data if using the cache session backend. +SESSION_CACHE_ALIAS = 'default' +# Cookie name. This can be whatever you want. +SESSION_COOKIE_NAME = 'sessionid' +# Age of cookie, in seconds (default: 2 weeks). +SESSION_COOKIE_AGE = 60 * 60 * 24 * 7 * 2 +# A string like "example.com", or None for standard domain cookie. +SESSION_COOKIE_DOMAIN = None +# Whether the session cookie should be secure (https:// only). +SESSION_COOKIE_SECURE = False +# The path of the session cookie. +SESSION_COOKIE_PATH = '/' +# Whether to use the HttpOnly flag. +SESSION_COOKIE_HTTPONLY = True +# Whether to set the flag restricting cookie leaks on cross-site requests. +# This can be 'Lax', 'Strict', or None to disable the flag. +SESSION_COOKIE_SAMESITE = 'Lax' +# Whether to save the session data on every request. +SESSION_SAVE_EVERY_REQUEST = False +# Whether a user's session cookie expires when the Web browser is closed. +SESSION_EXPIRE_AT_BROWSER_CLOSE = False +# The module to store session data +SESSION_ENGINE = 'django.contrib.sessions.backends.db' +# Directory to store session files if using the file session module. If None, +# the backend will use a sensible default. +SESSION_FILE_PATH = None +# class to serialize session data +SESSION_SERIALIZER = 'django.contrib.sessions.serializers.JSONSerializer' + +######### +# CACHE # +######### + +# The cache backends to use. +CACHES = { + 'default': { + 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', + } +} +CACHE_MIDDLEWARE_KEY_PREFIX = '' +CACHE_MIDDLEWARE_SECONDS = 600 +CACHE_MIDDLEWARE_ALIAS = 'default' + +################## +# AUTHENTICATION # +################## + +AUTH_USER_MODEL = 'auth.User' + +AUTHENTICATION_BACKENDS = ['django.contrib.auth.backends.ModelBackend'] + +LOGIN_URL = '/accounts/login/' + +LOGIN_REDIRECT_URL = '/accounts/profile/' + +LOGOUT_REDIRECT_URL = None + +# The number of days a password reset link is valid for +PASSWORD_RESET_TIMEOUT_DAYS = 3 + +# the first hasher in this list is the preferred algorithm. any +# password using different algorithms will be converted automatically +# upon login +PASSWORD_HASHERS = [ + 'django.contrib.auth.hashers.PBKDF2PasswordHasher', + 'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher', + 'django.contrib.auth.hashers.Argon2PasswordHasher', + 'django.contrib.auth.hashers.BCryptSHA256PasswordHasher', +] + +AUTH_PASSWORD_VALIDATORS = [] + +########### +# SIGNING # +########### + +SIGNING_BACKEND = 'django.core.signing.TimestampSigner' + +######## +# CSRF # +######## + +# Dotted path to callable to be used as view when a request is +# rejected by the CSRF middleware. +CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure' + +# Settings for CSRF cookie. +CSRF_COOKIE_NAME = 'csrftoken' +CSRF_COOKIE_AGE = 60 * 60 * 24 * 7 * 52 +CSRF_COOKIE_DOMAIN = None +CSRF_COOKIE_PATH = '/' +CSRF_COOKIE_SECURE = False +CSRF_COOKIE_HTTPONLY = False +CSRF_COOKIE_SAMESITE = 'Lax' +CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN' +CSRF_TRUSTED_ORIGINS = [] +CSRF_USE_SESSIONS = False + +############ +# MESSAGES # +############ + +# Class to use as messages backend +MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage' + +# Default values of MESSAGE_LEVEL and MESSAGE_TAGS are defined within +# django.contrib.messages to avoid imports in this settings file. + +########### +# LOGGING # +########### + +# The callable to use to configure logging +LOGGING_CONFIG = 'logging.config.dictConfig' + +# Custom logging configuration. +LOGGING = {} + +# Default exception reporter filter class used in case none has been +# specifically assigned to the HttpRequest instance. +DEFAULT_EXCEPTION_REPORTER_FILTER = 'django.views.debug.SafeExceptionReporterFilter' + +########### +# TESTING # +########### + +# The name of the class to use to run the test suite +TEST_RUNNER = 'django.test.runner.DiscoverRunner' + +# Apps that don't need to be serialized at test database creation time +# (only apps with migrations are to start with) +TEST_NON_SERIALIZED_APPS = [] + +############ +# FIXTURES # +############ + +# The list of directories to search for fixtures +FIXTURE_DIRS = [] + +############### +# STATICFILES # +############### + +# A list of locations of additional static files +STATICFILES_DIRS = [] + +# The default file storage backend used during the build process +STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage' + +# List of finder classes that know how to find static files in +# various locations. +STATICFILES_FINDERS = [ + 'django.contrib.staticfiles.finders.FileSystemFinder', + 'django.contrib.staticfiles.finders.AppDirectoriesFinder', + # 'django.contrib.staticfiles.finders.DefaultStorageFinder', +] + +############## +# MIGRATIONS # +############## + +# Migration module overrides for apps, by app label. +MIGRATION_MODULES = {} + +################# +# SYSTEM CHECKS # +################# + +# List of all issues generated by system checks that should be silenced. Light +# issues like warnings, infos or debugs will not generate a message. Silencing +# serious issues like errors and criticals does not result in hiding the +# message, but Django will not stop you from e.g. running server. +SILENCED_SYSTEM_CHECKS = [] + +####################### +# SECURITY MIDDLEWARE # +####################### +SECURE_BROWSER_XSS_FILTER = False +SECURE_CONTENT_TYPE_NOSNIFF = False +SECURE_HSTS_INCLUDE_SUBDOMAINS = False +SECURE_HSTS_PRELOAD = False +SECURE_HSTS_SECONDS = 0 +SECURE_REDIRECT_EXEMPT = [] +SECURE_SSL_HOST = None +SECURE_SSL_REDIRECT = False diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/__init__.py b/venv/lib/python3.7/site-packages/django/conf/locale/__init__.py new file mode 100644 index 0000000..720045d --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/__init__.py @@ -0,0 +1,575 @@ +""" +LANG_INFO is a dictionary structure to provide meta information about languages. + +About name_local: capitalize it as if your language name was appearing +inside a sentence in your language. +The 'fallback' key can be used to specify a special fallback logic which doesn't +follow the traditional 'fr-ca' -> 'fr' fallback logic. +""" + +LANG_INFO = { + 'af': { + 'bidi': False, + 'code': 'af', + 'name': 'Afrikaans', + 'name_local': 'Afrikaans', + }, + 'ar': { + 'bidi': True, + 'code': 'ar', + 'name': 'Arabic', + 'name_local': 'العربيّة', + }, + 'ast': { + 'bidi': False, + 'code': 'ast', + 'name': 'Asturian', + 'name_local': 'asturianu', + }, + 'az': { + 'bidi': True, + 'code': 'az', + 'name': 'Azerbaijani', + 'name_local': 'Azərbaycanca', + }, + 'be': { + 'bidi': False, + 'code': 'be', + 'name': 'Belarusian', + 'name_local': 'беларуская', + }, + 'bg': { + 'bidi': False, + 'code': 'bg', + 'name': 'Bulgarian', + 'name_local': 'български', + }, + 'bn': { + 'bidi': False, + 'code': 'bn', + 'name': 'Bengali', + 'name_local': 'বাংলা', + }, + 'br': { + 'bidi': False, + 'code': 'br', + 'name': 'Breton', + 'name_local': 'brezhoneg', + }, + 'bs': { + 'bidi': False, + 'code': 'bs', + 'name': 'Bosnian', + 'name_local': 'bosanski', + }, + 'ca': { + 'bidi': False, + 'code': 'ca', + 'name': 'Catalan', + 'name_local': 'català', + }, + 'cs': { + 'bidi': False, + 'code': 'cs', + 'name': 'Czech', + 'name_local': 'česky', + }, + 'cy': { + 'bidi': False, + 'code': 'cy', + 'name': 'Welsh', + 'name_local': 'Cymraeg', + }, + 'da': { + 'bidi': False, + 'code': 'da', + 'name': 'Danish', + 'name_local': 'dansk', + }, + 'de': { + 'bidi': False, + 'code': 'de', + 'name': 'German', + 'name_local': 'Deutsch', + }, + 'dsb': { + 'bidi': False, + 'code': 'dsb', + 'name': 'Lower Sorbian', + 'name_local': 'dolnoserbski', + }, + 'el': { + 'bidi': False, + 'code': 'el', + 'name': 'Greek', + 'name_local': 'Ελληνικά', + }, + 'en': { + 'bidi': False, + 'code': 'en', + 'name': 'English', + 'name_local': 'English', + }, + 'en-au': { + 'bidi': False, + 'code': 'en-au', + 'name': 'Australian English', + 'name_local': 'Australian English', + }, + 'en-gb': { + 'bidi': False, + 'code': 'en-gb', + 'name': 'British English', + 'name_local': 'British English', + }, + 'eo': { + 'bidi': False, + 'code': 'eo', + 'name': 'Esperanto', + 'name_local': 'Esperanto', + }, + 'es': { + 'bidi': False, + 'code': 'es', + 'name': 'Spanish', + 'name_local': 'español', + }, + 'es-ar': { + 'bidi': False, + 'code': 'es-ar', + 'name': 'Argentinian Spanish', + 'name_local': 'español de Argentina', + }, + 'es-co': { + 'bidi': False, + 'code': 'es-co', + 'name': 'Colombian Spanish', + 'name_local': 'español de Colombia', + }, + 'es-mx': { + 'bidi': False, + 'code': 'es-mx', + 'name': 'Mexican Spanish', + 'name_local': 'español de Mexico', + }, + 'es-ni': { + 'bidi': False, + 'code': 'es-ni', + 'name': 'Nicaraguan Spanish', + 'name_local': 'español de Nicaragua', + }, + 'es-ve': { + 'bidi': False, + 'code': 'es-ve', + 'name': 'Venezuelan Spanish', + 'name_local': 'español de Venezuela', + }, + 'et': { + 'bidi': False, + 'code': 'et', + 'name': 'Estonian', + 'name_local': 'eesti', + }, + 'eu': { + 'bidi': False, + 'code': 'eu', + 'name': 'Basque', + 'name_local': 'Basque', + }, + 'fa': { + 'bidi': True, + 'code': 'fa', + 'name': 'Persian', + 'name_local': 'فارسی', + }, + 'fi': { + 'bidi': False, + 'code': 'fi', + 'name': 'Finnish', + 'name_local': 'suomi', + }, + 'fr': { + 'bidi': False, + 'code': 'fr', + 'name': 'French', + 'name_local': 'français', + }, + 'fy': { + 'bidi': False, + 'code': 'fy', + 'name': 'Frisian', + 'name_local': 'frysk', + }, + 'ga': { + 'bidi': False, + 'code': 'ga', + 'name': 'Irish', + 'name_local': 'Gaeilge', + }, + 'gd': { + 'bidi': False, + 'code': 'gd', + 'name': 'Scottish Gaelic', + 'name_local': 'Gàidhlig', + }, + 'gl': { + 'bidi': False, + 'code': 'gl', + 'name': 'Galician', + 'name_local': 'galego', + }, + 'he': { + 'bidi': True, + 'code': 'he', + 'name': 'Hebrew', + 'name_local': 'עברית', + }, + 'hi': { + 'bidi': False, + 'code': 'hi', + 'name': 'Hindi', + 'name_local': 'Hindi', + }, + 'hr': { + 'bidi': False, + 'code': 'hr', + 'name': 'Croatian', + 'name_local': 'Hrvatski', + }, + 'hsb': { + 'bidi': False, + 'code': 'hsb', + 'name': 'Upper Sorbian', + 'name_local': 'hornjoserbsce', + }, + 'hu': { + 'bidi': False, + 'code': 'hu', + 'name': 'Hungarian', + 'name_local': 'Magyar', + }, + 'hy': { + 'bidi': False, + 'code': 'hy', + 'name': 'Armenian', + 'name_local': 'հայերեն', + }, + 'ia': { + 'bidi': False, + 'code': 'ia', + 'name': 'Interlingua', + 'name_local': 'Interlingua', + }, + 'io': { + 'bidi': False, + 'code': 'io', + 'name': 'Ido', + 'name_local': 'ido', + }, + 'id': { + 'bidi': False, + 'code': 'id', + 'name': 'Indonesian', + 'name_local': 'Bahasa Indonesia', + }, + 'is': { + 'bidi': False, + 'code': 'is', + 'name': 'Icelandic', + 'name_local': 'Íslenska', + }, + 'it': { + 'bidi': False, + 'code': 'it', + 'name': 'Italian', + 'name_local': 'italiano', + }, + 'ja': { + 'bidi': False, + 'code': 'ja', + 'name': 'Japanese', + 'name_local': '日本語', + }, + 'ka': { + 'bidi': False, + 'code': 'ka', + 'name': 'Georgian', + 'name_local': 'ქართული', + }, + 'kab': { + 'bidi': False, + 'code': 'kab', + 'name': 'Kabyle', + 'name_local': 'taqbaylit', + }, + 'kk': { + 'bidi': False, + 'code': 'kk', + 'name': 'Kazakh', + 'name_local': 'Қазақ', + }, + 'km': { + 'bidi': False, + 'code': 'km', + 'name': 'Khmer', + 'name_local': 'Khmer', + }, + 'kn': { + 'bidi': False, + 'code': 'kn', + 'name': 'Kannada', + 'name_local': 'Kannada', + }, + 'ko': { + 'bidi': False, + 'code': 'ko', + 'name': 'Korean', + 'name_local': '한국어', + }, + 'lb': { + 'bidi': False, + 'code': 'lb', + 'name': 'Luxembourgish', + 'name_local': 'Lëtzebuergesch', + }, + 'lt': { + 'bidi': False, + 'code': 'lt', + 'name': 'Lithuanian', + 'name_local': 'Lietuviškai', + }, + 'lv': { + 'bidi': False, + 'code': 'lv', + 'name': 'Latvian', + 'name_local': 'latviešu', + }, + 'mk': { + 'bidi': False, + 'code': 'mk', + 'name': 'Macedonian', + 'name_local': 'Македонски', + }, + 'ml': { + 'bidi': False, + 'code': 'ml', + 'name': 'Malayalam', + 'name_local': 'Malayalam', + }, + 'mn': { + 'bidi': False, + 'code': 'mn', + 'name': 'Mongolian', + 'name_local': 'Mongolian', + }, + 'mr': { + 'bidi': False, + 'code': 'mr', + 'name': 'Marathi', + 'name_local': 'मराठी', + }, + 'my': { + 'bidi': False, + 'code': 'my', + 'name': 'Burmese', + 'name_local': 'မြန်မာဘာသာ', + }, + 'nb': { + 'bidi': False, + 'code': 'nb', + 'name': 'Norwegian Bokmal', + 'name_local': 'norsk (bokmål)', + }, + 'ne': { + 'bidi': False, + 'code': 'ne', + 'name': 'Nepali', + 'name_local': 'नेपाली', + }, + 'nl': { + 'bidi': False, + 'code': 'nl', + 'name': 'Dutch', + 'name_local': 'Nederlands', + }, + 'nn': { + 'bidi': False, + 'code': 'nn', + 'name': 'Norwegian Nynorsk', + 'name_local': 'norsk (nynorsk)', + }, + 'no': { + 'bidi': False, + 'code': 'no', + 'name': 'Norwegian', + 'name_local': 'norsk', + }, + 'os': { + 'bidi': False, + 'code': 'os', + 'name': 'Ossetic', + 'name_local': 'Ирон', + }, + 'pa': { + 'bidi': False, + 'code': 'pa', + 'name': 'Punjabi', + 'name_local': 'Punjabi', + }, + 'pl': { + 'bidi': False, + 'code': 'pl', + 'name': 'Polish', + 'name_local': 'polski', + }, + 'pt': { + 'bidi': False, + 'code': 'pt', + 'name': 'Portuguese', + 'name_local': 'Português', + }, + 'pt-br': { + 'bidi': False, + 'code': 'pt-br', + 'name': 'Brazilian Portuguese', + 'name_local': 'Português Brasileiro', + }, + 'ro': { + 'bidi': False, + 'code': 'ro', + 'name': 'Romanian', + 'name_local': 'Română', + }, + 'ru': { + 'bidi': False, + 'code': 'ru', + 'name': 'Russian', + 'name_local': 'Русский', + }, + 'sk': { + 'bidi': False, + 'code': 'sk', + 'name': 'Slovak', + 'name_local': 'Slovensky', + }, + 'sl': { + 'bidi': False, + 'code': 'sl', + 'name': 'Slovenian', + 'name_local': 'Slovenščina', + }, + 'sq': { + 'bidi': False, + 'code': 'sq', + 'name': 'Albanian', + 'name_local': 'shqip', + }, + 'sr': { + 'bidi': False, + 'code': 'sr', + 'name': 'Serbian', + 'name_local': 'српски', + }, + 'sr-latn': { + 'bidi': False, + 'code': 'sr-latn', + 'name': 'Serbian Latin', + 'name_local': 'srpski (latinica)', + }, + 'sv': { + 'bidi': False, + 'code': 'sv', + 'name': 'Swedish', + 'name_local': 'svenska', + }, + 'sw': { + 'bidi': False, + 'code': 'sw', + 'name': 'Swahili', + 'name_local': 'Kiswahili', + }, + 'ta': { + 'bidi': False, + 'code': 'ta', + 'name': 'Tamil', + 'name_local': 'தமிழ்', + }, + 'te': { + 'bidi': False, + 'code': 'te', + 'name': 'Telugu', + 'name_local': 'తెలుగు', + }, + 'th': { + 'bidi': False, + 'code': 'th', + 'name': 'Thai', + 'name_local': 'ภาษาไทย', + }, + 'tr': { + 'bidi': False, + 'code': 'tr', + 'name': 'Turkish', + 'name_local': 'Türkçe', + }, + 'tt': { + 'bidi': False, + 'code': 'tt', + 'name': 'Tatar', + 'name_local': 'Татарча', + }, + 'udm': { + 'bidi': False, + 'code': 'udm', + 'name': 'Udmurt', + 'name_local': 'Удмурт', + }, + 'uk': { + 'bidi': False, + 'code': 'uk', + 'name': 'Ukrainian', + 'name_local': 'Українська', + }, + 'ur': { + 'bidi': True, + 'code': 'ur', + 'name': 'Urdu', + 'name_local': 'اردو', + }, + 'vi': { + 'bidi': False, + 'code': 'vi', + 'name': 'Vietnamese', + 'name_local': 'Tiếng Việt', + }, + 'zh-cn': { + 'fallback': ['zh-hans'], + }, + 'zh-hans': { + 'bidi': False, + 'code': 'zh-hans', + 'name': 'Simplified Chinese', + 'name_local': '简体中文', + }, + 'zh-hant': { + 'bidi': False, + 'code': 'zh-hant', + 'name': 'Traditional Chinese', + 'name_local': '繁體中文', + }, + 'zh-hk': { + 'fallback': ['zh-hant'], + }, + 'zh-mo': { + 'fallback': ['zh-hant'], + }, + 'zh-my': { + 'fallback': ['zh-hans'], + }, + 'zh-sg': { + 'fallback': ['zh-hans'], + }, + 'zh-tw': { + 'fallback': ['zh-hant'], + }, +} diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/af/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/conf/locale/af/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ea048a7ec6bd189935f7c3db2c4426b95634b319 GIT binary patch literal 26389 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 O2PyS⁡?&_x>B)A9Az+ literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/ar/formats.py b/venv/lib/python3.7/site-packages/django/conf/locale/ar/formats.py new file mode 100644 index 0000000..19cc860 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/ar/formats.py @@ -0,0 +1,21 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = 'j F، Y' +TIME_FORMAT = 'g:i A' +# DATETIME_FORMAT = +YEAR_MONTH_FORMAT = 'F Y' +MONTH_DAY_FORMAT = 'j F' +SHORT_DATE_FORMAT = 'd‏/m‏/Y' +# SHORT_DATETIME_FORMAT = +# FIRST_DAY_OF_WEEK = + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +# DATE_INPUT_FORMATS = +# TIME_INPUT_FORMATS = +# DATETIME_INPUT_FORMATS = +DECIMAL_SEPARATOR = ',' +THOUSAND_SEPARATOR = '.' +# NUMBER_GROUPING = diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/az/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/conf/locale/az/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d0489e2227db2084b1a48c05c4e9d9a9353cdbd4 GIT binary patch literal 26630 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 Jt#EVd{a^e;GOYjr literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/az/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/conf/locale/az/LC_MESSAGES/django.po new file mode 100644 index 0000000..60ddc20 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/az/LC_MESSAGES/django.po @@ -0,0 +1,1260 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Emin Mastizada , 2018 +# Emin Mastizada , 2015-2016 +# Metin Amiroff , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-09-09 12:46+0000\n" +"Last-Translator: Emin Mastizada \n" +"Language-Team: Azerbaijani (http://www.transifex.com/django/django/language/" +"az/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: az\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "Afrikaans" + +msgid "Arabic" +msgstr "Ərəbcə" + +msgid "Asturian" +msgstr "Asturiyaca" + +msgid "Azerbaijani" +msgstr "Azərbaycanca" + +msgid "Bulgarian" +msgstr "Bolqarca" + +msgid "Belarusian" +msgstr "Belarusca" + +msgid "Bengali" +msgstr "Benqalca" + +msgid "Breton" +msgstr "Bretonca" + +msgid "Bosnian" +msgstr "Bosniyaca" + +msgid "Catalan" +msgstr "Katalanca" + +msgid "Czech" +msgstr "Çexcə" + +msgid "Welsh" +msgstr "Uelscə" + +msgid "Danish" +msgstr "Danimarkaca" + +msgid "German" +msgstr "Almanca" + +msgid "Lower Sorbian" +msgstr "Aşağı Sorbca" + +msgid "Greek" +msgstr "Yunanca" + +msgid "English" +msgstr "İngiliscə" + +msgid "Australian English" +msgstr "Avstraliya İngiliscəsi" + +msgid "British English" +msgstr "Britaniya İngiliscəsi" + +msgid "Esperanto" +msgstr "Esperanto" + +msgid "Spanish" +msgstr "İspanca" + +msgid "Argentinian Spanish" +msgstr "Argentina İspancası" + +msgid "Colombian Spanish" +msgstr "Kolumbia İspancası" + +msgid "Mexican Spanish" +msgstr "Meksika İspancası" + +msgid "Nicaraguan Spanish" +msgstr "Nikaraqua İspancası" + +msgid "Venezuelan Spanish" +msgstr "Venesuela İspancası" + +msgid "Estonian" +msgstr "Estonca" + +msgid "Basque" +msgstr "Baskca" + +msgid "Persian" +msgstr "Farsca" + +msgid "Finnish" +msgstr "Fincə" + +msgid "French" +msgstr "Fransızca" + +msgid "Frisian" +msgstr "Friscə" + +msgid "Irish" +msgstr "İrlandca" + +msgid "Scottish Gaelic" +msgstr "Şotland Keltcəsi" + +msgid "Galician" +msgstr "Qallik dili" + +msgid "Hebrew" +msgstr "İbranicə" + +msgid "Hindi" +msgstr "Hindcə" + +msgid "Croatian" +msgstr "Xorvatca" + +msgid "Upper Sorbian" +msgstr "Üst Sorbca" + +msgid "Hungarian" +msgstr "Macarca" + +msgid "Interlingua" +msgstr "İnterlinqua" + +msgid "Indonesian" +msgstr "İndonezcə" + +msgid "Ido" +msgstr "İdoca" + +msgid "Icelandic" +msgstr "İslandca" + +msgid "Italian" +msgstr "İtalyanca" + +msgid "Japanese" +msgstr "Yaponca" + +msgid "Georgian" +msgstr "Gürcücə" + +msgid "Kabyle" +msgstr "Kabile" + +msgid "Kazakh" +msgstr "Qazax" + +msgid "Khmer" +msgstr "Kxmercə" + +msgid "Kannada" +msgstr "Kannada dili" + +msgid "Korean" +msgstr "Koreyca" + +msgid "Luxembourgish" +msgstr "Lüksemburqca" + +msgid "Lithuanian" +msgstr "Litva dili" + +msgid "Latvian" +msgstr "Latviya dili" + +msgid "Macedonian" +msgstr "Makedonca" + +msgid "Malayalam" +msgstr "Malayamca" + +msgid "Mongolian" +msgstr "Monqolca" + +msgid "Marathi" +msgstr "Marathicə" + +msgid "Burmese" +msgstr "Burmescə" + +msgid "Norwegian Bokmål" +msgstr "Norveç Bukmolcası" + +msgid "Nepali" +msgstr "Nepal" + +msgid "Dutch" +msgstr "Flamandca" + +msgid "Norwegian Nynorsk" +msgstr "Nynorsk Norveçcəsi" + +msgid "Ossetic" +msgstr "Osetincə" + +msgid "Punjabi" +msgstr "Pancabicə" + +msgid "Polish" +msgstr "Polyakca" + +msgid "Portuguese" +msgstr "Portuqalca" + +msgid "Brazilian Portuguese" +msgstr "Braziliya Portuqalcası" + +msgid "Romanian" +msgstr "Rumınca" + +msgid "Russian" +msgstr "Rusca" + +msgid "Slovak" +msgstr "Slovakca" + +msgid "Slovenian" +msgstr "Slovencə" + +msgid "Albanian" +msgstr "Albanca" + +msgid "Serbian" +msgstr "Serbcə" + +msgid "Serbian Latin" +msgstr "Serbcə Latın" + +msgid "Swedish" +msgstr "İsveçcə" + +msgid "Swahili" +msgstr "Suahili" + +msgid "Tamil" +msgstr "Tamilcə" + +msgid "Telugu" +msgstr "Teluqu dili" + +msgid "Thai" +msgstr "Tayca" + +msgid "Turkish" +msgstr "Türkcə" + +msgid "Tatar" +msgstr "Tatar" + +msgid "Udmurt" +msgstr "Udmurtca" + +msgid "Ukrainian" +msgstr "Ukraynaca" + +msgid "Urdu" +msgstr "Urduca" + +msgid "Vietnamese" +msgstr "Vyetnamca" + +msgid "Simplified Chinese" +msgstr "Sadələşdirilmiş Çincə" + +msgid "Traditional Chinese" +msgstr "Ənənəvi Çincə" + +msgid "Messages" +msgstr "Mesajlar" + +msgid "Site Maps" +msgstr "Sayt Xəritələri" + +msgid "Static Files" +msgstr "Statik Fayllar" + +msgid "Syndication" +msgstr "Sindikasiya" + +msgid "That page number is not an integer" +msgstr "Səhifə nömrəsi rəqəm deyil" + +msgid "That page number is less than 1" +msgstr "Səhifə nömrəsi 1-dən balacadır" + +msgid "That page contains no results" +msgstr "Səhifədə nəticə yoxdur" + +msgid "Enter a valid value." +msgstr "Düzgün qiymət daxil edin." + +msgid "Enter a valid URL." +msgstr "Düzgün URL daxil edin." + +msgid "Enter a valid integer." +msgstr "Düzgün rəqəm daxil edin." + +msgid "Enter a valid email address." +msgstr "Düzgün e-poçt ünvanı daxil edin." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Hərflərdən, rəqəmlərdən, alt-xətlərdən və ya defislərdən ibarət düzgün " +"qısaltma daxil edin." + +msgid "" +"Enter a valid 'slug' consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Keçərli Unicode hərfləri, rəqəmlər, alt xətt və ya defis olan 'slug' daxil " +"edin." + +msgid "Enter a valid IPv4 address." +msgstr "Düzgün IPv4 ünvanı daxil edin." + +msgid "Enter a valid IPv6 address." +msgstr "Düzgün IPv6 ünvanını daxil edin." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Düzgün IPv4 və ya IPv6 ünvanını daxil edin." + +msgid "Enter only digits separated by commas." +msgstr "Vergüllə ayırmaqla yalnız rəqəmlər daxil edin." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "Əmin edin ki, bu qiymət %(limit_value)s-dir (bu %(show_value)s-dir)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "" +"Bu qiymətin %(limit_value)s-ya bərabər və ya ondan kiçik olduğunu yoxlayın." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "" +"Bu qiymətin %(limit_value)s-ya bərabər və ya ondan böyük olduğunu yoxlayın." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Bu dəyərin ən az %(limit_value)d simvol olduğuna əmin olun (%(show_value)d " +"var)" +msgstr[1] "" +"Bu dəyərin ən az %(limit_value)d simvol olduğuna əmin olun (%(show_value)d " +"var)" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Bu dəyərin ən çox %(limit_value)d simvol olduğuna əmin olun (%(show_value)d " +"var)" +msgstr[1] "" +"Bu dəyərin ən çox %(limit_value)d simvol olduğuna əmin olun (%(show_value)d " +"var)" + +msgid "Enter a number." +msgstr "Ədəd daxil edin." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Toplamda %(max)s rəqəmdən çox olmadığına əmin olun." +msgstr[1] "Toplamda %(max)s rəqəmdən çox olmadığına əmin olun." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Onluq hissənin %(max)s rəqəmdən çox olmadığına əmin olun." +msgstr[1] "Onluq hissənin %(max)s rəqəmdən çox olmadığına əmin olun." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "Onluq hissədən əvvəl %(max)s rəqəmdən çox olmadığına əmin olun." +msgstr[1] "Onluq hissədən əvvəl %(max)s rəqəmdən çox olmadığına əmin olun." + +#, python-format +msgid "" +"File extension '%(extension)s' is not allowed. Allowed extensions are: " +"'%(allowed_extensions)s'." +msgstr "" +"'%(extension)s' fayl uzantısına icazə verilmir. İcazə verilən fayl " +"uzantıları: '%(allowed_extensions)s'" + +msgid "Null characters are not allowed." +msgstr "Null simvollara icazə verilmir." + +msgid "and" +msgstr "və" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(field_labels)s ilə %(model_name)s artıq mövcuddur." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "%(value)r dəyəri doğru seçim deyil." + +msgid "This field cannot be null." +msgstr "Bu sahə boş qala bilməz." + +msgid "This field cannot be blank." +msgstr "Bu sahə ağ qala bilməz." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s bu %(field_label)s sahə ilə artıq mövcuddur." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s dəyəri %(date_field_label)s %(lookup_type)s üçün unikal " +"olmalıdır." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Sahənin tipi: %(field_type)s" + +msgid "Integer" +msgstr "Tam ədəd" + +#, python-format +msgid "'%(value)s' value must be an integer." +msgstr "'%(value)s' dəyəri tam rəqəm olmalıdır." + +msgid "Big (8 byte) integer" +msgstr "Böyük (8 bayt) tam ədəd" + +#, python-format +msgid "'%(value)s' value must be either True or False." +msgstr "'%(value)s' dəyəri True və ya False olmalıdır." + +#, python-format +msgid "'%(value)s' value must be either True, False, or None." +msgstr "'%(value)s' dəyəri True, False və ya None olmalıdır." + +msgid "Boolean (Either True or False)" +msgstr "Bul (ya Doğru, ya Yalan)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Sətir (%(max_length)s simvola kimi)" + +msgid "Comma-separated integers" +msgstr "Vergüllə ayrılmış tam ədədlər" + +#, python-format +msgid "" +"'%(value)s' value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"'%(value)s' dəyəri səhv tarix formatındadır. Formatı YYYY-MM-DD olmalıdır." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"'%(value)s dəyəri düzgün formatdadır (YYYY-MM-DD) amma bu xətalı tarixdir." + +msgid "Date (without time)" +msgstr "Tarix (saatsız)" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"'%(value)s' dəyərinin formatı səhvdir. Formatı YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ] olmalıdır." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"'%(value)s' dəyərinin formatı düzgündür (YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]) " +"ancaq tarix səhvdir." + +msgid "Date (with time)" +msgstr "Tarix (vaxt ilə)" + +#, python-format +msgid "'%(value)s' value must be a decimal number." +msgstr "'%(value)s' dəyəri decimal rəqəm olmalıdır." + +msgid "Decimal number" +msgstr "Rasional ədəd" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in [DD] [HH:[MM:]]ss[." +"uuuuuu] format." +msgstr "" +"'%(value)s' dəyərinin formatı səhvdir. Formatı [DD] [HH:[MM:]]ss[.uuuuuu] " +"olmalıdır." + +msgid "Duration" +msgstr "Müddət" + +msgid "Email address" +msgstr "E-poçt" + +msgid "File path" +msgstr "Faylın ünvanı" + +#, python-format +msgid "'%(value)s' value must be a float." +msgstr "'%(value)s' dəyəri float olmalıdır." + +msgid "Floating point number" +msgstr "Sürüşən vergüllü ədəd" + +msgid "IPv4 address" +msgstr "IPv4 ünvanı" + +msgid "IP address" +msgstr "IP ünvan" + +#, python-format +msgid "'%(value)s' value must be either None, True or False." +msgstr "'%(value)s' dəyəri None, True və ya False olmalıdır." + +msgid "Boolean (Either True, False or None)" +msgstr "Bul (Ya Doğru, ya Yalan, ya da Heç nə)" + +msgid "Positive integer" +msgstr "Müsbət tam ədəd" + +msgid "Positive small integer" +msgstr "Müsbət tam kiçik ədəd" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Əzmə (%(max_length)s simvola kimi)" + +msgid "Small integer" +msgstr "Kiçik tam ədəd" + +msgid "Text" +msgstr "Mətn" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"'%(value)s' dəyərinin formatı səhvdir. Formatı HH:MM[:ss[.uuuuuu]] olmalıdır." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"'%(value)s' dəyəri düzgün formatdadır (HH:MM[:ss[.uuuuuu]]), ancaq vaxtı " +"səhvdir." + +msgid "Time" +msgstr "Vaxt" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Düz ikili (binary) məlumat" + +#, python-format +msgid "'%(value)s' is not a valid UUID." +msgstr "'%(value)s' keçərli UUID deyil." + +msgid "File" +msgstr "Fayl" + +msgid "Image" +msgstr "Şəkil" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "%(field)s dəyəri %(value)r olan %(model)s mövcud deyil." + +msgid "Foreign Key (type determined by related field)" +msgstr "Xarici açar (bağlı olduğu sahəyə uyğun tipi alır)" + +msgid "One-to-one relationship" +msgstr "Birin-birə münasibət" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "%(from)s-%(to)s əlaqəsi" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "%(from)s-%(to)s əlaqələri" + +msgid "Many-to-many relationship" +msgstr "Çoxun-çoxa münasibət" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Bu sahə vacibdir." + +msgid "Enter a whole number." +msgstr "Tam ədəd daxil edin." + +msgid "Enter a valid date." +msgstr "Düzgün tarix daxil edin." + +msgid "Enter a valid time." +msgstr "Düzgün vaxt daxil edin." + +msgid "Enter a valid date/time." +msgstr "Düzgün tarix/vaxt daxil edin." + +msgid "Enter a valid duration." +msgstr "Keçərli müddət daxil edin." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Günlərin sayı {min_days} ilə {max_days} arasında olmalıdır." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Fayl göndərilməyib. Vərəqənin (\"form\") şifrələmə tipini yoxlayın." + +msgid "No file was submitted." +msgstr "Fayl göndərilməyib." + +msgid "The submitted file is empty." +msgstr "Göndərilən fayl boşdur." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Bu fayl adının ən çox %(max)d simvol olduğuna əmin olun (%(length)d var)." +msgstr[1] "" +"Bu fayl adının ən çox %(max)d simvol olduğuna əmin olun (%(length)d var)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"Ya fayl göndərin, ya da xanaya quş qoymayın, hər ikisini də birdən etməyin." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Düzgün şəkil göndərin. Göndərdiyiniz fayl ya şəkil deyil, ya da şəkildə " +"problem var." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Düzgün seçim edin. %(value)s seçimlər arasında yoxdur." + +msgid "Enter a list of values." +msgstr "Qiymətlərin siyahısını daxil edin." + +msgid "Enter a complete value." +msgstr "Tam dəyər daxil edin." + +msgid "Enter a valid UUID." +msgstr "Keçərli UUID daxil et." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Gizli %(name)s sahəsi) %(error)s" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "ManagementForm məlumatları əksikdir və ya korlanıb" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "Lütfən %d və ya daha az forma göndərin." +msgstr[1] "Lütfən %d və ya daha az forma göndərin." + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "Lütfən %d və ya daha çox forma göndərin." +msgstr[1] "Lütfən %d və ya daha çox forma göndərin." + +msgid "Order" +msgstr "Sırala" + +msgid "Delete" +msgstr "Sil" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "%(field)s sahəsinə görə təkrarlanan məlumatlara düzəliş edin." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"%(field)s sahəsinə görə təkrarlanan məlumatlara düzəliş edin, onların hamısı " +"fərqli olmalıdır." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"%(field_name)s sahəsinə görə təkrarlanan məlumatlara düzəliş edin, onlar " +"%(date_field)s %(lookup)s-a görə fərqli olmalıdır." + +msgid "Please correct the duplicate values below." +msgstr "Aşağıda təkrarlanan qiymətlərə düzəliş edin." + +msgid "The inline value did not match the parent instance." +msgstr "Sətiriçi dəyər ana nüsxəyə uyğun deyil." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Düzgün seçim edin. Bu seçim mümkün deyil." + +#, python-format +msgid "\"%(pk)s\" is not a valid value." +msgstr "\"%(pk)s\" düzgün dəyər deyil." + +#, python-format +msgid "" +"%(datetime)s couldn't be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s %(current_timezone)s zaman qurşağında ifadə oluna bilmir; ya " +"duallıq, ya da yanlışlıq var." + +msgid "Clear" +msgstr "Təmizlə" + +msgid "Currently" +msgstr "Hal-hazırda" + +msgid "Change" +msgstr "Dəyiş" + +msgid "Unknown" +msgstr "Məlum deyil" + +msgid "Yes" +msgstr "Hə" + +msgid "No" +msgstr "Yox" + +msgid "yes,no,maybe" +msgstr "hə,yox,bəlkə" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d bayt" +msgstr[1] "%(size)d bayt" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s QB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "gecə yarısı" + +msgid "noon" +msgstr "günorta" + +msgid "Monday" +msgstr "Bazar ertəsi" + +msgid "Tuesday" +msgstr "Çərşənbə axşamı" + +msgid "Wednesday" +msgstr "Çərşənbə" + +msgid "Thursday" +msgstr "Cümə axşamı" + +msgid "Friday" +msgstr "Cümə" + +msgid "Saturday" +msgstr "Şənbə" + +msgid "Sunday" +msgstr "Bazar" + +msgid "Mon" +msgstr "B.e" + +msgid "Tue" +msgstr "Ç.a" + +msgid "Wed" +msgstr "Çrş" + +msgid "Thu" +msgstr "C.a" + +msgid "Fri" +msgstr "Cüm" + +msgid "Sat" +msgstr "Şnb" + +msgid "Sun" +msgstr "Bzr" + +msgid "January" +msgstr "Yanvar" + +msgid "February" +msgstr "Fevral" + +msgid "March" +msgstr "Mart" + +msgid "April" +msgstr "Aprel" + +msgid "May" +msgstr "May" + +msgid "June" +msgstr "İyun" + +msgid "July" +msgstr "İyul" + +msgid "August" +msgstr "Avqust" + +msgid "September" +msgstr "Sentyabr" + +msgid "October" +msgstr "Oktyabr" + +msgid "November" +msgstr "Noyabr" + +msgid "December" +msgstr "Dekabr" + +msgid "jan" +msgstr "ynv" + +msgid "feb" +msgstr "fvr" + +msgid "mar" +msgstr "mar" + +msgid "apr" +msgstr "apr" + +msgid "may" +msgstr "may" + +msgid "jun" +msgstr "iyn" + +msgid "jul" +msgstr "iyl" + +msgid "aug" +msgstr "avq" + +msgid "sep" +msgstr "snt" + +msgid "oct" +msgstr "okt" + +msgid "nov" +msgstr "noy" + +msgid "dec" +msgstr "dek" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Yan." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Fev." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Mart" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Aprel" + +msgctxt "abbrev. month" +msgid "May" +msgstr "May" + +msgctxt "abbrev. month" +msgid "June" +msgstr "İyun" + +msgctxt "abbrev. month" +msgid "July" +msgstr "İyul" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Avq." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Sent." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Okt." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Noy." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Dek." + +msgctxt "alt. month" +msgid "January" +msgstr "Yanvar" + +msgctxt "alt. month" +msgid "February" +msgstr "Fevral" + +msgctxt "alt. month" +msgid "March" +msgstr "Mart" + +msgctxt "alt. month" +msgid "April" +msgstr "Aprel" + +msgctxt "alt. month" +msgid "May" +msgstr "May" + +msgctxt "alt. month" +msgid "June" +msgstr "İyun" + +msgctxt "alt. month" +msgid "July" +msgstr "İyul" + +msgctxt "alt. month" +msgid "August" +msgstr "Avqust" + +msgctxt "alt. month" +msgid "September" +msgstr "Sentyabr" + +msgctxt "alt. month" +msgid "October" +msgstr "Oktyabr" + +msgctxt "alt. month" +msgid "November" +msgstr "Noyabr" + +msgctxt "alt. month" +msgid "December" +msgstr "Dekabr" + +msgid "This is not a valid IPv6 address." +msgstr "Bu doğru IPv6 ünvanı deyil." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s..." +msgstr "%(truncated_text)s..." + +msgid "or" +msgstr "və ya" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d il" +msgstr[1] "%d il" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d ay" +msgstr[1] "%d ay" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d həftə" +msgstr[1] "%d həftə" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d gün" +msgstr[1] "%d gün" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d saat" +msgstr[1] "%d saat" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d dəqiqə" +msgstr[1] "%d dəqiqə" + +msgid "0 minutes" +msgstr "0 dəqiqə" + +msgid "Forbidden" +msgstr "Qadağan" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF təsdiqləmə alınmadı. Sorğu ləğv edildi." + +msgid "" +"You are seeing this message because this HTTPS site requires a 'Referer " +"header' to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Bu HTTPS sayt səyyahınız tərəfindən 'Referer header' göndərilməsini tələb " +"edir, amma göndərilmir. Bu başlıq səyyahınızın üçüncü biri tərəfindən hack-" +"lənmədiyinə əmin olmaq üçün istifadə edilir." + +msgid "" +"If you have configured your browser to disable 'Referer' headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for 'same-" +"origin' requests." +msgstr "" +"Əgər səyyahınızın 'Referer' başlığını göndərməsini söndürmüsünüzsə, lütfən " +"bu sayt üçün, HTTPS əlaqələr üçün və ya 'same-origin' sorğular üçün aktiv " +"edin." + +msgid "" +"If you are using the tag or " +"including the 'Referrer-Policy: no-referrer' header, please remove them. The " +"CSRF protection requires the 'Referer' header to do strict referer checking. " +"If you're concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"Əgər etiketini və ya " +"'Referrer-Policy: no-referrer' başlığını işlədirsinizsə, lütfən silin. CSRF " +"qoruma dəqiq yönləndirən yoxlaması üçün 'Referer' başlığını tələb edir. Əgər " +"məxfilik üçün düşünürsünüzsə, üçüncü tərəf sayt keçidləri üçün kimi bir alternativ işlədin." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Bu sayt formaları göndərmək üçün CSRF çərəzini işlədir. Bu çərəz " +"səyyahınızın üçüncü biri tərəfindən hack-lənmədiyinə əmin olmaq üçün " +"istifadə edilir. " + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for 'same-origin' requests." +msgstr "" +"Əgər səyyahınızda çərəzlər söndürülübsə, lütfən bu sayt və ya 'same-origin' " +"sorğular üçün aktiv edin." + +msgid "More information is available with DEBUG=True." +msgstr "Daha ətraflı məlumat DEBUG=True ilə mövcuddur." + +msgid "No year specified" +msgstr "İl göstərilməyib" + +msgid "Date out of range" +msgstr "Tarix aralığın xaricindədir" + +msgid "No month specified" +msgstr "Ay göstərilməyib" + +msgid "No day specified" +msgstr "Gün göstərilməyib" + +msgid "No week specified" +msgstr "Həftə göstərilməyib" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "%(verbose_name_plural)s seçmək mümkün deyil" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Gələcək %(verbose_name_plural)s seçmək mümkün deyil, çünki %(class_name)s." +"allow_future Yalan kimi qeyd olunub." + +#, python-format +msgid "Invalid date string '%(datestr)s' given format '%(format)s'" +msgstr "\"%(format)s\" formatına görə \"%(datestr)s\" tarixi düzgün deyil" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Sorğuya uyğun %(verbose_name)s tapılmadı" + +msgid "Page is not 'last', nor can it be converted to an int." +msgstr "Səhifə nə \"axırıncı\"dır, nə də tam ədədə çevirmək mümkündür." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Qeyri-düzgün səhifə (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and '%(class_name)s.allow_empty' is False." +msgstr "Siyahı boşdur və '%(class_name)s.allow_empty' Yalan kimi qeyd olunub." + +msgid "Directory indexes are not allowed here." +msgstr "Ünvan indekslərinə icazə verilmir." + +#, python-format +msgid "\"%(path)s\" does not exist" +msgstr "\"%(path)s\" mövcud deyil" + +#, python-format +msgid "Index of %(directory)s" +msgstr "%(directory)s-nin indeksi" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "Django: tələsən mükəmməlləkçilər üçün Web framework." + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Django %(version)s üçün buraxılış " +"qeydlərinə baxın" + +msgid "The install worked successfully! Congratulations!" +msgstr "Quruluş uğurla tamamlandı! Təbriklər!" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Tənzimləmə faylınızda DEBUG=True və heç bir URL qurmadığınız üçün bu səhifəni görürsünüz." + +msgid "Django Documentation" +msgstr "Django Sənədləri" + +msgid "Topics, references, & how-to's" +msgstr "Mövzular, istinadlar və nümunələr" + +msgid "Tutorial: A Polling App" +msgstr "Məşğələ: Səsvermə Tətbiqi" + +msgid "Get started with Django" +msgstr "Django-ya başla" + +msgid "Django Community" +msgstr "Django İcması" + +msgid "Connect, get help, or contribute" +msgstr "Qoşul, kömək al və dəstək ol" diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/az/formats.py b/venv/lib/python3.7/site-packages/django/conf/locale/az/formats.py new file mode 100644 index 0000000..49dd0fa --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/az/formats.py @@ -0,0 +1,32 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = 'j E Y' +TIME_FORMAT = 'G:i' +DATETIME_FORMAT = 'j E Y, G:i' +YEAR_MONTH_FORMAT = 'F Y' +MONTH_DAY_FORMAT = 'j F' +SHORT_DATE_FORMAT = 'd.m.Y' +SHORT_DATETIME_FORMAT = 'd.m.Y H:i' +FIRST_DAY_OF_WEEK = 1 # Monday + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +DATE_INPUT_FORMATS = [ + '%d.%m.%Y', # '25.10.2006' + '%d.%m.%y', # '25.10.06' +] +DATETIME_INPUT_FORMATS = [ + '%d.%m.%Y %H:%M:%S', # '25.10.2006 14:30:59' + '%d.%m.%Y %H:%M:%S.%f', # '25.10.2006 14:30:59.000200' + '%d.%m.%Y %H:%M', # '25.10.2006 14:30' + '%d.%m.%Y', # '25.10.2006' + '%d.%m.%y %H:%M:%S', # '25.10.06 14:30:59' + '%d.%m.%y %H:%M:%S.%f', # '25.10.06 14:30:59.000200' + '%d.%m.%y %H:%M', # '25.10.06 14:30' + '%d.%m.%y', # '25.10.06' +] +DECIMAL_SEPARATOR = ',' +THOUSAND_SEPARATOR = '\xa0' # non-breaking space +NUMBER_GROUPING = 3 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/be/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/conf/locale/be/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..84f6e43fe71ca2f7861ad0df5b86124c49a86c0f GIT binary patch literal 34765 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, 2011 +# M Nasimul Haque , 2013 +# Tahmid Rafi , 2012-2013 +# Tahmid Rafi , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-11-15 16:15+0100\n" +"PO-Revision-Date: 2017-11-16 01:13+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Bengali (http://www.transifex.com/django/django/language/" +"bn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "আফ্রিকার অন্যতম সরকারি ভাষা" + +msgid "Arabic" +msgstr "আরবী" + +msgid "Asturian" +msgstr "" + +msgid "Azerbaijani" +msgstr "আজারবাইজানি" + +msgid "Bulgarian" +msgstr "বুলগেরিয়ান" + +msgid "Belarusian" +msgstr "বেলারুশীয়" + +msgid "Bengali" +msgstr "বাংলা" + +msgid "Breton" +msgstr "ব্রেটন" + +msgid "Bosnian" +msgstr "বসনিয়ান" + +msgid "Catalan" +msgstr "ক্যাটালান" + +msgid "Czech" +msgstr "চেক" + +msgid "Welsh" +msgstr "ওয়েল্স" + +msgid "Danish" +msgstr "ড্যানিশ" + +msgid "German" +msgstr "জার্মান" + +msgid "Lower Sorbian" +msgstr "" + +msgid "Greek" +msgstr "গ্রিক" + +msgid "English" +msgstr "ইংলিশ" + +msgid "Australian English" +msgstr "" + +msgid "British English" +msgstr "বৃটিশ ইংলিশ" + +msgid "Esperanto" +msgstr "আন্তর্জাতিক ভাষা" + +msgid "Spanish" +msgstr "স্প্যানিশ" + +msgid "Argentinian Spanish" +msgstr "আর্জেন্টিনিয়ান স্প্যানিশ" + +msgid "Colombian Spanish" +msgstr "" + +msgid "Mexican Spanish" +msgstr "মেক্সিকান স্প্যানিশ" + +msgid "Nicaraguan Spanish" +msgstr "নিকারাগুয়ান স্প্যানিশ" + +msgid "Venezuelan Spanish" +msgstr "ভেনেজুয়েলার স্প্যানিশ" + +msgid "Estonian" +msgstr "এস্তোনিয়ান" + +msgid "Basque" +msgstr "বাস্ক" + +msgid "Persian" +msgstr "ফারসি" + +msgid "Finnish" +msgstr "ফিনিশ" + +msgid "French" +msgstr "ফ্রেঞ্চ" + +msgid "Frisian" +msgstr "ফ্রিজ্ল্যানডের ভাষা" + +msgid "Irish" +msgstr "আইরিশ" + +msgid "Scottish Gaelic" +msgstr "" + +msgid "Galician" +msgstr "গ্যালিসিয়ান" + +msgid "Hebrew" +msgstr "হিব্রু" + +msgid "Hindi" +msgstr "হিন্দী" + +msgid "Croatian" +msgstr "ক্রোয়েশিয়ান" + +msgid "Upper Sorbian" +msgstr "" + +msgid "Hungarian" +msgstr "হাঙ্গেরিয়ান" + +msgid "Interlingua" +msgstr "" + +msgid "Indonesian" +msgstr "ইন্দোনেশিয়ান" + +msgid "Ido" +msgstr "" + +msgid "Icelandic" +msgstr "আইসল্যান্ডিক" + +msgid "Italian" +msgstr "ইটালিয়ান" + +msgid "Japanese" +msgstr "জাপানিজ" + +msgid "Georgian" +msgstr "জর্জিয়ান" + +msgid "Kazakh" +msgstr "কাজাখ" + +msgid "Khmer" +msgstr "খমার" + +msgid "Kannada" +msgstr "কান্নাড়া" + +msgid "Korean" +msgstr "কোরিয়ান" + +msgid "Luxembourgish" +msgstr "লুক্সেমবার্গীয়" + +msgid "Lithuanian" +msgstr "লিথুয়ানিয়ান" + +msgid "Latvian" +msgstr "লাটভিয়ান" + +msgid "Macedonian" +msgstr "ম্যাসাডোনিয়ান" + +msgid "Malayalam" +msgstr "মালায়ালম" + +msgid "Mongolian" +msgstr "মঙ্গোলিয়ান" + +msgid "Marathi" +msgstr "" + +msgid "Burmese" +msgstr "বার্মিজ" + +msgid "Norwegian Bokmål" +msgstr "" + +msgid "Nepali" +msgstr "নেপালি" + +msgid "Dutch" +msgstr "ডাচ" + +msgid "Norwegian Nynorsk" +msgstr "নরওয়েজীয়ান নিনর্স্ক" + +msgid "Ossetic" +msgstr "অসেটিক" + +msgid "Punjabi" +msgstr "পাঞ্জাবী" + +msgid "Polish" +msgstr "পোলিশ" + +msgid "Portuguese" +msgstr "পর্তুগীজ" + +msgid "Brazilian Portuguese" +msgstr "ব্রাজিলিয়ান পর্তুগীজ" + +msgid "Romanian" +msgstr "রোমানিয়ান" + +msgid "Russian" +msgstr "রাশান" + +msgid "Slovak" +msgstr "স্লোভাক" + +msgid "Slovenian" +msgstr "স্লোভেনিয়ান" + +msgid "Albanian" +msgstr "আলবেনীয়ান" + +msgid "Serbian" +msgstr "সার্বিয়ান" + +msgid "Serbian Latin" +msgstr "সার্বিয়ান ল্যাটিন" + +msgid "Swedish" +msgstr "সুইডিশ" + +msgid "Swahili" +msgstr "সোয়াহিলি" + +msgid "Tamil" +msgstr "তামিল" + +msgid "Telugu" +msgstr "তেলেগু" + +msgid "Thai" +msgstr "থাই" + +msgid "Turkish" +msgstr "তুর্কি" + +msgid "Tatar" +msgstr "তাতারদেশীয়" + +msgid "Udmurt" +msgstr "" + +msgid "Ukrainian" +msgstr "ইউক্রেনিয়ান" + +msgid "Urdu" +msgstr "উর্দু" + +msgid "Vietnamese" +msgstr "ভিয়েতনামিজ" + +msgid "Simplified Chinese" +msgstr "সরলীকৃত চাইনীজ" + +msgid "Traditional Chinese" +msgstr "প্রচলিত চাইনীজ" + +msgid "Messages" +msgstr "" + +msgid "Site Maps" +msgstr "" + +msgid "Static Files" +msgstr "" + +msgid "Syndication" +msgstr "" + +msgid "That page number is not an integer" +msgstr "" + +msgid "That page number is less than 1" +msgstr "" + +msgid "That page contains no results" +msgstr "" + +msgid "Enter a valid value." +msgstr "একটি বৈধ মান দিন।" + +msgid "Enter a valid URL." +msgstr "বৈধ URL দিন" + +msgid "Enter a valid integer." +msgstr "" + +msgid "Enter a valid email address." +msgstr "একটি বৈধ ইমেইল ঠিকানা লিখুন." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens." +msgstr "" +"বৈধ ’slug' প্রবেশ করান যাতে শুধুমাত্র ইংরেজী বর্ণ, অঙ্ক, আন্ডারস্কোর অথবা হাইফেন " +"রয়েছে।" + +msgid "" +"Enter a valid 'slug' consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "একটি বৈধ IPv4 ঠিকানা দিন।" + +msgid "Enter a valid IPv6 address." +msgstr "একটি বৈধ IPv6 ঠিকানা টাইপ করুন।" + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "একটি বৈধ IPv4 অথবা IPv6 ঠিকানা টাইপ করুন।" + +msgid "Enter only digits separated by commas." +msgstr "শুধুমাত্র কমা দিয়ে সংখ্যা দিন।" + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "সংখ্যাটির মান %(limit_value)s হতে হবে (এটা এখন %(show_value)s আছে)।" + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "সংখ্যাটির মান %(limit_value)s এর চেয়ে ছোট বা সমান হতে হবে।" + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "সংখ্যাটির মান %(limit_value)s এর চেয়ে বড় বা সমান হতে হবে।" + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"File extension '%(extension)s' is not allowed. Allowed extensions are: " +"'%(allowed_extensions)s'." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "এবং" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "" + +msgid "This field cannot be null." +msgstr "এর মান null হতে পারবে না।" + +msgid "This field cannot be blank." +msgstr "এই ফিল্ডের মান ফাঁকা হতে পারে না" + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(field_label)s সহ %(model_name)s আরেকটি রয়েছে।" + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "ফিল্ডের ধরণ: %(field_type)s" + +msgid "Integer" +msgstr "ইন্টিজার" + +#, python-format +msgid "'%(value)s' value must be an integer." +msgstr "" + +msgid "Big (8 byte) integer" +msgstr "বিগ (৮ বাইট) ইন্টিজার" + +#, python-format +msgid "'%(value)s' value must be either True or False." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "বুলিয়ান (হয় True অথবা False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "স্ট্রিং (সর্বোচ্চ %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "কমা দিয়ে আলাদা করা ইন্টিজার" + +#, python-format +msgid "" +"'%(value)s' value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "তারিখ (সময় বাদে)" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "তারিখ (সময় সহ)" + +#, python-format +msgid "'%(value)s' value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "দশমিক সংখ্যা" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in [DD] [HH:[MM:]]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "" + +msgid "Email address" +msgstr "ইমেইল ঠিকানা" + +msgid "File path" +msgstr "ফাইল পথ" + +#, python-format +msgid "'%(value)s' value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "ফ্লোটিং পয়েন্ট সংখ্যা" + +msgid "IPv4 address" +msgstr "IPv4 ঠিকানা" + +msgid "IP address" +msgstr "আইপি ঠিকানা" + +#, python-format +msgid "'%(value)s' value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "বুলিয়ান (হয় True, False অথবা None)" + +msgid "Positive integer" +msgstr "পজিটিভ ইন্টিজার" + +msgid "Positive small integer" +msgstr "পজিটিভ স্মল ইন্টিজার" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "স্লাগ (সর্বোচ্চ %(max_length)s)" + +msgid "Small integer" +msgstr "স্মল ইন্টিজার" + +msgid "Text" +msgstr "টেক্সট" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"'%(value)s' value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "সময়" + +msgid "URL" +msgstr "ইউআরএল (URL)" + +msgid "Raw binary data" +msgstr "র বাইনারি ডাটা" + +#, python-format +msgid "'%(value)s' is not a valid UUID." +msgstr "" + +msgid "File" +msgstr "ফাইল" + +msgid "Image" +msgstr "ইমেজ" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +msgid "Foreign Key (type determined by related field)" +msgstr "ফরেন কি (টাইপ রিলেটেড ফিল্ড দ্বারা নির্ণীত হবে)" + +msgid "One-to-one relationship" +msgstr "ওয়ান-টু-ওয়ান রিলেশানশিপ" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "ম্যানি-টু-ম্যানি রিলেশানশিপ" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr "" + +msgid "This field is required." +msgstr "এটি আবশ্যক।" + +msgid "Enter a whole number." +msgstr "একটি পূর্ণসংখ্যা দিন" + +msgid "Enter a number." +msgstr "একটি সংখ্যা প্রবেশ করান।" + +msgid "Enter a valid date." +msgstr "বৈধ তারিখ দিন।" + +msgid "Enter a valid time." +msgstr "বৈধ সময় দিন।" + +msgid "Enter a valid date/time." +msgstr "বৈধ তারিখ/সময় দিন।" + +msgid "Enter a valid duration." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "কোন ফাইল দেয়া হয়নি। ফর্মের এনকোডিং ঠিক আছে কিনা দেখুন।" + +msgid "No file was submitted." +msgstr "কোন ফাইল দেয়া হয়নি।" + +msgid "The submitted file is empty." +msgstr "ফাইলটি খালি।" + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +msgstr[1] "" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"একটি ফাইল সাবমিট করুন অথবা ক্লিয়ার চেকবক্সটি চেক করে দিন, যে কোন একটি করুন।" + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"সঠিক ছবি আপলোড করুন। যে ফাইলটি আপলোড করা হয়েছে তা হয় ছবি নয় অথবা নষ্ট হয়ে " +"যাওয়া ছবি।" + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "%(value)s বৈধ নয়। অনুগ্রহ করে আরেকটি সিলেক্ট করুন।" + +msgid "Enter a list of values." +msgstr "কয়েকটি মানের তালিকা দিন।" + +msgid "Enter a complete value." +msgstr "" + +msgid "Enter a valid UUID." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr "" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "" +msgstr[1] "" + +msgid "Order" +msgstr "ক্রম" + +msgid "Delete" +msgstr "মুছুন" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "" + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" + +msgid "Please correct the duplicate values below." +msgstr "" + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "এটি বৈধ নয়। অনুগ্রহ করে আরেকটি সিলেক্ট করুন।" + +#, python-format +msgid "\"%(pk)s\" is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn't be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "পরিষ্কার করুন" + +msgid "Currently" +msgstr "এই মুহুর্তে" + +msgid "Change" +msgstr "পরিবর্তন" + +msgid "Unknown" +msgstr "অজানা" + +msgid "Yes" +msgstr "হ্যাঁ" + +msgid "No" +msgstr "না" + +msgid "yes,no,maybe" +msgstr "হ্যাঁ,না,হয়তো" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d বাইট" +msgstr[1] "%(size)d বাইট" + +#, python-format +msgid "%s KB" +msgstr "%s কিলোবাইট" + +#, python-format +msgid "%s MB" +msgstr "%s মেগাবাইট" + +#, python-format +msgid "%s GB" +msgstr "%s গিগাবাইট" + +#, python-format +msgid "%s TB" +msgstr "%s টেরাবাইট" + +#, python-format +msgid "%s PB" +msgstr "%s পেটাবাইট" + +msgid "p.m." +msgstr "অপরাহ্ন" + +msgid "a.m." +msgstr "পূর্বাহ্ন" + +msgid "PM" +msgstr "অপরাহ্ন" + +msgid "AM" +msgstr "পূর্বাহ্ন" + +msgid "midnight" +msgstr "মধ্যরাত" + +msgid "noon" +msgstr "দুপুর" + +msgid "Monday" +msgstr "সোমবার" + +msgid "Tuesday" +msgstr "মঙ্গলবার" + +msgid "Wednesday" +msgstr "বুধবার" + +msgid "Thursday" +msgstr "বৃহস্পতিবার" + +msgid "Friday" +msgstr "শুক্রবার" + +msgid "Saturday" +msgstr "শনিবার" + +msgid "Sunday" +msgstr "রবিবার" + +msgid "Mon" +msgstr "সোম" + +msgid "Tue" +msgstr "মঙ্গল" + +msgid "Wed" +msgstr "বুধ" + +msgid "Thu" +msgstr "বৃহঃ" + +msgid "Fri" +msgstr "শুক্র" + +msgid "Sat" +msgstr "শনি" + +msgid "Sun" +msgstr "রবি" + +msgid "January" +msgstr "জানুয়ারি" + +msgid "February" +msgstr "ফেব্রুয়ারি" + +msgid "March" +msgstr "মার্চ" + +msgid "April" +msgstr "এপ্রিল" + +msgid "May" +msgstr "মে" + +msgid "June" +msgstr "জুন" + +msgid "July" +msgstr "জুলাই" + +msgid "August" +msgstr "আগস্ট" + +msgid "September" +msgstr "সেপ্টেম্বর" + +msgid "October" +msgstr "অক্টোবর" + +msgid "November" +msgstr "নভেম্বর" + +msgid "December" +msgstr "ডিসেম্বর" + +msgid "jan" +msgstr "জান." + +msgid "feb" +msgstr "ফেব." + +msgid "mar" +msgstr "মার্চ" + +msgid "apr" +msgstr "এপ্রি." + +msgid "may" +msgstr "মে" + +msgid "jun" +msgstr "জুন" + +msgid "jul" +msgstr "জুল." + +msgid "aug" +msgstr "আগ." + +msgid "sep" +msgstr "সেপ্টে." + +msgid "oct" +msgstr "অক্টো." + +msgid "nov" +msgstr "নভে." + +msgid "dec" +msgstr "ডিসে." + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "জানু." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "ফেব্রু." + +msgctxt "abbrev. month" +msgid "March" +msgstr "মার্চ" + +msgctxt "abbrev. month" +msgid "April" +msgstr "এপ্রিল" + +msgctxt "abbrev. month" +msgid "May" +msgstr "মে" + +msgctxt "abbrev. month" +msgid "June" +msgstr "জুন" + +msgctxt "abbrev. month" +msgid "July" +msgstr "জুলাই" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "আগ." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "সেপ্ট." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "অক্টো." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "নভে." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "ডিসে." + +msgctxt "alt. month" +msgid "January" +msgstr "জানুয়ারি" + +msgctxt "alt. month" +msgid "February" +msgstr "ফেব্রুয়ারি" + +msgctxt "alt. month" +msgid "March" +msgstr "মার্চ" + +msgctxt "alt. month" +msgid "April" +msgstr "এপ্রিল" + +msgctxt "alt. month" +msgid "May" +msgstr "মে" + +msgctxt "alt. month" +msgid "June" +msgstr "জুন" + +msgctxt "alt. month" +msgid "July" +msgstr "জুলাই" + +msgctxt "alt. month" +msgid "August" +msgstr "আগস্ট" + +msgctxt "alt. month" +msgid "September" +msgstr "সেপ্টেম্বর" + +msgctxt "alt. month" +msgid "October" +msgstr "অক্টোবর" + +msgctxt "alt. month" +msgid "November" +msgstr "নভেম্বর" + +msgctxt "alt. month" +msgid "December" +msgstr "ডিসেম্বর" + +msgid "This is not a valid IPv6 address." +msgstr "" + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s..." +msgstr "%(truncated_text)s..." + +msgid "or" +msgstr "অথবা" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr "," + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" + +msgid "0 minutes" +msgstr "0 মিনিট" + +msgid "Forbidden" +msgstr "" + +msgid "CSRF verification failed. Request aborted." +msgstr "" + +msgid "" +"You are seeing this message because this HTTPS site requires a 'Referer " +"header' to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable 'Referer' headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for 'same-" +"origin' requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the 'Referrer-Policy: no-referrer' header, please remove them. The " +"CSRF protection requires the 'Referer' header to do strict referer checking. " +"If you're concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for 'same-origin' requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "" + +msgid "No year specified" +msgstr "কোন বছর উল্লেখ করা হয়নি" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "কোন মাস উল্লেখ করা হয়নি" + +msgid "No day specified" +msgstr "কোন দিন উল্লেখ করা হয়নি" + +msgid "No week specified" +msgstr "কোন সপ্তাহ উল্লেখ করা হয়নি" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "কোন %(verbose_name_plural)s নেই" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" + +#, python-format +msgid "Invalid date string '%(datestr)s' given format '%(format)s'" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "কুয়েরি ম্যাচ করে এমন কোন %(verbose_name)s পাওয়া যায় নি" + +msgid "Page is not 'last', nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "" + +#, python-format +msgid "Empty list and '%(class_name)s.allow_empty' is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "ডিরেক্টরি ইনডেক্স অনুমোদিত নয়" + +#, python-format +msgid "\"%(path)s\" does not exist" +msgstr "\"%(path)s\" এর অস্তিত্ব নেই" + +#, python-format +msgid "Index of %(directory)s" +msgstr "%(directory)s এর ইনডেক্স" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to's" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/br/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/conf/locale/br/LC_MESSAGES/django.po new file mode 100644 index 0000000..9c99f7c --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/br/LC_MESSAGES/django.po @@ -0,0 +1,1259 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Fulup , 2012,2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-05-18 00:21+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Breton (http://www.transifex.com/django/django/language/br/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: br\n" +"Plural-Forms: nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !" +"=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n" +"%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > " +"19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 " +"&& n % 1000000 == 0) ? 3 : 4);\n" + +msgid "Afrikaans" +msgstr "Afrikaneg" + +msgid "Arabic" +msgstr "Arabeg" + +msgid "Asturian" +msgstr "Astureg" + +msgid "Azerbaijani" +msgstr "Azeri" + +msgid "Bulgarian" +msgstr "Bulgareg" + +msgid "Belarusian" +msgstr "Belaruseg" + +msgid "Bengali" +msgstr "Bengaleg" + +msgid "Breton" +msgstr "Brezhoneg" + +msgid "Bosnian" +msgstr "Bosneg" + +msgid "Catalan" +msgstr "Katalaneg" + +msgid "Czech" +msgstr "Tchekeg" + +msgid "Welsh" +msgstr "Kembraeg" + +msgid "Danish" +msgstr "Daneg" + +msgid "German" +msgstr "Alamaneg" + +msgid "Lower Sorbian" +msgstr "" + +msgid "Greek" +msgstr "Gresianeg" + +msgid "English" +msgstr "Saozneg" + +msgid "Australian English" +msgstr "Saozneg Aostralia" + +msgid "British English" +msgstr "Saozneg Breizh-Veur" + +msgid "Esperanto" +msgstr "Esperanteg" + +msgid "Spanish" +msgstr "Spagnoleg" + +msgid "Argentinian Spanish" +msgstr "Spagnoleg Arc'hantina" + +msgid "Colombian Spanish" +msgstr "" + +msgid "Mexican Spanish" +msgstr "Spagnoleg Mec'hiko" + +msgid "Nicaraguan Spanish" +msgstr "Spagnoleg Nicaragua" + +msgid "Venezuelan Spanish" +msgstr "Spagnoleg Venezuela" + +msgid "Estonian" +msgstr "Estoneg" + +msgid "Basque" +msgstr "Euskareg" + +msgid "Persian" +msgstr "Perseg" + +msgid "Finnish" +msgstr "Finneg" + +msgid "French" +msgstr "Galleg" + +msgid "Frisian" +msgstr "Frizeg" + +msgid "Irish" +msgstr "Iwerzhoneg" + +msgid "Scottish Gaelic" +msgstr "" + +msgid "Galician" +msgstr "Galizeg" + +msgid "Hebrew" +msgstr "Hebraeg" + +msgid "Hindi" +msgstr "Hindi" + +msgid "Croatian" +msgstr "Kroateg" + +msgid "Upper Sorbian" +msgstr "" + +msgid "Hungarian" +msgstr "Hungareg" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "Indonezeg" + +msgid "Ido" +msgstr "Ido" + +msgid "Icelandic" +msgstr "Islandeg" + +msgid "Italian" +msgstr "Italianeg" + +msgid "Japanese" +msgstr "Japaneg" + +msgid "Georgian" +msgstr "Jorjianeg" + +msgid "Kabyle" +msgstr "" + +msgid "Kazakh" +msgstr "kazak" + +msgid "Khmer" +msgstr "Khmer" + +msgid "Kannada" +msgstr "Kannata" + +msgid "Korean" +msgstr "Koreaneg" + +msgid "Luxembourgish" +msgstr "Luksembourgeg" + +msgid "Lithuanian" +msgstr "Lituaneg" + +msgid "Latvian" +msgstr "Latveg" + +msgid "Macedonian" +msgstr "Makedoneg" + +msgid "Malayalam" +msgstr "Malayalam" + +msgid "Mongolian" +msgstr "Mongoleg" + +msgid "Marathi" +msgstr "Marathi" + +msgid "Burmese" +msgstr "Burmeg" + +msgid "Norwegian Bokmål" +msgstr "" + +msgid "Nepali" +msgstr "nepaleg" + +msgid "Dutch" +msgstr "Nederlandeg" + +msgid "Norwegian Nynorsk" +msgstr "Norvegeg Nynorsk" + +msgid "Ossetic" +msgstr "Oseteg" + +msgid "Punjabi" +msgstr "Punjabeg" + +msgid "Polish" +msgstr "Poloneg" + +msgid "Portuguese" +msgstr "Portugaleg" + +msgid "Brazilian Portuguese" +msgstr "Portugaleg Brazil" + +msgid "Romanian" +msgstr "Roumaneg" + +msgid "Russian" +msgstr "Rusianeg" + +msgid "Slovak" +msgstr "Slovakeg" + +msgid "Slovenian" +msgstr "Sloveneg" + +msgid "Albanian" +msgstr "Albaneg" + +msgid "Serbian" +msgstr "Serbeg" + +msgid "Serbian Latin" +msgstr "Serbeg e lizherennoù latin" + +msgid "Swedish" +msgstr "Svedeg" + +msgid "Swahili" +msgstr "swahileg" + +msgid "Tamil" +msgstr "Tamileg" + +msgid "Telugu" +msgstr "Telougou" + +msgid "Thai" +msgstr "Thai" + +msgid "Turkish" +msgstr "Turkeg" + +msgid "Tatar" +msgstr "tatar" + +msgid "Udmurt" +msgstr "Oudmourteg" + +msgid "Ukrainian" +msgstr "Ukraineg" + +msgid "Urdu" +msgstr "Ourdou" + +msgid "Vietnamese" +msgstr "Vietnameg" + +msgid "Simplified Chinese" +msgstr "Sinaeg eeunaet" + +msgid "Traditional Chinese" +msgstr "Sinaeg hengounel" + +msgid "Messages" +msgstr "" + +msgid "Site Maps" +msgstr "Tresoù al lec'hienn" + +msgid "Static Files" +msgstr "Restroù statek" + +msgid "Syndication" +msgstr "Sindikadur" + +msgid "That page number is not an integer" +msgstr "" + +msgid "That page number is less than 1" +msgstr "" + +msgid "That page contains no results" +msgstr "" + +msgid "Enter a valid value." +msgstr "Merkit un talvoud reizh" + +msgid "Enter a valid URL." +msgstr "Merkit un URL reizh" + +msgid "Enter a valid integer." +msgstr "" + +msgid "Enter a valid email address." +msgstr "Merkit ur chomlec'h postel reizh" + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens." +msgstr "" +"N'hall bezañ er vaezienn-mañ nemet lizherennoù, niveroù, tiredoù izel _ ha " +"barrennigoù-stagañ." + +msgid "" +"Enter a valid 'slug' consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "Merkit ur chomlec'h IPv4 reizh." + +msgid "Enter a valid IPv6 address." +msgstr "Merkit ur chomlec'h IPv6 reizh." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Merkit ur chomlec'h IPv4 pe IPv6 reizh." + +msgid "Enter only digits separated by commas." +msgstr "Merkañ hepken sifroù dispartiet dre skejoù." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Bezit sur ez eo an talvoud-mañ %(limit_value)s (evit ar mare ez eo " +"%(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Gwiriit mat emañ an talvoud-mañ a-is pe par da %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Gwiriit mat emañ an talvoud-mañ a-us pe par da %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +msgid "Enter a number." +msgstr "Merkit un niver." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgid "" +"File extension '%(extension)s' is not allowed. Allowed extensions are: " +"'%(allowed_extensions)s'." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "ha" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "" + +msgid "This field cannot be null." +msgstr "N'hall ket ar vaezienn chom goullo" + +msgid "This field cannot be blank." +msgstr "N'hall ket ar vaezienn chom goullo" + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "Bez' ez eus c'hoazh eus ur %(model_name)s gant ar %(field_label)s-mañ." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Seurt maezienn : %(field_type)s" + +msgid "Integer" +msgstr "Anterin" + +#, python-format +msgid "'%(value)s' value must be an integer." +msgstr "" + +msgid "Big (8 byte) integer" +msgstr "Anterin bras (8 okted)" + +#, python-format +msgid "'%(value)s' value must be either True or False." +msgstr "" + +#, python-format +msgid "'%(value)s' value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "Boulean (gwir pe gaou)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "neudennad arouezennoù (betek %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Niveroù anterin dispartiet dre ur skej" + +#, python-format +msgid "" +"'%(value)s' value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "Deizad (hep eur)" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "Deizad (gant an eur)" + +#, python-format +msgid "'%(value)s' value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "Niver dekvedennel" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in [DD] [HH:[MM:]]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "" + +msgid "Email address" +msgstr "Chomlec'h postel" + +msgid "File path" +msgstr "Treug war-du ar restr" + +#, python-format +msgid "'%(value)s' value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "Niver gant skej nij" + +msgid "IPv4 address" +msgstr "Chomlec'h IPv4" + +msgid "IP address" +msgstr "Chomlec'h IP" + +#, python-format +msgid "'%(value)s' value must be either None, True or False." +msgstr "Rekis eo d'an talvoud '%(value)s' bezañ par da Hini, Gwir pe Gaou." + +msgid "Boolean (Either True, False or None)" +msgstr "Boulean (gwir pe gaou pe netra)" + +msgid "Positive integer" +msgstr "Niver anterin pozitivel" + +msgid "Positive small integer" +msgstr "Niver anterin bihan pozitivel" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug (betek %(max_length)s arouez.)" + +msgid "Small integer" +msgstr "Niver anterin bihan" + +msgid "Text" +msgstr "Testenn" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"'%(value)s' value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "Eur" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "" + +#, python-format +msgid "'%(value)s' is not a valid UUID." +msgstr "" + +msgid "File" +msgstr "Restr" + +msgid "Image" +msgstr "Skeudenn" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +msgid "Foreign Key (type determined by related field)" +msgstr "Alc'hwez estren (seurt termenet dre ar vaezienn liammet)" + +msgid "One-to-one relationship" +msgstr "Darempred unan-ouzh-unan" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "Darempred lies-ouzh-lies" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr "" + +msgid "This field is required." +msgstr "Rekis eo leuniañ ar vaezienn." + +msgid "Enter a whole number." +msgstr "Merkit un niver anterin." + +msgid "Enter a valid date." +msgstr "Merkit un deiziad reizh" + +msgid "Enter a valid time." +msgstr "Merkit un eur reizh" + +msgid "Enter a valid date/time." +msgstr "Merkit un eur/deiziad reizh" + +msgid "Enter a valid duration." +msgstr "" + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "N'eus ket kaset restr ebet. Gwiriit ar seurt enkodañ evit ar restr" + +msgid "No file was submitted." +msgstr "N'eus bet kaset restr ebet." + +msgid "The submitted file is empty." +msgstr "Goullo eo ar restr kaset." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Kasit ur restr pe askit al log riñsañ; an eil pe egile" + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Enpozhiit ur skeudenn reizh. Ar seurt bet enporzhiet ganeoc'h a oa foeltret " +"pe ne oa ket ur skeudenn" + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Dizuit un dibab reizh. %(value)s n'emañ ket e-touez an dibaboù posupl." + +msgid "Enter a list of values." +msgstr "Merkit ur roll talvoudoù" + +msgid "Enter a complete value." +msgstr "Merkañ un talvoud klok" + +msgid "Enter a valid UUID." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr "" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +msgid "Order" +msgstr "Urzh" + +msgid "Delete" +msgstr "Diverkañ" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Reizhit ar roadennoù e doubl e %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Reizhit ar roadennoù e doubl e %(field)s, na zle bezañ enni nemet talvoudoù " +"dzho o-unan." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Reizhit ar roadennoù e doubl e %(field_name)s a rank bezañ ennañ talvodoù en " +"o-unan evit lodenn %(lookup)s %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Reizhañ ar roadennoù e doubl zo a-is" + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Diuzit un dibab reizh. N'emañ ket an dibab-mañ e-touez ar re bosupl." + +#, python-format +msgid "\"%(pk)s\" is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn't be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"N'eo ket bete komprenet an talvoud %(datetime)s er werzhid eur " +"%(current_timezone)s; pe eo amjestr pe n'eus ket anezhañ." + +msgid "Clear" +msgstr "Riñsañ" + +msgid "Currently" +msgstr "Evit ar mare" + +msgid "Change" +msgstr "Kemmañ" + +msgid "Unknown" +msgstr "Dianav" + +msgid "Yes" +msgstr "Ya" + +msgid "No" +msgstr "Ket" + +msgid "yes,no,maybe" +msgstr "ya, ket, marteze" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d okted" +msgstr[1] "%(size)d okted" +msgstr[2] "%(size)d okted" +msgstr[3] "%(size)d okted" +msgstr[4] "%(size)d okted" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "g.m." + +msgid "a.m." +msgstr "mintin" + +msgid "PM" +msgstr "G.M." + +msgid "AM" +msgstr "Mintin" + +msgid "midnight" +msgstr "hanternoz" + +msgid "noon" +msgstr "kreisteiz" + +msgid "Monday" +msgstr "Lun" + +msgid "Tuesday" +msgstr "Meurzh" + +msgid "Wednesday" +msgstr "Merc'her" + +msgid "Thursday" +msgstr "Yaou" + +msgid "Friday" +msgstr "Gwener" + +msgid "Saturday" +msgstr "Sadorn" + +msgid "Sunday" +msgstr "Sul" + +msgid "Mon" +msgstr "Lun" + +msgid "Tue" +msgstr "Meu" + +msgid "Wed" +msgstr "Mer" + +msgid "Thu" +msgstr "Yao" + +msgid "Fri" +msgstr "Gwe" + +msgid "Sat" +msgstr "Sad" + +msgid "Sun" +msgstr "Sul" + +msgid "January" +msgstr "Genver" + +msgid "February" +msgstr "C'hwevrer" + +msgid "March" +msgstr "Meurzh" + +msgid "April" +msgstr "Ebrel" + +msgid "May" +msgstr "Mae" + +msgid "June" +msgstr "Mezheven" + +msgid "July" +msgstr "Gouere" + +msgid "August" +msgstr "Eost" + +msgid "September" +msgstr "Gwengolo" + +msgid "October" +msgstr "Here" + +msgid "November" +msgstr "Du" + +msgid "December" +msgstr "Kerzu" + +msgid "jan" +msgstr "Gen" + +msgid "feb" +msgstr "C'hwe" + +msgid "mar" +msgstr "Meu" + +msgid "apr" +msgstr "Ebr" + +msgid "may" +msgstr "Mae" + +msgid "jun" +msgstr "Mez" + +msgid "jul" +msgstr "Gou" + +msgid "aug" +msgstr "Eos" + +msgid "sep" +msgstr "Gwe" + +msgid "oct" +msgstr "Her" + +msgid "nov" +msgstr "Du" + +msgid "dec" +msgstr "Kzu" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Gen." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "C'hwe." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Meu." + +msgctxt "abbrev. month" +msgid "April" +msgstr "Ebr." + +msgctxt "abbrev. month" +msgid "May" +msgstr "Mae" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Mez." + +msgctxt "abbrev. month" +msgid "July" +msgstr "Gou." + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Eos." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Gwe." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Her." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Du" + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Kzu" + +msgctxt "alt. month" +msgid "January" +msgstr "Genver" + +msgctxt "alt. month" +msgid "February" +msgstr "C'hwevrer" + +msgctxt "alt. month" +msgid "March" +msgstr "Meurzh" + +msgctxt "alt. month" +msgid "April" +msgstr "Ebrel" + +msgctxt "alt. month" +msgid "May" +msgstr "Mae" + +msgctxt "alt. month" +msgid "June" +msgstr "Mezheven" + +msgctxt "alt. month" +msgid "July" +msgstr "Gouere" + +msgctxt "alt. month" +msgid "August" +msgstr "Eost" + +msgctxt "alt. month" +msgid "September" +msgstr "Gwengolo" + +msgctxt "alt. month" +msgid "October" +msgstr "Here" + +msgctxt "alt. month" +msgid "November" +msgstr "Du" + +msgctxt "alt. month" +msgid "December" +msgstr "Kerzu" + +msgid "This is not a valid IPv6 address." +msgstr "" + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s..." +msgstr "%(truncated_text)s..." + +msgid "or" +msgstr "pe" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr "," + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d bloaz" +msgstr[1] "%d bloaz" +msgstr[2] "%d bloaz" +msgstr[3] "%d bloaz" +msgstr[4] "%d bloaz" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d miz" +msgstr[1] "%d miz" +msgstr[2] "%d miz" +msgstr[3] "%d miz" +msgstr[4] "%d miz" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d sizhun" +msgstr[1] "%d sizhun" +msgstr[2] "%d sizhun" +msgstr[3] "%d sizhun" +msgstr[4] "%d sizhun" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d deiz" +msgstr[1] "%d deiz" +msgstr[2] "%d deiz" +msgstr[3] "%d deiz" +msgstr[4] "%d deiz" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d eur" +msgstr[1] "%d eur" +msgstr[2] "%d eur" +msgstr[3] "%d eur" +msgstr[4] "%d eur" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d munud" +msgstr[1] "%d munud" +msgstr[2] "%d munud" +msgstr[3] "%d munud" +msgstr[4] "%d munud" + +msgid "0 minutes" +msgstr "0 munud" + +msgid "Forbidden" +msgstr "Difennet" + +msgid "CSRF verification failed. Request aborted." +msgstr "" + +msgid "" +"You are seeing this message because this HTTPS site requires a 'Referer " +"header' to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable 'Referer' headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for 'same-" +"origin' requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the 'Referrer-Policy: no-referrer' header, please remove them. The " +"CSRF protection requires the 'Referer' header to do strict referer checking. " +"If you're concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for 'same-origin' requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "" + +msgid "No year specified" +msgstr "N'eus bet resisaet bloavezh ebet" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "N'eus bet resisaet miz ebet" + +msgid "No day specified" +msgstr "N'eus bet resisaet deiz ebet" + +msgid "No week specified" +msgstr "N'eus bet resisaet sizhun ebet" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "N'eus %(verbose_name_plural)s ebet da gaout." + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"En dazont ne vo ket a %(verbose_name_plural)s rak faos eo %(class_name)s." +"allow_future." + +#, python-format +msgid "Invalid date string '%(datestr)s' given format '%(format)s'" +msgstr "" +"Direizh eo ar furmad '%(format)s' evit an neudennad deiziad '%(datestr)s'" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "" +"N'eus bet kavet traezenn %(verbose_name)s ebet o klotaén gant ar goulenn" + +msgid "Page is not 'last', nor can it be converted to an int." +msgstr "" +"N'eo ket 'last' ar bajenn na n'hall ket bezañ amdroet en un niver anterin." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "" + +#, python-format +msgid "Empty list and '%(class_name)s.allow_empty' is False." +msgstr "Roll goullo ha faos eo '%(class_name)s.allow_empty'." + +msgid "Directory indexes are not allowed here." +msgstr "N'haller ket diskwel endalc'had ar c'havlec'h-mañ." + +#, python-format +msgid "\"%(path)s\" does not exist" +msgstr "N'eus ket eus \"%(path)s\"" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Meneger %(directory)s" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to's" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/bs/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/conf/locale/bs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..57fec04f48cc5d8b679595cdce99211831a5575c GIT binary patch literal 11073 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 PmTAZz3GIl?glYMI$d{S* literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/bs/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/conf/locale/bs/LC_MESSAGES/django.po new file mode 100644 index 0000000..967fd81 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/bs/LC_MESSAGES/django.po @@ -0,0 +1,1211 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Filip Dupanović , 2011 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-11-15 16:15+0100\n" +"PO-Revision-Date: 2017-11-16 01:13+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Bosnian (http://www.transifex.com/django/django/language/" +"bs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bs\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +msgid "Afrikaans" +msgstr "" + +msgid "Arabic" +msgstr "arapski" + +msgid "Asturian" +msgstr "" + +msgid "Azerbaijani" +msgstr "Azerbejdžanski" + +msgid "Bulgarian" +msgstr "bugarski" + +msgid "Belarusian" +msgstr "" + +msgid "Bengali" +msgstr "bengalski" + +msgid "Breton" +msgstr "" + +msgid "Bosnian" +msgstr "bosanski" + +msgid "Catalan" +msgstr "katalonski" + +msgid "Czech" +msgstr "češki" + +msgid "Welsh" +msgstr "velški" + +msgid "Danish" +msgstr "danski" + +msgid "German" +msgstr "njemački" + +msgid "Lower Sorbian" +msgstr "" + +msgid "Greek" +msgstr "grčki" + +msgid "English" +msgstr "engleski" + +msgid "Australian English" +msgstr "" + +msgid "British English" +msgstr "Britanski engleski" + +msgid "Esperanto" +msgstr "" + +msgid "Spanish" +msgstr "španski" + +msgid "Argentinian Spanish" +msgstr "Argentinski španski" + +msgid "Colombian Spanish" +msgstr "" + +msgid "Mexican Spanish" +msgstr "Meksički španski" + +msgid "Nicaraguan Spanish" +msgstr "Nikuaraganski španski" + +msgid "Venezuelan Spanish" +msgstr "" + +msgid "Estonian" +msgstr "estonski" + +msgid "Basque" +msgstr "baskijski" + +msgid "Persian" +msgstr "persijski" + +msgid "Finnish" +msgstr "finski" + +msgid "French" +msgstr "francuski" + +msgid "Frisian" +msgstr "frišanski" + +msgid "Irish" +msgstr "irski" + +msgid "Scottish Gaelic" +msgstr "" + +msgid "Galician" +msgstr "galski" + +msgid "Hebrew" +msgstr "hebrejski" + +msgid "Hindi" +msgstr "hindi" + +msgid "Croatian" +msgstr "hrvatski" + +msgid "Upper Sorbian" +msgstr "" + +msgid "Hungarian" +msgstr "mađarski" + +msgid "Interlingua" +msgstr "" + +msgid "Indonesian" +msgstr "Indonežanski" + +msgid "Ido" +msgstr "" + +msgid "Icelandic" +msgstr "islandski" + +msgid "Italian" +msgstr "italijanski" + +msgid "Japanese" +msgstr "japanski" + +msgid "Georgian" +msgstr "gruzijski" + +msgid "Kazakh" +msgstr "" + +msgid "Khmer" +msgstr "kambođanski" + +msgid "Kannada" +msgstr "kanada" + +msgid "Korean" +msgstr "korejski" + +msgid "Luxembourgish" +msgstr "" + +msgid "Lithuanian" +msgstr "litvanski" + +msgid "Latvian" +msgstr "latvijski" + +msgid "Macedonian" +msgstr "makedonski" + +msgid "Malayalam" +msgstr "Malajalamski" + +msgid "Mongolian" +msgstr "Mongolski" + +msgid "Marathi" +msgstr "" + +msgid "Burmese" +msgstr "" + +msgid "Norwegian Bokmål" +msgstr "" + +msgid "Nepali" +msgstr "" + +msgid "Dutch" +msgstr "holandski" + +msgid "Norwegian Nynorsk" +msgstr "Norveški novi" + +msgid "Ossetic" +msgstr "" + +msgid "Punjabi" +msgstr "Pandžabi" + +msgid "Polish" +msgstr "poljski" + +msgid "Portuguese" +msgstr "portugalski" + +msgid "Brazilian Portuguese" +msgstr "brazilski portugalski" + +msgid "Romanian" +msgstr "rumunski" + +msgid "Russian" +msgstr "ruski" + +msgid "Slovak" +msgstr "slovački" + +msgid "Slovenian" +msgstr "slovenački" + +msgid "Albanian" +msgstr "albanski" + +msgid "Serbian" +msgstr "srpski" + +msgid "Serbian Latin" +msgstr "srpski latinski" + +msgid "Swedish" +msgstr "švedski" + +msgid "Swahili" +msgstr "" + +msgid "Tamil" +msgstr "tamilski" + +msgid "Telugu" +msgstr "telugu" + +msgid "Thai" +msgstr "tajlandski" + +msgid "Turkish" +msgstr "turski" + +msgid "Tatar" +msgstr "" + +msgid "Udmurt" +msgstr "" + +msgid "Ukrainian" +msgstr "ukrajinski" + +msgid "Urdu" +msgstr "Urdu" + +msgid "Vietnamese" +msgstr "vijetnamežanski" + +msgid "Simplified Chinese" +msgstr "novokineski" + +msgid "Traditional Chinese" +msgstr "starokineski" + +msgid "Messages" +msgstr "" + +msgid "Site Maps" +msgstr "" + +msgid "Static Files" +msgstr "" + +msgid "Syndication" +msgstr "" + +msgid "That page number is not an integer" +msgstr "" + +msgid "That page number is less than 1" +msgstr "" + +msgid "That page contains no results" +msgstr "" + +msgid "Enter a valid value." +msgstr "Unesite ispravnu vrijednost." + +msgid "Enter a valid URL." +msgstr "Unesite ispravan URL." + +msgid "Enter a valid integer." +msgstr "" + +msgid "Enter a valid email address." +msgstr "" + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Unesite ispravan „slug“, koji se sastoji od slova, brojki, donjih crta ili " +"crtica." + +msgid "" +"Enter a valid 'slug' consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "Unesite ispravnu IPv4 adresu." + +msgid "Enter a valid IPv6 address." +msgstr "" + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "" + +msgid "Enter only digits separated by commas." +msgstr "Unesite samo brojke razdvojene zapetama." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Pobrinite se da je ova vrijednost %(limit_value)s (trenutno je " +"%(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Ova vrijednost mora da bude manja ili jednaka %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Ova vrijednost mora biti veća ili jednaka %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "" +"File extension '%(extension)s' is not allowed. Allowed extensions are: " +"'%(allowed_extensions)s'." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "i" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "" + +msgid "This field cannot be null." +msgstr "Ovo polje ne može ostati prazno." + +msgid "This field cannot be blank." +msgstr "Ovo polje ne može biti prazno." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s sa ovom vrijednošću %(field_label)s već postoji." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Polje tipa: %(field_type)s" + +msgid "Integer" +msgstr "Cijeo broj" + +#, python-format +msgid "'%(value)s' value must be an integer." +msgstr "" + +msgid "Big (8 byte) integer" +msgstr "Big (8 bajtni) integer" + +#, python-format +msgid "'%(value)s' value must be either True or False." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "Bulova vrijednost (True ili False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "String (najviše %(max_length)s znakova)" + +msgid "Comma-separated integers" +msgstr "Cijeli brojevi razdvojeni zapetama" + +#, python-format +msgid "" +"'%(value)s' value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "Datum (bez vremena)" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "Datum (sa vremenom)" + +#, python-format +msgid "'%(value)s' value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "Decimalni broj" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in [DD] [HH:[MM:]]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "" + +msgid "Email address" +msgstr "Email adresa" + +msgid "File path" +msgstr "Putanja fajla" + +#, python-format +msgid "'%(value)s' value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "Broj sa pokrenom zapetom" + +msgid "IPv4 address" +msgstr "" + +msgid "IP address" +msgstr "IP adresa" + +#, python-format +msgid "'%(value)s' value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "Bulova vrijednost (True, False ili None)" + +msgid "Positive integer" +msgstr "" + +msgid "Positive small integer" +msgstr "" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "" + +msgid "Small integer" +msgstr "" + +msgid "Text" +msgstr "Tekst" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"'%(value)s' value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "Vrijeme" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "" + +#, python-format +msgid "'%(value)s' is not a valid UUID." +msgstr "" + +msgid "File" +msgstr "" + +msgid "Image" +msgstr "" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +msgid "Foreign Key (type determined by related field)" +msgstr "Strani ključ (tip određen povezanim poljem)" + +msgid "One-to-one relationship" +msgstr "Jedan-na-jedan odnos" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "Više-na-više odsnos" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr "" + +msgid "This field is required." +msgstr "Ovo polje se mora popuniti." + +msgid "Enter a whole number." +msgstr "Unesite cijeo broj." + +msgid "Enter a number." +msgstr "Unesite broj." + +msgid "Enter a valid date." +msgstr "Unesite ispravan datum." + +msgid "Enter a valid time." +msgstr "Unesite ispravno vrijeme" + +msgid "Enter a valid date/time." +msgstr "Unesite ispravan datum/vrijeme." + +msgid "Enter a valid duration." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Fajl nije prebačen. Provjerite tip enkodiranja formulara." + +msgid "No file was submitted." +msgstr "Fajl nije prebačen." + +msgid "The submitted file is empty." +msgstr "Prebačen fajl je prazan." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Prebacite ispravan fajl. Fajl koji je prebačen ili nije slika, ili je " +"oštećen." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" +"%(value)s nije među ponuđenim vrijednostima. Odaberite jednu od ponuđenih." + +msgid "Enter a list of values." +msgstr "Unesite listu vrijednosti." + +msgid "Enter a complete value." +msgstr "" + +msgid "Enter a valid UUID." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr "" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid "Order" +msgstr "Redoslijed" + +msgid "Delete" +msgstr "Obriši" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Ispravite dupli sadržaj za polja: %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Ispravite dupli sadržaj za polja: %(field)s, koji mora da bude jedinstven." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Ispravite dupli sadržaj za polja: %(field_name)s, koji mora da bude " +"jedinstven za %(lookup)s u %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Ispravite duple vrijednosti dole." + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" +"Odabrana vrijednost nije među ponuđenima. Odaberite jednu od ponuđenih." + +#, python-format +msgid "\"%(pk)s\" is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn't be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "Očisti" + +msgid "Currently" +msgstr "Trenutno" + +msgid "Change" +msgstr "Izmjeni" + +msgid "Unknown" +msgstr "Nepoznato" + +msgid "Yes" +msgstr "Da" + +msgid "No" +msgstr "Ne" + +msgid "yes,no,maybe" +msgstr "da,ne,možda" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "po p." + +msgid "a.m." +msgstr "prije p." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "ponoć" + +msgid "noon" +msgstr "podne" + +msgid "Monday" +msgstr "ponedjeljak" + +msgid "Tuesday" +msgstr "utorak" + +msgid "Wednesday" +msgstr "srijeda" + +msgid "Thursday" +msgstr "četvrtak" + +msgid "Friday" +msgstr "petak" + +msgid "Saturday" +msgstr "subota" + +msgid "Sunday" +msgstr "nedjelja" + +msgid "Mon" +msgstr "pon." + +msgid "Tue" +msgstr "uto." + +msgid "Wed" +msgstr "sri." + +msgid "Thu" +msgstr "čet." + +msgid "Fri" +msgstr "pet." + +msgid "Sat" +msgstr "sub." + +msgid "Sun" +msgstr "ned." + +msgid "January" +msgstr "januar" + +msgid "February" +msgstr "februar" + +msgid "March" +msgstr "mart" + +msgid "April" +msgstr "april" + +msgid "May" +msgstr "maj" + +msgid "June" +msgstr "juni" + +msgid "July" +msgstr "juli" + +msgid "August" +msgstr "august" + +msgid "September" +msgstr "septembar" + +msgid "October" +msgstr "oktobar" + +msgid "November" +msgstr "novembar" + +msgid "December" +msgstr "decembar" + +msgid "jan" +msgstr "jan." + +msgid "feb" +msgstr "feb." + +msgid "mar" +msgstr "mar." + +msgid "apr" +msgstr "apr." + +msgid "may" +msgstr "maj." + +msgid "jun" +msgstr "jun." + +msgid "jul" +msgstr "jul." + +msgid "aug" +msgstr "aug." + +msgid "sep" +msgstr "sep." + +msgid "oct" +msgstr "okt." + +msgid "nov" +msgstr "nov." + +msgid "dec" +msgstr "dec." + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Jan." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Feb." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Mart" + +msgctxt "abbrev. month" +msgid "April" +msgstr "April" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Maj" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Juni" + +msgctxt "abbrev. month" +msgid "July" +msgstr "juli" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "august" + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "septembar" + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "oktobar" + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "novembar" + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "decembar" + +msgctxt "alt. month" +msgid "January" +msgstr "januar" + +msgctxt "alt. month" +msgid "February" +msgstr "februar" + +msgctxt "alt. month" +msgid "March" +msgstr "mart" + +msgctxt "alt. month" +msgid "April" +msgstr "april" + +msgctxt "alt. month" +msgid "May" +msgstr "maj" + +msgctxt "alt. month" +msgid "June" +msgstr "juni" + +msgctxt "alt. month" +msgid "July" +msgstr "juli" + +msgctxt "alt. month" +msgid "August" +msgstr "august" + +msgctxt "alt. month" +msgid "September" +msgstr "septembar" + +msgctxt "alt. month" +msgid "October" +msgstr "oktobar" + +msgctxt "alt. month" +msgid "November" +msgstr "Novembar" + +msgctxt "alt. month" +msgid "December" +msgstr "decembar" + +msgid "This is not a valid IPv6 address." +msgstr "" + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s..." +msgstr "" + +msgid "or" +msgstr "ili" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid "0 minutes" +msgstr "" + +msgid "Forbidden" +msgstr "" + +msgid "CSRF verification failed. Request aborted." +msgstr "" + +msgid "" +"You are seeing this message because this HTTPS site requires a 'Referer " +"header' to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable 'Referer' headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for 'same-" +"origin' requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the 'Referrer-Policy: no-referrer' header, please remove them. The " +"CSRF protection requires the 'Referer' header to do strict referer checking. " +"If you're concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for 'same-origin' requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "" + +msgid "No year specified" +msgstr "Godina nije naznačena" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "Mjesec nije naznačen" + +msgid "No day specified" +msgstr "Dan nije naznačen" + +msgid "No week specified" +msgstr "Sedmica nije naznačena" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" + +#, python-format +msgid "Invalid date string '%(datestr)s' given format '%(format)s'" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "" + +msgid "Page is not 'last', nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "" + +#, python-format +msgid "Empty list and '%(class_name)s.allow_empty' is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "" + +#, python-format +msgid "\"%(path)s\" does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to's" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/bs/formats.py b/venv/lib/python3.7/site-packages/django/conf/locale/bs/formats.py new file mode 100644 index 0000000..25d9b40 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/bs/formats.py @@ -0,0 +1,21 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = 'j. N Y.' +TIME_FORMAT = 'G:i' +DATETIME_FORMAT = 'j. N. Y. G:i T' +YEAR_MONTH_FORMAT = 'F Y.' +MONTH_DAY_FORMAT = 'j. F' +SHORT_DATE_FORMAT = 'Y M j' +# SHORT_DATETIME_FORMAT = +# FIRST_DAY_OF_WEEK = + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +# DATE_INPUT_FORMATS = +# TIME_INPUT_FORMATS = +# DATETIME_INPUT_FORMATS = +DECIMAL_SEPARATOR = ',' +THOUSAND_SEPARATOR = '.' +# NUMBER_GROUPING = diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/ca/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/conf/locale/ca/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9ce89a903dc39fe0d07fc4a571eebd928c32f650 GIT binary patch literal 26667 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 I`gwW(4OV*T)&Kwi literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/cy/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/conf/locale/cy/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3cbe28027611c7cdbe77c75ccbb7c13d4ce5b468 GIT binary patch literal 22280 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/da/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/conf/locale/da/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e0e64f998738b2933d82fc618dfad75a7a0e280c GIT binary patch literal 26075 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 KNAcjedH)}N$od2T literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/da/__init__.py b/venv/lib/python3.7/site-packages/django/conf/locale/da/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/de/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/conf/locale/de/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..48165d6756c8fecacf2850a97bd1f7aa9ca6fb6f GIT binary patch literal 27406 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 d&Qd_G}K0o0S;zXR+{CT;)# literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/de/formats.py b/venv/lib/python3.7/site-packages/django/conf/locale/de/formats.py new file mode 100644 index 0000000..5e09b2c --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/de/formats.py @@ -0,0 +1,28 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = 'j. F Y' +TIME_FORMAT = 'H:i' +DATETIME_FORMAT = 'j. F Y H:i' +YEAR_MONTH_FORMAT = 'F Y' +MONTH_DAY_FORMAT = 'j. F' +SHORT_DATE_FORMAT = 'd.m.Y' +SHORT_DATETIME_FORMAT = 'd.m.Y H:i' +FIRST_DAY_OF_WEEK = 1 # Monday + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +DATE_INPUT_FORMATS = [ + '%d.%m.%Y', '%d.%m.%y', # '25.10.2006', '25.10.06' + # '%d. %B %Y', '%d. %b. %Y', # '25. October 2006', '25. Oct. 2006' +] +DATETIME_INPUT_FORMATS = [ + '%d.%m.%Y %H:%M:%S', # '25.10.2006 14:30:59' + '%d.%m.%Y %H:%M:%S.%f', # '25.10.2006 14:30:59.000200' + '%d.%m.%Y %H:%M', # '25.10.2006 14:30' + '%d.%m.%Y', # '25.10.2006' +] +DECIMAL_SEPARATOR = ',' +THOUSAND_SEPARATOR = '.' +NUMBER_GROUPING = 3 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/de_CH/formats.py b/venv/lib/python3.7/site-packages/django/conf/locale/de_CH/formats.py new file mode 100644 index 0000000..b1c1e83 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/de_CH/formats.py @@ -0,0 +1,34 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = 'j. F Y' +TIME_FORMAT = 'H:i' +DATETIME_FORMAT = 'j. F Y H:i' +YEAR_MONTH_FORMAT = 'F Y' +MONTH_DAY_FORMAT = 'j. F' +SHORT_DATE_FORMAT = 'd.m.Y' +SHORT_DATETIME_FORMAT = 'd.m.Y H:i' +FIRST_DAY_OF_WEEK = 1 # Monday + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +DATE_INPUT_FORMATS = [ + '%d.%m.%Y', '%d.%m.%y', # '25.10.2006', '25.10.06' + # '%d. %B %Y', '%d. %b. %Y', # '25. October 2006', '25. Oct. 2006' +] +DATETIME_INPUT_FORMATS = [ + '%d.%m.%Y %H:%M:%S', # '25.10.2006 14:30:59' + '%d.%m.%Y %H:%M:%S.%f', # '25.10.2006 14:30:59.000200' + '%d.%m.%Y %H:%M', # '25.10.2006 14:30' + '%d.%m.%Y', # '25.10.2006' +] + +# these are the separators for non-monetary numbers. For monetary numbers, +# the DECIMAL_SEPARATOR is a . (decimal point) and the THOUSAND_SEPARATOR is a +# ' (single quote). +# For details, please refer to http://www.bk.admin.ch/dokumentation/sprachen/04915/05016/index.html?lang=de +# (in German) and the documentation +DECIMAL_SEPARATOR = ',' +THOUSAND_SEPARATOR = '\xa0' # non-breaking space +NUMBER_GROUPING = 3 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/en/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/conf/locale/en/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0d4c976d2624f5caf10d5989cf58218bbd1bd925 GIT binary patch literal 356 zcmYL^&q@O^5Qi&z+M{O=Ie4;8O)0B0xB&q0w_}K)qVuH1Y-7m!Y=xZ< z2^P`11|GIHLglr{md_PT1DeDx%uGTp#!^i{Dn3G8Y9)tKNy#Ft@YD4@_nriqgPI7H z>q$P8WA>g*Oi%?wu{Ftu|M?=J`QReit+5CdzqBaHwl1#44bpwZfIi6?w_ylTR)bkViO(Y2`8CPYlPFV!Oyd#~T*9Rrk9`^J&gqIh#D8~gzx CN@0=! literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/en/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/conf/locale/en/LC_MESSAGES/django.po new file mode 100644 index 0000000..2c52175 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/en/LC_MESSAGES/django.po @@ -0,0 +1,1527 @@ +# This file is distributed under the same license as the Django package. +# +msgid "" +msgstr "" +"Project-Id-Version: Django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2010-05-13 15:35+0200\n" +"Last-Translator: Django team\n" +"Language-Team: English \n" +"Language: en\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: conf/global_settings.py:52 +msgid "Afrikaans" +msgstr "" + +#: conf/global_settings.py:53 +msgid "Arabic" +msgstr "" + +#: conf/global_settings.py:54 +msgid "Asturian" +msgstr "" + +#: conf/global_settings.py:55 +msgid "Azerbaijani" +msgstr "" + +#: conf/global_settings.py:56 +msgid "Bulgarian" +msgstr "" + +#: conf/global_settings.py:57 +msgid "Belarusian" +msgstr "" + +#: conf/global_settings.py:58 +msgid "Bengali" +msgstr "" + +#: conf/global_settings.py:59 +msgid "Breton" +msgstr "" + +#: conf/global_settings.py:60 +msgid "Bosnian" +msgstr "" + +#: conf/global_settings.py:61 +msgid "Catalan" +msgstr "" + +#: conf/global_settings.py:62 +msgid "Czech" +msgstr "" + +#: conf/global_settings.py:63 +msgid "Welsh" +msgstr "" + +#: conf/global_settings.py:64 +msgid "Danish" +msgstr "" + +#: conf/global_settings.py:65 +msgid "German" +msgstr "" + +#: conf/global_settings.py:66 +msgid "Lower Sorbian" +msgstr "" + +#: conf/global_settings.py:67 +msgid "Greek" +msgstr "" + +#: conf/global_settings.py:68 +msgid "English" +msgstr "" + +#: conf/global_settings.py:69 +msgid "Australian English" +msgstr "" + +#: conf/global_settings.py:70 +msgid "British English" +msgstr "" + +#: conf/global_settings.py:71 +msgid "Esperanto" +msgstr "" + +#: conf/global_settings.py:72 +msgid "Spanish" +msgstr "" + +#: conf/global_settings.py:73 +msgid "Argentinian Spanish" +msgstr "" + +#: conf/global_settings.py:74 +msgid "Colombian Spanish" +msgstr "" + +#: conf/global_settings.py:75 +msgid "Mexican Spanish" +msgstr "" + +#: conf/global_settings.py:76 +msgid "Nicaraguan Spanish" +msgstr "" + +#: conf/global_settings.py:77 +msgid "Venezuelan Spanish" +msgstr "" + +#: conf/global_settings.py:78 +msgid "Estonian" +msgstr "" + +#: conf/global_settings.py:79 +msgid "Basque" +msgstr "" + +#: conf/global_settings.py:80 +msgid "Persian" +msgstr "" + +#: conf/global_settings.py:81 +msgid "Finnish" +msgstr "" + +#: conf/global_settings.py:82 +msgid "French" +msgstr "" + +#: conf/global_settings.py:83 +msgid "Frisian" +msgstr "" + +#: conf/global_settings.py:84 +msgid "Irish" +msgstr "" + +#: conf/global_settings.py:85 +msgid "Scottish Gaelic" +msgstr "" + +#: conf/global_settings.py:86 +msgid "Galician" +msgstr "" + +#: conf/global_settings.py:87 +msgid "Hebrew" +msgstr "" + +#: conf/global_settings.py:88 +msgid "Hindi" +msgstr "" + +#: conf/global_settings.py:89 +msgid "Croatian" +msgstr "" + +#: conf/global_settings.py:90 +msgid "Upper Sorbian" +msgstr "" + +#: conf/global_settings.py:91 +msgid "Hungarian" +msgstr "" + +#: conf/global_settings.py:92 +msgid "Armenian" +msgstr "" + +#: conf/global_settings.py:93 +msgid "Interlingua" +msgstr "" + +#: conf/global_settings.py:94 +msgid "Indonesian" +msgstr "" + +#: conf/global_settings.py:95 +msgid "Ido" +msgstr "" + +#: conf/global_settings.py:96 +msgid "Icelandic" +msgstr "" + +#: conf/global_settings.py:97 +msgid "Italian" +msgstr "" + +#: conf/global_settings.py:98 +msgid "Japanese" +msgstr "" + +#: conf/global_settings.py:99 +msgid "Georgian" +msgstr "" + +#: conf/global_settings.py:100 +msgid "Kabyle" +msgstr "" + +#: conf/global_settings.py:101 +msgid "Kazakh" +msgstr "" + +#: conf/global_settings.py:102 +msgid "Khmer" +msgstr "" + +#: conf/global_settings.py:103 +msgid "Kannada" +msgstr "" + +#: conf/global_settings.py:104 +msgid "Korean" +msgstr "" + +#: conf/global_settings.py:105 +msgid "Luxembourgish" +msgstr "" + +#: conf/global_settings.py:106 +msgid "Lithuanian" +msgstr "" + +#: conf/global_settings.py:107 +msgid "Latvian" +msgstr "" + +#: conf/global_settings.py:108 +msgid "Macedonian" +msgstr "" + +#: conf/global_settings.py:109 +msgid "Malayalam" +msgstr "" + +#: conf/global_settings.py:110 +msgid "Mongolian" +msgstr "" + +#: conf/global_settings.py:111 +msgid "Marathi" +msgstr "" + +#: conf/global_settings.py:112 +msgid "Burmese" +msgstr "" + +#: conf/global_settings.py:113 +msgid "Norwegian Bokmål" +msgstr "" + +#: conf/global_settings.py:114 +msgid "Nepali" +msgstr "" + +#: conf/global_settings.py:115 +msgid "Dutch" +msgstr "" + +#: conf/global_settings.py:116 +msgid "Norwegian Nynorsk" +msgstr "" + +#: conf/global_settings.py:117 +msgid "Ossetic" +msgstr "" + +#: conf/global_settings.py:118 +msgid "Punjabi" +msgstr "" + +#: conf/global_settings.py:119 +msgid "Polish" +msgstr "" + +#: conf/global_settings.py:120 +msgid "Portuguese" +msgstr "" + +#: conf/global_settings.py:121 +msgid "Brazilian Portuguese" +msgstr "" + +#: conf/global_settings.py:122 +msgid "Romanian" +msgstr "" + +#: conf/global_settings.py:123 +msgid "Russian" +msgstr "" + +#: conf/global_settings.py:124 +msgid "Slovak" +msgstr "" + +#: conf/global_settings.py:125 +msgid "Slovenian" +msgstr "" + +#: conf/global_settings.py:126 +msgid "Albanian" +msgstr "" + +#: conf/global_settings.py:127 +msgid "Serbian" +msgstr "" + +#: conf/global_settings.py:128 +msgid "Serbian Latin" +msgstr "" + +#: conf/global_settings.py:129 +msgid "Swedish" +msgstr "" + +#: conf/global_settings.py:130 +msgid "Swahili" +msgstr "" + +#: conf/global_settings.py:131 +msgid "Tamil" +msgstr "" + +#: conf/global_settings.py:132 +msgid "Telugu" +msgstr "" + +#: conf/global_settings.py:133 +msgid "Thai" +msgstr "" + +#: conf/global_settings.py:134 +msgid "Turkish" +msgstr "" + +#: conf/global_settings.py:135 +msgid "Tatar" +msgstr "" + +#: conf/global_settings.py:136 +msgid "Udmurt" +msgstr "" + +#: conf/global_settings.py:137 +msgid "Ukrainian" +msgstr "" + +#: conf/global_settings.py:138 +msgid "Urdu" +msgstr "" + +#: conf/global_settings.py:139 +msgid "Vietnamese" +msgstr "" + +#: conf/global_settings.py:140 +msgid "Simplified Chinese" +msgstr "" + +#: conf/global_settings.py:141 +msgid "Traditional Chinese" +msgstr "" + +#: contrib/messages/apps.py:7 +msgid "Messages" +msgstr "" + +#: contrib/sitemaps/apps.py:7 +msgid "Site Maps" +msgstr "" + +#: contrib/staticfiles/apps.py:9 +msgid "Static Files" +msgstr "" + +#: contrib/syndication/apps.py:7 +msgid "Syndication" +msgstr "" + +#: core/paginator.py:45 +msgid "That page number is not an integer" +msgstr "" + +#: core/paginator.py:47 +msgid "That page number is less than 1" +msgstr "" + +#: core/paginator.py:52 +msgid "That page contains no results" +msgstr "" + +#: core/validators.py:31 +msgid "Enter a valid value." +msgstr "" + +#: core/validators.py:102 forms/fields.py:658 +msgid "Enter a valid URL." +msgstr "" + +#: core/validators.py:154 +msgid "Enter a valid integer." +msgstr "" + +#: core/validators.py:165 +msgid "Enter a valid email address." +msgstr "" + +#. Translators: "letters" means latin letters: a-z and A-Z. +#: core/validators.py:239 +msgid "" +"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens." +msgstr "" + +#: core/validators.py:246 +msgid "" +"Enter a valid 'slug' consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +#: core/validators.py:255 core/validators.py:275 +msgid "Enter a valid IPv4 address." +msgstr "" + +#: core/validators.py:260 core/validators.py:276 +msgid "Enter a valid IPv6 address." +msgstr "" + +#: core/validators.py:270 core/validators.py:274 +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "" + +#: core/validators.py:304 +msgid "Enter only digits separated by commas." +msgstr "" + +#: core/validators.py:310 +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" + +#: core/validators.py:342 +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "" + +#: core/validators.py:351 +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "" + +#: core/validators.py:361 +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +#: core/validators.py:376 +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +#: core/validators.py:395 forms/fields.py:290 forms/fields.py:325 +msgid "Enter a number." +msgstr "" + +#: core/validators.py:397 +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "" +msgstr[1] "" + +#: core/validators.py:402 +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" +msgstr[1] "" + +#: core/validators.py:407 +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +msgstr[1] "" + +#: core/validators.py:469 +#, python-format +msgid "" +"File extension '%(extension)s' is not allowed. Allowed extensions are: " +"'%(allowed_extensions)s'." +msgstr "" + +#: core/validators.py:521 +msgid "Null characters are not allowed." +msgstr "" + +#: db/models/base.py:1156 forms/models.py:756 +msgid "and" +msgstr "" + +#: db/models/base.py:1158 +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" + +#: db/models/fields/__init__.py:104 +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "" + +#: db/models/fields/__init__.py:105 +msgid "This field cannot be null." +msgstr "" + +#: db/models/fields/__init__.py:106 +msgid "This field cannot be blank." +msgstr "" + +#: db/models/fields/__init__.py:107 +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "" + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#: db/models/fields/__init__.py:111 +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" + +#: db/models/fields/__init__.py:128 +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "" + +#: db/models/fields/__init__.py:899 db/models/fields/__init__.py:1766 +msgid "Integer" +msgstr "" + +#: db/models/fields/__init__.py:903 db/models/fields/__init__.py:1764 +#, python-format +msgid "'%(value)s' value must be an integer." +msgstr "" + +#: db/models/fields/__init__.py:978 db/models/fields/__init__.py:1832 +msgid "Big (8 byte) integer" +msgstr "" + +#: db/models/fields/__init__.py:990 +#, python-format +msgid "'%(value)s' value must be either True or False." +msgstr "" + +#: db/models/fields/__init__.py:991 +#, python-format +msgid "'%(value)s' value must be either True, False, or None." +msgstr "" + +#: db/models/fields/__init__.py:993 +msgid "Boolean (Either True or False)" +msgstr "" + +#: db/models/fields/__init__.py:1034 +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "" + +#: db/models/fields/__init__.py:1098 +msgid "Comma-separated integers" +msgstr "" + +#: db/models/fields/__init__.py:1147 +#, python-format +msgid "" +"'%(value)s' value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#: db/models/fields/__init__.py:1149 db/models/fields/__init__.py:1292 +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +#: db/models/fields/__init__.py:1152 +msgid "Date (without time)" +msgstr "" + +#: db/models/fields/__init__.py:1290 +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#: db/models/fields/__init__.py:1294 +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +#: db/models/fields/__init__.py:1298 +msgid "Date (with time)" +msgstr "" + +#: db/models/fields/__init__.py:1446 +#, python-format +msgid "'%(value)s' value must be a decimal number." +msgstr "" + +#: db/models/fields/__init__.py:1448 +msgid "Decimal number" +msgstr "" + +#: db/models/fields/__init__.py:1587 +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in [DD] [HH:[MM:]]ss[." +"uuuuuu] format." +msgstr "" + +#: db/models/fields/__init__.py:1590 +msgid "Duration" +msgstr "" + +#: db/models/fields/__init__.py:1640 +msgid "Email address" +msgstr "" + +#: db/models/fields/__init__.py:1663 +msgid "File path" +msgstr "" + +#: db/models/fields/__init__.py:1729 +#, python-format +msgid "'%(value)s' value must be a float." +msgstr "" + +#: db/models/fields/__init__.py:1731 +msgid "Floating point number" +msgstr "" + +#: db/models/fields/__init__.py:1848 +msgid "IPv4 address" +msgstr "" + +#: db/models/fields/__init__.py:1879 +msgid "IP address" +msgstr "" + +#: db/models/fields/__init__.py:1959 db/models/fields/__init__.py:1960 +#, python-format +msgid "'%(value)s' value must be either None, True or False." +msgstr "" + +#: db/models/fields/__init__.py:1962 +msgid "Boolean (Either True, False or None)" +msgstr "" + +#: db/models/fields/__init__.py:1997 +msgid "Positive integer" +msgstr "" + +#: db/models/fields/__init__.py:2010 +msgid "Positive small integer" +msgstr "" + +#: db/models/fields/__init__.py:2024 +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "" + +#: db/models/fields/__init__.py:2056 +msgid "Small integer" +msgstr "" + +#: db/models/fields/__init__.py:2063 +msgid "Text" +msgstr "" + +#: db/models/fields/__init__.py:2091 +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#: db/models/fields/__init__.py:2093 +#, python-format +msgid "" +"'%(value)s' value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +#: db/models/fields/__init__.py:2096 +msgid "Time" +msgstr "" + +#: db/models/fields/__init__.py:2222 +msgid "URL" +msgstr "" + +#: db/models/fields/__init__.py:2244 +msgid "Raw binary data" +msgstr "" + +#: db/models/fields/__init__.py:2294 +#, python-format +msgid "'%(value)s' is not a valid UUID." +msgstr "" + +#: db/models/fields/__init__.py:2296 +msgid "Universally unique identifier" +msgstr "" + +#: db/models/fields/files.py:221 +msgid "File" +msgstr "" + +#: db/models/fields/files.py:360 +msgid "Image" +msgstr "" + +#: db/models/fields/related.py:778 +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +#: db/models/fields/related.py:780 +msgid "Foreign Key (type determined by related field)" +msgstr "" + +#: db/models/fields/related.py:1007 +msgid "One-to-one relationship" +msgstr "" + +#: db/models/fields/related.py:1057 +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#: db/models/fields/related.py:1058 +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +#: db/models/fields/related.py:1100 +msgid "Many-to-many relationship" +msgstr "" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the label +#: forms/boundfield.py:146 +msgid ":?.!" +msgstr "" + +#: forms/fields.py:53 +msgid "This field is required." +msgstr "" + +#: forms/fields.py:245 +msgid "Enter a whole number." +msgstr "" + +#: forms/fields.py:396 forms/fields.py:1126 +msgid "Enter a valid date." +msgstr "" + +#: forms/fields.py:420 forms/fields.py:1127 +msgid "Enter a valid time." +msgstr "" + +#: forms/fields.py:442 +msgid "Enter a valid date/time." +msgstr "" + +#: forms/fields.py:471 +msgid "Enter a valid duration." +msgstr "" + +#: forms/fields.py:472 +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" + +#: forms/fields.py:532 +msgid "No file was submitted. Check the encoding type on the form." +msgstr "" + +#: forms/fields.py:533 +msgid "No file was submitted." +msgstr "" + +#: forms/fields.py:534 +msgid "The submitted file is empty." +msgstr "" + +#: forms/fields.py:536 +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +msgstr[1] "" + +#: forms/fields.py:539 +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" + +#: forms/fields.py:600 +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" + +#: forms/fields.py:762 forms/fields.py:852 forms/models.py:1270 +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" + +#: forms/fields.py:853 forms/fields.py:968 forms/models.py:1269 +msgid "Enter a list of values." +msgstr "" + +#: forms/fields.py:969 +msgid "Enter a complete value." +msgstr "" + +#: forms/fields.py:1185 +msgid "Enter a valid UUID." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +#: forms/forms.py:86 +msgid ":" +msgstr "" + +#: forms/forms.py:212 +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "" + +#: forms/formsets.py:91 +msgid "ManagementForm data is missing or has been tampered with" +msgstr "" + +#: forms/formsets.py:338 +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "" +msgstr[1] "" + +#: forms/formsets.py:345 +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "" +msgstr[1] "" + +#: forms/formsets.py:371 forms/formsets.py:373 +msgid "Order" +msgstr "" + +#: forms/formsets.py:375 +msgid "Delete" +msgstr "" + +#: forms/models.py:751 +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "" + +#: forms/models.py:755 +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" + +#: forms/models.py:761 +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" + +#: forms/models.py:770 +msgid "Please correct the duplicate values below." +msgstr "" + +#: forms/models.py:1091 +msgid "The inline value did not match the parent instance." +msgstr "" + +#: forms/models.py:1158 +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" + +#: forms/models.py:1272 +#, python-format +msgid "\"%(pk)s\" is not a valid value." +msgstr "" + +#: forms/utils.py:162 +#, python-format +msgid "" +"%(datetime)s couldn't be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +#: forms/widgets.py:383 +msgid "Clear" +msgstr "" + +#: forms/widgets.py:384 +msgid "Currently" +msgstr "" + +#: forms/widgets.py:385 +msgid "Change" +msgstr "" + +#: forms/widgets.py:699 +msgid "Unknown" +msgstr "" + +#: forms/widgets.py:700 +msgid "Yes" +msgstr "" + +#: forms/widgets.py:701 +msgid "No" +msgstr "" + +#: template/defaultfilters.py:788 +msgid "yes,no,maybe" +msgstr "" + +#: template/defaultfilters.py:817 template/defaultfilters.py:834 +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "" +msgstr[1] "" + +#: template/defaultfilters.py:836 +#, python-format +msgid "%s KB" +msgstr "" + +#: template/defaultfilters.py:838 +#, python-format +msgid "%s MB" +msgstr "" + +#: template/defaultfilters.py:840 +#, python-format +msgid "%s GB" +msgstr "" + +#: template/defaultfilters.py:842 +#, python-format +msgid "%s TB" +msgstr "" + +#: template/defaultfilters.py:844 +#, python-format +msgid "%s PB" +msgstr "" + +#: utils/dateformat.py:62 +msgid "p.m." +msgstr "" + +#: utils/dateformat.py:63 +msgid "a.m." +msgstr "" + +#: utils/dateformat.py:68 +msgid "PM" +msgstr "" + +#: utils/dateformat.py:69 +msgid "AM" +msgstr "" + +#: utils/dateformat.py:150 +msgid "midnight" +msgstr "" + +#: utils/dateformat.py:152 +msgid "noon" +msgstr "" + +#: utils/dates.py:6 +msgid "Monday" +msgstr "" + +#: utils/dates.py:6 +msgid "Tuesday" +msgstr "" + +#: utils/dates.py:6 +msgid "Wednesday" +msgstr "" + +#: utils/dates.py:6 +msgid "Thursday" +msgstr "" + +#: utils/dates.py:6 +msgid "Friday" +msgstr "" + +#: utils/dates.py:7 +msgid "Saturday" +msgstr "" + +#: utils/dates.py:7 +msgid "Sunday" +msgstr "" + +#: utils/dates.py:10 +msgid "Mon" +msgstr "" + +#: utils/dates.py:10 +msgid "Tue" +msgstr "" + +#: utils/dates.py:10 +msgid "Wed" +msgstr "" + +#: utils/dates.py:10 +msgid "Thu" +msgstr "" + +#: utils/dates.py:10 +msgid "Fri" +msgstr "" + +#: utils/dates.py:11 +msgid "Sat" +msgstr "" + +#: utils/dates.py:11 +msgid "Sun" +msgstr "" + +#: utils/dates.py:14 +msgid "January" +msgstr "" + +#: utils/dates.py:14 +msgid "February" +msgstr "" + +#: utils/dates.py:14 +msgid "March" +msgstr "" + +#: utils/dates.py:14 +msgid "April" +msgstr "" + +#: utils/dates.py:14 +msgid "May" +msgstr "" + +#: utils/dates.py:14 +msgid "June" +msgstr "" + +#: utils/dates.py:15 +msgid "July" +msgstr "" + +#: utils/dates.py:15 +msgid "August" +msgstr "" + +#: utils/dates.py:15 +msgid "September" +msgstr "" + +#: utils/dates.py:15 +msgid "October" +msgstr "" + +#: utils/dates.py:15 +msgid "November" +msgstr "" + +#: utils/dates.py:16 +msgid "December" +msgstr "" + +#: utils/dates.py:19 +msgid "jan" +msgstr "" + +#: utils/dates.py:19 +msgid "feb" +msgstr "" + +#: utils/dates.py:19 +msgid "mar" +msgstr "" + +#: utils/dates.py:19 +msgid "apr" +msgstr "" + +#: utils/dates.py:19 +msgid "may" +msgstr "" + +#: utils/dates.py:19 +msgid "jun" +msgstr "" + +#: utils/dates.py:20 +msgid "jul" +msgstr "" + +#: utils/dates.py:20 +msgid "aug" +msgstr "" + +#: utils/dates.py:20 +msgid "sep" +msgstr "" + +#: utils/dates.py:20 +msgid "oct" +msgstr "" + +#: utils/dates.py:20 +msgid "nov" +msgstr "" + +#: utils/dates.py:20 +msgid "dec" +msgstr "" + +#: utils/dates.py:23 +msgctxt "abbrev. month" +msgid "Jan." +msgstr "" + +#: utils/dates.py:24 +msgctxt "abbrev. month" +msgid "Feb." +msgstr "" + +#: utils/dates.py:25 +msgctxt "abbrev. month" +msgid "March" +msgstr "" + +#: utils/dates.py:26 +msgctxt "abbrev. month" +msgid "April" +msgstr "" + +#: utils/dates.py:27 +msgctxt "abbrev. month" +msgid "May" +msgstr "" + +#: utils/dates.py:28 +msgctxt "abbrev. month" +msgid "June" +msgstr "" + +#: utils/dates.py:29 +msgctxt "abbrev. month" +msgid "July" +msgstr "" + +#: utils/dates.py:30 +msgctxt "abbrev. month" +msgid "Aug." +msgstr "" + +#: utils/dates.py:31 +msgctxt "abbrev. month" +msgid "Sept." +msgstr "" + +#: utils/dates.py:32 +msgctxt "abbrev. month" +msgid "Oct." +msgstr "" + +#: utils/dates.py:33 +msgctxt "abbrev. month" +msgid "Nov." +msgstr "" + +#: utils/dates.py:34 +msgctxt "abbrev. month" +msgid "Dec." +msgstr "" + +#: utils/dates.py:37 +msgctxt "alt. month" +msgid "January" +msgstr "" + +#: utils/dates.py:38 +msgctxt "alt. month" +msgid "February" +msgstr "" + +#: utils/dates.py:39 +msgctxt "alt. month" +msgid "March" +msgstr "" + +#: utils/dates.py:40 +msgctxt "alt. month" +msgid "April" +msgstr "" + +#: utils/dates.py:41 +msgctxt "alt. month" +msgid "May" +msgstr "" + +#: utils/dates.py:42 +msgctxt "alt. month" +msgid "June" +msgstr "" + +#: utils/dates.py:43 +msgctxt "alt. month" +msgid "July" +msgstr "" + +#: utils/dates.py:44 +msgctxt "alt. month" +msgid "August" +msgstr "" + +#: utils/dates.py:45 +msgctxt "alt. month" +msgid "September" +msgstr "" + +#: utils/dates.py:46 +msgctxt "alt. month" +msgid "October" +msgstr "" + +#: utils/dates.py:47 +msgctxt "alt. month" +msgid "November" +msgstr "" + +#: utils/dates.py:48 +msgctxt "alt. month" +msgid "December" +msgstr "" + +#: utils/ipv6.py:8 +msgid "This is not a valid IPv6 address." +msgstr "" + +#: utils/text.py:67 +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +#: utils/text.py:233 +msgid "or" +msgstr "" + +#. Translators: This string is used as a separator between list elements +#: utils/text.py:252 utils/timesince.py:83 +msgid ", " +msgstr "" + +#: utils/timesince.py:9 +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" +msgstr[1] "" + +#: utils/timesince.py:10 +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" +msgstr[1] "" + +#: utils/timesince.py:11 +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" +msgstr[1] "" + +#: utils/timesince.py:12 +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" + +#: utils/timesince.py:13 +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" + +#: utils/timesince.py:14 +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" + +#: utils/timesince.py:72 +msgid "0 minutes" +msgstr "" + +#: views/csrf.py:110 +msgid "Forbidden" +msgstr "" + +#: views/csrf.py:111 +msgid "CSRF verification failed. Request aborted." +msgstr "" + +#: views/csrf.py:115 +msgid "" +"You are seeing this message because this HTTPS site requires a 'Referer " +"header' to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +#: views/csrf.py:120 +msgid "" +"If you have configured your browser to disable 'Referer' headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for 'same-" +"origin' requests." +msgstr "" + +#: views/csrf.py:124 +msgid "" +"If you are using the tag or " +"including the 'Referrer-Policy: no-referrer' header, please remove them. The " +"CSRF protection requires the 'Referer' header to do strict referer checking. " +"If you're concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +#: views/csrf.py:132 +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +#: views/csrf.py:137 +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for 'same-origin' requests." +msgstr "" + +#: views/csrf.py:142 +msgid "More information is available with DEBUG=True." +msgstr "" + +#: views/generic/dates.py:41 +msgid "No year specified" +msgstr "" + +#: views/generic/dates.py:61 views/generic/dates.py:111 +#: views/generic/dates.py:208 +msgid "Date out of range" +msgstr "" + +#: views/generic/dates.py:90 +msgid "No month specified" +msgstr "" + +#: views/generic/dates.py:142 +msgid "No day specified" +msgstr "" + +#: views/generic/dates.py:188 +msgid "No week specified" +msgstr "" + +#: views/generic/dates.py:338 views/generic/dates.py:367 +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "" + +#: views/generic/dates.py:589 +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" + +#: views/generic/dates.py:623 +#, python-format +msgid "Invalid date string '%(datestr)s' given format '%(format)s'" +msgstr "" + +#: views/generic/detail.py:54 +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "" + +#: views/generic/list.py:67 +msgid "Page is not 'last', nor can it be converted to an int." +msgstr "" + +#: views/generic/list.py:72 +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "" + +#: views/generic/list.py:154 +#, python-format +msgid "Empty list and '%(class_name)s.allow_empty' is False." +msgstr "" + +#: views/static.py:40 +msgid "Directory indexes are not allowed here." +msgstr "" + +#: views/static.py:42 +#, python-format +msgid "\"%(path)s\" does not exist" +msgstr "" + +#: views/static.py:80 +#, python-format +msgid "Index of %(directory)s" +msgstr "" + +#: views/templates/default_urlconf.html:6 +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#: views/templates/default_urlconf.html:345 +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +#: views/templates/default_urlconf.html:367 +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#: views/templates/default_urlconf.html:368 +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +#: views/templates/default_urlconf.html:383 +msgid "Django Documentation" +msgstr "" + +#: views/templates/default_urlconf.html:384 +msgid "Topics, references, & how-to's" +msgstr "" + +#: views/templates/default_urlconf.html:395 +msgid "Tutorial: A Polling App" +msgstr "" + +#: views/templates/default_urlconf.html:396 +msgid "Get started with Django" +msgstr "" + +#: views/templates/default_urlconf.html:407 +msgid "Django Community" +msgstr "" + +#: views/templates/default_urlconf.html:408 +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/en/__init__.py b/venv/lib/python3.7/site-packages/django/conf/locale/en/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/en/formats.py b/venv/lib/python3.7/site-packages/django/conf/locale/en/formats.py new file mode 100644 index 0000000..74abad5 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/en/formats.py @@ -0,0 +1,40 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = 'N j, Y' +TIME_FORMAT = 'P' +DATETIME_FORMAT = 'N j, Y, P' +YEAR_MONTH_FORMAT = 'F Y' +MONTH_DAY_FORMAT = 'F j' +SHORT_DATE_FORMAT = 'm/d/Y' +SHORT_DATETIME_FORMAT = 'm/d/Y P' +FIRST_DAY_OF_WEEK = 0 # Sunday + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +# Kept ISO formats as they are in first position +DATE_INPUT_FORMATS = [ + '%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', # '2006-10-25', '10/25/2006', '10/25/06' + # '%b %d %Y', '%b %d, %Y', # 'Oct 25 2006', 'Oct 25, 2006' + # '%d %b %Y', '%d %b, %Y', # '25 Oct 2006', '25 Oct, 2006' + # '%B %d %Y', '%B %d, %Y', # 'October 25 2006', 'October 25, 2006' + # '%d %B %Y', '%d %B, %Y', # '25 October 2006', '25 October, 2006' +] +DATETIME_INPUT_FORMATS = [ + '%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59' + '%Y-%m-%d %H:%M:%S.%f', # '2006-10-25 14:30:59.000200' + '%Y-%m-%d %H:%M', # '2006-10-25 14:30' + '%Y-%m-%d', # '2006-10-25' + '%m/%d/%Y %H:%M:%S', # '10/25/2006 14:30:59' + '%m/%d/%Y %H:%M:%S.%f', # '10/25/2006 14:30:59.000200' + '%m/%d/%Y %H:%M', # '10/25/2006 14:30' + '%m/%d/%Y', # '10/25/2006' + '%m/%d/%y %H:%M:%S', # '10/25/06 14:30:59' + '%m/%d/%y %H:%M:%S.%f', # '10/25/06 14:30:59.000200' + '%m/%d/%y %H:%M', # '10/25/06 14:30' + '%m/%d/%y', # '10/25/06' +] +DECIMAL_SEPARATOR = '.' +THOUSAND_SEPARATOR = ',' +NUMBER_GROUPING = 3 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/en_AU/__init__.py b/venv/lib/python3.7/site-packages/django/conf/locale/en_AU/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/en_AU/formats.py b/venv/lib/python3.7/site-packages/django/conf/locale/en_AU/formats.py new file mode 100644 index 0000000..c28d75e --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/en_AU/formats.py @@ -0,0 +1,39 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = 'j M Y' # '25 Oct 2006' +TIME_FORMAT = 'P' # '2:30 p.m.' +DATETIME_FORMAT = 'j M Y, P' # '25 Oct 2006, 2:30 p.m.' +YEAR_MONTH_FORMAT = 'F Y' # 'October 2006' +MONTH_DAY_FORMAT = 'j F' # '25 October' +SHORT_DATE_FORMAT = 'd/m/Y' # '25/10/2006' +SHORT_DATETIME_FORMAT = 'd/m/Y P' # '25/10/2006 2:30 p.m.' +FIRST_DAY_OF_WEEK = 0 # Sunday + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +DATE_INPUT_FORMATS = [ + '%d/%m/%Y', '%d/%m/%y', # '25/10/2006', '25/10/06' + # '%b %d %Y', '%b %d, %Y', # 'Oct 25 2006', 'Oct 25, 2006' + # '%d %b %Y', '%d %b, %Y', # '25 Oct 2006', '25 Oct, 2006' + # '%B %d %Y', '%B %d, %Y', # 'October 25 2006', 'October 25, 2006' + # '%d %B %Y', '%d %B, %Y', # '25 October 2006', '25 October, 2006' +] +DATETIME_INPUT_FORMATS = [ + '%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59' + '%Y-%m-%d %H:%M:%S.%f', # '2006-10-25 14:30:59.000200' + '%Y-%m-%d %H:%M', # '2006-10-25 14:30' + '%Y-%m-%d', # '2006-10-25' + '%d/%m/%Y %H:%M:%S', # '25/10/2006 14:30:59' + '%d/%m/%Y %H:%M:%S.%f', # '25/10/2006 14:30:59.000200' + '%d/%m/%Y %H:%M', # '25/10/2006 14:30' + '%d/%m/%Y', # '25/10/2006' + '%d/%m/%y %H:%M:%S', # '25/10/06 14:30:59' + '%d/%m/%y %H:%M:%S.%f', # '25/10/06 14:30:59.000200' + '%d/%m/%y %H:%M', # '25/10/06 14:30' + '%d/%m/%y', # '25/10/06' +] +DECIMAL_SEPARATOR = '.' +THOUSAND_SEPARATOR = ',' +NUMBER_GROUPING = 3 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/es/__init__.py b/venv/lib/python3.7/site-packages/django/conf/locale/es/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/es/formats.py b/venv/lib/python3.7/site-packages/django/conf/locale/es/formats.py new file mode 100644 index 0000000..b7aca78 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/es/formats.py @@ -0,0 +1,30 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = r'j \d\e F \d\e Y' +TIME_FORMAT = 'H:i' +DATETIME_FORMAT = r'j \d\e F \d\e Y \a \l\a\s H:i' +YEAR_MONTH_FORMAT = r'F \d\e Y' +MONTH_DAY_FORMAT = r'j \d\e F' +SHORT_DATE_FORMAT = 'd/m/Y' +SHORT_DATETIME_FORMAT = 'd/m/Y H:i' +FIRST_DAY_OF_WEEK = 1 # Monday + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +DATE_INPUT_FORMATS = [ + # '31/12/2009', '31/12/09' + '%d/%m/%Y', '%d/%m/%y' +] +DATETIME_INPUT_FORMATS = [ + '%d/%m/%Y %H:%M:%S', + '%d/%m/%Y %H:%M:%S.%f', + '%d/%m/%Y %H:%M', + '%d/%m/%y %H:%M:%S', + '%d/%m/%y %H:%M:%S.%f', + '%d/%m/%y %H:%M', +] +DECIMAL_SEPARATOR = ',' +THOUSAND_SEPARATOR = '.' +NUMBER_GROUPING = 3 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/es_AR/formats.py b/venv/lib/python3.7/site-packages/django/conf/locale/es_AR/formats.py new file mode 100644 index 0000000..e856c4a --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/es_AR/formats.py @@ -0,0 +1,30 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = r'j N Y' +TIME_FORMAT = r'H:i' +DATETIME_FORMAT = r'j N Y H:i' +YEAR_MONTH_FORMAT = r'F Y' +MONTH_DAY_FORMAT = r'j \d\e F' +SHORT_DATE_FORMAT = r'd/m/Y' +SHORT_DATETIME_FORMAT = r'd/m/Y H:i' +FIRST_DAY_OF_WEEK = 0 # 0: Sunday, 1: Monday + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +DATE_INPUT_FORMATS = [ + '%d/%m/%Y', # '31/12/2009' + '%d/%m/%y', # '31/12/09' +] +DATETIME_INPUT_FORMATS = [ + '%d/%m/%Y %H:%M:%S', + '%d/%m/%Y %H:%M:%S.%f', + '%d/%m/%Y %H:%M', + '%d/%m/%y %H:%M:%S', + '%d/%m/%y %H:%M:%S.%f', + '%d/%m/%y %H:%M', +] +DECIMAL_SEPARATOR = ',' +THOUSAND_SEPARATOR = '.' +NUMBER_GROUPING = 3 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/es_CO/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/conf/locale/es_CO/LC_MESSAGES/django.po new file mode 100644 index 0000000..2cae813 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/es_CO/LC_MESSAGES/django.po @@ -0,0 +1,1241 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Carlos Muñoz , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-11-15 16:15+0100\n" +"PO-Revision-Date: 2017-11-16 01:13+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Spanish (Colombia) (http://www.transifex.com/django/django/" +"language/es_CO/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_CO\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "Afrikáans" + +msgid "Arabic" +msgstr "Árabe" + +msgid "Asturian" +msgstr "Asturiano" + +msgid "Azerbaijani" +msgstr "Azerí" + +msgid "Bulgarian" +msgstr "Búlgaro" + +msgid "Belarusian" +msgstr "Bielorruso" + +msgid "Bengali" +msgstr "Bengalí" + +msgid "Breton" +msgstr "Bretón" + +msgid "Bosnian" +msgstr "Bosnio" + +msgid "Catalan" +msgstr "Catalán" + +msgid "Czech" +msgstr "Checo" + +msgid "Welsh" +msgstr "Galés" + +msgid "Danish" +msgstr "Danés" + +msgid "German" +msgstr "Alemán" + +msgid "Lower Sorbian" +msgstr "" + +msgid "Greek" +msgstr "Griego" + +msgid "English" +msgstr "Inglés" + +msgid "Australian English" +msgstr "Inglés Australiano" + +msgid "British English" +msgstr "Inglés Británico" + +msgid "Esperanto" +msgstr "Esperanto" + +msgid "Spanish" +msgstr "Español" + +msgid "Argentinian Spanish" +msgstr "Español de Argentina" + +msgid "Colombian Spanish" +msgstr "" + +msgid "Mexican Spanish" +msgstr "Español de México" + +msgid "Nicaraguan Spanish" +msgstr "Español de Nicaragua" + +msgid "Venezuelan Spanish" +msgstr "Español venezolano" + +msgid "Estonian" +msgstr "Estonio" + +msgid "Basque" +msgstr "Vasco" + +msgid "Persian" +msgstr "Persa" + +msgid "Finnish" +msgstr "Finés" + +msgid "French" +msgstr "Francés" + +msgid "Frisian" +msgstr "Frisón" + +msgid "Irish" +msgstr "Irlandés" + +msgid "Scottish Gaelic" +msgstr "" + +msgid "Galician" +msgstr "Gallego" + +msgid "Hebrew" +msgstr "Hebreo" + +msgid "Hindi" +msgstr "Hindi" + +msgid "Croatian" +msgstr "Croata" + +msgid "Upper Sorbian" +msgstr "" + +msgid "Hungarian" +msgstr "Húngaro" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "Indonesio" + +msgid "Ido" +msgstr "Ido" + +msgid "Icelandic" +msgstr "Islandés" + +msgid "Italian" +msgstr "Italiano" + +msgid "Japanese" +msgstr "Japonés" + +msgid "Georgian" +msgstr "Georgiano" + +msgid "Kazakh" +msgstr "Kazajo" + +msgid "Khmer" +msgstr "Khmer" + +msgid "Kannada" +msgstr "Kannada" + +msgid "Korean" +msgstr "Koreano" + +msgid "Luxembourgish" +msgstr "Luxenburgués" + +msgid "Lithuanian" +msgstr "Lituano" + +msgid "Latvian" +msgstr "Letón" + +msgid "Macedonian" +msgstr "Macedonio" + +msgid "Malayalam" +msgstr "Malayalam" + +msgid "Mongolian" +msgstr "Mongol" + +msgid "Marathi" +msgstr "Maratí" + +msgid "Burmese" +msgstr "Birmano" + +msgid "Norwegian Bokmål" +msgstr "" + +msgid "Nepali" +msgstr "Nepalí" + +msgid "Dutch" +msgstr "Holandés" + +msgid "Norwegian Nynorsk" +msgstr "Nynorsk" + +msgid "Ossetic" +msgstr "Osetio" + +msgid "Punjabi" +msgstr "Panyabí" + +msgid "Polish" +msgstr "Polaco" + +msgid "Portuguese" +msgstr "Portugués" + +msgid "Brazilian Portuguese" +msgstr "Portugués brasileño" + +msgid "Romanian" +msgstr "Rumano" + +msgid "Russian" +msgstr "Ruso" + +msgid "Slovak" +msgstr "Eslovaco" + +msgid "Slovenian" +msgstr "Esloveno" + +msgid "Albanian" +msgstr "Albanés" + +msgid "Serbian" +msgstr "Serbio" + +msgid "Serbian Latin" +msgstr "Serbio latino" + +msgid "Swedish" +msgstr "Sueco" + +msgid "Swahili" +msgstr "Suajili" + +msgid "Tamil" +msgstr "Tamil" + +msgid "Telugu" +msgstr "Telugu" + +msgid "Thai" +msgstr "Tailandés" + +msgid "Turkish" +msgstr "Turco" + +msgid "Tatar" +msgstr "Tártaro" + +msgid "Udmurt" +msgstr "Udmurt" + +msgid "Ukrainian" +msgstr "Ucraniano" + +msgid "Urdu" +msgstr "Urdu" + +msgid "Vietnamese" +msgstr "Vietnamita" + +msgid "Simplified Chinese" +msgstr "Chino simplificado" + +msgid "Traditional Chinese" +msgstr "Chino tradicional" + +msgid "Messages" +msgstr "Mensajes" + +msgid "Site Maps" +msgstr "Mapas del sitio" + +msgid "Static Files" +msgstr "Archivos estáticos" + +msgid "Syndication" +msgstr "Sindicación" + +msgid "That page number is not an integer" +msgstr "" + +msgid "That page number is less than 1" +msgstr "" + +msgid "That page contains no results" +msgstr "" + +msgid "Enter a valid value." +msgstr "Ingrese un valor válido." + +msgid "Enter a valid URL." +msgstr "Ingrese una URL válida." + +msgid "Enter a valid integer." +msgstr "Ingrese un entero válido." + +msgid "Enter a valid email address." +msgstr "Ingrese una dirección de correo electrónico válida." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Ingrese un 'slug' válido, compuesto por letras, números, guiones bajos o " +"guiones." + +msgid "" +"Enter a valid 'slug' consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Ingrese un 'slug' válido, compuesto por letras del conjunto Unicode, " +"números, guiones bajos o guiones." + +msgid "Enter a valid IPv4 address." +msgstr "Ingrese una dirección IPv4 válida." + +msgid "Enter a valid IPv6 address." +msgstr "Ingrese una dirección IPv6 válida." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Ingrese una dirección IPv4 o IPv6 válida." + +msgid "Enter only digits separated by commas." +msgstr "Ingrese solo números separados por comas." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "Asegúrese de que este valor es %(limit_value)s (es %(show_value)s )." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Asegúrese de que este valor sea menor o igual a %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Asegúrese de que este valor sea mayor o igual a %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Asegúrese de que este valor tenga como mínimo %(limit_value)d carácter " +"(tiene %(show_value)d)." +msgstr[1] "" +"Asegúrese de que este valor tenga como mínimo %(limit_value)d caracteres " +"(tiene %(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Asegúrese de que este valor tenga como máximo %(limit_value)d carácter " +"(tiene %(show_value)d)." +msgstr[1] "" +"Asegúrese de que este valor tenga como máximo %(limit_value)d caracteres " +"(tiene %(show_value)d)." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Asegúrese de que no hayan mas de %(max)s dígito en total." +msgstr[1] "Asegúrese de que no hayan mas de %(max)s dígitos en total." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Asegúrese de que no hayan más de %(max)s decimal." +msgstr[1] "Asegúrese de que no hayan más de %(max)s decimales." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"Asegúrese de que no hayan más de %(max)s dígito antes del punto decimal." +msgstr[1] "" +"Asegúrese de que no hayan más de %(max)s dígitos antes del punto decimal" + +#, python-format +msgid "" +"File extension '%(extension)s' is not allowed. Allowed extensions are: " +"'%(allowed_extensions)s'." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "y" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "Ya existe un/a %(model_name)s con este/a %(field_labels)s." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Valor %(value)r no es una opción válida." + +msgid "This field cannot be null." +msgstr "Este campo no puede ser nulo." + +msgid "This field cannot be blank." +msgstr "Este campo no puede estar en blanco." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "Ya existe un/a %(model_name)s con este/a %(field_label)s." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s debe ser único para %(date_field_label)s %(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Tipo de campo: %(field_type)s" + +msgid "Integer" +msgstr "Entero" + +#, python-format +msgid "'%(value)s' value must be an integer." +msgstr "'%(value)s' debe ser un valor entero." + +msgid "Big (8 byte) integer" +msgstr "Entero grande (8 bytes)" + +#, python-format +msgid "'%(value)s' value must be either True or False." +msgstr "'%(value)s' debe ser Verdadero o Falso" + +msgid "Boolean (Either True or False)" +msgstr "Booleano (Verdadero o Falso)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Cadena (máximo %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Enteros separados por comas" + +#, python-format +msgid "" +"'%(value)s' value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"'%(value)s' tiene un formato de fecha no válida. Este valor debe estar en el " +"formato AAAA-MM-DD." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"El valor '%(value)s' tiene un formato correcto (AAAA-MM-DD) pero es una " +"fecha invalida." + +msgid "Date (without time)" +msgstr "Fecha (sin hora)" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"'%(value)s' tiene un formato de fecha no válido. Este valor debe estar en el " +"formato AAAA-MM-DD HH: [TZ]: MM [ss [uuuuuu]]." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"El valor '%(value)s' tiene un formato correcto (AAAA-MM-DD HH: MM [:. Ss " +"[uuuuuu]] [TZ]) pero es una fecha/hora invalida." + +msgid "Date (with time)" +msgstr "Fecha (con hora)" + +#, python-format +msgid "'%(value)s' value must be a decimal number." +msgstr "El valor '%(value)s' debe ser un número decimal." + +msgid "Decimal number" +msgstr "Número decimal" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in [DD] [HH:[MM:]]ss[." +"uuuuuu] format." +msgstr "" +"'%(value)s' tiene un formato no válido. Este valor debe estar en el formato " +"[DD] [HH:[MM:]]ss[.uuuuuu]." + +msgid "Duration" +msgstr "Duración" + +msgid "Email address" +msgstr "Dirección de correo electrónico" + +msgid "File path" +msgstr "Ruta de archivo" + +#, python-format +msgid "'%(value)s' value must be a float." +msgstr "El valor '%(value)s' debe ser un número real." + +msgid "Floating point number" +msgstr "Número de punto flotante" + +msgid "IPv4 address" +msgstr "Dirección IPv4" + +msgid "IP address" +msgstr "Dirección IP" + +#, python-format +msgid "'%(value)s' value must be either None, True or False." +msgstr "El valor '%(value)s' debe ser Nulo, Verdadero o Falso" + +msgid "Boolean (Either True, False or None)" +msgstr "Booleano (Verdadero, Falso o Nulo)" + +msgid "Positive integer" +msgstr "Entero positivo" + +msgid "Positive small integer" +msgstr "Entero positivo pequeño" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug (hasta %(max_length)s)" + +msgid "Small integer" +msgstr "Entero pequeño" + +msgid "Text" +msgstr "Texto" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"El valor '%(value)s' tiene un formato no válido. Este debe estar en el " +"formato HH:MM[:ss[.uuuuuu]]." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"El valor '%(value)s' tiene un formato correcto (HH:MM[:ss[.uuuuuu]]) pero " +"tiene la hora invalida." + +msgid "Time" +msgstr "Hora" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Datos de binarios brutos" + +#, python-format +msgid "'%(value)s' is not a valid UUID." +msgstr "'%(value)s' no es un UUID válido." + +msgid "File" +msgstr "Archivo" + +msgid "Image" +msgstr "Imagen" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "La instancia del %(model)s con %(field)s %(value)r no existe." + +msgid "Foreign Key (type determined by related field)" +msgstr "Llave foránea (tipo determinado por el campo relacionado)" + +msgid "One-to-one relationship" +msgstr "Relación uno-a-uno" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "Relación muchos-a-muchos" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Este campo es obligatorio." + +msgid "Enter a whole number." +msgstr "Ingrese un número entero." + +msgid "Enter a number." +msgstr "Ingrese un número." + +msgid "Enter a valid date." +msgstr "Ingrese una fecha válida." + +msgid "Enter a valid time." +msgstr "Ingrese una hora válida." + +msgid "Enter a valid date/time." +msgstr "Ingrese una fecha/hora válida." + +msgid "Enter a valid duration." +msgstr "Ingrese una duración válida." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "" +"No se ha enviado ningún fichero. Compruebe el tipo de codificación en el " +"formulario." + +msgid "No file was submitted." +msgstr "No se ha enviado ningún fichero." + +msgid "The submitted file is empty." +msgstr "El fichero enviado está vacío." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Asegúrese de que este nombre de archivo tenga como máximo %(max)d carácter " +"(tiene %(length)d)." +msgstr[1] "" +"Asegúrese de que este nombre de archivo tenga como máximo %(max)d caracteres " +"(tiene %(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"Por favor envíe un fichero o marque la casilla de limpiar, pero no ambos." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Envíe una imagen válida. El fichero que ha enviado no era una imagen o se " +"trataba de una imagen corrupta." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" +"Escoja una opción válida. %(value)s no es una de las opciones disponibles." + +msgid "Enter a list of values." +msgstr "Ingrese una lista de valores." + +msgid "Enter a complete value." +msgstr "Ingrese un valor completo." + +msgid "Enter a valid UUID." +msgstr "Ingrese un UUID válido." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Campo oculto %(name)s) *%(error)s" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "Los datos de ManagementForm faltan o han sido manipulados" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "Por favor, envíe %d o menos formularios." +msgstr[1] "Por favor, envíe %d o menos formularios." + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "Por favor, envíe %d o mas formularios." +msgstr[1] "Por favor, envíe %d o mas formularios." + +msgid "Order" +msgstr "Orden" + +msgid "Delete" +msgstr "Eliminar" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Por favor, corrija el dato duplicado para %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Por favor corrija el dato duplicado para %(field)s, este debe ser único." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Por favor corrija los datos duplicados para %(field_name)s este debe ser " +"único para %(lookup)s en %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Por favor, corrija los valores duplicados abajo." + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Escoja una opción válida. Esa opción no está entre las disponibles." + +#, python-format +msgid "\"%(pk)s\" is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn't be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s no puede interpretarse en el huso horario %(current_timezone)s; " +"puede ser ambiguo o puede no existir." + +msgid "Clear" +msgstr "Limpiar" + +msgid "Currently" +msgstr "Actualmente" + +msgid "Change" +msgstr "Cambiar" + +msgid "Unknown" +msgstr "Desconocido" + +msgid "Yes" +msgstr "Sí" + +msgid "No" +msgstr "No" + +msgid "yes,no,maybe" +msgstr "sí, no, quizás" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d byte" +msgstr[1] "%(size)d bytes" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "medianoche" + +msgid "noon" +msgstr "mediodía" + +msgid "Monday" +msgstr "Lunes" + +msgid "Tuesday" +msgstr "Martes" + +msgid "Wednesday" +msgstr "Miércoles" + +msgid "Thursday" +msgstr "Jueves" + +msgid "Friday" +msgstr "Viernes" + +msgid "Saturday" +msgstr "Sábado" + +msgid "Sunday" +msgstr "Domingo" + +msgid "Mon" +msgstr "Lun" + +msgid "Tue" +msgstr "Mar" + +msgid "Wed" +msgstr "Mié" + +msgid "Thu" +msgstr "Jue" + +msgid "Fri" +msgstr "Vie" + +msgid "Sat" +msgstr "Sáb" + +msgid "Sun" +msgstr "Dom" + +msgid "January" +msgstr "Enero" + +msgid "February" +msgstr "Febrero" + +msgid "March" +msgstr "Marzo" + +msgid "April" +msgstr "Abril" + +msgid "May" +msgstr "Mayo" + +msgid "June" +msgstr "Junio" + +msgid "July" +msgstr "Julio" + +msgid "August" +msgstr "Agosto" + +msgid "September" +msgstr "Septiembre" + +msgid "October" +msgstr "Octubre" + +msgid "November" +msgstr "Noviembre" + +msgid "December" +msgstr "Diciembre" + +msgid "jan" +msgstr "ene" + +msgid "feb" +msgstr "feb" + +msgid "mar" +msgstr "mar" + +msgid "apr" +msgstr "abr" + +msgid "may" +msgstr "may" + +msgid "jun" +msgstr "jun" + +msgid "jul" +msgstr "jul" + +msgid "aug" +msgstr "ago" + +msgid "sep" +msgstr "sep" + +msgid "oct" +msgstr "oct" + +msgid "nov" +msgstr "nov" + +msgid "dec" +msgstr "dic" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Ene." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Feb." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Marzo" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Abril" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Mayo" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Junio" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Julio" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Ago." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Sep." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Oct." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Nov." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Dic." + +msgctxt "alt. month" +msgid "January" +msgstr "Enero" + +msgctxt "alt. month" +msgid "February" +msgstr "Febrero" + +msgctxt "alt. month" +msgid "March" +msgstr "Marzo" + +msgctxt "alt. month" +msgid "April" +msgstr "Abril" + +msgctxt "alt. month" +msgid "May" +msgstr "Mayo" + +msgctxt "alt. month" +msgid "June" +msgstr "Junio" + +msgctxt "alt. month" +msgid "July" +msgstr "Julio" + +msgctxt "alt. month" +msgid "August" +msgstr "Agosto" + +msgctxt "alt. month" +msgid "September" +msgstr "Septiembre" + +msgctxt "alt. month" +msgid "October" +msgstr "Octubre" + +msgctxt "alt. month" +msgid "November" +msgstr "Noviembre" + +msgctxt "alt. month" +msgid "December" +msgstr "Diciembre" + +msgid "This is not a valid IPv6 address." +msgstr "Esta no es una dirección IPv6 válida." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s..." +msgstr "%(truncated_text)s..." + +msgid "or" +msgstr "o" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr "," + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d año" +msgstr[1] "%d años" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d mes" +msgstr[1] "%d meses" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d semana" +msgstr[1] "%d semanas" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d día" +msgstr[1] "%d días" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d hora" +msgstr[1] "%d horas" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minuto" +msgstr[1] "%d minutos" + +msgid "0 minutes" +msgstr "0 minutos" + +msgid "Forbidden" +msgstr "Prohibido" + +msgid "CSRF verification failed. Request aborted." +msgstr "Verificación CSRF fallida. Solicitud abortada." + +msgid "" +"You are seeing this message because this HTTPS site requires a 'Referer " +"header' to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Estás viendo este mensaje porque este sitio web es HTTPS y requiere que tu " +"navegador envíe una 'Referer header' y no se envió ninguna. Esta cabecera se " +"necesita por razones de seguridad, para asegurarse de que tu navegador no ha " +"sido comprometido por terceras partes." + +msgid "" +"If you have configured your browser to disable 'Referer' headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for 'same-" +"origin' requests." +msgstr "" +"Si has configurado tu navegador desactivando las cabeceras 'Referer', por " +"favor vuélvelas a activar, al menos para esta web, o para conexiones HTTPS, " +"o para peticiones 'same-origin'." + +msgid "" +"If you are using the tag or " +"including the 'Referrer-Policy: no-referrer' header, please remove them. The " +"CSRF protection requires the 'Referer' header to do strict referer checking. " +"If you're concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Estás viendo este mensaje porqué esta web requiere una cookie CSRF cuando se " +"envían formularios. Esta cookie se necesita por razones de seguridad, para " +"asegurar que tu navegador no ha sido comprometido por terceras partes." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for 'same-origin' requests." +msgstr "" +"Si has inhabilitado las cookies en tu navegador, por favor habilítalas " +"nuevamente al menos para este sitio, o para peticiones 'same-origin'." + +msgid "More information is available with DEBUG=True." +msgstr "Se puede ver más información si se establece DEBUG=True." + +msgid "No year specified" +msgstr "No se ha indicado el año" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "No se ha indicado el mes" + +msgid "No day specified" +msgstr "No se ha indicado el día" + +msgid "No week specified" +msgstr "No se ha indicado la semana" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "No %(verbose_name_plural)s disponibles" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Los futuros %(verbose_name_plural)s no están disponibles porque " +"%(class_name)s.allow_future es Falso." + +#, python-format +msgid "Invalid date string '%(datestr)s' given format '%(format)s'" +msgstr "Fecha '%(datestr)s' no válida, el formato válido es '%(format)s'" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "No se encontró ningún %(verbose_name)s coincidente con la consulta" + +msgid "Page is not 'last', nor can it be converted to an int." +msgstr "La página no es la \"ultima\", ni puede ser convertida a un entero." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Página inválida (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and '%(class_name)s.allow_empty' is False." +msgstr "Lista vacía y '%(class_name)s.allow_empty' es Falso." + +msgid "Directory indexes are not allowed here." +msgstr "Los índices de directorio no están permitidos." + +#, python-format +msgid "\"%(path)s\" does not exist" +msgstr "\"%(path)s\" no existe" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Índice de %(directory)s" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to's" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/es_CO/formats.py b/venv/lib/python3.7/site-packages/django/conf/locale/es_CO/formats.py new file mode 100644 index 0000000..cefbe26 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/es_CO/formats.py @@ -0,0 +1,26 @@ +# This file is distributed under the same license as the Django package. +# +DATE_FORMAT = r'j \d\e F \d\e Y' +TIME_FORMAT = 'H:i' +DATETIME_FORMAT = r'j \d\e F \d\e Y \a \l\a\s H:i' +YEAR_MONTH_FORMAT = r'F \d\e Y' +MONTH_DAY_FORMAT = r'j \d\e F' +SHORT_DATE_FORMAT = 'd/m/Y' +SHORT_DATETIME_FORMAT = 'd/m/Y H:i' +FIRST_DAY_OF_WEEK = 1 +DATE_INPUT_FORMATS = [ + '%d/%m/%Y', '%d/%m/%y', # '25/10/2006', '25/10/06' + '%Y%m%d', # '20061025' + +] +DATETIME_INPUT_FORMATS = [ + '%d/%m/%Y %H:%M:%S', + '%d/%m/%Y %H:%M:%S.%f', + '%d/%m/%Y %H:%M', + '%d/%m/%y %H:%M:%S', + '%d/%m/%y %H:%M:%S.%f', + '%d/%m/%y %H:%M', +] +DECIMAL_SEPARATOR = ',' +THOUSAND_SEPARATOR = '.' +NUMBER_GROUPING = 3 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/es_MX/__init__.py b/venv/lib/python3.7/site-packages/django/conf/locale/es_MX/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/es_NI/__init__.py b/venv/lib/python3.7/site-packages/django/conf/locale/es_NI/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/es_PR/__init__.py b/venv/lib/python3.7/site-packages/django/conf/locale/es_PR/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/et/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/conf/locale/et/LC_MESSAGES/django.po new file mode 100644 index 0000000..9102e8f --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/et/LC_MESSAGES/django.po @@ -0,0 +1,1264 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# eallik , 2011 +# Jannis Leidel , 2011 +# Janno Liivak , 2013-2015 +# madisvain , 2011 +# Martin Pajuste , 2014-2015 +# Martin Pajuste , 2016-2017,2019 +# Marti Raudsepp , 2014,2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-01-18 16:27+0000\n" +"Last-Translator: Martin Pajuste \n" +"Language-Team: Estonian (http://www.transifex.com/django/django/language/" +"et/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: et\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "afrikaani" + +msgid "Arabic" +msgstr "araabia" + +msgid "Asturian" +msgstr "astuuria" + +msgid "Azerbaijani" +msgstr "aserbaidžaani" + +msgid "Bulgarian" +msgstr "bulgaaria" + +msgid "Belarusian" +msgstr "valgevene" + +msgid "Bengali" +msgstr "bengali" + +msgid "Breton" +msgstr "bretooni" + +msgid "Bosnian" +msgstr "bosnia" + +msgid "Catalan" +msgstr "katalaani" + +msgid "Czech" +msgstr "tšehhi" + +msgid "Welsh" +msgstr "uelsi" + +msgid "Danish" +msgstr "taani" + +msgid "German" +msgstr "saksa" + +msgid "Lower Sorbian" +msgstr " alamsorbi" + +msgid "Greek" +msgstr "kreeka" + +msgid "English" +msgstr "inglise" + +msgid "Australian English" +msgstr "austraalia inglise" + +msgid "British English" +msgstr "briti inglise" + +msgid "Esperanto" +msgstr "esperanto" + +msgid "Spanish" +msgstr "hispaania" + +msgid "Argentinian Spanish" +msgstr "argentiina hispaani" + +msgid "Colombian Spanish" +msgstr "kolumbia hispaania" + +msgid "Mexican Spanish" +msgstr "mehhiko hispaania" + +msgid "Nicaraguan Spanish" +msgstr "nikaraagua hispaania" + +msgid "Venezuelan Spanish" +msgstr "venetsueela hispaania" + +msgid "Estonian" +msgstr "eesti" + +msgid "Basque" +msgstr "baski" + +msgid "Persian" +msgstr "pärsia" + +msgid "Finnish" +msgstr "soome" + +msgid "French" +msgstr "prantsuse" + +msgid "Frisian" +msgstr "friisi" + +msgid "Irish" +msgstr "iiri" + +msgid "Scottish Gaelic" +msgstr "šoti gaeli" + +msgid "Galician" +msgstr "galiitsia" + +msgid "Hebrew" +msgstr "heebrea" + +msgid "Hindi" +msgstr "hindi" + +msgid "Croatian" +msgstr "horvaatia" + +msgid "Upper Sorbian" +msgstr "ülemsorbi" + +msgid "Hungarian" +msgstr "ungari" + +msgid "Armenian" +msgstr "armeenia" + +msgid "Interlingua" +msgstr "interlingua" + +msgid "Indonesian" +msgstr "indoneesi" + +msgid "Ido" +msgstr "ido" + +msgid "Icelandic" +msgstr "islandi" + +msgid "Italian" +msgstr "itaalia" + +msgid "Japanese" +msgstr "jaapani" + +msgid "Georgian" +msgstr "gruusia" + +msgid "Kabyle" +msgstr "" + +msgid "Kazakh" +msgstr "kasahhi" + +msgid "Khmer" +msgstr "khmeri" + +msgid "Kannada" +msgstr "kannada" + +msgid "Korean" +msgstr "korea" + +msgid "Luxembourgish" +msgstr "letseburgi" + +msgid "Lithuanian" +msgstr "leedu" + +msgid "Latvian" +msgstr "läti" + +msgid "Macedonian" +msgstr "makedoonia" + +msgid "Malayalam" +msgstr "malaia" + +msgid "Mongolian" +msgstr "mongoolia" + +msgid "Marathi" +msgstr "marathi" + +msgid "Burmese" +msgstr "birma" + +msgid "Norwegian Bokmål" +msgstr "norra bokmål" + +msgid "Nepali" +msgstr "nepali" + +msgid "Dutch" +msgstr "hollandi" + +msgid "Norwegian Nynorsk" +msgstr "norra (nynorsk)" + +msgid "Ossetic" +msgstr "osseetia" + +msgid "Punjabi" +msgstr "pandžab" + +msgid "Polish" +msgstr "poola" + +msgid "Portuguese" +msgstr "portugali" + +msgid "Brazilian Portuguese" +msgstr "brasiilia portugali" + +msgid "Romanian" +msgstr "rumeenia" + +msgid "Russian" +msgstr "vene" + +msgid "Slovak" +msgstr "slovaki" + +msgid "Slovenian" +msgstr "sloveeni" + +msgid "Albanian" +msgstr "albaania" + +msgid "Serbian" +msgstr "serbia" + +msgid "Serbian Latin" +msgstr "serbia (ladina)" + +msgid "Swedish" +msgstr "rootsi" + +msgid "Swahili" +msgstr "suahiili" + +msgid "Tamil" +msgstr "tamiili" + +msgid "Telugu" +msgstr "telugu" + +msgid "Thai" +msgstr "tai" + +msgid "Turkish" +msgstr "türgi" + +msgid "Tatar" +msgstr "tatari" + +msgid "Udmurt" +msgstr "udmurdi" + +msgid "Ukrainian" +msgstr "ukrania" + +msgid "Urdu" +msgstr "urdu" + +msgid "Vietnamese" +msgstr "vietnami" + +msgid "Simplified Chinese" +msgstr "lihtsustatud hiina" + +msgid "Traditional Chinese" +msgstr "traditsiooniline hiina" + +msgid "Messages" +msgstr "Sõnumid" + +msgid "Site Maps" +msgstr "Saidikaardid" + +msgid "Static Files" +msgstr "Staatilised failid" + +msgid "Syndication" +msgstr "Sündikeerimine" + +msgid "That page number is not an integer" +msgstr "See lehe number ei ole täisarv" + +msgid "That page number is less than 1" +msgstr "See lehe number on väiksem kui 1" + +msgid "That page contains no results" +msgstr "See leht ei sisalda tulemusi" + +msgid "Enter a valid value." +msgstr "Sisestage korrektne väärtus." + +msgid "Enter a valid URL." +msgstr "Sisestage korrektne URL." + +msgid "Enter a valid integer." +msgstr "Sisestage korrektne täisarv." + +msgid "Enter a valid email address." +msgstr "Sisestage korrektne e-posti aadress." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens." +msgstr "" +"See väärtus võib sisaldada ainult tähti, numbreid, alljooni ja sidekriipse." + +msgid "" +"Enter a valid 'slug' consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Sisesta korrektne 'nälk', mis koosneb Unicode tähtedest, numbritest, ala- ja " +"sidekriipsudest." + +msgid "Enter a valid IPv4 address." +msgstr "Sisestage korrektne IPv4 aadress." + +msgid "Enter a valid IPv6 address." +msgstr "Sisestage korrektne IPv6 aadress." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Sisestage korrektne IPv4 või IPv6 aadress." + +msgid "Enter only digits separated by commas." +msgstr "Sisestage ainult komaga eraldatud numbreid." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "Veendu, et see väärtus on %(limit_value)s (hetkel on %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Veendu, et see väärtus on väiksem või võrdne kui %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Veendu, et see väärtus on suurem või võrdne kui %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Väärtuses peab olema vähemalt %(limit_value)d tähemärk (praegu on " +"%(show_value)d)." +msgstr[1] "" +"Väärtuses peab olema vähemalt %(limit_value)d tähemärki (praegu on " +"%(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Väärtuses võib olla kõige rohkem %(limit_value)d tähemärk (praegu on " +"%(show_value)d)." +msgstr[1] "" +"Väärtuses võib olla kõige rohkem %(limit_value)d tähemärki (praegu on " +"%(show_value)d)." + +msgid "Enter a number." +msgstr "Sisestage arv." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Veenduge, et kogu numbrikohtade arv ei oleks suurem kui %(max)s." +msgstr[1] "Veenduge, et kogu numbrikohtade arv ei oleks suurem kui %(max)s." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Veenduge, et komakohtade arv ei oleks suurem kui %(max)s." +msgstr[1] "Veenduge, et komakohtade arv ei oleks suurem kui %(max)s." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"Veenduge, et komast vasakul olevaid numbreid ei oleks rohkem kui %(max)s." +msgstr[1] "" +"Veenduge, et komast vasakul olevaid numbreid ei oleks rohkem kui %(max)s." + +#, python-format +msgid "" +"File extension '%(extension)s' is not allowed. Allowed extensions are: " +"'%(allowed_extensions)s'." +msgstr "" +"Faililaiend '%(extension)s' ei ole lubatud. Lubatud laiendid on: " +"'%(allowed_extensions)s'." + +msgid "Null characters are not allowed." +msgstr "Tühjad tähemärgid ei ole lubatud." + +msgid "and" +msgstr "ja" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s väljaga %(field_labels)s on juba olemas." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Väärtus %(value)r ei ole kehtiv valik." + +msgid "This field cannot be null." +msgstr "See lahter ei tohi olla tühi." + +msgid "This field cannot be blank." +msgstr "See väli ei saa olla tühi." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "Sellise %(field_label)s-väljaga %(model_name)s on juba olemas." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s peab olema unikaalne %(date_field_label)s %(lookup_type)s " +"suhtes." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Lahter tüüpi: %(field_type)s" + +msgid "Integer" +msgstr "Täisarv" + +#, python-format +msgid "'%(value)s' value must be an integer." +msgstr "'%(value)s' väärtus peab olema täisarv." + +msgid "Big (8 byte) integer" +msgstr "Suur (8 baiti) täisarv" + +#, python-format +msgid "'%(value)s' value must be either True or False." +msgstr "'%(value)s' väärtus peab olema kas Tõene või Väär." + +#, python-format +msgid "'%(value)s' value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "Tõeväärtus (Kas tõene või väär)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "String (kuni %(max_length)s märki)" + +msgid "Comma-separated integers" +msgstr "Komaga eraldatud täisarvud" + +#, python-format +msgid "" +"'%(value)s' value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"'%(value)s' väärtusel on vale kuupäevaformaat. See peab olema kujul AAAA-KK-" +"PP." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"'%(value)s' väärtusel on õige formaat (AAAA-KK-PP), kuid kuupäev on vale." + +msgid "Date (without time)" +msgstr "Kuupäev (kellaajata)" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"'%(value)s' väärtusel on vale formaat. Peab olema formaadis AAAA-KK-PP HH:" +"MM[:ss[.uuuuuu]][TZ]." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"'%(value)s' väärtusel on õige formaat (AAAA-KK-PP HH:MM[:ss[.uuuuuu]][TZ]), " +"kuid kuupäev/kellaaeg on vale." + +msgid "Date (with time)" +msgstr "Kuupäev (kellaajaga)" + +#, python-format +msgid "'%(value)s' value must be a decimal number." +msgstr "'%(value)s' väärtus peab olema kümnendarv." + +msgid "Decimal number" +msgstr "Kümnendmurd" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in [DD] [HH:[MM:]]ss[." +"uuuuuu] format." +msgstr "" +"'%(value)s' väärtusel on vale formaat. Peab olema formaadis [DD] [HH:" +"[MM:]]ss[.uuuuuu]." + +msgid "Duration" +msgstr "Kestus" + +msgid "Email address" +msgstr "E-posti aadress" + +msgid "File path" +msgstr "Faili asukoht" + +#, python-format +msgid "'%(value)s' value must be a float." +msgstr "'%(value)s' väärtus peab olema ujukomaarv." + +msgid "Floating point number" +msgstr "Ujukomaarv" + +msgid "IPv4 address" +msgstr "IPv4 aadress" + +msgid "IP address" +msgstr "IP aadress" + +#, python-format +msgid "'%(value)s' value must be either None, True or False." +msgstr "'%(value)s' väärtus peab olema kas Puudub, Tõene või Väär." + +msgid "Boolean (Either True, False or None)" +msgstr "Tõeväärtus (Kas tõene, väär või tühi)" + +msgid "Positive integer" +msgstr "Positiivne täisarv" + +msgid "Positive small integer" +msgstr "Positiivne väikene täisarv" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Nälk (kuni %(max_length)s märki)" + +msgid "Small integer" +msgstr "Väike täisarv" + +msgid "Text" +msgstr "Tekst" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"'%(value)s' väärtusel on vale formaat. Peab olema formaadis HH:MM[:ss[." +"uuuuuu]]." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"'%(value)s' väärtusel on õige formaat (HH:MM[:ss[.uuuuuu]]), kuid kellaaeg " +"on vale." + +msgid "Time" +msgstr "Aeg" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Töötlemata binaarandmed" + +#, python-format +msgid "'%(value)s' is not a valid UUID." +msgstr "'%(value)s' ei ole korrektne UUID." + +msgid "Universally unique identifier" +msgstr "" + +msgid "File" +msgstr "Fail" + +msgid "Image" +msgstr "Pilt" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "%(model)s isendit %(field)s %(value)r ei leidu." + +msgid "Foreign Key (type determined by related field)" +msgstr "Välisvõti (tüübi määrab seotud väli) " + +msgid "One-to-one relationship" +msgstr "Üks-ühele seos" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "%(from)s-%(to)s seos" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "%(from)s-%(to)s seosed" + +msgid "Many-to-many relationship" +msgstr "Mitu-mitmele seos" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "See lahter on nõutav." + +msgid "Enter a whole number." +msgstr "Sisestage täisarv." + +msgid "Enter a valid date." +msgstr "Sisestage korrektne kuupäev." + +msgid "Enter a valid time." +msgstr "Sisestage korrektne kellaaeg." + +msgid "Enter a valid date/time." +msgstr "Sisestage korrektne kuupäev ja kellaaeg." + +msgid "Enter a valid duration." +msgstr "Sisestage korrektne kestus." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Päevade arv peab jääma vahemikku {min_days} kuni {max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Ühtegi faili ei saadetud. Kontrollige vormi kodeeringutüüpi." + +msgid "No file was submitted." +msgstr "Ühtegi faili ei saadetud." + +msgid "The submitted file is empty." +msgstr "Saadetud fail on tühi." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Veenduge, et faili nimes poleks rohkem kui %(max)d märk (praegu on " +"%(length)d)." +msgstr[1] "" +"Veenduge, et faili nimes poleks rohkem kui %(max)d märki (praegu on " +"%(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Palun laadige fail või märgistage 'tühjenda' kast, mitte mõlemat." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Laadige korrektne pilt. Fail, mille laadisite, ei olnud kas pilt või oli " +"fail vigane." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Valige korrektne väärtus. %(value)s ei ole valitav." + +msgid "Enter a list of values." +msgstr "Sisestage väärtuste nimekiri." + +msgid "Enter a complete value." +msgstr "Sisestage täielik väärtus." + +msgid "Enter a valid UUID." +msgstr "Sisestage korrektne UUID." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Peidetud väli %(name)s) %(error)s" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "ManagementForm andmed on kadunud või nendega on keegi midagi teinud" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "Palun kinnitage %d või vähem vormi." +msgstr[1] "Palun kinnitage %d või vähem vormi." + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "Palun kinnitage %d või rohkem vormi." +msgstr[1] "Palun kinnitage %d või rohkem vormi." + +msgid "Order" +msgstr "Järjestus" + +msgid "Delete" +msgstr "Kustuta" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Palun parandage duplikaat-andmed lahtris %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Palun parandage duplikaat-andmed lahtris %(field)s, mis peab olema unikaalne." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Palun parandage allolevad duplikaat-väärtused" + +msgid "The inline value did not match the parent instance." +msgstr "Pesastatud väärtus ei sobi ülemobjektiga." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Valige korrektne väärtus. Valitud väärtus ei ole valitav." + +#, python-format +msgid "\"%(pk)s\" is not a valid value." +msgstr "\"%(pk)s\" ei ole korrektne väärtus." + +#, python-format +msgid "" +"%(datetime)s couldn't be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s ei saanud tõlgendada ajavööndis %(current_timezone)s; see on " +"kas puudu või mitmetähenduslik." + +msgid "Clear" +msgstr "Tühjenda" + +msgid "Currently" +msgstr "Hetkel" + +msgid "Change" +msgstr "Muuda" + +msgid "Unknown" +msgstr "Tundmatu" + +msgid "Yes" +msgstr "Jah" + +msgid "No" +msgstr "Ei" + +msgid "yes,no,maybe" +msgstr "jah,ei,võib-olla" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d bait" +msgstr[1] "%(size)d baiti" + +#, python-format +msgid "%s KB" +msgstr "%s kB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.l." + +msgid "a.m." +msgstr "e.l." + +msgid "PM" +msgstr "PL" + +msgid "AM" +msgstr "EL" + +msgid "midnight" +msgstr "südaöö" + +msgid "noon" +msgstr "keskpäev" + +msgid "Monday" +msgstr "esmaspäev" + +msgid "Tuesday" +msgstr "teisipäev" + +msgid "Wednesday" +msgstr "kolmapäev" + +msgid "Thursday" +msgstr "neljapäev" + +msgid "Friday" +msgstr "reede" + +msgid "Saturday" +msgstr "laupäev" + +msgid "Sunday" +msgstr "pühapäev" + +msgid "Mon" +msgstr "esmasp." + +msgid "Tue" +msgstr "teisip." + +msgid "Wed" +msgstr "kolmap." + +msgid "Thu" +msgstr "neljap." + +msgid "Fri" +msgstr "reede" + +msgid "Sat" +msgstr "laup." + +msgid "Sun" +msgstr "pühap." + +msgid "January" +msgstr "jaanuar" + +msgid "February" +msgstr "veebruar" + +msgid "March" +msgstr "märts" + +msgid "April" +msgstr "aprill" + +msgid "May" +msgstr "mai" + +msgid "June" +msgstr "juuni" + +msgid "July" +msgstr "juuli" + +msgid "August" +msgstr "august" + +msgid "September" +msgstr "september" + +msgid "October" +msgstr "oktoober" + +msgid "November" +msgstr "november" + +msgid "December" +msgstr "detsember" + +msgid "jan" +msgstr "jaan" + +msgid "feb" +msgstr "veeb" + +msgid "mar" +msgstr "märts" + +msgid "apr" +msgstr "apr" + +msgid "may" +msgstr "mai" + +msgid "jun" +msgstr "jun" + +msgid "jul" +msgstr "jul" + +msgid "aug" +msgstr "aug" + +msgid "sep" +msgstr "sept" + +msgid "oct" +msgstr "okt" + +msgid "nov" +msgstr "nov" + +msgid "dec" +msgstr "dets" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "jaan." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "veeb." + +msgctxt "abbrev. month" +msgid "March" +msgstr "mär." + +msgctxt "abbrev. month" +msgid "April" +msgstr "apr." + +msgctxt "abbrev. month" +msgid "May" +msgstr "mai" + +msgctxt "abbrev. month" +msgid "June" +msgstr "juuni" + +msgctxt "abbrev. month" +msgid "July" +msgstr "juuli" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "aug." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "sept." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "okt." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "nov." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "dets." + +msgctxt "alt. month" +msgid "January" +msgstr "jaanuar" + +msgctxt "alt. month" +msgid "February" +msgstr "veebruar" + +msgctxt "alt. month" +msgid "March" +msgstr "märts" + +msgctxt "alt. month" +msgid "April" +msgstr "aprill" + +msgctxt "alt. month" +msgid "May" +msgstr "mai" + +msgctxt "alt. month" +msgid "June" +msgstr "juuni" + +msgctxt "alt. month" +msgid "July" +msgstr "juuli" + +msgctxt "alt. month" +msgid "August" +msgstr "august" + +msgctxt "alt. month" +msgid "September" +msgstr "september" + +msgctxt "alt. month" +msgid "October" +msgstr "oktoober" + +msgctxt "alt. month" +msgid "November" +msgstr "november" + +msgctxt "alt. month" +msgid "December" +msgstr "detsember" + +msgid "This is not a valid IPv6 address." +msgstr "See ei ole korrektne IPv6 aadress." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +msgid "or" +msgstr "või" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d aasta" +msgstr[1] "%d aastat" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d kuu" +msgstr[1] "%d kuud" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d nädal" +msgstr[1] "%d nädalat" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d päev" +msgstr[1] "%d päeva" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d tund" +msgstr[1] "%d tundi" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minut" +msgstr[1] "%d minutit" + +msgid "0 minutes" +msgstr "0 minutit" + +msgid "Forbidden" +msgstr "Keelatud" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF verifitseerimine ebaõnnestus. Päring katkestati." + +msgid "" +"You are seeing this message because this HTTPS site requires a 'Referer " +"header' to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Näete seda sõnumit, kuna käesolev HTTPS leht nõuab 'Viitaja päise' saatmist " +"teie brauserile, kuid seda ei saadetud. Seda päist on vaja " +"turvakaalutlustel, kindlustamaks et teie brauserit ei ole kolmandate " +"osapoolte poolt üle võetud." + +msgid "" +"If you have configured your browser to disable 'Referer' headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for 'same-" +"origin' requests." +msgstr "" +"Kui olete oma brauseri seadistustes välja lülitanud 'Viitaja' päised siis " +"lülitage need taas sisse vähemalt antud lehe jaoks või HTTPS üheduste jaoks " +"või 'sama-allika' päringute jaoks." + +msgid "" +"If you are using the tag or " +"including the 'Referrer-Policy: no-referrer' header, please remove them. The " +"CSRF protection requires the 'Referer' header to do strict referer checking. " +"If you're concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Näete seda teadet, kuna see leht vajab CSRF küpsist vormide postitamiseks. " +"Seda küpsist on vaja turvakaalutlustel, kindlustamaks et teie brauserit ei " +"ole kolmandate osapoolte poolt üle võetud." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for 'same-origin' requests." +msgstr "" +"Kui olete oma brauseris küpsised keelanud, siis palun lubage need vähemalt " +"selle lehe jaoks või 'sama-allika' päringute jaoks." + +msgid "More information is available with DEBUG=True." +msgstr "Saadaval on rohkem infot kasutades DEBUG=True" + +msgid "No year specified" +msgstr "Aasta on valimata" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "Kuu on valimata" + +msgid "No day specified" +msgstr "Päev on valimata" + +msgid "No week specified" +msgstr "Nädal on valimata" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Ei leitud %(verbose_name_plural)s" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Tulevane %(verbose_name_plural)s pole saadaval, sest %(class_name)s." +"allow_future on False." + +#, python-format +msgid "Invalid date string '%(datestr)s' given format '%(format)s'" +msgstr "Vigane kuupäeva-string '%(datestr)s' lähtudes formaadist '%(format)s'" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Päringule vastavat %(verbose_name)s ei leitud" + +msgid "Page is not 'last', nor can it be converted to an int." +msgstr "Lehekülg ei ole 'last', ka ei saa teda konvertida täisarvuks." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Vigane leht (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and '%(class_name)s.allow_empty' is False." +msgstr "Tühi list ja '%(class_name)s.allow_empty' on False." + +msgid "Directory indexes are not allowed here." +msgstr "Kausta sisuloendid ei ole siin lubatud." + +#, python-format +msgid "\"%(path)s\" does not exist" +msgstr "\"%(path)s\" ei eksisteeri" + +#, python-format +msgid "Index of %(directory)s" +msgstr "%(directory)s sisuloend" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Näete seda lehte, kuna teil on määratud DEBUG=True Django seadete failis ja te ei ole ühtki URLi seadistanud." + +msgid "Django Documentation" +msgstr "Django dokumentatsioon" + +msgid "Topics, references, & how-to's" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/eu/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/conf/locale/eu/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3a88f999b8ea3374959055102bb34508ded8e838 GIT binary patch literal 26371 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, 2013,2016 +# Ander Martínez , 2013-2014 +# Eneko Illarramendi , 2017-2019 +# Jannis Leidel , 2011 +# jazpillaga , 2011 +# julen, 2011-2012 +# julen, 2013,2015 +# totorika93 , 2012 +# Unai Zalakain , 2013 +# Urtzi Odriozola , 2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-01-22 10:02+0000\n" +"Last-Translator: Eneko Illarramendi \n" +"Language-Team: Basque (http://www.transifex.com/django/django/language/eu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: eu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "Afrikaans" + +msgid "Arabic" +msgstr "Arabiera" + +msgid "Asturian" +msgstr "Asturiera" + +msgid "Azerbaijani" +msgstr "Azerbaijanera" + +msgid "Bulgarian" +msgstr "Bulgariera" + +msgid "Belarusian" +msgstr "Bielorrusiera" + +msgid "Bengali" +msgstr "Bengalera" + +msgid "Breton" +msgstr "Bretoia" + +msgid "Bosnian" +msgstr "Bosniera" + +msgid "Catalan" +msgstr "Katalana" + +msgid "Czech" +msgstr "Txekiera" + +msgid "Welsh" +msgstr "Galesa" + +msgid "Danish" +msgstr "Daniera" + +msgid "German" +msgstr "Alemana" + +msgid "Lower Sorbian" +msgstr "Behe-sorbiera" + +msgid "Greek" +msgstr "Greziera" + +msgid "English" +msgstr "Ingelesa" + +msgid "Australian English" +msgstr "Australiar ingelesa" + +msgid "British English" +msgstr "Ingelesa" + +msgid "Esperanto" +msgstr "Esperantoa" + +msgid "Spanish" +msgstr "Gaztelania" + +msgid "Argentinian Spanish" +msgstr "Gaztelania (Argentina)" + +msgid "Colombian Spanish" +msgstr "Gaztelania (Kolonbia)" + +msgid "Mexican Spanish" +msgstr "Gaztelania (Mexiko)" + +msgid "Nicaraguan Spanish" +msgstr "Gaztelania (Nikaragua)" + +msgid "Venezuelan Spanish" +msgstr "Gaztelania (Venezuela)" + +msgid "Estonian" +msgstr "Estoniera" + +msgid "Basque" +msgstr "Euskara" + +msgid "Persian" +msgstr "Persiera" + +msgid "Finnish" +msgstr "Finlandiera" + +msgid "French" +msgstr "Frantsesa" + +msgid "Frisian" +msgstr "Frisiera" + +msgid "Irish" +msgstr "Irlandako gaelikoa" + +msgid "Scottish Gaelic" +msgstr "Eskoziako gaelikoa" + +msgid "Galician" +msgstr "Galiziera" + +msgid "Hebrew" +msgstr "Hebreera" + +msgid "Hindi" +msgstr "Hindi" + +msgid "Croatian" +msgstr "Kroaziera" + +msgid "Upper Sorbian" +msgstr "Goi-sorbiera" + +msgid "Hungarian" +msgstr "Hungariera" + +msgid "Armenian" +msgstr "Armeniera" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "Indonesiera" + +msgid "Ido" +msgstr "Ido" + +msgid "Icelandic" +msgstr "Islandiera" + +msgid "Italian" +msgstr "Italiera" + +msgid "Japanese" +msgstr "Japoniera" + +msgid "Georgian" +msgstr "Georgiera" + +msgid "Kabyle" +msgstr "Kabylera" + +msgid "Kazakh" +msgstr "Kazakhera" + +msgid "Khmer" +msgstr "Khmerera" + +msgid "Kannada" +msgstr "Kannada" + +msgid "Korean" +msgstr "Koreera" + +msgid "Luxembourgish" +msgstr "Luxenburgera" + +msgid "Lithuanian" +msgstr "Lituaniera" + +msgid "Latvian" +msgstr "Letoniera" + +msgid "Macedonian" +msgstr "Mazedoniera" + +msgid "Malayalam" +msgstr "Malabarera" + +msgid "Mongolian" +msgstr "Mongoliera" + +msgid "Marathi" +msgstr "Marathera" + +msgid "Burmese" +msgstr "Birmaniera" + +msgid "Norwegian Bokmål" +msgstr "Bokmåla (Norvegia)" + +msgid "Nepali" +msgstr "Nepalera" + +msgid "Dutch" +msgstr "Nederlandera" + +msgid "Norwegian Nynorsk" +msgstr "Nynorsk (Norvegia)" + +msgid "Ossetic" +msgstr "Osetiera" + +msgid "Punjabi" +msgstr "Punjabera" + +msgid "Polish" +msgstr "Poloniera" + +msgid "Portuguese" +msgstr "Portugesa" + +msgid "Brazilian Portuguese" +msgstr "Portugesa (Brazil)" + +msgid "Romanian" +msgstr "Errumaniera" + +msgid "Russian" +msgstr "Errusiera" + +msgid "Slovak" +msgstr "Eslovakiera" + +msgid "Slovenian" +msgstr "Esloveniera" + +msgid "Albanian" +msgstr "Albaniera" + +msgid "Serbian" +msgstr "Serbiera" + +msgid "Serbian Latin" +msgstr "Serbiera" + +msgid "Swedish" +msgstr "Suediera" + +msgid "Swahili" +msgstr "Swahilia" + +msgid "Tamil" +msgstr "Tamilera" + +msgid "Telugu" +msgstr "Telugua" + +msgid "Thai" +msgstr "Thailandiera" + +msgid "Turkish" +msgstr "Turkiera" + +msgid "Tatar" +msgstr "Tatarera" + +msgid "Udmurt" +msgstr "Udmurtera" + +msgid "Ukrainian" +msgstr "Ukrainera" + +msgid "Urdu" +msgstr "Urdua" + +msgid "Vietnamese" +msgstr "Vietnamera" + +msgid "Simplified Chinese" +msgstr "Txinera (sinpletua)" + +msgid "Traditional Chinese" +msgstr "Txinera (tradizionala)" + +msgid "Messages" +msgstr "Mezuak" + +msgid "Site Maps" +msgstr "Sitemap-ak" + +msgid "Static Files" +msgstr "Fitxategi estatikoak" + +msgid "Syndication" +msgstr "Sindikazioa" + +msgid "That page number is not an integer" +msgstr "Orrialde hori ez da zenbaki bat" + +msgid "That page number is less than 1" +msgstr "Orrialde zenbaki hori 1 baino txikiagoa da" + +msgid "That page contains no results" +msgstr "Orrialde horrek ez du emaitzarik" + +msgid "Enter a valid value." +msgstr "Idatzi baleko balio bat." + +msgid "Enter a valid URL." +msgstr "Idatzi baleko URL bat." + +msgid "Enter a valid integer." +msgstr "Idatzi baleko zenbaki bat." + +msgid "Enter a valid email address." +msgstr "Idatzi baleko helbide elektroniko bat." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Idatzi hizki, zenbaki, azpimarra edo marratxoz osatutako baleko 'slug' bat." + +msgid "" +"Enter a valid 'slug' consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Idatzi Unicode hizki, zenbaki, azpimarra edo marratxoz osatutako baleko " +"'slug' bat." + +msgid "Enter a valid IPv4 address." +msgstr "Idatzi baleko IPv4 sare-helbide bat." + +msgid "Enter a valid IPv6 address." +msgstr "Idatzi baleko IPv6 sare-helbide bat." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Idatzi baleko IPv4 edo IPv6 sare-helbide bat." + +msgid "Enter only digits separated by commas." +msgstr "Idatzi komaz bereizitako digitoak soilik." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Ziurtatu balio hau gutxienez %(limit_value)s dela (orain %(show_value)s da)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Ziurtatu balio hau %(limit_value)s baino txikiagoa edo berdina dela." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Ziurtatu balio hau %(limit_value)s baino handiagoa edo berdina dela." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Ziurtatu balio honek gutxienez karaktere %(limit_value)d duela " +"(%(show_value)d ditu)." +msgstr[1] "" +"Ziurtatu balio honek gutxienez %(limit_value)d karaktere dituela " +"(%(show_value)d ditu)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Ziurtatu balio honek gehienez karaktere %(limit_value)d duela " +"(%(show_value)d ditu)." +msgstr[1] "" +"Ziurtatu balio honek gehienez %(limit_value)d karaktere dituela " +"(%(show_value)d ditu)." + +msgid "Enter a number." +msgstr "Idatzi zenbaki bat." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Ziurtatu digitu %(max)s baino gehiago ez dagoela guztira." +msgstr[1] "Ziurtatu %(max)s digitu baino gehiago ez dagoela guztira." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Ziurtatu ez dagoela digitu %(max)s baino gehiago komaren atzetik." +msgstr[1] "Ziurtatu ez dagoela %(max)s digitu baino gehiago komaren atzetik." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "Ziurtatu ez dagoela digitu %(max)s baino gehiago komaren aurretik." +msgstr[1] "Ziurtatu ez dagoela %(max)s digitu baino gehiago komaren aurretik." + +#, python-format +msgid "" +"File extension '%(extension)s' is not allowed. Allowed extensions are: " +"'%(allowed_extensions)s'." +msgstr "" +"'%(extension)s' fitxategi-luzapena ez da balekoa. Hauek dira onartutako " +"fitxategi-luzapenak: '%(allowed_extensions)s'." + +msgid "Null characters are not allowed." +msgstr "Null karaktereak ez daude baimenduta." + +msgid "and" +msgstr "eta" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(field_labels)s hauek dauzkan %(model_name)s dagoeneko existitzen da." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "%(value)r balioa ez da baleko aukera bat." + +msgid "This field cannot be null." +msgstr "Eremu hau ezin daiteke hutsa izan (null)." + +msgid "This field cannot be blank." +msgstr "Eremu honek ezin du hutsik egon." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(field_label)s hori daukan %(model_name)s dagoeneko existitzen da." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Eremuaren mota: %(field_type)s" + +msgid "Integer" +msgstr "Zenbaki osoa" + +#, python-format +msgid "'%(value)s' value must be an integer." +msgstr "'%(value)s' balioak integer bat izan behar du." + +msgid "Big (8 byte) integer" +msgstr "Zenbaki osoa (handia 8 byte)" + +#, python-format +msgid "'%(value)s' value must be either True or False." +msgstr "'%(value)s' balioak True edo False izan behar du." + +#, python-format +msgid "'%(value)s' value must be either True, False, or None." +msgstr "'%(value)s' balioak True, False edo None izan behar du." + +msgid "Boolean (Either True or False)" +msgstr "Boolearra (True edo False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "String-a (%(max_length)s gehienez)" + +msgid "Comma-separated integers" +msgstr "Komaz bereiztutako zenbaki osoak" + +#, python-format +msgid "" +"'%(value)s' value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"'%(value)s' balioak ez dauka data formatu zuzena. Formatu zuzena UUUU-HH-EE " +"da." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"'%(value)s' balioak formatu zuzena (UUUU-HH-EE) dauka, baina ez da data " +"zuzen bat." + +msgid "Date (without time)" +msgstr "Data (ordurik gabe)" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"'%(value)s' balioak ez dauka formatu zuzena. Formatu zuzena UUUU-HH-EE OO:" +"MM[:ss[.uuuuuu]][TZ] da." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"'%(value)s' balioak formatu zuzena dauka (UUUU-HH-EE OO:MM[:ss[.uuuuuu]]" +"[TZ]),\n" +"baina ez da data/ordu zuzena." + +msgid "Date (with time)" +msgstr "Data (orduarekin)" + +#, python-format +msgid "'%(value)s' value must be a decimal number." +msgstr "'%(value)s' balioak zenbaki hamartarra izan behar du." + +msgid "Decimal number" +msgstr "Zenbaki hamartarra" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in [DD] [HH:[MM:]]ss[." +"uuuuuu] format." +msgstr "" +"'%(value)s' balioak ez dauka foramtu zuzena. [EE] [OO:[MM:]]ss[.uuuuuu] " +"formatuan egon behar da." + +msgid "Duration" +msgstr "Iraupena" + +msgid "Email address" +msgstr "Helbide elektronikoa" + +msgid "File path" +msgstr "Fitxategiaren bidea" + +#, python-format +msgid "'%(value)s' value must be a float." +msgstr "'%(value)s' balioak float bat izan behar du." + +msgid "Floating point number" +msgstr "Koma higikorreko zenbakia (float)" + +msgid "IPv4 address" +msgstr "IPv4 sare-helbidea" + +msgid "IP address" +msgstr "IP helbidea" + +#, python-format +msgid "'%(value)s' value must be either None, True or False." +msgstr "'%(value)s' balioak None, True, edo False izan behar du." + +msgid "Boolean (Either True, False or None)" +msgstr "Boolearra (True, False edo None)" + +msgid "Positive integer" +msgstr "Osoko positiboa" + +msgid "Positive small integer" +msgstr "Osoko positibo txikia" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug (gehienez %(max_length)s)" + +msgid "Small integer" +msgstr "Osoko txikia" + +msgid "Text" +msgstr "Testua" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"'%(value)s' balioak ez dauka formatu zuzena. OO:MM[:ss[.uuuuuu]] formatuan " +"egon behar du." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"'%(value)s' balioak formatu zuzena dauka (OO:MM[:ss[.uuuuuu]]) baina ez da " +"ordu \n" +"zuzena" + +msgid "Time" +msgstr "Ordua" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Datu bitar gordinak" + +#, python-format +msgid "'%(value)s' is not a valid UUID." +msgstr "'%(value)s' ez da baleko UUID bat." + +msgid "Universally unique identifier" +msgstr "\"Universally unique identifier\"" + +msgid "File" +msgstr "Fitxategia" + +msgid "Image" +msgstr "Irudia" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" +"%(field)s %(value)r edukidun %(model)s modeloko instantziarik ez da " +"exiistitzen." + +msgid "Foreign Key (type determined by related field)" +msgstr "1-N (mota erlazionatutako eremuaren arabera)" + +msgid "One-to-one relationship" +msgstr "Bat-bat erlazioa" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "%(from)s-%(to)s erlazioa" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "%(from)s-%(to)s erlazioak" + +msgid "Many-to-many relationship" +msgstr "M:N erlazioa" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Eremu hau beharrezkoa da." + +msgid "Enter a whole number." +msgstr "Idatzi zenbaki oso bat." + +msgid "Enter a valid date." +msgstr "Idatzi baleko data bat." + +msgid "Enter a valid time." +msgstr "Idatzi baleko ordu bat." + +msgid "Enter a valid date/time." +msgstr "Idatzi baleko data/ordu bat." + +msgid "Enter a valid duration." +msgstr "Idatzi baleko iraupen bat." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Egun kopuruak {min_days} eta {max_days} artean egon behar du." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Ez da fitxategirik bidali. Egiaztatu formularioaren kodeketa-mota." + +msgid "No file was submitted." +msgstr "Ez da fitxategirik bidali." + +msgid "The submitted file is empty." +msgstr "Bidalitako fitxategia hutsik dago." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Ziurtatu fitxategi izen honek gehienez karaktere %(max)d duela (%(length)d " +"ditu)." +msgstr[1] "" +"Ziurtatu fitxategi izen honek gehienez %(max)d karaktere dituela (%(length)d " +"ditu)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Mesedez, igo fitxategi bat edo egin klik garbitu botoian, ez biak." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Igo baleko irudi bat. Zuk igotako fitxategia ez da irudi bat edo akatsen bat " +"du." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Hautatu baleko aukera bat. %(value)s ez dago erabilgarri." + +msgid "Enter a list of values." +msgstr "Idatzi balio-zerrenda bat." + +msgid "Enter a complete value." +msgstr "Sartu balio osoa." + +msgid "Enter a valid UUID." +msgstr "Idatzi baleko UUID bat." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(%(name)s eremu ezkutua) %(error)s" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "ManagementForm daturik ez dago edo ez da balekoa." + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "Bidali formulario %d edo gutxiago, mesedez." +msgstr[1] "Bidali %d formulario edo gutxiago, mesedez." + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "Gehitu formulario %d edo gehiago" +msgstr[1] "Bidali %d formulario edo gehiago, mesedez." + +msgid "Order" +msgstr "Ordena" + +msgid "Delete" +msgstr "Ezabatu" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Zuzendu bikoiztketa %(field)s eremuan." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "Zuzendu bikoizketa %(field)s eremuan. Bakarra izan behar da." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Zuzendu bakarra izan behar den%(field_name)s eremuarentzako bikoiztutako " +"data %(lookup)s egiteko %(date_field)s eremuan" + +msgid "Please correct the duplicate values below." +msgstr "Zuzendu hurrengo balio bikoiztuak." + +msgid "The inline value did not match the parent instance." +msgstr "Barneko balioa eta gurasoaren instantzia ez datoz bat." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Hautatu aukera zuzen bat. Hautatutakoa ez da zuzena." + +#, python-format +msgid "\"%(pk)s\" is not a valid value." +msgstr "\"%(pk)s\" ez da balio egokia." + +#, python-format +msgid "" +"%(datetime)s couldn't be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s ezin da interpretatu %(current_timezone)s ordu-eremuan;\n" +"baliteke ez existitzea edo anbiguoa izatea" + +msgid "Clear" +msgstr "Garbitu" + +msgid "Currently" +msgstr "Orain" + +msgid "Change" +msgstr "Aldatu" + +msgid "Unknown" +msgstr "Ezezaguna" + +msgid "Yes" +msgstr "Bai" + +msgid "No" +msgstr "Ez" + +msgid "yes,no,maybe" +msgstr "bai,ez,agian" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "byte %(size)d " +msgstr[1] "%(size)d byte" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "gauerdia" + +msgid "noon" +msgstr "eguerdia" + +msgid "Monday" +msgstr "astelehena" + +msgid "Tuesday" +msgstr "asteartea" + +msgid "Wednesday" +msgstr "asteazkena" + +msgid "Thursday" +msgstr "osteguna" + +msgid "Friday" +msgstr "ostirala" + +msgid "Saturday" +msgstr "larunbata" + +msgid "Sunday" +msgstr "igandea" + +msgid "Mon" +msgstr "al" + +msgid "Tue" +msgstr "ar" + +msgid "Wed" +msgstr "az" + +msgid "Thu" +msgstr "og" + +msgid "Fri" +msgstr "ol" + +msgid "Sat" +msgstr "lr" + +msgid "Sun" +msgstr "ig" + +msgid "January" +msgstr "urtarrila" + +msgid "February" +msgstr "otsaila" + +msgid "March" +msgstr "martxoa" + +msgid "April" +msgstr "apirila" + +msgid "May" +msgstr "maiatza" + +msgid "June" +msgstr "ekaina" + +msgid "July" +msgstr "uztaila" + +msgid "August" +msgstr "abuztua" + +msgid "September" +msgstr "iraila" + +msgid "October" +msgstr "urria" + +msgid "November" +msgstr "azaroa" + +msgid "December" +msgstr "abendua" + +msgid "jan" +msgstr "urt" + +msgid "feb" +msgstr "ots" + +msgid "mar" +msgstr "mar" + +msgid "apr" +msgstr "api" + +msgid "may" +msgstr "mai" + +msgid "jun" +msgstr "eka" + +msgid "jul" +msgstr "uzt" + +msgid "aug" +msgstr "abu" + +msgid "sep" +msgstr "ira" + +msgid "oct" +msgstr "urr" + +msgid "nov" +msgstr "aza" + +msgid "dec" +msgstr "abe" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "urt." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "ots." + +msgctxt "abbrev. month" +msgid "March" +msgstr "mar." + +msgctxt "abbrev. month" +msgid "April" +msgstr "api." + +msgctxt "abbrev. month" +msgid "May" +msgstr "mai." + +msgctxt "abbrev. month" +msgid "June" +msgstr "eka." + +msgctxt "abbrev. month" +msgid "July" +msgstr "uzt." + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "abu." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "ira." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "urr." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "aza." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "abe." + +msgctxt "alt. month" +msgid "January" +msgstr "urtarrila" + +msgctxt "alt. month" +msgid "February" +msgstr "otsaila" + +msgctxt "alt. month" +msgid "March" +msgstr "martxoa" + +msgctxt "alt. month" +msgid "April" +msgstr "apirila" + +msgctxt "alt. month" +msgid "May" +msgstr "maiatza" + +msgctxt "alt. month" +msgid "June" +msgstr "ekaina" + +msgctxt "alt. month" +msgid "July" +msgstr "uztaila" + +msgctxt "alt. month" +msgid "August" +msgstr "abuztua" + +msgctxt "alt. month" +msgid "September" +msgstr "iraila" + +msgctxt "alt. month" +msgid "October" +msgstr "urria" + +msgctxt "alt. month" +msgid "November" +msgstr "azaroa" + +msgctxt "alt. month" +msgid "December" +msgstr "abendua" + +msgid "This is not a valid IPv6 address." +msgstr "Hau ez da baleko IPv6 helbide bat." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "edo" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "urte %d" +msgstr[1] "%d urte" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "hilabete %d" +msgstr[1] "%d hilabete" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "aste %d" +msgstr[1] "%d aste" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "egun %d" +msgstr[1] "%d egun" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "ordu %d" +msgstr[1] "%d ordu" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "minutu %d" +msgstr[1] "%d minutu" + +msgid "0 minutes" +msgstr "0 minutu" + +msgid "Forbidden" +msgstr "Debekatuta" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF egiaztapenak huts egin du. Eskaera abortatu da." + +msgid "" +"You are seeing this message because this HTTPS site requires a 'Referer " +"header' to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Mezu hau ikusten ari zara HTTPS gune honek, zure nabigatzaileak 'Referer " +"header' bat bidaltzea behar duelako, baina ez du batere bidali. Goiburuko " +"hau zure nabigatzailea beste norbaitek ordeztu ez duela ziurtatzeko eskatzen " +"da." + +msgid "" +"If you have configured your browser to disable 'Referer' headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for 'same-" +"origin' requests." +msgstr "" +"Zure nabigatzailera 'Refere' goiburukoak desgaitzeko konfiguratu baldin " +"baduzu, mesedez, gune honetarako, HTTPS konexio edo 'same-origin' " +"eskaeretarako gaitu berriro." + +msgid "" +"If you are using the tag or " +"including the 'Referrer-Policy: no-referrer' header, please remove them. The " +"CSRF protection requires the 'Referer' header to do strict referer checking. " +"If you're concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +" etiketa erabiltzen ari " +"bazara edo 'Referrer-Policy: no-referrer' goiburukoa, mesedez ezabatu " +"itzazu. CSRF babesak 'Referer' goiburukoa behar du egiaztapen zorrotza " +"egiteko. Pribatutasunaz kezkatuta bazaude, erabili bezalako alternatibak hirugarrenen webgune loturentzat." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Formularioa bidaltzean gune honek CSRF cookie bat behar duelako ikusten duzu " +"mezu hau. Cookie hau beharrezkoa da segurtasun arrazoiengatik, zure " +"nabigatzailea beste batek ordezkatzen ez duela ziurtatzeko." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for 'same-origin' requests." +msgstr "" +"Nabigatzailea cookiak desgaitzeko konfiguratu baldin baduzu, mesedez " +"aktibatu behintzat gune honetarako, edo 'same-origin' eskaeretarako." + +msgid "More information is available with DEBUG=True." +msgstr "Informazio gehiago erabilgarri dago DEBUG=True ezarrita." + +msgid "No year specified" +msgstr "Ez da urterik zehaztu" + +msgid "Date out of range" +msgstr "Data baliozko tartetik kanpo" + +msgid "No month specified" +msgstr "Ez da hilabeterik zehaztu" + +msgid "No day specified" +msgstr "Ez da egunik zehaztu" + +msgid "No week specified" +msgstr "Ez da asterik zehaztu" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Ez dago %(verbose_name_plural)s" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Etorkizuneko %(verbose_name_plural)s ez dago aukeran %(class_name)s." +"allow_future False delako" + +#, python-format +msgid "Invalid date string '%(datestr)s' given format '%(format)s'" +msgstr "%(datestr)s data string okerra '%(format)s' formaturako" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Bilaketarekin bat datorren %(verbose_name)s-rik ez dago" + +msgid "Page is not 'last', nor can it be converted to an int." +msgstr "Orria ez da azkena, hortaz ezin da osokora (int) biurtu." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Orri baliogabea (%(page_number)s):%(message)s" + +#, python-format +msgid "Empty list and '%(class_name)s.allow_empty' is False." +msgstr "Zerrenda hutsa eta '%(class_name)s.allow_empty' False da" + +msgid "Directory indexes are not allowed here." +msgstr "Direktorio zerrendak ez daude baimenduak." + +#, python-format +msgid "\"%(path)s\" does not exist" +msgstr "\"%(path)s\" ez da existitzen" + +#, python-format +msgid "Index of %(directory)s" +msgstr "%(directory)s zerrenda" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "Django: epeekin perfekzionistak direnentzat Web frameworka." + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Ikusi Django %(version)s-ren argitaratze " +"oharrak" + +msgid "The install worked successfully! Congratulations!" +msgstr "Instalazioak arrakastaz funtzionatu du! Zorionak!" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Zure settings fitxategian DEBUG=True jarrita eta URLrik konfiguratu gabe duzulako ari zara " +"ikusten orrialde hau." + +msgid "Django Documentation" +msgstr "Django dokumentazioa" + +msgid "Topics, references, & how-to's" +msgstr "Gaiak, erreferentziak, & laguntzak" + +msgid "Tutorial: A Polling App" +msgstr "Tutoriala: Galdetegi aplikazioa" + +msgid "Get started with Django" +msgstr "Hasi Djangorekin" + +msgid "Django Community" +msgstr "Django Komunitatea" + +msgid "Connect, get help, or contribute" +msgstr "Konektatu, lortu laguntza edo lagundu" diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/fi/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/conf/locale/fi/LC_MESSAGES/django.po new file mode 100644 index 0000000..4cef64f --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/fi/LC_MESSAGES/django.po @@ -0,0 +1,1267 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Aarni Koskela, 2015,2017-2018 +# Antti Kaihola , 2011 +# Jannis Leidel , 2011 +# Lasse Liehu , 2015 +# Mika Mäkelä , 2018 +# Klaus Dahlén , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-01-18 00:44+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Finnish (http://www.transifex.com/django/django/language/" +"fi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "afrikaans" + +msgid "Arabic" +msgstr "arabia" + +msgid "Asturian" +msgstr "asturian kieli" + +msgid "Azerbaijani" +msgstr "azeri" + +msgid "Bulgarian" +msgstr "bulgaria" + +msgid "Belarusian" +msgstr "valkovenäjän kieli" + +msgid "Bengali" +msgstr "bengali" + +msgid "Breton" +msgstr "bretoni" + +msgid "Bosnian" +msgstr "bosnia" + +msgid "Catalan" +msgstr "katalaani" + +msgid "Czech" +msgstr "tšekki" + +msgid "Welsh" +msgstr "wales" + +msgid "Danish" +msgstr "tanska" + +msgid "German" +msgstr "saksa" + +msgid "Lower Sorbian" +msgstr "Alasorbi" + +msgid "Greek" +msgstr "kreikka" + +msgid "English" +msgstr "englanti" + +msgid "Australian English" +msgstr "australianenglanti" + +msgid "British English" +msgstr "brittienglanti" + +msgid "Esperanto" +msgstr "esperanto" + +msgid "Spanish" +msgstr "espanja" + +msgid "Argentinian Spanish" +msgstr "Argentiinan espanja" + +msgid "Colombian Spanish" +msgstr "Kolumbian espanja" + +msgid "Mexican Spanish" +msgstr "Meksikon espanja" + +msgid "Nicaraguan Spanish" +msgstr "Nicaraguan espanja" + +msgid "Venezuelan Spanish" +msgstr "Venezuelan espanja" + +msgid "Estonian" +msgstr "viro" + +msgid "Basque" +msgstr "baski" + +msgid "Persian" +msgstr "persia" + +msgid "Finnish" +msgstr "suomi" + +msgid "French" +msgstr "ranska" + +msgid "Frisian" +msgstr "friisi" + +msgid "Irish" +msgstr "irlanti" + +msgid "Scottish Gaelic" +msgstr "Skottilainen gaeli" + +msgid "Galician" +msgstr "galicia" + +msgid "Hebrew" +msgstr "heprea" + +msgid "Hindi" +msgstr "hindi" + +msgid "Croatian" +msgstr "kroatia" + +msgid "Upper Sorbian" +msgstr "Yläsorbi" + +msgid "Hungarian" +msgstr "unkari" + +msgid "Armenian" +msgstr "" + +msgid "Interlingua" +msgstr "interlingua" + +msgid "Indonesian" +msgstr "indonesia" + +msgid "Ido" +msgstr "ido" + +msgid "Icelandic" +msgstr "islanti" + +msgid "Italian" +msgstr "italia" + +msgid "Japanese" +msgstr "japani" + +msgid "Georgian" +msgstr "georgia" + +msgid "Kabyle" +msgstr "Kabyle" + +msgid "Kazakh" +msgstr "kazakin kieli" + +msgid "Khmer" +msgstr "khmer" + +msgid "Kannada" +msgstr "kannada" + +msgid "Korean" +msgstr "korea" + +msgid "Luxembourgish" +msgstr "luxemburgin kieli" + +msgid "Lithuanian" +msgstr "liettua" + +msgid "Latvian" +msgstr "latvia" + +msgid "Macedonian" +msgstr "makedonia" + +msgid "Malayalam" +msgstr "malajalam" + +msgid "Mongolian" +msgstr "mongolia" + +msgid "Marathi" +msgstr "marathi" + +msgid "Burmese" +msgstr "burman kieli" + +msgid "Norwegian Bokmål" +msgstr "norja (bokmål)" + +msgid "Nepali" +msgstr "nepalin kieli" + +msgid "Dutch" +msgstr "hollanti" + +msgid "Norwegian Nynorsk" +msgstr "norja (uusnorja)" + +msgid "Ossetic" +msgstr "osseetin kieli" + +msgid "Punjabi" +msgstr "punjabin kieli" + +msgid "Polish" +msgstr "puola" + +msgid "Portuguese" +msgstr "portugali" + +msgid "Brazilian Portuguese" +msgstr "brasilian portugali" + +msgid "Romanian" +msgstr "romania" + +msgid "Russian" +msgstr "venäjä" + +msgid "Slovak" +msgstr "slovakia" + +msgid "Slovenian" +msgstr "slovenia" + +msgid "Albanian" +msgstr "albaani" + +msgid "Serbian" +msgstr "serbia" + +msgid "Serbian Latin" +msgstr "serbian latina" + +msgid "Swedish" +msgstr "ruotsi" + +msgid "Swahili" +msgstr "swahili" + +msgid "Tamil" +msgstr "tamili" + +msgid "Telugu" +msgstr "telugu" + +msgid "Thai" +msgstr "thain kieli" + +msgid "Turkish" +msgstr "turkki" + +msgid "Tatar" +msgstr "tataarin kieli" + +msgid "Udmurt" +msgstr "udmurtti" + +msgid "Ukrainian" +msgstr "ukraina" + +msgid "Urdu" +msgstr "urdu" + +msgid "Vietnamese" +msgstr "vietnam" + +msgid "Simplified Chinese" +msgstr "kiina (yksinkertaistettu)" + +msgid "Traditional Chinese" +msgstr "kiina (perinteinen)" + +msgid "Messages" +msgstr "Viestit" + +msgid "Site Maps" +msgstr "Sivukartat" + +msgid "Static Files" +msgstr "Staattiset tiedostot" + +msgid "Syndication" +msgstr "Syndikointi" + +msgid "That page number is not an integer" +msgstr "Annettu sivunumero ei ole kokonaisluku" + +msgid "That page number is less than 1" +msgstr "Annettu sivunumero on alle 1" + +msgid "That page contains no results" +msgstr "Annetulla sivulla ei ole tuloksia" + +msgid "Enter a valid value." +msgstr "Syötä oikea arvo." + +msgid "Enter a valid URL." +msgstr "Syötä oikea URL-osoite." + +msgid "Enter a valid integer." +msgstr "Syötä kelvollinen kokonaisluku." + +msgid "Enter a valid email address." +msgstr "Syötä kelvollinen sähköpostiosoite." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Tässä voidaan käyttää vain kirjaimia (a-z), numeroita (0-9) sekä ala- ja " +"tavuviivoja (_ -)." + +msgid "" +"Enter a valid 'slug' consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Tässä voidaan käyttää vain Unicode-kirjaimia, numeroita sekä ala- ja " +"tavuviivoja." + +msgid "Enter a valid IPv4 address." +msgstr "Syötä kelvollinen IPv4-osoite." + +msgid "Enter a valid IPv6 address." +msgstr "Syötä kelvollinen IPv6-osoite." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Syötä kelvollinen IPv4- tai IPv6-osoite." + +msgid "Enter only digits separated by commas." +msgstr "Vain pilkulla erotetut kokonaisluvut kelpaavat tässä." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "Tämän arvon on oltava %(limit_value)s (nyt %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Tämän arvon on oltava enintään %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Tämän luvun on oltava vähintään %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Varmista, että tämä arvo on vähintään %(limit_value)d merkin pituinen (tällä " +"hetkellä %(show_value)d)." +msgstr[1] "" +"Varmista, että tämä arvo on vähintään %(limit_value)d merkkiä pitkä (tällä " +"hetkellä %(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Varmista, että tämä arvo on enintään %(limit_value)d merkin pituinen (tällä " +"hetkellä %(show_value)d)." +msgstr[1] "" +"Varmista, että tämä arvo on enintään %(limit_value)d merkkiä pitkä (tällä " +"hetkellä %(show_value)d)." + +msgid "Enter a number." +msgstr "Syötä luku." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Tässä luvussa voi olla yhteensä enintään %(max)s numero." +msgstr[1] "Tässä luvussa voi olla yhteensä enintään %(max)s numeroa." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Tässä luvussa saa olla enintään %(max)s desimaali." +msgstr[1] "Tässä luvussa saa olla enintään %(max)s desimaalia." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"Tässä luvussa saa olla enintään %(max)s numero ennen desimaalipilkkua." +msgstr[1] "" +"Tässä luvussa saa olla enintään %(max)s numeroa ennen desimaalipilkkua." + +#, python-format +msgid "" +"File extension '%(extension)s' is not allowed. Allowed extensions are: " +"'%(allowed_extensions)s'." +msgstr "" +"Pääte \"%(extension)s\" ei ole sallittu. Sallittuja päätteitä ovat " +"\"%(allowed_extensions)s\"." + +msgid "Null characters are not allowed." +msgstr "Tyhjiä merkkejä (null) ei sallita." + +msgid "and" +msgstr "ja" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s jolla on nämä %(field_labels)s on jo olemassa." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Arvo %(value)r ei kelpaa." + +msgid "This field cannot be null." +msgstr "Tämän kentän arvo ei voi olla \"null\"." + +msgid "This field cannot be blank." +msgstr "Tämä kenttä ei voi olla tyhjä." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s jolla on tämä %(field_label)s, on jo olemassa." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"\"%(field_label)s\"-kentän on oltava uniikki suhteessa: %(date_field_label)s " +"%(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Kenttä tyyppiä: %(field_type)s" + +msgid "Integer" +msgstr "Kokonaisluku" + +#, python-format +msgid "'%(value)s' value must be an integer." +msgstr "%(value)s-arvo tulee olla kokonaisluku." + +msgid "Big (8 byte) integer" +msgstr "Suuri (8-tavuinen) kokonaisluku" + +#, python-format +msgid "'%(value)s' value must be either True or False." +msgstr "%(value)s-arvo pitää olla joko tosi tai epätosi." + +#, python-format +msgid "'%(value)s' value must be either True, False, or None." +msgstr "%(value)s-arvo pitää olla joko tosi, epätosi tai ei mitään." + +msgid "Boolean (Either True or False)" +msgstr "Totuusarvo: joko tosi (True) tai epätosi (False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Merkkijono (enintään %(max_length)s merkkiä)" + +msgid "Comma-separated integers" +msgstr "Pilkulla erotetut kokonaisluvut" + +#, python-format +msgid "" +"'%(value)s' value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"%(value)s-arvo on väärässä päivämäärämuodossa. Sen tulee olla VVVV-KK-PP -" +"muodossa." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"%(value)s-arvo on oikeassa päivämäärämuodossa (VVVV-KK-PP), muttei ole " +"kelvollinen päivämäärä." + +msgid "Date (without time)" +msgstr "Päivämäärä (ilman kellonaikaa)" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"%(value)s-arvon muoto ei kelpaa. Se tulee olla VVVV-KK-PP TT:MM[:ss[.uuuuuu]]" +"[TZ] -muodossa." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"%(value)s-arvon muoto on oikea (VVVV-KK-PP TT:MM[:ss[.uuuuuu]][TZ]), mutta " +"päivämäärä/aika ei ole kelvollinen." + +msgid "Date (with time)" +msgstr "Päivämäärä ja kellonaika" + +#, python-format +msgid "'%(value)s' value must be a decimal number." +msgstr "%(value)s-arvo tulee olla desimaaliluku." + +msgid "Decimal number" +msgstr "Desimaaliluku" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in [DD] [HH:[MM:]]ss[." +"uuuuuu] format." +msgstr "%(value)s-arvo pitää olla muodossa [PP] TT:MM[:ss[.uuuuuu]]." + +msgid "Duration" +msgstr "Kesto" + +msgid "Email address" +msgstr "Sähköpostiosoite" + +msgid "File path" +msgstr "Tiedostopolku" + +#, python-format +msgid "'%(value)s' value must be a float." +msgstr "%(value)s-arvo tulee olla liukuluku." + +msgid "Floating point number" +msgstr "Liukuluku" + +msgid "IPv4 address" +msgstr "IPv4-osoite" + +msgid "IP address" +msgstr "IP-osoite" + +#, python-format +msgid "'%(value)s' value must be either None, True or False." +msgstr "%(value)s-arvo tulee olla joko ei mitään, tosi tai epätosi." + +msgid "Boolean (Either True, False or None)" +msgstr "Totuusarvo: joko tosi (True), epätosi (False) tai ei mikään (None)" + +msgid "Positive integer" +msgstr "Positiivinen kokonaisluku" + +msgid "Positive small integer" +msgstr "Pieni positiivinen kokonaisluku" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Lyhytnimi (enintään %(max_length)s merkkiä)" + +msgid "Small integer" +msgstr "Pieni kokonaisluku" + +msgid "Text" +msgstr "Tekstiä" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "%(value)s-arvo pitää olla muodossa TT:MM[:ss[.uuuuuu]]." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"%(value)s-arvo on oikeassa muodossa (TT:MM[:ss[.uuuuuu]]), mutta kellonaika " +"ei kelpaa." + +msgid "Time" +msgstr "Kellonaika" + +msgid "URL" +msgstr "URL-osoite" + +msgid "Raw binary data" +msgstr "Raaka binaaridata" + +#, python-format +msgid "'%(value)s' is not a valid UUID." +msgstr "%(value)s ei ole kelvollinen UUID." + +msgid "Universally unique identifier" +msgstr "" + +msgid "File" +msgstr "Tiedosto" + +msgid "Image" +msgstr "Kuva" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "%(model)s-tietuetta %(field)s-kentällä %(value)r ei ole olemassa." + +msgid "Foreign Key (type determined by related field)" +msgstr "Vierasavain (tyyppi määräytyy liittyvän kentän mukaan)" + +msgid "One-to-one relationship" +msgstr "Yksi-yhteen relaatio" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "%(from)s-%(to)s -suhde" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "%(from)s-%(to)s -suhteet" + +msgid "Many-to-many relationship" +msgstr "Moni-moneen relaatio" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Tämä kenttä vaaditaan." + +msgid "Enter a whole number." +msgstr "Syötä kokonaisluku." + +msgid "Enter a valid date." +msgstr "Syötä oikea päivämäärä." + +msgid "Enter a valid time." +msgstr "Syötä oikea kellonaika." + +msgid "Enter a valid date/time." +msgstr "Syötä oikea pvm/kellonaika." + +msgid "Enter a valid duration." +msgstr "Syötä oikea kesto." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Päivien määrä täytyy olla välillä {min_days} ja {max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Tiedostoa ei lähetetty. Tarkista lomakkeen koodaus (encoding)." + +msgid "No file was submitted." +msgstr "Yhtään tiedostoa ei ole lähetetty." + +msgid "The submitted file is empty." +msgstr "Lähetetty tiedosto on tyhjä." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Varmista, että tämä tiedostonimi on enintään %(max)d merkin pituinen (tällä " +"hetkellä %(length)d)." +msgstr[1] "" +"Varmista, että tämä tiedostonimi on enintään %(max)d merkkiä pitkä (tällä " +"hetkellä %(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Voit joko lähettää tai poistaa tiedoston, muttei kumpaakin samalla." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Kuva ei kelpaa. Lähettämäsi tiedosto ei ole kuva, tai tiedosto on vioittunut." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Valitse oikea vaihtoehto. %(value)s ei ole vaihtoehtojen joukossa." + +msgid "Enter a list of values." +msgstr "Syötä lista." + +msgid "Enter a complete value." +msgstr "Syötä kokonainen arvo." + +msgid "Enter a valid UUID." +msgstr "Syötä oikea UUID." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Piilokenttä %(name)s) %(error)s" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "ManagementForm-tiedot puuttuvat tai niitä on muutettu" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "Lähetä enintään %d lomake." +msgstr[1] "Lähetä enintään %d lomaketta." + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "Lähetä vähintään %d lomake." +msgstr[1] "Lähetä vähintään %d lomaketta." + +msgid "Order" +msgstr "Järjestys" + +msgid "Delete" +msgstr "Poista" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Korjaa kaksoisarvo kentälle %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "Ole hyvä ja korjaa uniikin kentän %(field)s kaksoisarvo." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Korjaa allaolevat kaksoisarvot." + +msgid "The inline value did not match the parent instance." +msgstr "Liittyvä arvo ei vastannut vanhempaa instanssia." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Valitse oikea vaihtoehto. Valintasi ei löydy vaihtoehtojen joukosta." + +#, python-format +msgid "\"%(pk)s\" is not a valid value." +msgstr "\"%(pk)s\" ei ole kelvollinen arvo." + +#, python-format +msgid "" +"%(datetime)s couldn't be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s -arvoa ei pystytty lukemaan aikavyöhykkeellä " +"%(current_timezone)s; se saattaa olla moniarvoinen tai määrittämätön." + +msgid "Clear" +msgstr "Poista" + +msgid "Currently" +msgstr "Tällä hetkellä" + +msgid "Change" +msgstr "Muokkaa" + +msgid "Unknown" +msgstr "Tuntematon" + +msgid "Yes" +msgstr "Kyllä" + +msgid "No" +msgstr "Ei" + +msgid "yes,no,maybe" +msgstr "kyllä,ei,ehkä" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d tavu" +msgstr[1] "%(size)d tavua" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "ip" + +msgid "a.m." +msgstr "ap" + +msgid "PM" +msgstr "IP" + +msgid "AM" +msgstr "AP" + +msgid "midnight" +msgstr "keskiyö" + +msgid "noon" +msgstr "keskipäivä" + +msgid "Monday" +msgstr "maanantai" + +msgid "Tuesday" +msgstr "tiistai" + +msgid "Wednesday" +msgstr "keskiviikko" + +msgid "Thursday" +msgstr "torstai" + +msgid "Friday" +msgstr "perjantai" + +msgid "Saturday" +msgstr "lauantai" + +msgid "Sunday" +msgstr "sunnuntai" + +msgid "Mon" +msgstr "ma" + +msgid "Tue" +msgstr "ti" + +msgid "Wed" +msgstr "ke" + +msgid "Thu" +msgstr "to" + +msgid "Fri" +msgstr "pe" + +msgid "Sat" +msgstr "la" + +msgid "Sun" +msgstr "su" + +msgid "January" +msgstr "tammikuu" + +msgid "February" +msgstr "helmikuu" + +msgid "March" +msgstr "maaliskuu" + +msgid "April" +msgstr "huhtikuu" + +msgid "May" +msgstr "toukokuu" + +msgid "June" +msgstr "kesäkuu" + +msgid "July" +msgstr "heinäkuu" + +msgid "August" +msgstr "elokuu" + +msgid "September" +msgstr "syyskuu" + +msgid "October" +msgstr "lokakuu" + +msgid "November" +msgstr "marraskuu" + +msgid "December" +msgstr "joulukuu" + +msgid "jan" +msgstr "tam" + +msgid "feb" +msgstr "hel" + +msgid "mar" +msgstr "maa" + +msgid "apr" +msgstr "huh" + +msgid "may" +msgstr "tou" + +msgid "jun" +msgstr "kes" + +msgid "jul" +msgstr "hei" + +msgid "aug" +msgstr "elo" + +msgid "sep" +msgstr "syy" + +msgid "oct" +msgstr "lok" + +msgid "nov" +msgstr "mar" + +msgid "dec" +msgstr "jou" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "tammi" + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "helmi" + +msgctxt "abbrev. month" +msgid "March" +msgstr "maalis" + +msgctxt "abbrev. month" +msgid "April" +msgstr "huhti" + +msgctxt "abbrev. month" +msgid "May" +msgstr "touko" + +msgctxt "abbrev. month" +msgid "June" +msgstr "kesä" + +msgctxt "abbrev. month" +msgid "July" +msgstr "heinä" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "elo" + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "syys" + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "loka" + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "marras" + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "joulu" + +msgctxt "alt. month" +msgid "January" +msgstr "tammikuuta" + +msgctxt "alt. month" +msgid "February" +msgstr "helmikuuta" + +msgctxt "alt. month" +msgid "March" +msgstr "maaliskuuta" + +msgctxt "alt. month" +msgid "April" +msgstr "huhtikuuta" + +msgctxt "alt. month" +msgid "May" +msgstr "toukokuuta" + +msgctxt "alt. month" +msgid "June" +msgstr "kesäkuuta" + +msgctxt "alt. month" +msgid "July" +msgstr "heinäkuuta" + +msgctxt "alt. month" +msgid "August" +msgstr "elokuuta" + +msgctxt "alt. month" +msgid "September" +msgstr "syyskuuta" + +msgctxt "alt. month" +msgid "October" +msgstr "lokakuuta" + +msgctxt "alt. month" +msgid "November" +msgstr "marraskuuta" + +msgctxt "alt. month" +msgid "December" +msgstr "joulukuuta" + +msgid "This is not a valid IPv6 address." +msgstr "Tämä ei ole kelvollinen IPv6-osoite." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +msgid "or" +msgstr "tai" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d vuosi" +msgstr[1] "%d vuotta" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d kuukausi" +msgstr[1] "%d kuukautta" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d viikko" +msgstr[1] "%d viikkoa" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d päivä" +msgstr[1] "%d päivää" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d tunti" +msgstr[1] "%d tuntia" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minuutti" +msgstr[1] "%d minuuttia" + +msgid "0 minutes" +msgstr "0 minuuttia" + +msgid "Forbidden" +msgstr "Kielletty" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF-vahvistus epäonnistui. Pyyntö hylätty." + +msgid "" +"You are seeing this message because this HTTPS site requires a 'Referer " +"header' to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Näet tämän viestin, koska tämä HTTPS-sivusto vaatii selaintasi lähettämään " +"Referer-otsakkeen, mutta sitä ei vastaanotettu. Otsake vaaditaan " +"turvallisuussyistä, varmistamaan etteivät kolmannet osapuolet ole ottaneet " +"selaintasi haltuun." + +msgid "" +"If you have configured your browser to disable 'Referer' headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for 'same-" +"origin' requests." +msgstr "" +"Jos olet konfiguroinut selaimesi olemaan lähettämättä Referer-otsaketta, ole " +"hyvä ja kytke otsake takaisin päälle ainakin tälle sivulle, HTTPS-" +"yhteyksille tai saman lähteen (\"same-origin\") pyynnöille." + +msgid "" +"If you are using the tag or " +"including the 'Referrer-Policy: no-referrer' header, please remove them. The " +"CSRF protection requires the 'Referer' header to do strict referer checking. " +"If you're concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"Jos käytät -tagia tai " +"\"Referrer-Policy: no-referrer\" -otsaketta, ole hyvä ja poista ne. CSRF-" +"suojaus vaatii Referer-otsakkeen tehdäkseen tarkan referer-tarkistuksen. Jos " +"vaadit yksityisyyttä, käytä vaihtoehtoja kuten linkittääksesi kolmannen osapuolen sivuille." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Näet tämän viestin, koska tämä sivusto vaatii CSRF-evästeen " +"vastaanottaessaan lomaketietoja. Eväste vaaditaan turvallisuussyistä, " +"varmistamaan etteivät kolmannet osapuolet ole ottaneet selaintasi haltuun." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for 'same-origin' requests." +msgstr "" +"Jos olet konfiguroinut selaimesi olemaan vastaanottamatta tai lähettämättä " +"evästeitä, ole hyvä ja kytke evästeet takaisin päälle ainakin tälle sivulle " +"tai saman lähteen (\"same-origin\") pyynnöille." + +msgid "More information is available with DEBUG=True." +msgstr "Lisätietoja `DEBUG=True`-konfiguraatioasetuksella." + +msgid "No year specified" +msgstr "Vuosi puuttuu" + +msgid "Date out of range" +msgstr "Päivämäärä ei alueella" + +msgid "No month specified" +msgstr "Kuukausi puuttuu" + +msgid "No day specified" +msgstr "Päivä puuttuu" + +msgid "No week specified" +msgstr "Viikko puuttuu" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "%(verbose_name_plural)s: yhtään kohdetta ei löydy" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"%(verbose_name_plural)s: tulevia kohteita ei löydy, koska %(class_name)s." +"allow_future:n arvo on False." + +#, python-format +msgid "Invalid date string '%(datestr)s' given format '%(format)s'" +msgstr "Päivämäärä '%(datestr)s' ei ole muotoa '%(format)s'" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Hakua vastaavaa %(verbose_name)s -kohdetta ei löytynyt" + +msgid "Page is not 'last', nor can it be converted to an int." +msgstr "Sivunumero ei ole 'last' (viimeinen) eikä näytä luvulta." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Epäkelpo sivu (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and '%(class_name)s.allow_empty' is False." +msgstr "Lista on tyhjä, ja '%(class_name)s.allow_empty':n arvo on False." + +msgid "Directory indexes are not allowed here." +msgstr "Hakemistolistauksia ei sallita täällä." + +#, python-format +msgid "\"%(path)s\" does not exist" +msgstr "\"%(path)s\" ei ole olemassa" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Hakemistolistaus: %(directory)s" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Katso Django %(version)s julkaisutiedot" + +msgid "The install worked successfully! Congratulations!" +msgstr "Asennus toimi! Onneksi olkoon!" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Näet tämän viestin, koska asetuksissasi on DEBUG = True etkä ole konfiguroinut yhtään URL-osoitetta." + +msgid "Django Documentation" +msgstr "Django-dokumentaatio" + +msgid "Topics, references, & how-to's" +msgstr "Aiheet, viittaukset & how-tot" + +msgid "Tutorial: A Polling App" +msgstr "Tutoriaali: kyselyapplikaatio" + +msgid "Get started with Django" +msgstr "Miten päästä alkuun Djangolla" + +msgid "Django Community" +msgstr "Django-yhteisö" + +msgid "Connect, get help, or contribute" +msgstr "Verkostoidu, saa apua tai jatkokehitä" diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/fi/formats.py b/venv/lib/python3.7/site-packages/django/conf/locale/fi/formats.py new file mode 100644 index 0000000..b6afe22 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/fi/formats.py @@ -0,0 +1,39 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = 'j. E Y' +TIME_FORMAT = 'G.i' +DATETIME_FORMAT = r'j. E Y \k\e\l\l\o G.i' +YEAR_MONTH_FORMAT = 'F Y' +MONTH_DAY_FORMAT = 'j. F' +SHORT_DATE_FORMAT = 'j.n.Y' +SHORT_DATETIME_FORMAT = 'j.n.Y G.i' +FIRST_DAY_OF_WEEK = 1 # Monday + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +DATE_INPUT_FORMATS = [ + '%d.%m.%Y', # '20.3.2014' + '%d.%m.%y', # '20.3.14' +] +DATETIME_INPUT_FORMATS = [ + '%d.%m.%Y %H.%M.%S', # '20.3.2014 14.30.59' + '%d.%m.%Y %H.%M.%S.%f', # '20.3.2014 14.30.59.000200' + '%d.%m.%Y %H.%M', # '20.3.2014 14.30' + '%d.%m.%Y', # '20.3.2014' + + '%d.%m.%y %H.%M.%S', # '20.3.14 14.30.59' + '%d.%m.%y %H.%M.%S.%f', # '20.3.14 14.30.59.000200' + '%d.%m.%y %H.%M', # '20.3.14 14.30' + '%d.%m.%y', # '20.3.14' +] +TIME_INPUT_FORMATS = [ + '%H.%M.%S', # '14.30.59' + '%H.%M.%S.%f', # '14.30.59.000200' + '%H.%M', # '14.30' +] + +DECIMAL_SEPARATOR = ',' +THOUSAND_SEPARATOR = '\xa0' # Non-breaking space +NUMBER_GROUPING = 3 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/fr/formats.py b/venv/lib/python3.7/site-packages/django/conf/locale/fr/formats.py new file mode 100644 index 0000000..557c388 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/fr/formats.py @@ -0,0 +1,33 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = 'j F Y' +TIME_FORMAT = 'H:i' +DATETIME_FORMAT = 'j F Y H:i' +YEAR_MONTH_FORMAT = 'F Y' +MONTH_DAY_FORMAT = 'j F' +SHORT_DATE_FORMAT = 'j N Y' +SHORT_DATETIME_FORMAT = 'j N Y H:i' +FIRST_DAY_OF_WEEK = 1 # Monday + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +DATE_INPUT_FORMATS = [ + '%d/%m/%Y', '%d/%m/%y', # '25/10/2006', '25/10/06' + '%d.%m.%Y', '%d.%m.%y', # Swiss [fr_CH), '25.10.2006', '25.10.06' + # '%d %B %Y', '%d %b %Y', # '25 octobre 2006', '25 oct. 2006' +] +DATETIME_INPUT_FORMATS = [ + '%d/%m/%Y %H:%M:%S', # '25/10/2006 14:30:59' + '%d/%m/%Y %H:%M:%S.%f', # '25/10/2006 14:30:59.000200' + '%d/%m/%Y %H:%M', # '25/10/2006 14:30' + '%d/%m/%Y', # '25/10/2006' + '%d.%m.%Y %H:%M:%S', # Swiss [fr_CH), '25.10.2006 14:30:59' + '%d.%m.%Y %H:%M:%S.%f', # Swiss (fr_CH), '25.10.2006 14:30:59.000200' + '%d.%m.%Y %H:%M', # Swiss (fr_CH), '25.10.2006 14:30' + '%d.%m.%Y', # Swiss (fr_CH), '25.10.2006' +] +DECIMAL_SEPARATOR = ',' +THOUSAND_SEPARATOR = '\xa0' # non-breaking space +NUMBER_GROUPING = 3 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/fy/__init__.py b/venv/lib/python3.7/site-packages/django/conf/locale/fy/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/gd/__init__.py b/venv/lib/python3.7/site-packages/django/conf/locale/gd/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/he/__init__.py b/venv/lib/python3.7/site-packages/django/conf/locale/he/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/hi/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/conf/locale/hi/LC_MESSAGES/django.po new file mode 100644 index 0000000..6a49464 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/hi/LC_MESSAGES/django.po @@ -0,0 +1,1193 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# alkuma , 2013 +# Chandan kumar , 2012 +# Jannis Leidel , 2011 +# Pratik , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-11-15 16:15+0100\n" +"PO-Revision-Date: 2017-11-16 01:13+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Hindi (http://www.transifex.com/django/django/language/hi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "अफ़्रीकांस" + +msgid "Arabic" +msgstr "अरबी" + +msgid "Asturian" +msgstr "" + +msgid "Azerbaijani" +msgstr "आज़रबाइजानी" + +msgid "Bulgarian" +msgstr "बलगारियन" + +msgid "Belarusian" +msgstr "बेलारूसी" + +msgid "Bengali" +msgstr "बंगाली" + +msgid "Breton" +msgstr "ब्रेटन" + +msgid "Bosnian" +msgstr "बोस्नियन" + +msgid "Catalan" +msgstr "कटलान" + +msgid "Czech" +msgstr "च्चेक" + +msgid "Welsh" +msgstr "वेल्श" + +msgid "Danish" +msgstr "दानिश" + +msgid "German" +msgstr "जर्मन" + +msgid "Lower Sorbian" +msgstr "" + +msgid "Greek" +msgstr "ग्रीक" + +msgid "English" +msgstr "अंग्रेज़ी " + +msgid "Australian English" +msgstr "" + +msgid "British English" +msgstr "ब्रिटिश अंग्रेजी" + +msgid "Esperanto" +msgstr "एस्परेन्तो" + +msgid "Spanish" +msgstr "स्पानिश" + +msgid "Argentinian Spanish" +msgstr "अर्जेंटीना स्पैनिश " + +msgid "Colombian Spanish" +msgstr "" + +msgid "Mexican Spanish" +msgstr "मेक्सिकन स्पैनिश" + +msgid "Nicaraguan Spanish" +msgstr "निकारागुआ स्पैनिश" + +msgid "Venezuelan Spanish" +msgstr "वेनेज़ुएलाई स्पेनिश" + +msgid "Estonian" +msgstr "एस्टोनियन" + +msgid "Basque" +msgstr "बास्क" + +msgid "Persian" +msgstr "पारसी" + +msgid "Finnish" +msgstr "फ़िन्निश" + +msgid "French" +msgstr "फ्रेंच" + +msgid "Frisian" +msgstr "फ्रिसियन" + +msgid "Irish" +msgstr "आयरिश" + +msgid "Scottish Gaelic" +msgstr "" + +msgid "Galician" +msgstr "गलिशियन" + +msgid "Hebrew" +msgstr "हि‍ब्रू" + +msgid "Hindi" +msgstr "हिंदी" + +msgid "Croatian" +msgstr "क्रोयेशियन" + +msgid "Upper Sorbian" +msgstr "" + +msgid "Hungarian" +msgstr "हंगेरियन" + +msgid "Interlingua" +msgstr "इंतर्लिंगुआ" + +msgid "Indonesian" +msgstr "इन्डोनेशियन " + +msgid "Ido" +msgstr "" + +msgid "Icelandic" +msgstr "आयिस्लान्डिक" + +msgid "Italian" +msgstr "इटैलियन" + +msgid "Japanese" +msgstr "जपानी" + +msgid "Georgian" +msgstr "ज्योर्जियन" + +msgid "Kazakh" +msgstr "कज़ाख" + +msgid "Khmer" +msgstr "ख्मेर" + +msgid "Kannada" +msgstr "कन्‍नड़" + +msgid "Korean" +msgstr "कोरियन" + +msgid "Luxembourgish" +msgstr "लक्संबर्गी" + +msgid "Lithuanian" +msgstr "लिथुवेनियन" + +msgid "Latvian" +msgstr "लात्वियन" + +msgid "Macedonian" +msgstr "मेसिडोनियन" + +msgid "Malayalam" +msgstr "मलयालम" + +msgid "Mongolian" +msgstr "मंगोलियन" + +msgid "Marathi" +msgstr "" + +msgid "Burmese" +msgstr "बर्मीज़" + +msgid "Norwegian Bokmål" +msgstr "" + +msgid "Nepali" +msgstr "नेपाली" + +msgid "Dutch" +msgstr "डच" + +msgid "Norwegian Nynorsk" +msgstr "नार्वेजियन नायनॉर्स्क" + +msgid "Ossetic" +msgstr "ओस्सेटिक" + +msgid "Punjabi" +msgstr "पंजाबी" + +msgid "Polish" +msgstr "पोलिश" + +msgid "Portuguese" +msgstr "पुर्तगाली" + +msgid "Brazilian Portuguese" +msgstr "ब्रजिलियन पुर्तगाली" + +msgid "Romanian" +msgstr "रोमानियन" + +msgid "Russian" +msgstr "रूसी" + +msgid "Slovak" +msgstr "स्लोवाक" + +msgid "Slovenian" +msgstr "स्लोवेनियन" + +msgid "Albanian" +msgstr "अल्बेनियन्" + +msgid "Serbian" +msgstr "सर्बियन" + +msgid "Serbian Latin" +msgstr "सर्बियाई लैटिन" + +msgid "Swedish" +msgstr "स्वीडिश" + +msgid "Swahili" +msgstr "स्वाहिली" + +msgid "Tamil" +msgstr "तमिल" + +msgid "Telugu" +msgstr "तेलुगु" + +msgid "Thai" +msgstr "थाई" + +msgid "Turkish" +msgstr "तुर्किश" + +msgid "Tatar" +msgstr "तातार" + +msgid "Udmurt" +msgstr "उद्मर्त" + +msgid "Ukrainian" +msgstr "यूक्रानियन" + +msgid "Urdu" +msgstr "उर्दू" + +msgid "Vietnamese" +msgstr "वियतनामी" + +msgid "Simplified Chinese" +msgstr "सरल चीनी" + +msgid "Traditional Chinese" +msgstr "पारम्परिक चीनी" + +msgid "Messages" +msgstr "" + +msgid "Site Maps" +msgstr "" + +msgid "Static Files" +msgstr "" + +msgid "Syndication" +msgstr "" + +msgid "That page number is not an integer" +msgstr "" + +msgid "That page number is less than 1" +msgstr "" + +msgid "That page contains no results" +msgstr "" + +msgid "Enter a valid value." +msgstr "एक मान्य मूल्य दर्ज करें" + +msgid "Enter a valid URL." +msgstr "वैध यू.आर.एल भरें ।" + +msgid "Enter a valid integer." +msgstr "" + +msgid "Enter a valid email address." +msgstr "वैध डाक पता प्रविष्ट करें।" + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens." +msgstr "एक वैध 'काउंटर' वर्णों, संख्याओं,रेखांकित चिन्ह ,या हाइफ़न से मिलाकर दर्ज करें ।" + +msgid "" +"Enter a valid 'slug' consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "वैध आइ.पि वी 4 पता भरें ।" + +msgid "Enter a valid IPv6 address." +msgstr "वैध IPv6 पता दर्ज करें." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "वैध IPv4 या IPv6 पता दर्ज करें." + +msgid "Enter only digits separated by commas." +msgstr "अल्पविराम अंक मात्र ही भरें ।" + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"सुनिश्चित करें कि यह मान %(limit_value)s (यह\n" +" %(show_value)s है) है ।" + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "सुनिश्चित करें कि यह मान %(limit_value)s से कम या बराबर है ।" + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "सुनिश्चित करें यह मान %(limit_value)s से बड़ा या बराबर है ।" + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"File extension '%(extension)s' is not allowed. Allowed extensions are: " +"'%(allowed_extensions)s'." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "और" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "" + +msgid "This field cannot be null." +msgstr "यह मूल्य खाली नहीं हो सकता ।" + +msgid "This field cannot be blank." +msgstr "इस फ़ील्ड रिक्त नहीं हो सकता है." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "इस %(field_label)s के साथ एक %(model_name)s पहले से ही उपस्थित है ।" + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "फील्ड के प्रकार: %(field_type)s" + +msgid "Integer" +msgstr "पूर्णांक" + +#, python-format +msgid "'%(value)s' value must be an integer." +msgstr "" + +msgid "Big (8 byte) integer" +msgstr "बड़ा (8 बाइट) पूर्णांक " + +#, python-format +msgid "'%(value)s' value must be either True or False." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "बूलियन (सही अथ‌वा गलत)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "स्ट्रिंग (अधिकतम लम्बाई %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "अल्पविराम सीमांकित संख्या" + +#, python-format +msgid "" +"'%(value)s' value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "तिथि (बिना समय)" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "तिथि (समय के साथ)" + +#, python-format +msgid "'%(value)s' value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "दशमलव संख्या" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in [DD] [HH:[MM:]]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "" + +msgid "Email address" +msgstr "ईमेल पता" + +msgid "File path" +msgstr "संचिका पथ" + +#, python-format +msgid "'%(value)s' value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "चल बिन्दु संख्या" + +msgid "IPv4 address" +msgstr "IPv4 पता" + +msgid "IP address" +msgstr "आइ.पि पता" + +#, python-format +msgid "'%(value)s' value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "बूलियन (सही, गलत या कुछ नहीं)" + +msgid "Positive integer" +msgstr "धनात्मक पूर्णांक" + +msgid "Positive small integer" +msgstr "धनात्मक छोटा पूर्णांक" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "स्लग (%(max_length)s तक)" + +msgid "Small integer" +msgstr "छोटा पूर्णांक" + +msgid "Text" +msgstr "पाठ" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"'%(value)s' value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "समय" + +msgid "URL" +msgstr "यू.आर.एल" + +msgid "Raw binary data" +msgstr "" + +#, python-format +msgid "'%(value)s' is not a valid UUID." +msgstr "" + +msgid "File" +msgstr "फाइल" + +msgid "Image" +msgstr "छवि" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +msgid "Foreign Key (type determined by related field)" +msgstr "विदेशी कुंजी (संबंधित क्षेत्र के द्वारा प्रकार निर्धारित)" + +msgid "One-to-one relationship" +msgstr "एक-एक संबंध" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "बहुत से कई संबंध" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr "" + +msgid "This field is required." +msgstr "यह क्षेत्र अपेक्षित हैं" + +msgid "Enter a whole number." +msgstr "एक पूर्ण संख्या दर्ज करें ।" + +msgid "Enter a number." +msgstr "एक संख्या दर्ज करें ।" + +msgid "Enter a valid date." +msgstr "वैध तिथि भरें ।" + +msgid "Enter a valid time." +msgstr "वैध समय भरें ।" + +msgid "Enter a valid date/time." +msgstr "वैध तिथि/समय भरें ।" + +msgid "Enter a valid duration." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "कोई संचिका निवेदित नहीं हुई । कृपया कूटलेखन की जाँच करें ।" + +msgid "No file was submitted." +msgstr "कोई संचिका निवेदित नहीं हुई ।" + +msgid "The submitted file is empty." +msgstr "निवेदित संचिका खाली है ।" + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +msgstr[1] "" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "कृपया या फ़ाइल प्रस्तुत करे या साफ जांचपेटी की जाँच करे,दोनों नहीं ." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "वैध चित्र निवेदन करें । आप के द्वारा निवेदित संचिका अमान्य अथवा दूषित है ।" + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "मान्य इच्छा चयन करें । %(value)s लभ्य इच्छाओं में उप्लब्ध नहीं हैं ।" + +msgid "Enter a list of values." +msgstr "मूल्य सूची दर्ज करें ।" + +msgid "Enter a complete value." +msgstr "" + +msgid "Enter a valid UUID." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr "" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "" +msgstr[1] "" + +msgid "Order" +msgstr "छाटें" + +msgid "Delete" +msgstr "मिटाएँ" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "कृपया %(field)s के लिए डुप्लिकेट डेटा को सही करे." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "कृपया %(field)s के डुप्लिकेट डेटा जो अद्वितीय होना चाहिए को सही करें." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"कृपया %(field_name)s के लिए डुप्लिकेट डेटा को सही करे जो %(date_field)s में " +"%(lookup)s के लिए अद्वितीय होना चाहिए." + +msgid "Please correct the duplicate values below." +msgstr "कृपया डुप्लिकेट मानों को सही करें." + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "मान्य विकल्प चयन करें । यह विकल्प उपस्थित विकल्पों में नहीं है ।" + +#, python-format +msgid "\"%(pk)s\" is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn't be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(current_timezone)s समय क्षेत्र में %(datetime)s का व्याख्या नहीं कर सकता है, यह " +"अस्पष्ट हो सकता है या नहीं मौजूद हो सकते हैं." + +msgid "Clear" +msgstr "रिक्त करें" + +msgid "Currently" +msgstr "फिलहाल" + +msgid "Change" +msgstr "बदलें" + +msgid "Unknown" +msgstr "अनजान" + +msgid "Yes" +msgstr "हाँ" + +msgid "No" +msgstr "नहीं" + +msgid "yes,no,maybe" +msgstr "हाँ, नहीं, शायद" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d बाइट" +msgstr[1] "%(size)d बाइट" + +#, python-format +msgid "%s KB" +msgstr "%s केबी " + +#, python-format +msgid "%s MB" +msgstr "%s मेबी " + +#, python-format +msgid "%s GB" +msgstr "%s जीबी " + +#, python-format +msgid "%s TB" +msgstr "%s टीबी" + +#, python-format +msgid "%s PB" +msgstr "%s पीबी" + +msgid "p.m." +msgstr "बजे" + +msgid "a.m." +msgstr "बजे" + +msgid "PM" +msgstr "बजे" + +msgid "AM" +msgstr "बजे" + +msgid "midnight" +msgstr "मध्यरात्री" + +msgid "noon" +msgstr "दोपहर" + +msgid "Monday" +msgstr "सोम‌वार" + +msgid "Tuesday" +msgstr "मंगलवार" + +msgid "Wednesday" +msgstr "बुधवार" + +msgid "Thursday" +msgstr "गुरूवार" + +msgid "Friday" +msgstr "शुक्रवार" + +msgid "Saturday" +msgstr "शनिवार" + +msgid "Sunday" +msgstr "रविवार" + +msgid "Mon" +msgstr "सोम" + +msgid "Tue" +msgstr "मंगल" + +msgid "Wed" +msgstr "बुध" + +msgid "Thu" +msgstr "गुरू" + +msgid "Fri" +msgstr "शुक्र" + +msgid "Sat" +msgstr "शनि" + +msgid "Sun" +msgstr "रवि" + +msgid "January" +msgstr "जनवरी" + +msgid "February" +msgstr "फ़रवरी" + +msgid "March" +msgstr "मार्च" + +msgid "April" +msgstr "अप्रैल" + +msgid "May" +msgstr "मई" + +msgid "June" +msgstr "जून" + +msgid "July" +msgstr "जुलाई" + +msgid "August" +msgstr "अगस्त" + +msgid "September" +msgstr "सितमबर" + +msgid "October" +msgstr "अक्टूबर" + +msgid "November" +msgstr "नवमबर" + +msgid "December" +msgstr "दिसमबर" + +msgid "jan" +msgstr "जन" + +msgid "feb" +msgstr "फ़र" + +msgid "mar" +msgstr "मा" + +msgid "apr" +msgstr "अप्र" + +msgid "may" +msgstr "मई" + +msgid "jun" +msgstr "जून" + +msgid "jul" +msgstr "जुल" + +msgid "aug" +msgstr "अग" + +msgid "sep" +msgstr "सित" + +msgid "oct" +msgstr "अक्ट" + +msgid "nov" +msgstr "नव" + +msgid "dec" +msgstr "दिस्" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "जनवरी." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "फ़रवरी." + +msgctxt "abbrev. month" +msgid "March" +msgstr "मार्च" + +msgctxt "abbrev. month" +msgid "April" +msgstr "अप्रैल" + +msgctxt "abbrev. month" +msgid "May" +msgstr "मई" + +msgctxt "abbrev. month" +msgid "June" +msgstr "जून" + +msgctxt "abbrev. month" +msgid "July" +msgstr "जुलाई" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "अग." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "सितम्बर." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "अक्टूबर" + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "नवम्बर." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "दिसम्बर" + +msgctxt "alt. month" +msgid "January" +msgstr "जनवरी" + +msgctxt "alt. month" +msgid "February" +msgstr "फरवरी" + +msgctxt "alt. month" +msgid "March" +msgstr "मार्च" + +msgctxt "alt. month" +msgid "April" +msgstr "अप्रैल" + +msgctxt "alt. month" +msgid "May" +msgstr "मई" + +msgctxt "alt. month" +msgid "June" +msgstr "जून" + +msgctxt "alt. month" +msgid "July" +msgstr "जुलाई" + +msgctxt "alt. month" +msgid "August" +msgstr "अगस्त" + +msgctxt "alt. month" +msgid "September" +msgstr "सितंबर" + +msgctxt "alt. month" +msgid "October" +msgstr "अक्टूबर" + +msgctxt "alt. month" +msgid "November" +msgstr "नवंबर" + +msgctxt "alt. month" +msgid "December" +msgstr "दिसंबर" + +msgid "This is not a valid IPv6 address." +msgstr "" + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s..." +msgstr "%(truncated_text)s..." + +msgid "or" +msgstr "अथवा" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" + +msgid "0 minutes" +msgstr "" + +msgid "Forbidden" +msgstr "" + +msgid "CSRF verification failed. Request aborted." +msgstr "" + +msgid "" +"You are seeing this message because this HTTPS site requires a 'Referer " +"header' to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable 'Referer' headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for 'same-" +"origin' requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the 'Referrer-Policy: no-referrer' header, please remove them. The " +"CSRF protection requires the 'Referer' header to do strict referer checking. " +"If you're concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for 'same-origin' requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "" + +msgid "No year specified" +msgstr "कोई साल निर्दिष्ट नहीं किया गया " + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "कोई महीने निर्दिष्ट नहीं किया गया " + +msgid "No day specified" +msgstr "कोई दिन निर्दिष्ट नहीं किया गया " + +msgid "No week specified" +msgstr "कोई सप्ताह निर्दिष्ट नहीं किया गया " + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "%(verbose_name_plural)s उपलब्ध नहीं है" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"भविष्य %(verbose_name_plural)s उपलब्ध नहीं है क्योंकि %(class_name)s.allow_future " +"गलत है." + +#, python-format +msgid "Invalid date string '%(datestr)s' given format '%(format)s'" +msgstr "तिथि स्ट्रिंग '%(datestr)s' दिया गया प्रारूप '%(format)s' अवैध है " + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr " इस प्रश्न %(verbose_name)s से मेल नहीं खाते है" + +msgid "Page is not 'last', nor can it be converted to an int." +msgstr "पृष्ठ 'अंतिम' नहीं है और न ही यह एक पूर्णांक के लिए परिवर्तित किया जा सकता है." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "अवैध पन्ना (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and '%(class_name)s.allow_empty' is False." +msgstr "रिक्त सूची और '%(class_name)s.allow_empty' गलत है." + +msgid "Directory indexes are not allowed here." +msgstr "निर्देशिका अनुक्रमित की अनुमति यहाँ नहीं है." + +#, python-format +msgid "\"%(path)s\" does not exist" +msgstr "\"%(path)s\" मौजूद नहीं है" + +#, python-format +msgid "Index of %(directory)s" +msgstr "%(directory)s का अनुक्रमणिका" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to's" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/hi/formats.py b/venv/lib/python3.7/site-packages/django/conf/locale/hi/formats.py new file mode 100644 index 0000000..923967a --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/hi/formats.py @@ -0,0 +1,21 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = 'j F Y' +TIME_FORMAT = 'g:i A' +# DATETIME_FORMAT = +# YEAR_MONTH_FORMAT = +MONTH_DAY_FORMAT = 'j F' +SHORT_DATE_FORMAT = 'd-m-Y' +# SHORT_DATETIME_FORMAT = +# FIRST_DAY_OF_WEEK = + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +# DATE_INPUT_FORMATS = +# TIME_INPUT_FORMATS = +# DATETIME_INPUT_FORMATS = +DECIMAL_SEPARATOR = '.' +THOUSAND_SEPARATOR = ',' +# NUMBER_GROUPING = diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/hr/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/conf/locale/hr/LC_MESSAGES/django.po new file mode 100644 index 0000000..084ef35 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/hr/LC_MESSAGES/django.po @@ -0,0 +1,1277 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# aljosa , 2011,2013 +# berislavlopac , 2013 +# Bojan Mihelač , 2012 +# Boni Đukić , 2017 +# Jannis Leidel , 2011 +# Mislav Cimperšak , 2015-2016 +# Nino , 2013 +# senko , 2012 +# Ylodi , 2011 +# zmasek , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-11-15 16:15+0100\n" +"PO-Revision-Date: 2017-11-16 01:13+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Croatian (http://www.transifex.com/django/django/language/" +"hr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hr\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +msgid "Afrikaans" +msgstr "Afrikaans" + +msgid "Arabic" +msgstr "Arapski" + +msgid "Asturian" +msgstr "Asturijski" + +msgid "Azerbaijani" +msgstr "Azarbejdžanac" + +msgid "Bulgarian" +msgstr "Unesite ispravnu IPv4 adresu." + +msgid "Belarusian" +msgstr "Bjeloruski" + +msgid "Bengali" +msgstr "Bengalski" + +msgid "Breton" +msgstr "Bretonski" + +msgid "Bosnian" +msgstr "Bošnjački" + +msgid "Catalan" +msgstr "Katalanski" + +msgid "Czech" +msgstr "Češki" + +msgid "Welsh" +msgstr "Velški" + +msgid "Danish" +msgstr "Danski" + +msgid "German" +msgstr "Njemački" + +msgid "Lower Sorbian" +msgstr "Donjolužičkosrpski" + +msgid "Greek" +msgstr "Grčki" + +msgid "English" +msgstr "Engleski" + +msgid "Australian English" +msgstr "Australski engleski" + +msgid "British English" +msgstr "Britanski engleski" + +msgid "Esperanto" +msgstr "Esperanto" + +msgid "Spanish" +msgstr "Španjolski" + +msgid "Argentinian Spanish" +msgstr "Argentinski španjolski" + +msgid "Colombian Spanish" +msgstr "Kolumbijski španjolski" + +msgid "Mexican Spanish" +msgstr "Meksički španjolski" + +msgid "Nicaraguan Spanish" +msgstr "Nikaragvanski Španjolski" + +msgid "Venezuelan Spanish" +msgstr "Venezuelanski Španjolski" + +msgid "Estonian" +msgstr "Estonski" + +msgid "Basque" +msgstr "Baskijski" + +msgid "Persian" +msgstr "Perzijski" + +msgid "Finnish" +msgstr "Finski" + +msgid "French" +msgstr "Francuski" + +msgid "Frisian" +msgstr "Frizijski" + +msgid "Irish" +msgstr "Irski" + +msgid "Scottish Gaelic" +msgstr "Škotski gaelski" + +msgid "Galician" +msgstr "Galičanski" + +msgid "Hebrew" +msgstr "Hebrejski" + +msgid "Hindi" +msgstr "Hindi" + +msgid "Croatian" +msgstr "Hrvatski" + +msgid "Upper Sorbian" +msgstr "Gornjolužičkosrpski" + +msgid "Hungarian" +msgstr "Mađarski" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "Indonezijski" + +msgid "Ido" +msgstr "Ido" + +msgid "Icelandic" +msgstr "Islandski" + +msgid "Italian" +msgstr "Talijanski" + +msgid "Japanese" +msgstr "Japanski" + +msgid "Georgian" +msgstr "Gruzijski" + +msgid "Kazakh" +msgstr "Kazaški" + +msgid "Khmer" +msgstr "Kambođanski" + +msgid "Kannada" +msgstr "Kannada" + +msgid "Korean" +msgstr "Koreanski" + +msgid "Luxembourgish" +msgstr "Luksemburški" + +msgid "Lithuanian" +msgstr "Litvanski" + +msgid "Latvian" +msgstr "Latvijski" + +msgid "Macedonian" +msgstr "Makedonski" + +msgid "Malayalam" +msgstr "Malayalam" + +msgid "Mongolian" +msgstr "Mongolski" + +msgid "Marathi" +msgstr "Marathi" + +msgid "Burmese" +msgstr "Burmanski" + +msgid "Norwegian Bokmål" +msgstr "Bokmål" + +msgid "Nepali" +msgstr "Nepalski" + +msgid "Dutch" +msgstr "Nizozemski" + +msgid "Norwegian Nynorsk" +msgstr "Norveški Nynorsk" + +msgid "Ossetic" +msgstr "Osetski" + +msgid "Punjabi" +msgstr "Pendžabljanin" + +msgid "Polish" +msgstr "Poljski" + +msgid "Portuguese" +msgstr "Portugalski" + +msgid "Brazilian Portuguese" +msgstr "Brazilski portugalski" + +msgid "Romanian" +msgstr "Rumunjski" + +msgid "Russian" +msgstr "Ruski" + +msgid "Slovak" +msgstr "Slovački" + +msgid "Slovenian" +msgstr "Slovenski" + +msgid "Albanian" +msgstr "Albanski" + +msgid "Serbian" +msgstr "Srpski" + +msgid "Serbian Latin" +msgstr "Latinski srpski" + +msgid "Swedish" +msgstr "Švedski" + +msgid "Swahili" +msgstr "Swahili" + +msgid "Tamil" +msgstr "Tamilski" + +msgid "Telugu" +msgstr "Teluški" + +msgid "Thai" +msgstr "Thai (tajlandski)" + +msgid "Turkish" +msgstr "Turski" + +msgid "Tatar" +msgstr "Tatarski" + +msgid "Udmurt" +msgstr "Udmurtski" + +msgid "Ukrainian" +msgstr "Ukrajinski" + +msgid "Urdu" +msgstr "Urdu" + +msgid "Vietnamese" +msgstr "Vijetnamski" + +msgid "Simplified Chinese" +msgstr "Pojednostavljeni kineski" + +msgid "Traditional Chinese" +msgstr "Tradicionalni kineski" + +msgid "Messages" +msgstr "Poruke" + +msgid "Site Maps" +msgstr "Mape stranica" + +msgid "Static Files" +msgstr "Statične datoteke" + +msgid "Syndication" +msgstr "" + +msgid "That page number is not an integer" +msgstr "Broj stranice nije cijeli broj" + +msgid "That page number is less than 1" +msgstr "Broj stranice je manji od 1" + +msgid "That page contains no results" +msgstr "Stranica ne sadrži rezultate" + +msgid "Enter a valid value." +msgstr "Unesite ispravnu vrijednost." + +msgid "Enter a valid URL." +msgstr "Unesite ispravan URL." + +msgid "Enter a valid integer." +msgstr "Unesite vrijednost u obliku cijelog broja." + +msgid "Enter a valid email address." +msgstr "Unesite ispravnu e-mail adresu." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Unesite ispravan 'slug' koji se sastoji samo od slova, brojeva, povlaka ili " +"crtica." + +msgid "" +"Enter a valid 'slug' consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Unesite ispravan 'slug' koji se sastoji samo od Unicode slova, brojeva, " +"povlaka ili crtica." + +msgid "Enter a valid IPv4 address." +msgstr "Unesite ispravnu IPv4 adresu." + +msgid "Enter a valid IPv6 address." +msgstr "Unesite ispravnu IPv6 adresu." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Unesite ispravnu IPv4 ili IPv6 adresu." + +msgid "Enter only digits separated by commas." +msgstr "Unesite samo brojeve razdvojene zarezom." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Osigurajte da ova vrijednost ima %(limit_value)s (trenutno je " +"%(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Osigurajte da je ova vrijednost manja ili jednaka %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Osigurajte da je ova vrijednost veća ili jednaka %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Osigurajte da ova vrijednost ima najmanje %(limit_value)d znak (trenutno ima " +"%(show_value)d)." +msgstr[1] "" +"Osigurajte da ova vrijednost ima najmanje %(limit_value)d znakova (trenutno " +"ima %(show_value)d)." +msgstr[2] "" +"Osigurajte da ova vrijednost ima najmanje %(limit_value)d znakova (trenutno " +"ima %(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Osigurajte da ova vrijednost ima najviše %(limit_value)d znak (trenutno ima " +"%(show_value)d)." +msgstr[1] "" +"Osigurajte da ova vrijednost ima najviše %(limit_value)d znakova (trenutno " +"ima %(show_value)d)." +msgstr[2] "" +"Osigurajte da ova vrijednost ima najviše %(limit_value)d znakova (trenutno " +"ima %(show_value)d)." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Osigurajte da nema više od ukupno %(max)s numeričkog znaka." +msgstr[1] "Osigurajte da nema više od ukupno %(max)s numerička znaka." +msgstr[2] "Osigurajte da nema više od ukupno %(max)s numeričkih znakova." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Osigurajte da nema više od ukupno %(max)s decimalnog mjesta." +msgstr[1] "Osigurajte da nema više od ukupno %(max)s decimalna mjesta." +msgstr[2] "Osigurajte da nema više od ukupno %(max)s decimalnih mjesta." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"Osigurajte da nema više od ukupno %(max)s numberičkog znaka prije decimalne " +"točke." +msgstr[1] "" +"Osigurajte da nema više od ukupno %(max)s numberička znaka prije decimalne " +"točke." +msgstr[2] "" +"Osigurajte da nema više od ukupno %(max)s numberičkih znakova prije " +"decimalne točke." + +#, python-format +msgid "" +"File extension '%(extension)s' is not allowed. Allowed extensions are: " +"'%(allowed_extensions)s'." +msgstr "" +"Ekstenzija datoteke '%(extension)s' nije dopuštena. Dopuštene ekstenzije su: " +"'%(allowed_extensions)s'." + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "i" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s sa navedenim %(field_labels)s već postoji." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Vrijednost %(value)r nije jedna od raspoloživih opcija." + +msgid "This field cannot be null." +msgstr "Ovo polje ne može biti null." + +msgid "This field cannot be blank." +msgstr "Ovo polje ne može biti prazno." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s sa navedenim %(field_label)s već postoji." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s mora biti jedinstven pojam za %(date_field_label)s " +"%(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Polje tipa: %(field_type)s" + +msgid "Integer" +msgstr "Cijeli broj" + +#, python-format +msgid "'%(value)s' value must be an integer." +msgstr "'%(value)s' vrijednost mora biti cijeli broj." + +msgid "Big (8 byte) integer" +msgstr "Big (8 byte) integer" + +#, python-format +msgid "'%(value)s' value must be either True or False." +msgstr "'%(value)s' vrijednost treba biti ili \"True\" ili \"False\"." + +msgid "Boolean (Either True or False)" +msgstr "Boolean (True ili False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Slova (do %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Cijeli brojevi odvojeni zarezom" + +#, python-format +msgid "" +"'%(value)s' value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"'%(value)s' vrijednost je neispravno formatiran datum. Treba biti u YYYY-MM-" +"DD formatu." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"'%(value)s' vrijednost ima ispravan format (YYYY-MM-DD) ali je nevaljan " +"datum." + +msgid "Date (without time)" +msgstr "Datum (bez vremena/sati)" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"'%(value)s' vrijednost je neispravnog formata. Vrijednost mora biti u YYYY-" +"MM-DD HH:MM[:ss[.uuuuuu]][TZ] formatu." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"'%(value)s' vrijednost je u točnom formatu (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]), ali je datum/vrijeme neispravno." + +msgid "Date (with time)" +msgstr "Datum (sa vremenom/satima)" + +#, python-format +msgid "'%(value)s' value must be a decimal number." +msgstr "'%(value)s' vrijednost mora biti decimalni broj." + +msgid "Decimal number" +msgstr "Decimalni broj" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in [DD] [HH:[MM:]]ss[." +"uuuuuu] format." +msgstr "" +"'%(value)s' vrijednost je neispravno formatirana. Treba biti u [DD] [HH:" +"[MM:]]ss[.uuuuuu] formatu." + +msgid "Duration" +msgstr "Trajanje" + +msgid "Email address" +msgstr "E-mail adresa" + +msgid "File path" +msgstr "Put do datoteke" + +#, python-format +msgid "'%(value)s' value must be a float." +msgstr "'%(value)s' vrijednost mora biti broj s pomičnim zarezom." + +msgid "Floating point number" +msgstr "Broj s pomičnim zarezom (floating point number)" + +msgid "IPv4 address" +msgstr "IPv4 adresa" + +msgid "IP address" +msgstr "IP adresa" + +#, python-format +msgid "'%(value)s' value must be either None, True or False." +msgstr "'%(value)s' vrijednost mora biti \"None\", \"True\" ili \"False\"." + +msgid "Boolean (Either True, False or None)" +msgstr "Boolean (True, False ili None)" + +msgid "Positive integer" +msgstr "Pozitivan cijeli broj" + +msgid "Positive small integer" +msgstr "Pozitivan mali cijeli broj" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "'Slug' (do %(max_length)s)" + +msgid "Small integer" +msgstr "Mali broj" + +msgid "Text" +msgstr "Tekst" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"'%(value)s' vrijednost je neispravnog formata. Vrijednost mora biti u HH:MM[:" +"ss[.uuuuuu]] formatu." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"'%(value)s' vrijednost je u točnom formatu (HH:MM[:ss[.uuuuuu]]), ali je " +"datum/vrijeme neispravno." + +msgid "Time" +msgstr "Vrijeme" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Binarni podaci" + +#, python-format +msgid "'%(value)s' is not a valid UUID." +msgstr "'%(value)s' nije ispravan UUID." + +msgid "File" +msgstr "Datoteka" + +msgid "Image" +msgstr "Slika" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "%(model)s instanca sa %(field)s %(value)r ne postoji." + +msgid "Foreign Key (type determined by related field)" +msgstr "Foreign Key (type determined by related field)" + +msgid "One-to-one relationship" +msgstr "One-to-one relationship" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "%(from)s-%(to)s veza" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "%(from)s-%(to)s veze" + +msgid "Many-to-many relationship" +msgstr "Many-to-many relationship" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Unos za ovo polje je obavezan." + +msgid "Enter a whole number." +msgstr "Unesite cijeli broj." + +msgid "Enter a number." +msgstr "Unesite broj." + +msgid "Enter a valid date." +msgstr "Unesite ispravan datum." + +msgid "Enter a valid time." +msgstr "Unesite ispravno vrijeme." + +msgid "Enter a valid date/time." +msgstr "Unesite ispravan datum/vrijeme." + +msgid "Enter a valid duration." +msgstr "Unesite ispravno trajanje." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Datoteka nije poslana. Provjerite 'encoding type' forme." + +msgid "No file was submitted." +msgstr "Datoteka nije poslana." + +msgid "The submitted file is empty." +msgstr "Poslana datoteka je prazna." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Osigurajte da naziv datoteke ima najviše %(max)d znak (ima %(length)d)." +msgstr[1] "" +"Osigurajte da naziv datoteke ima najviše %(max)d znakova (ima %(length)d)." +msgstr[2] "" +"Osigurajte da naziv datoteke ima najviše %(max)d znakova (ima %(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Molimo Vas da pošaljete ili datoteku ili označite izbor, a ne oboje." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Upload-ajte ispravnu sliku. Datoteka koju ste upload-ali ili nije slika ili " +"je oštečena." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Odaberite iz ponuđenog. %(value)s nije ponuđen kao opcija." + +msgid "Enter a list of values." +msgstr "Unesite listu vrijednosti." + +msgid "Enter a complete value." +msgstr "Unesite kompletnu vrijednost." + +msgid "Enter a valid UUID." +msgstr "Unesite ispravan UUID." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Skriveno polje %(name)s) %(error)s" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "ManagementForm podaci nedostaju ili su promijenjeni" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "Molimo unesite %d obrazac." +msgstr[1] "Molimo unesite %d ili manje obrazaca." +msgstr[2] "Molimo unesite %d ili manje obrazaca." + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "Molimo unesite %d ili više obrazaca." +msgstr[1] "Molimo unesite %d ili više obrazaca." +msgstr[2] "Molimo unesite %d ili više obrazaca." + +msgid "Order" +msgstr "Redoslijed:" + +msgid "Delete" +msgstr "Izbriši" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Ispravite duplicirane podatke za %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Molimo ispravite duplicirane podatke za %(field)s, koji moraju biti " +"jedinstveni." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Molimo ispravite duplicirane podatke za %(field_name)s koji moraju biti " +"jedinstveni za %(lookup)s u %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Molimo ispravite duplicirane vrijednosti ispod." + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Izaberite ispravnu opciju. Ta opcija nije jedna od dostupnih opcija." + +#, python-format +msgid "\"%(pk)s\" is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn't be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s ne može biti interpretirano u vremenskoj zoni " +"%(current_timezone)s; možda je dvosmisleno ili ne postoji." + +msgid "Clear" +msgstr "Isprazni" + +msgid "Currently" +msgstr "Trenutno" + +msgid "Change" +msgstr "Promijeni" + +msgid "Unknown" +msgstr "Nepoznat pojam" + +msgid "Yes" +msgstr "Da" + +msgid "No" +msgstr "Ne" + +msgid "yes,no,maybe" +msgstr "da,ne,možda" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d byte" +msgstr[1] "%(size)d byte-a" +msgstr[2] "%(size)d byte-a" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "popodne" + +msgid "a.m." +msgstr "ujutro" + +msgid "PM" +msgstr "popodne" + +msgid "AM" +msgstr "ujutro" + +msgid "midnight" +msgstr "ponoć" + +msgid "noon" +msgstr "podne" + +msgid "Monday" +msgstr "Ponedjeljak" + +msgid "Tuesday" +msgstr "Utorak" + +msgid "Wednesday" +msgstr "Srijeda" + +msgid "Thursday" +msgstr "Četvrtak" + +msgid "Friday" +msgstr "Petak" + +msgid "Saturday" +msgstr "Subota" + +msgid "Sunday" +msgstr "Nedjelja" + +msgid "Mon" +msgstr "Pon" + +msgid "Tue" +msgstr "Uto" + +msgid "Wed" +msgstr "Sri" + +msgid "Thu" +msgstr "Čet" + +msgid "Fri" +msgstr "Pet" + +msgid "Sat" +msgstr "Sub" + +msgid "Sun" +msgstr "Ned" + +msgid "January" +msgstr "Siječanj" + +msgid "February" +msgstr "Veljača" + +msgid "March" +msgstr "Ožujak" + +msgid "April" +msgstr "Travanj" + +msgid "May" +msgstr "Svibanj" + +msgid "June" +msgstr "Lipanj" + +msgid "July" +msgstr "Srpanj" + +msgid "August" +msgstr "Kolovoz" + +msgid "September" +msgstr "Rujan" + +msgid "October" +msgstr "Listopad" + +msgid "November" +msgstr "Studeni" + +msgid "December" +msgstr "Prosinac" + +msgid "jan" +msgstr "sij." + +msgid "feb" +msgstr "velj." + +msgid "mar" +msgstr "ožu." + +msgid "apr" +msgstr "tra." + +msgid "may" +msgstr "svi." + +msgid "jun" +msgstr "lip." + +msgid "jul" +msgstr "srp." + +msgid "aug" +msgstr "kol." + +msgid "sep" +msgstr "ruj." + +msgid "oct" +msgstr "lis." + +msgid "nov" +msgstr "stu." + +msgid "dec" +msgstr "pro." + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Sij." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Velj." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Ožu." + +msgctxt "abbrev. month" +msgid "April" +msgstr "Tra." + +msgctxt "abbrev. month" +msgid "May" +msgstr "Svi." + +msgctxt "abbrev. month" +msgid "June" +msgstr "Lip." + +msgctxt "abbrev. month" +msgid "July" +msgstr "Srp." + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Kol." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Ruj." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Lis." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Stu." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Pro." + +msgctxt "alt. month" +msgid "January" +msgstr "siječnja" + +msgctxt "alt. month" +msgid "February" +msgstr "veljače" + +msgctxt "alt. month" +msgid "March" +msgstr "ožujka" + +msgctxt "alt. month" +msgid "April" +msgstr "travnja" + +msgctxt "alt. month" +msgid "May" +msgstr "svibnja" + +msgctxt "alt. month" +msgid "June" +msgstr "lipnja" + +msgctxt "alt. month" +msgid "July" +msgstr "srpnja" + +msgctxt "alt. month" +msgid "August" +msgstr "kolovoza" + +msgctxt "alt. month" +msgid "September" +msgstr "rujna" + +msgctxt "alt. month" +msgid "October" +msgstr "listopada" + +msgctxt "alt. month" +msgid "November" +msgstr "studenoga" + +msgctxt "alt. month" +msgid "December" +msgstr "prosinca" + +msgid "This is not a valid IPv6 address." +msgstr "To nije ispravna IPv6 adresa." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s..." +msgstr "%(truncated_text)s..." + +msgid "or" +msgstr "ili" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr "," + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d godina" +msgstr[1] "%d godina" +msgstr[2] "%d godina" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d mjesec" +msgstr[1] "%d mjeseci" +msgstr[2] "%d mjeseci" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d tjedan" +msgstr[1] "%d tjedna" +msgstr[2] "%d tjedana" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d dana" +msgstr[1] "%d dana" +msgstr[2] "%d dana" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d sat" +msgstr[1] "%d sati" +msgstr[2] "%d sati" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minutu" +msgstr[1] "%d minute" +msgstr[2] "%d minuta" + +msgid "0 minutes" +msgstr "0 minuta" + +msgid "Forbidden" +msgstr "Zabranjeno" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF verifikacija nije uspjela. Zahtjev je prekinut." + +msgid "" +"You are seeing this message because this HTTPS site requires a 'Referer " +"header' to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Ova poruka je prikazana jer ova HTTPS stranica zahtijeva da 'zaglavlje " +"preporučitelja' bude poslano od strane internetskog preglednika, ali ono " +"nije poslano. Ovo zaglavlje je potrebno iz sigurnosnih razloga, kako bi se " +"osiguralo da vaš internetski preglednik ne bude otet od strane trećih osoba." + +msgid "" +"If you have configured your browser to disable 'Referer' headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for 'same-" +"origin' requests." +msgstr "" +"Ako ste konfigurirali svoj internetski preglednik da onemogući 'zaglavlje " +"preporučitelja', molimo da ga ponovno omogućite barem za ovu stranicu, na " +"svim HTTPS vezama, ili za zahtjeve 'istog podrijetla'." + +msgid "" +"If you are using the tag or " +"including the 'Referrer-Policy: no-referrer' header, please remove them. The " +"CSRF protection requires the 'Referer' header to do strict referer checking. " +"If you're concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Ova poruka vam se prikazuje jer stranica na kojoj se nalazite zahtjeva CSRF " +"kolačić prilikom slanja forme. Navedeni kolačić je obavezan iz sigurnosnih " +"razloga, kako bi se osiguralo da vaš internetski preglednik ne bude otet od " +"strane trećih osoba." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for 'same-origin' requests." +msgstr "" +"Ako ste konfigurirali svoj internetski preglednik da onemogući kolačiće, " +"molimo da ih ponovno omogućite barem za ovu stranicu ili za zahtjeve 'istog " +"podrijetla'." + +msgid "More information is available with DEBUG=True." +msgstr "Dodatne informacije su dostupne sa postavkom DEBUG=True." + +msgid "No year specified" +msgstr "Nije navedena godina" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "Nije naveden mjesec" + +msgid "No day specified" +msgstr "Nije naveden dan" + +msgid "No week specified" +msgstr "Tjedan nije određen" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Nije dostupno: %(verbose_name_plural)s" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"%(verbose_name_plural)s nije dostupno jer je %(class_name)s.allow_future " +"False." + +#, python-format +msgid "Invalid date string '%(datestr)s' given format '%(format)s'" +msgstr "Neispravan datum '%(datestr)s' za format '%(format)s'" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "%(verbose_name)s - pretragom nisu pronađeni rezultati za upit" + +msgid "Page is not 'last', nor can it be converted to an int." +msgstr "Stranica nije 'zadnja', niti se može pretvoriti u cijeli broj." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Nevažeća stranica (%(page_number)s):%(message)s" + +#, python-format +msgid "Empty list and '%(class_name)s.allow_empty' is False." +msgstr "Prazna lista i '%(class_name)s.allow_empty' je False." + +msgid "Directory indexes are not allowed here." +msgstr "Sadržaji direktorija ovdje nisu dozvoljeni." + +#, python-format +msgid "\"%(path)s\" does not exist" +msgstr "\"%(path)s\" ne postoji" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Sadržaj direktorija %(directory)s" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to's" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/hsb/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/conf/locale/hsb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6c80bb57bd88fd1b9fad9126cdd9b59c814534f2 GIT binary patch literal 28550 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, 2012,2014,2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-11-15 16:15+0100\n" +"PO-Revision-Date: 2017-11-16 01:13+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Interlingua (http://www.transifex.com/django/django/language/" +"ia/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ia\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "afrikaans" + +msgid "Arabic" +msgstr "arabe" + +msgid "Asturian" +msgstr "asturiano" + +msgid "Azerbaijani" +msgstr "azeri" + +msgid "Bulgarian" +msgstr "bulgaro" + +msgid "Belarusian" +msgstr "bielorusso" + +msgid "Bengali" +msgstr "bengali" + +msgid "Breton" +msgstr "breton" + +msgid "Bosnian" +msgstr "bosniaco" + +msgid "Catalan" +msgstr "catalano" + +msgid "Czech" +msgstr "tcheco" + +msgid "Welsh" +msgstr "gallese" + +msgid "Danish" +msgstr "danese" + +msgid "German" +msgstr "germano" + +msgid "Lower Sorbian" +msgstr "sorabo inferior" + +msgid "Greek" +msgstr "greco" + +msgid "English" +msgstr "anglese" + +msgid "Australian English" +msgstr "anglese australian" + +msgid "British English" +msgstr "anglese britannic" + +msgid "Esperanto" +msgstr "esperanto" + +msgid "Spanish" +msgstr "espaniol" + +msgid "Argentinian Spanish" +msgstr "espaniol argentin" + +msgid "Colombian Spanish" +msgstr "espaniol colombian" + +msgid "Mexican Spanish" +msgstr "espaniol mexican" + +msgid "Nicaraguan Spanish" +msgstr "espaniol nicaraguan" + +msgid "Venezuelan Spanish" +msgstr "espaniol venzuelan" + +msgid "Estonian" +msgstr "estoniano" + +msgid "Basque" +msgstr "basco" + +msgid "Persian" +msgstr "persiano" + +msgid "Finnish" +msgstr "finnese" + +msgid "French" +msgstr "francese" + +msgid "Frisian" +msgstr "frison" + +msgid "Irish" +msgstr "irlandese" + +msgid "Scottish Gaelic" +msgstr "gaelico scotese" + +msgid "Galician" +msgstr "galiciano" + +msgid "Hebrew" +msgstr "hebreo" + +msgid "Hindi" +msgstr "hindi" + +msgid "Croatian" +msgstr "croato" + +msgid "Upper Sorbian" +msgstr "sorabo superior" + +msgid "Hungarian" +msgstr "hungaro" + +msgid "Interlingua" +msgstr "interlingua" + +msgid "Indonesian" +msgstr "indonesiano" + +msgid "Ido" +msgstr "ido" + +msgid "Icelandic" +msgstr "islandese" + +msgid "Italian" +msgstr "italiano" + +msgid "Japanese" +msgstr "japonese" + +msgid "Georgian" +msgstr "georgiano" + +msgid "Kazakh" +msgstr "kazakh" + +msgid "Khmer" +msgstr "khmer" + +msgid "Kannada" +msgstr "kannada" + +msgid "Korean" +msgstr "coreano" + +msgid "Luxembourgish" +msgstr "luxemburgese" + +msgid "Lithuanian" +msgstr "lituano" + +msgid "Latvian" +msgstr "letton" + +msgid "Macedonian" +msgstr "macedone" + +msgid "Malayalam" +msgstr "malayalam" + +msgid "Mongolian" +msgstr "mongolico" + +msgid "Marathi" +msgstr "marathi" + +msgid "Burmese" +msgstr "burmese" + +msgid "Norwegian Bokmål" +msgstr "norvegianio bokmål" + +msgid "Nepali" +msgstr "nepali" + +msgid "Dutch" +msgstr "hollandese" + +msgid "Norwegian Nynorsk" +msgstr "norvegiano, nynorsk" + +msgid "Ossetic" +msgstr "ossetico" + +msgid "Punjabi" +msgstr "punjabi" + +msgid "Polish" +msgstr "polonese" + +msgid "Portuguese" +msgstr "portugese" + +msgid "Brazilian Portuguese" +msgstr "portugese brasilian" + +msgid "Romanian" +msgstr "romaniano" + +msgid "Russian" +msgstr "russo" + +msgid "Slovak" +msgstr "slovaco" + +msgid "Slovenian" +msgstr "sloveno" + +msgid "Albanian" +msgstr "albanese" + +msgid "Serbian" +msgstr "serbo" + +msgid "Serbian Latin" +msgstr "serbo latin" + +msgid "Swedish" +msgstr "svedese" + +msgid "Swahili" +msgstr "swahili" + +msgid "Tamil" +msgstr "tamil" + +msgid "Telugu" +msgstr "telugu" + +msgid "Thai" +msgstr "thailandese" + +msgid "Turkish" +msgstr "turco" + +msgid "Tatar" +msgstr "tartaro" + +msgid "Udmurt" +msgstr "udmurto" + +msgid "Ukrainian" +msgstr "ukrainiano" + +msgid "Urdu" +msgstr "urdu" + +msgid "Vietnamese" +msgstr "vietnamese" + +msgid "Simplified Chinese" +msgstr "chinese simplificate" + +msgid "Traditional Chinese" +msgstr "chinese traditional" + +msgid "Messages" +msgstr "Messages" + +msgid "Site Maps" +msgstr "Mappas de sito" + +msgid "Static Files" +msgstr "Files static" + +msgid "Syndication" +msgstr "Syndication" + +msgid "That page number is not an integer" +msgstr "" + +msgid "That page number is less than 1" +msgstr "" + +msgid "That page contains no results" +msgstr "" + +msgid "Enter a valid value." +msgstr "Specifica un valor valide." + +msgid "Enter a valid URL." +msgstr "Specifica un URL valide." + +msgid "Enter a valid integer." +msgstr "Specifica un numero integre valide." + +msgid "Enter a valid email address." +msgstr "Specifica un adresse de e-mail valide." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Specifica un denotation valide, consistente de litteras, numeros, tractos de " +"sublineamento o tractos de union." + +msgid "" +"Enter a valid 'slug' consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Specifica un 'slug' valide, consistente de litteras, numeros, tractos de " +"sublineamento o tractos de union in Unicode." + +msgid "Enter a valid IPv4 address." +msgstr "Specifica un adresse IPv4 valide." + +msgid "Enter a valid IPv6 address." +msgstr "Specifica un adresse IPv6 valide." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Specifica un adresse IPv4 o IPv6 valide." + +msgid "Enter only digits separated by commas." +msgstr "Scribe solmente digitos separate per commas." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Assecura te que iste valor es %(limit_value)s (illo es %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Assecura te que iste valor es inferior o equal a %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Assecura te que iste valor es superior o equal a %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Assecura te que iste valor ha al minus %(limit_value)d character (illo ha " +"%(show_value)d)." +msgstr[1] "" +"Assecura te que iste valor ha al minus %(limit_value)d characteres (illo ha " +"%(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Assecura te que iste valor ha al plus %(limit_value)d character (illo ha " +"%(show_value)d)." +msgstr[1] "" +"Assecura te que iste valor ha al plus %(limit_value)d characteres (illo ha " +"%(show_value)d)." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Assecura te que il non ha plus de %(max)s digito in total." +msgstr[1] "Assecura te que il non ha plus de %(max)s digitos in total." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" +"Assecura te que il non ha plus de %(max)s cifra post le comma decimal." +msgstr[1] "" +"Assecura te que il non ha plus de %(max)s cifras post le comma decimal." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"Assecura te que il non ha plus de %(max)s cifra ante le comma decimal." +msgstr[1] "" +"Assecura te que il non ha plus de %(max)s cifras ante le comma decimal." + +#, python-format +msgid "" +"File extension '%(extension)s' is not allowed. Allowed extensions are: " +"'%(allowed_extensions)s'." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "e" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "Jam existe %(model_name)s con iste %(field_labels)s." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Le valor %(value)r non es un option valide." + +msgid "This field cannot be null." +msgstr "Iste campo non pote esser nulle." + +msgid "This field cannot be blank." +msgstr "Iste campo non pote esser vacue." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s con iste %(field_label)s jam existe." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s debe esser unic pro %(lookup_type)s de %(date_field_label)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Campo de typo: %(field_type)s" + +msgid "Integer" +msgstr "Numero integre" + +#, python-format +msgid "'%(value)s' value must be an integer." +msgstr "Le valor '%(value)s' debe esser un numero integre." + +msgid "Big (8 byte) integer" +msgstr "Numero integre grande (8 bytes)" + +#, python-format +msgid "'%(value)s' value must be either True or False." +msgstr "Le valor '%(value)s'' debe esser o True/Ver o False." + +msgid "Boolean (Either True or False)" +msgstr "Booleano (ver o false)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Catena (longitude maxime: %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Numeros integre separate per commas" + +#, python-format +msgid "" +"'%(value)s' value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"Le valor '%(value)s' ha un formato de data invalide. Debe esser in formato " +"AAAA-MM-DD." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"Le valor '%(value)s' ha le formato correcte (AAAA-MM-DD) ma es un data " +"invalide." + +msgid "Date (without time)" +msgstr "Data (sin hora)" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"Le valor '%(value)s' es in un formato invalide. Debe esser in formato AAAA-" +"MM-DD HH:MM[:ss[.uuuuuu]][FH]." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"Le valor '%(value)s' es in le formato correcte (YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][FH]) ma es un data/hora invalide." + +msgid "Date (with time)" +msgstr "Data (con hora)" + +#, python-format +msgid "'%(value)s' value must be a decimal number." +msgstr "Le valor '%(value)s' debe esser un numero decimal." + +msgid "Decimal number" +msgstr "Numero decimal" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in [DD] [HH:[MM:]]ss[." +"uuuuuu] format." +msgstr "" +"Le valor '%(value)s' es in un formato invalide. Debe esser in formato [DD] " +"[HH:[MM:]]ss[.uuuuuu]." + +msgid "Duration" +msgstr "Duration" + +msgid "Email address" +msgstr "Adresse de e-mail" + +msgid "File path" +msgstr "Cammino de file" + +#, python-format +msgid "'%(value)s' value must be a float." +msgstr "Le valor '%(value)s' debe esser un numero a comma flottante." + +msgid "Floating point number" +msgstr "Numero a comma flottante" + +msgid "IPv4 address" +msgstr "Adresse IPv4" + +msgid "IP address" +msgstr "Adresse IP" + +#, python-format +msgid "'%(value)s' value must be either None, True or False." +msgstr "Le valor '%(value)s'' debe esser None/Nulle, True/Ver o False." + +msgid "Boolean (Either True, False or None)" +msgstr "Booleano (ver, false o nulle)" + +msgid "Positive integer" +msgstr "Numero integre positive" + +msgid "Positive small integer" +msgstr "Parve numero integre positive" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Denotation (longitude maxime: %(max_length)s)" + +msgid "Small integer" +msgstr "Parve numero integre" + +msgid "Text" +msgstr "Texto" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"Le valor '%(value)s' es in un formato invalide. Debe esser in formato HH:MM[:" +"ss[.uuuuuu]] ." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"Le valor '%(value)s' es in le formato correcte (HH:MM[:ss[.uuuuuu]]) ma es " +"un hora invalide." + +msgid "Time" +msgstr "Hora" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Datos binari crude" + +#, python-format +msgid "'%(value)s' is not a valid UUID." +msgstr "'%(value)s' non es un UUID valide." + +msgid "File" +msgstr "File" + +msgid "Image" +msgstr "Imagine" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "Le instantia de %(model)s con %(field)s %(value)r non existe." + +msgid "Foreign Key (type determined by related field)" +msgstr "Clave estranier (typo determinate per le campo associate)" + +msgid "One-to-one relationship" +msgstr "Relation un a un" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "Relation %(from)s a %(to)s" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "Relationes %(from)s a %(to)s" + +msgid "Many-to-many relationship" +msgstr "Relation multes a multes" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr "" + +msgid "This field is required." +msgstr "Iste campo es obligatori." + +msgid "Enter a whole number." +msgstr "Specifica un numero integre." + +msgid "Enter a number." +msgstr "Specifica un numero." + +msgid "Enter a valid date." +msgstr "Specifica un data valide." + +msgid "Enter a valid time." +msgstr "Specifica un hora valide." + +msgid "Enter a valid date/time." +msgstr "Specifica un data e hora valide." + +msgid "Enter a valid duration." +msgstr "Specifica un duration valide." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "" +"Nulle file esseva submittite. Verifica le typo de codification in le " +"formulario." + +msgid "No file was submitted." +msgstr "Nulle file esseva submittite." + +msgid "The submitted file is empty." +msgstr "Le file submittite es vacue." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Assecura te que iste valor ha al plus %(max)d character (illo ha %(length)d)." +msgstr[1] "" +"Assecura te que iste valor ha al plus %(max)d characteres (illo ha " +"%(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Per favor o submitte un file o marca le quadrato \"rader\", non ambes." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Per favor incarga un imagine valide. Le file que tu incargava o non esseva " +"un imagine o esseva un imagine corrumpite." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" +"Selige un option valide. %(value)s non es inter le optiones disponibile." + +msgid "Enter a list of values." +msgstr "Scribe un lista de valores." + +msgid "Enter a complete value." +msgstr "Specifica un valor complete." + +msgid "Enter a valid UUID." +msgstr "Specifica un UUID valide." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr "" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Campo celate %(name)s) %(error)s" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "Le datos ManagementForm manca o ha essite manipulate" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "Per favor, submitte %d o minus formularios." +msgstr[1] "Per favor, submitte %d o minus formularios." + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "Per favor, submitte %d o plus formularios." +msgstr[1] "Per favor, submitte %d o plus formularios." + +msgid "Order" +msgstr "Ordine" + +msgid "Delete" +msgstr "Deler" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Per favor corrige le datos duplicate pro %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Per favor corrige le datos duplicate pro %(field)s, que debe esser unic." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Per favor corrige le datos duplicate pro %(field_name)s, que debe esser unic " +"pro le %(lookup)s in %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Per favor corrige le sequente valores duplicate." + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" +"Per favor selige un option valide. Iste option non es inter le optiones " +"disponibile." + +#, python-format +msgid "\"%(pk)s\" is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn't be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s non poteva esser interpretate in le fuso horari " +"%(current_timezone)s; illo pote esser ambigue o illo pote non exister." + +msgid "Clear" +msgstr "Rader" + +msgid "Currently" +msgstr "Actualmente" + +msgid "Change" +msgstr "Cambiar" + +msgid "Unknown" +msgstr "Incognite" + +msgid "Yes" +msgstr "Si" + +msgid "No" +msgstr "No" + +msgid "yes,no,maybe" +msgstr "si,no,forsan" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d byte" +msgstr[1] "%(size)d bytes" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "pm." + +msgid "a.m." +msgstr "am." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "medienocte" + +msgid "noon" +msgstr "mediedie" + +msgid "Monday" +msgstr "lunedi" + +msgid "Tuesday" +msgstr "martedi" + +msgid "Wednesday" +msgstr "mercuridi" + +msgid "Thursday" +msgstr "jovedi" + +msgid "Friday" +msgstr "venerdi" + +msgid "Saturday" +msgstr "sabbato" + +msgid "Sunday" +msgstr "dominica" + +msgid "Mon" +msgstr "lun" + +msgid "Tue" +msgstr "mar" + +msgid "Wed" +msgstr "mer" + +msgid "Thu" +msgstr "jov" + +msgid "Fri" +msgstr "ven" + +msgid "Sat" +msgstr "sab" + +msgid "Sun" +msgstr "dom" + +msgid "January" +msgstr "januario" + +msgid "February" +msgstr "februario" + +msgid "March" +msgstr "martio" + +msgid "April" +msgstr "april" + +msgid "May" +msgstr "maio" + +msgid "June" +msgstr "junio" + +msgid "July" +msgstr "julio" + +msgid "August" +msgstr "augusto" + +msgid "September" +msgstr "septembre" + +msgid "October" +msgstr "octobre" + +msgid "November" +msgstr "novembre" + +msgid "December" +msgstr "decembre" + +msgid "jan" +msgstr "jan" + +msgid "feb" +msgstr "feb" + +msgid "mar" +msgstr "mar" + +msgid "apr" +msgstr "apr" + +msgid "may" +msgstr "mai" + +msgid "jun" +msgstr "jun" + +msgid "jul" +msgstr "jul" + +msgid "aug" +msgstr "aug" + +msgid "sep" +msgstr "sep" + +msgid "oct" +msgstr "oct" + +msgid "nov" +msgstr "nov" + +msgid "dec" +msgstr "dec" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Jan." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Feb." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Mar." + +msgctxt "abbrev. month" +msgid "April" +msgstr "April" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Maio" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Junio" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Julio" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Aug." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Sept." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Oct." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Nov." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Dec." + +msgctxt "alt. month" +msgid "January" +msgstr "Januario" + +msgctxt "alt. month" +msgid "February" +msgstr "Februario" + +msgctxt "alt. month" +msgid "March" +msgstr "Martio" + +msgctxt "alt. month" +msgid "April" +msgstr "April" + +msgctxt "alt. month" +msgid "May" +msgstr "Maio" + +msgctxt "alt. month" +msgid "June" +msgstr "Junio" + +msgctxt "alt. month" +msgid "July" +msgstr "Julio" + +msgctxt "alt. month" +msgid "August" +msgstr "Augusto" + +msgctxt "alt. month" +msgid "September" +msgstr "Septembre" + +msgctxt "alt. month" +msgid "October" +msgstr "Octobre" + +msgctxt "alt. month" +msgid "November" +msgstr "Novembre" + +msgctxt "alt. month" +msgid "December" +msgstr "Decembre" + +msgid "This is not a valid IPv6 address." +msgstr "Isto non es un adresse IPv6 valide." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s..." +msgstr "%(truncated_text)s..." + +msgid "or" +msgstr "o" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d anno" +msgstr[1] "%d annos" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d mense" +msgstr[1] "%d menses" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d septimana" +msgstr[1] "%d septimanas" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d die" +msgstr[1] "%d dies" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d horas" +msgstr[1] "%d horas" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minuta" +msgstr[1] "%d minutas" + +msgid "0 minutes" +msgstr "0 minutas" + +msgid "Forbidden" +msgstr "Prohibite" + +msgid "CSRF verification failed. Request aborted." +msgstr "Verification CSRF fallite. Requesta abortate." + +msgid "" +"You are seeing this message because this HTTPS site requires a 'Referer " +"header' to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Tu vide iste message perque iste sito HTTPS require que un capite 'Referer' " +"sia inviate per tu navigator Web, ma nulle tal capite esseva inviate. Iste " +"capite es requirite pro motivos de securitate, pro assecurar que tu " +"navigator non es sequestrate per tertie personas." + +msgid "" +"If you have configured your browser to disable 'Referer' headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for 'same-" +"origin' requests." +msgstr "" +"Si tu ha disactivate le invio de capites 'Referer' in tu navigator, per " +"favor re-activa isto, al minus pro iste sito, o pro connexiones HTTPS, o pro " +"requestas del 'mesme origine'." + +msgid "" +"If you are using the tag or " +"including the 'Referrer-Policy: no-referrer' header, please remove them. The " +"CSRF protection requires the 'Referer' header to do strict referer checking. " +"If you're concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Tu vide iste message perque iste sito require un cookie CSRF durante le " +"submission de formularios. Iste cookie es requirite pro motivos de " +"securitate, pro assecurar que tu navigator non es sequestrate per tertie " +"personas." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for 'same-origin' requests." +msgstr "" +"Si tu ha disactivate le cookies in tu navigator, per favor re-activa los, al " +"minus pro iste sito, o pro requestas del 'mesme origine'." + +msgid "More information is available with DEBUG=True." +msgstr "Plus information es disponibile con DEBUG=True." + +msgid "No year specified" +msgstr "Nulle anno specificate" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "Nulle mense specificate" + +msgid "No day specified" +msgstr "Nulle die specificate" + +msgid "No week specified" +msgstr "Nulle septimana specificate" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Il non ha %(verbose_name_plural)s disponibile" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"In le futuro, %(verbose_name_plural)s non essera disponibile perque " +"%(class_name)s.allow_future es False." + +#, python-format +msgid "Invalid date string '%(datestr)s' given format '%(format)s'" +msgstr "Le data '%(datestr)s' es invalide secundo le formato '%(format)s'" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Nulle %(verbose_name)s trovate que corresponde al consulta" + +msgid "Page is not 'last', nor can it be converted to an int." +msgstr "Pagina non es 'last', ni pote esser convertite in un numero integre." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Pagina invalide (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and '%(class_name)s.allow_empty' is False." +msgstr "Le lista es vacue e '%(class_name)s.allow_empty' es False." + +msgid "Directory indexes are not allowed here." +msgstr "Le indices de directorio non es permittite hic." + +#, python-format +msgid "\"%(path)s\" does not exist" +msgstr "\"%(path)s\" non existe" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Indice de %(directory)s" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to's" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/id/__init__.py b/venv/lib/python3.7/site-packages/django/conf/locale/id/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/id/formats.py b/venv/lib/python3.7/site-packages/django/conf/locale/id/formats.py new file mode 100644 index 0000000..1458230 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/id/formats.py @@ -0,0 +1,49 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = 'j N Y' +DATETIME_FORMAT = "j N Y, G.i" +TIME_FORMAT = 'G.i' +YEAR_MONTH_FORMAT = 'F Y' +MONTH_DAY_FORMAT = 'j F' +SHORT_DATE_FORMAT = 'd-m-Y' +SHORT_DATETIME_FORMAT = 'd-m-Y G.i' +FIRST_DAY_OF_WEEK = 1 # Monday + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +DATE_INPUT_FORMATS = [ + '%d-%m-%y', '%d/%m/%y', # '25-10-09', 25/10/09' + '%d-%m-%Y', '%d/%m/%Y', # '25-10-2009', 25/10/2009' + '%d %b %Y', # '25 Oct 2006', + '%d %B %Y', # '25 October 2006' +] + +TIME_INPUT_FORMATS = [ + '%H.%M.%S', # '14.30.59' + '%H.%M', # '14.30' +] + +DATETIME_INPUT_FORMATS = [ + '%d-%m-%Y %H.%M.%S', # '25-10-2009 14.30.59' + '%d-%m-%Y %H.%M.%S.%f', # '25-10-2009 14.30.59.000200' + '%d-%m-%Y %H.%M', # '25-10-2009 14.30' + '%d-%m-%Y', # '25-10-2009' + '%d-%m-%y %H.%M.%S', # '25-10-09' 14.30.59' + '%d-%m-%y %H.%M.%S.%f', # '25-10-09' 14.30.59.000200' + '%d-%m-%y %H.%M', # '25-10-09' 14.30' + '%d-%m-%y', # '25-10-09'' + '%m/%d/%y %H.%M.%S', # '10/25/06 14.30.59' + '%m/%d/%y %H.%M.%S.%f', # '10/25/06 14.30.59.000200' + '%m/%d/%y %H.%M', # '10/25/06 14.30' + '%m/%d/%y', # '10/25/06' + '%m/%d/%Y %H.%M.%S', # '25/10/2009 14.30.59' + '%m/%d/%Y %H.%M.%S.%f', # '25/10/2009 14.30.59.000200' + '%m/%d/%Y %H.%M', # '25/10/2009 14.30' + '%m/%d/%Y', # '10/25/2009' +] + +DECIMAL_SEPARATOR = ',' +THOUSAND_SEPARATOR = '.' +NUMBER_GROUPING = 3 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/io/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/conf/locale/io/LC_MESSAGES/django.po new file mode 100644 index 0000000..3efe6fd --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/io/LC_MESSAGES/django.po @@ -0,0 +1,1206 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Viko Bartero , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-11-15 16:15+0100\n" +"PO-Revision-Date: 2017-11-16 01:13+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Ido (http://www.transifex.com/django/django/language/io/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: io\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "Afrikaans" + +msgid "Arabic" +msgstr "العربية" + +msgid "Asturian" +msgstr "" + +msgid "Azerbaijani" +msgstr "Azərbaycanca" + +msgid "Bulgarian" +msgstr "български" + +msgid "Belarusian" +msgstr "беларуская" + +msgid "Bengali" +msgstr "বাংলা" + +msgid "Breton" +msgstr "Brezhoneg" + +msgid "Bosnian" +msgstr "босански" + +msgid "Catalan" +msgstr "Català" + +msgid "Czech" +msgstr "čeština" + +msgid "Welsh" +msgstr "Cymraeg" + +msgid "Danish" +msgstr "dansk" + +msgid "German" +msgstr "Deutsch" + +msgid "Lower Sorbian" +msgstr "" + +msgid "Greek" +msgstr "Ελληνικά" + +msgid "English" +msgstr "English" + +msgid "Australian English" +msgstr "" + +msgid "British English" +msgstr "British English" + +msgid "Esperanto" +msgstr "Esperanto" + +msgid "Spanish" +msgstr "Español" + +msgid "Argentinian Spanish" +msgstr "Español de Argentina" + +msgid "Colombian Spanish" +msgstr "" + +msgid "Mexican Spanish" +msgstr "Español de México" + +msgid "Nicaraguan Spanish" +msgstr "Español de Nicaragua" + +msgid "Venezuelan Spanish" +msgstr "Español de Venezuela" + +msgid "Estonian" +msgstr "Eesti" + +msgid "Basque" +msgstr "Euskara" + +msgid "Persian" +msgstr "فارسی" + +msgid "Finnish" +msgstr "Suomi" + +msgid "French" +msgstr "Français" + +msgid "Frisian" +msgstr "Frysk" + +msgid "Irish" +msgstr "Gaeilge" + +msgid "Scottish Gaelic" +msgstr "" + +msgid "Galician" +msgstr "Galego" + +msgid "Hebrew" +msgstr "עברית" + +msgid "Hindi" +msgstr "हिन्दी" + +msgid "Croatian" +msgstr "hrvatski" + +msgid "Upper Sorbian" +msgstr "" + +msgid "Hungarian" +msgstr "Magyar" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "Bahasa Indonesia" + +msgid "Ido" +msgstr "" + +msgid "Icelandic" +msgstr "Íslenska" + +msgid "Italian" +msgstr "Italiano" + +msgid "Japanese" +msgstr "日本語" + +msgid "Georgian" +msgstr "ქართული" + +msgid "Kazakh" +msgstr "Қазақша" + +msgid "Khmer" +msgstr "Khmer" + +msgid "Kannada" +msgstr "Kannaḍa" + +msgid "Korean" +msgstr "한국어" + +msgid "Luxembourgish" +msgstr "Lëtzebuergesch" + +msgid "Lithuanian" +msgstr "Lietuvių" + +msgid "Latvian" +msgstr "Latviešu" + +msgid "Macedonian" +msgstr "Македонски" + +msgid "Malayalam" +msgstr "മലയാളം" + +msgid "Mongolian" +msgstr "Монгол" + +msgid "Marathi" +msgstr "" + +msgid "Burmese" +msgstr "Burmese" + +msgid "Norwegian Bokmål" +msgstr "" + +msgid "Nepali" +msgstr "नेपाली" + +msgid "Dutch" +msgstr "Nederlands" + +msgid "Norwegian Nynorsk" +msgstr "Norsk nynorsk" + +msgid "Ossetic" +msgstr "Ossetic" + +msgid "Punjabi" +msgstr "ਪੰਜਾਬੀ" + +msgid "Polish" +msgstr "Polski" + +msgid "Portuguese" +msgstr "Português" + +msgid "Brazilian Portuguese" +msgstr "Português do Brasil" + +msgid "Romanian" +msgstr "Română" + +msgid "Russian" +msgstr "Русский" + +msgid "Slovak" +msgstr "Slovenčina" + +msgid "Slovenian" +msgstr "Slovenščina" + +msgid "Albanian" +msgstr "Shqip" + +msgid "Serbian" +msgstr "Српски / srpski" + +msgid "Serbian Latin" +msgstr "Serbian Latin" + +msgid "Swedish" +msgstr "Svenska" + +msgid "Swahili" +msgstr "Kiswahili" + +msgid "Tamil" +msgstr "தமிழ்" + +msgid "Telugu" +msgstr "Telugu" + +msgid "Thai" +msgstr "ไทย" + +msgid "Turkish" +msgstr "Türkçe" + +msgid "Tatar" +msgstr "Tatar" + +msgid "Udmurt" +msgstr "Удмурт" + +msgid "Ukrainian" +msgstr "Українська" + +msgid "Urdu" +msgstr "اُردُو" + +msgid "Vietnamese" +msgstr "Tiếng Việt" + +msgid "Simplified Chinese" +msgstr "简体中文" + +msgid "Traditional Chinese" +msgstr "繁體中文" + +msgid "Messages" +msgstr "" + +msgid "Site Maps" +msgstr "" + +msgid "Static Files" +msgstr "" + +msgid "Syndication" +msgstr "" + +msgid "That page number is not an integer" +msgstr "" + +msgid "That page number is less than 1" +msgstr "" + +msgid "That page contains no results" +msgstr "" + +msgid "Enter a valid value." +msgstr "Skribez valida datumo." + +msgid "Enter a valid URL." +msgstr "Skribez valida URL." + +msgid "Enter a valid integer." +msgstr "" + +msgid "Enter a valid email address." +msgstr "Skribez valida e-posto adreso." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Skribez valida \"slug\" kompozata de literi, numeri, juntostreki o " +"subjuntostreki." + +msgid "" +"Enter a valid 'slug' consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "Skribez valida IPv4 adreso." + +msgid "Enter a valid IPv6 address." +msgstr "Skribez valida IPv6 adreso." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Skribez valida adreso IPv4 od IPv6." + +msgid "Enter only digits separated by commas." +msgstr "Skribez nur cifri separata per komi." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Verifikez ke ica datumo esas %(limit_value)s (olu esas %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Verifikez ke ica datumo esas minora kam od egala a %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Verifikez ke ica datumo esas majora kam od egala a %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Verifikez ke ica datumo havas %(limit_value)d litero adminime (olu havas " +"%(show_value)d)." +msgstr[1] "" +"Verifikez ke ica datumo havas %(limit_value)d literi adminime (olu havas " +"%(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Verifikez ke ica datumo havas %(limit_value)d litero admaxime (olu havas " +"%(show_value)d)." +msgstr[1] "" +"Verifikez ke ica datumo havas %(limit_value)d literi admaxime (olu havas " +"%(show_value)d)." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"File extension '%(extension)s' is not allowed. Allowed extensions are: " +"'%(allowed_extensions)s'." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "e" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "" + +msgid "This field cannot be null." +msgstr "Ica feldo ne povas esar nula." + +msgid "This field cannot be blank." +msgstr "Ica feldo ne povas esar vakua." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "La %(model_name)s kun ica %(field_label)s ja existas." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Feldo de tipo: %(field_type)s" + +msgid "Integer" +msgstr "Integro" + +#, python-format +msgid "'%(value)s' value must be an integer." +msgstr "" + +msgid "Big (8 byte) integer" +msgstr "Granda (8 byte) integro" + +#, python-format +msgid "'%(value)s' value must be either True or False." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "Booleano (True o False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "String (til %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Integri separata per komi" + +#, python-format +msgid "" +"'%(value)s' value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "Dato (sen horo)" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "Dato (kun horo)" + +#, python-format +msgid "'%(value)s' value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "Decimala numero" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in [DD] [HH:[MM:]]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "" + +msgid "Email address" +msgstr "E-postala adreso" + +msgid "File path" +msgstr "Arkivo voyo" + +#, python-format +msgid "'%(value)s' value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "Glitkomo numero" + +msgid "IPv4 address" +msgstr "IPv4 adreso" + +msgid "IP address" +msgstr "IP adreso" + +#, python-format +msgid "'%(value)s' value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "Booleano (True, False o None)" + +msgid "Positive integer" +msgstr "Positiva integro" + +msgid "Positive small integer" +msgstr "Positiva mikra integro" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug (til %(max_length)s)" + +msgid "Small integer" +msgstr "Mikra integro" + +msgid "Text" +msgstr "Texto" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"'%(value)s' value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "Horo" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Kruda binara datumo" + +#, python-format +msgid "'%(value)s' is not a valid UUID." +msgstr "" + +msgid "File" +msgstr "Arkivo" + +msgid "Image" +msgstr "Imajo" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +msgid "Foreign Key (type determined by related field)" +msgstr "Exterklefo (la tipo esas determinata per la relatata feldo)" + +msgid "One-to-one relationship" +msgstr "Un-ad-un parenteso" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "Multi-a-multi parenteso" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr "" + +msgid "This field is required." +msgstr "Ica feldo esas obligata." + +msgid "Enter a whole number." +msgstr "Skribez kompleta numero" + +msgid "Enter a number." +msgstr "Skribez numero." + +msgid "Enter a valid date." +msgstr "Skribez valida dato." + +msgid "Enter a valid time." +msgstr "Skribez valida horo." + +msgid "Enter a valid date/time." +msgstr "Skribez valida dato/horo." + +msgid "Enter a valid duration." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Nula arkivo sendesis. Verifikez la kodexigo tipo en la formulario." + +msgid "No file was submitted." +msgstr "Nula arkivo sendesis." + +msgid "The submitted file is empty." +msgstr "La sendita arkivo esas vakua." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Verifikez ke ica dosiero nomo havas %(max)d skribsigno admaxime (olu havas " +"%(length)d)." +msgstr[1] "" +"Verifikez ke ica arkivo nomo havas %(max)d skribsigni admaxime (olu havas " +"%(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Sendez arkivo o markizez la vakua markbuxo, ne la du." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Kargez valida imajo. La arkivo qua vu kargis ne esis imajo od esis defektiva." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" +"Selektez valida selekto. %(value)s ne esas un de la disponebla selekti." + +msgid "Enter a list of values." +msgstr "Skribez listo de datumi." + +msgid "Enter a complete value." +msgstr "" + +msgid "Enter a valid UUID." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr "" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Okulta feldo %(name)s) %(error)s" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "" +msgstr[1] "" + +msgid "Order" +msgstr "Ordinar" + +msgid "Delete" +msgstr "Eliminar" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Koretigez duopligata datumi por %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "Korektigez la duopligata datumi por %(field)s, qui mustas esar unika." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Korektigez la duopligata datumi por %(field_name)s qui mustas esar unika por " +"la %(lookup)s en %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Korektigez la duopligata datumi infre." + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" +"Selektez valida selekto. Ita selekto ne esas un de la disponebla selekti." + +#, python-format +msgid "\"%(pk)s\" is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn't be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"La %(datetime)s ne povis esar interpretata en la horala zono " +"%(current_timezone)s; forsan, olu esas ambigua o ne existas." + +msgid "Clear" +msgstr "Vakuigar" + +msgid "Currently" +msgstr "Aktuale" + +msgid "Change" +msgstr "Modifikar" + +msgid "Unknown" +msgstr "Nekonocata" + +msgid "Yes" +msgstr "Yes" + +msgid "No" +msgstr "No" + +msgid "yes,no,maybe" +msgstr "yes,no,forsan" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d byte" +msgstr[1] "%(size)d bytes" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "noktomezo" + +msgid "noon" +msgstr "dimezo" + +msgid "Monday" +msgstr "Lundio" + +msgid "Tuesday" +msgstr "Mardio" + +msgid "Wednesday" +msgstr "Merkurdio" + +msgid "Thursday" +msgstr "Jovdio" + +msgid "Friday" +msgstr "Venerdio" + +msgid "Saturday" +msgstr "Saturdio" + +msgid "Sunday" +msgstr "Sundio" + +msgid "Mon" +msgstr "Lun" + +msgid "Tue" +msgstr "Mar" + +msgid "Wed" +msgstr "Mer" + +msgid "Thu" +msgstr "Jov" + +msgid "Fri" +msgstr "Ven" + +msgid "Sat" +msgstr "Sat" + +msgid "Sun" +msgstr "Sun" + +msgid "January" +msgstr "Januaro" + +msgid "February" +msgstr "Februaro" + +msgid "March" +msgstr "Marto" + +msgid "April" +msgstr "Aprilo" + +msgid "May" +msgstr "Mayo" + +msgid "June" +msgstr "Junio" + +msgid "July" +msgstr "Julio" + +msgid "August" +msgstr "Agosto" + +msgid "September" +msgstr "Septembro" + +msgid "October" +msgstr "Oktobro" + +msgid "November" +msgstr "Novembro" + +msgid "December" +msgstr "Decembro" + +msgid "jan" +msgstr "jan" + +msgid "feb" +msgstr "feb" + +msgid "mar" +msgstr "mar" + +msgid "apr" +msgstr "apr" + +msgid "may" +msgstr "may" + +msgid "jun" +msgstr "jun" + +msgid "jul" +msgstr "jul" + +msgid "aug" +msgstr "ago" + +msgid "sep" +msgstr "sep" + +msgid "oct" +msgstr "okt" + +msgid "nov" +msgstr "nov" + +msgid "dec" +msgstr "dec" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Jan." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Feb." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Marto" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Aprilo" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Mayo" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Junio" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Julio" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Ago." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Sept." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Okt." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Nov." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Dec." + +msgctxt "alt. month" +msgid "January" +msgstr "Januaro" + +msgctxt "alt. month" +msgid "February" +msgstr "Februaro" + +msgctxt "alt. month" +msgid "March" +msgstr "Marto" + +msgctxt "alt. month" +msgid "April" +msgstr "Aprilo" + +msgctxt "alt. month" +msgid "May" +msgstr "Mayo" + +msgctxt "alt. month" +msgid "June" +msgstr "Junio" + +msgctxt "alt. month" +msgid "July" +msgstr "Julio" + +msgctxt "alt. month" +msgid "August" +msgstr "Agosto" + +msgctxt "alt. month" +msgid "September" +msgstr "Septembro" + +msgctxt "alt. month" +msgid "October" +msgstr "Oktobro" + +msgctxt "alt. month" +msgid "November" +msgstr "Novembro" + +msgctxt "alt. month" +msgid "December" +msgstr "Decembro" + +msgid "This is not a valid IPv6 address." +msgstr "" + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s..." +msgstr "%(truncated_text)s..." + +msgid "or" +msgstr "o" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d yaro" +msgstr[1] "%d yari" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d monato" +msgstr[1] "%d monati" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d semano" +msgstr[1] "%d semani" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d dio" +msgstr[1] "%d dii" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d horo" +msgstr[1] "%d hori" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minuto" +msgstr[1] "%d minuti" + +msgid "0 minutes" +msgstr "0 minuti" + +msgid "Forbidden" +msgstr "" + +msgid "CSRF verification failed. Request aborted." +msgstr "" + +msgid "" +"You are seeing this message because this HTTPS site requires a 'Referer " +"header' to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable 'Referer' headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for 'same-" +"origin' requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the 'Referrer-Policy: no-referrer' header, please remove them. The " +"CSRF protection requires the 'Referer' header to do strict referer checking. " +"If you're concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for 'same-origin' requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "" + +msgid "No year specified" +msgstr "La yaro ne specizigesis" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "La monato ne specizigesis" + +msgid "No day specified" +msgstr "La dio ne specizigesis" + +msgid "No week specified" +msgstr "La semano ne specizigesis" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Ne esas %(verbose_name_plural)s disponebla" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"La futura %(verbose_name_plural)s ne esas disponebla pro ke %(class_name)s." +"allow_future esas False." + +#, python-format +msgid "Invalid date string '%(datestr)s' given format '%(format)s'" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "" + +msgid "Page is not 'last', nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "" + +#, python-format +msgid "Empty list and '%(class_name)s.allow_empty' is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "Onu ne permisas direktorio indexi hike." + +#, python-format +msgid "\"%(path)s\" does not exist" +msgstr "\"%(path)s\" ne existas" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Indexi di %(directory)s" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to's" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/is/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/conf/locale/is/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4859aafe2253d5b8f1db80ac77e695d417b9c92b GIT binary patch literal 24466 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 UrVujN+!2RS2cH?)6h_|v1, 2011 +# Hafsteinn Einarsson , 2011-2012 +# Jannis Leidel , 2011 +# Matt R, 2018 +# saevarom , 2011 +# saevarom , 2013,2015 +# Thordur Sigurdsson , 2016-2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-01-18 15:48+0000\n" +"Last-Translator: Thordur Sigurdsson \n" +"Language-Team: Icelandic (http://www.transifex.com/django/django/language/" +"is/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: is\n" +"Plural-Forms: nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);\n" + +msgid "Afrikaans" +msgstr "Afríkanska" + +msgid "Arabic" +msgstr "Arabíska" + +msgid "Asturian" +msgstr "Astúríska" + +msgid "Azerbaijani" +msgstr "Aserbaídsjíska" + +msgid "Bulgarian" +msgstr "Búlgarska" + +msgid "Belarusian" +msgstr "Hvítrússneska" + +msgid "Bengali" +msgstr "Bengalska" + +msgid "Breton" +msgstr "Bretónska" + +msgid "Bosnian" +msgstr "Bosníska" + +msgid "Catalan" +msgstr "Katalónska" + +msgid "Czech" +msgstr "Tékkneska" + +msgid "Welsh" +msgstr "Velska" + +msgid "Danish" +msgstr "Danska" + +msgid "German" +msgstr "Þýska" + +msgid "Lower Sorbian" +msgstr "Neðri sorbíska" + +msgid "Greek" +msgstr "Gríska" + +msgid "English" +msgstr "Enska" + +msgid "Australian English" +msgstr "Áströlsk enska" + +msgid "British English" +msgstr "Bresk enska" + +msgid "Esperanto" +msgstr "Esperanto" + +msgid "Spanish" +msgstr "Spænska" + +msgid "Argentinian Spanish" +msgstr "Argentínsk spænska" + +msgid "Colombian Spanish" +msgstr "Kólumbísk spænska" + +msgid "Mexican Spanish" +msgstr "Mexíkósk spænska" + +msgid "Nicaraguan Spanish" +msgstr "Níkaragva spænska" + +msgid "Venezuelan Spanish" +msgstr "Venesúelsk spænska" + +msgid "Estonian" +msgstr "Eistneska" + +msgid "Basque" +msgstr "Baskneska" + +msgid "Persian" +msgstr "Persneska" + +msgid "Finnish" +msgstr "Finnska" + +msgid "French" +msgstr "Franska" + +msgid "Frisian" +msgstr "Frísneska" + +msgid "Irish" +msgstr "Írska" + +msgid "Scottish Gaelic" +msgstr "Skosk gelíska" + +msgid "Galician" +msgstr "Galíska" + +msgid "Hebrew" +msgstr "Hebreska" + +msgid "Hindi" +msgstr "Hindí" + +msgid "Croatian" +msgstr "Króatíska" + +msgid "Upper Sorbian" +msgstr "Efri sorbíska" + +msgid "Hungarian" +msgstr "Ungverska" + +msgid "Armenian" +msgstr "Armenska" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "Indónesíska" + +msgid "Ido" +msgstr "Ido" + +msgid "Icelandic" +msgstr "Íslenska" + +msgid "Italian" +msgstr "Ítalska" + +msgid "Japanese" +msgstr "Japanska" + +msgid "Georgian" +msgstr "Georgíska" + +msgid "Kabyle" +msgstr "" + +msgid "Kazakh" +msgstr "Kasakska" + +msgid "Khmer" +msgstr "Kmeríska" + +msgid "Kannada" +msgstr "Kannadanska" + +msgid "Korean" +msgstr "Kóreska" + +msgid "Luxembourgish" +msgstr "Lúxemborgíska" + +msgid "Lithuanian" +msgstr "Litháenska" + +msgid "Latvian" +msgstr "Lettneska" + +msgid "Macedonian" +msgstr "Makedónska" + +msgid "Malayalam" +msgstr "Malajalamska" + +msgid "Mongolian" +msgstr "Mongólska" + +msgid "Marathi" +msgstr "Maratí" + +msgid "Burmese" +msgstr "Búrmíska" + +msgid "Norwegian Bokmål" +msgstr "Norskt bókmál" + +msgid "Nepali" +msgstr "Nepalska" + +msgid "Dutch" +msgstr "Hollenska" + +msgid "Norwegian Nynorsk" +msgstr "Nýnorska" + +msgid "Ossetic" +msgstr "Ossetíska" + +msgid "Punjabi" +msgstr "Púndjabíska" + +msgid "Polish" +msgstr "Pólska" + +msgid "Portuguese" +msgstr "Portúgalska" + +msgid "Brazilian Portuguese" +msgstr "Brasilísk portúgalska" + +msgid "Romanian" +msgstr "Rúmenska" + +msgid "Russian" +msgstr "Rússneska" + +msgid "Slovak" +msgstr "Slóvakíska" + +msgid "Slovenian" +msgstr "Slóvenska" + +msgid "Albanian" +msgstr "Albanska" + +msgid "Serbian" +msgstr "Serbneska" + +msgid "Serbian Latin" +msgstr "Serbnesk latína" + +msgid "Swedish" +msgstr "Sænska" + +msgid "Swahili" +msgstr "Svahílí" + +msgid "Tamil" +msgstr "Tamílska" + +msgid "Telugu" +msgstr "Telúgúska" + +msgid "Thai" +msgstr "Tælenska" + +msgid "Turkish" +msgstr "Tyrkneska" + +msgid "Tatar" +msgstr "Tataríska" + +msgid "Udmurt" +msgstr "Údmúrt" + +msgid "Ukrainian" +msgstr "Úkraínska" + +msgid "Urdu" +msgstr "Úrdú" + +msgid "Vietnamese" +msgstr "Víetnamska" + +msgid "Simplified Chinese" +msgstr "Einfölduð kínverska " + +msgid "Traditional Chinese" +msgstr "Hefðbundin kínverska" + +msgid "Messages" +msgstr "Skilaboð" + +msgid "Site Maps" +msgstr "" + +msgid "Static Files" +msgstr "" + +msgid "Syndication" +msgstr "" + +msgid "That page number is not an integer" +msgstr "Þetta síðunúmer er ekki heiltala" + +msgid "That page number is less than 1" +msgstr "Þetta síðunúmer er minna en 1" + +msgid "That page contains no results" +msgstr "Þessi síða hefur engar niðurstöður" + +msgid "Enter a valid value." +msgstr "Sláðu inn gilt gildi." + +msgid "Enter a valid URL." +msgstr "Sláðu inn gilt veffang (URL)." + +msgid "Enter a valid integer." +msgstr "Sláðu inn gilda heiltölu." + +msgid "Enter a valid email address." +msgstr "Sláðu inn gilt netfang." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Settu inn gildan vefslóðartitil sem má innihalda latneska bókstafi, " +"tölustafi, undirstrik og bandstrik." + +msgid "" +"Enter a valid 'slug' consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Settu inn gildan vefslóðartitil sem má innihalda unicode bókstafi, " +"tölustafi, undirstrik og bandstrik." + +msgid "Enter a valid IPv4 address." +msgstr "Sláðu inn gilda IPv4 tölu." + +msgid "Enter a valid IPv6 address." +msgstr "Sláðu inn gilt IPv6 vistfang." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Sláðu inn gilt IPv4 eða IPv6 vistfang." + +msgid "Enter only digits separated by commas." +msgstr "Skrifaðu einungis tölur aðskildar með kommum." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Gakktu úr skugga um að gildi sé %(limit_value)s (það er %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "" +"Gakktu úr skugga um að gildið sé minna en eða jafnt og %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "" +"Gakktu úr skugga um að gildið sé stærra en eða jafnt og %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Gildið má minnst vera %(limit_value)d stafur að lengd (það er %(show_value)d " +"nú)" +msgstr[1] "" +"Gildið má minnst vera %(limit_value)d stafir að lengd (það er %(show_value)d " +"nú)" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Gildið má mest vera %(limit_value)d stafur að lengd (það er %(show_value)d " +"nú)" +msgstr[1] "" +"Gildið má mest vera %(limit_value)d stafir að lengd (það er %(show_value)d " +"nú)" + +msgid "Enter a number." +msgstr "Sláðu inn tölu." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Gildið má ekki hafa fleiri en %(max)s tölu." +msgstr[1] "Gildið má ekki hafa fleiri en %(max)s tölur." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Gildið má ekki hafa meira en %(max)s tugatölustaf (decimal places)." +msgstr[1] "" +"Gildið má ekki hafa meira en %(max)s tugatölustafi (decimal places)." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "Gildið má ekki hafa fleiri en %(max)s tölu fyrir tugabrotskil." +msgstr[1] "Gildið má ekki hafa fleiri en %(max)s tölur fyrir tugabrotskil." + +#, python-format +msgid "" +"File extension '%(extension)s' is not allowed. Allowed extensions are: " +"'%(allowed_extensions)s'." +msgstr "" +"Skrár með endingunni '%(extension)s' eru ekki leyfðar. Leyfilegar endingar " +"eru: '%(allowed_extensions)s'." + +msgid "Null characters are not allowed." +msgstr "Núlltákn eru ekki leyfileg." + +msgid "and" +msgstr "og" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s með þessi %(field_labels)s er nú þegar til." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Gildið %(value)r er ógilt." + +msgid "This field cannot be null." +msgstr "Þessi reitur getur ekki haft tómgildi (null)." + +msgid "This field cannot be blank." +msgstr "Þessi reitur má ekki vera tómur." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s með þetta %(field_label)s er nú þegar til." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s verður að vera einkvæmt fyrir %(date_field_label)s " +"%(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Reitur af gerð: %(field_type)s" + +msgid "Integer" +msgstr "Heiltala" + +#, python-format +msgid "'%(value)s' value must be an integer." +msgstr "Gildi '%(value)s' verður að vera heiltala." + +msgid "Big (8 byte) integer" +msgstr "Stór (8 bæta) heiltala" + +#, python-format +msgid "'%(value)s' value must be either True or False." +msgstr "'%(value)s' verður að vera annaðhvort satt eða ósatt." + +#, python-format +msgid "'%(value)s' value must be either True, False, or None." +msgstr "'%(value)s' verður að vera eitt eftirtalinna: True, False eða None." + +msgid "Boolean (Either True or False)" +msgstr "Boole-gildi (True eða False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Strengur (mest %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Heiltölur aðgreindar með kommum" + +#, python-format +msgid "" +"'%(value)s' value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"'%(value)s' er ógilt dagsetningarsnið. Það verður að vera á sniðinu YYYY-MM-" +"DD." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "'%(value)s' hefur rétt snið (YYYY-MM-DD) en dagsetningin er ógild." + +msgid "Date (without time)" +msgstr "Dagsetning (án tíma)" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"'%(value)s' hefur ógilt snið. Það verður að vera á sniðinu: YYYY-MM-DD HH:" +"MM[:ss[.uuuuuu]][TZ]." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"'%(value)s' hefur rétt snið (YYYY-MM-DD HH:MM [:ss[.uuuuuu]][TZ]) en það er " +"ógild dagsetning/tími." + +msgid "Date (with time)" +msgstr "Dagsetning (með tíma)" + +#, python-format +msgid "'%(value)s' value must be a decimal number." +msgstr "'%(value)s' verður að vera tugatala." + +msgid "Decimal number" +msgstr "Tugatala" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in [DD] [HH:[MM:]]ss[." +"uuuuuu] format." +msgstr "" +"'%(value)s' er á ógildu sniði. Það verður að vera á sniðinu [DD] [HH:" +"[MM:]]ss[.uuuuuu]." + +msgid "Duration" +msgstr "Tímalengd" + +msgid "Email address" +msgstr "Netfang" + +msgid "File path" +msgstr "Skjalaslóð" + +#, python-format +msgid "'%(value)s' value must be a float." +msgstr "'%(value)s' verður að vera fleytitala." + +msgid "Floating point number" +msgstr "Fleytitala (floating point number)" + +msgid "IPv4 address" +msgstr "IPv4 vistfang" + +msgid "IP address" +msgstr "IP tala" + +#, python-format +msgid "'%(value)s' value must be either None, True or False." +msgstr "'%(value)s' verður að vera eitt eftirtalinna: None, True eða False." + +msgid "Boolean (Either True, False or None)" +msgstr "Boole-gildi (True, False eða None)" + +msgid "Positive integer" +msgstr "Jákvæð heiltala" + +msgid "Positive small integer" +msgstr "Jákvæð lítil heiltala" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slögg (allt að %(max_length)s)" + +msgid "Small integer" +msgstr "Lítil heiltala" + +msgid "Text" +msgstr "Texti" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"'%(value)s' er á ógildu sniði. Það verður að vera á sniðinu HH:MM[:ss[." +"uuuuuu]]." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"'%(value)s' er á réttu sniði (HH:MM[:ss[.uuuuuu]]), en það er ógild " +"dagsetning/tími." + +msgid "Time" +msgstr "Tími" + +msgid "URL" +msgstr "Veffang" + +msgid "Raw binary data" +msgstr "Hrá tvíundargögn (binary data)" + +#, python-format +msgid "'%(value)s' is not a valid UUID." +msgstr "'%(value)s' er ekki gilt UUID." + +msgid "Universally unique identifier" +msgstr "" + +msgid "File" +msgstr "Skrá" + +msgid "Image" +msgstr "Mynd" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "%(model)s hlutur með %(field)s %(value)r er ekki til." + +msgid "Foreign Key (type determined by related field)" +msgstr "Ytri lykill (Gerð ákveðin af skyldum reit)" + +msgid "One-to-one relationship" +msgstr "Einn-á-einn samband." + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "%(from)s-%(to)s samband" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "%(from)s-%(to)s sambönd" + +msgid "Many-to-many relationship" +msgstr "Margir-til-margra samband." + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Þennan reit þarf að fylla út." + +msgid "Enter a whole number." +msgstr "Sláðu inn heiltölu." + +msgid "Enter a valid date." +msgstr "Sláðu inn gilda dagsetningu." + +msgid "Enter a valid time." +msgstr "Sláðu inn gilda tímasetningu." + +msgid "Enter a valid date/time." +msgstr "Sláðu inn gilda dagsetningu ásamt tíma." + +msgid "Enter a valid duration." +msgstr "Sláðu inn gilt tímabil." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Fjöldi daga verður að vera á milli {min_days} og {max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Engin skrá var send. Athugaðu kótunartegund á forminu (encoding type)." + +msgid "No file was submitted." +msgstr "Engin skrá var send." + +msgid "The submitted file is empty." +msgstr "Innsend skrá er tóm." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Skráarnafnið má mest vera %(max)d stafur að lengd (það er %(length)d nú)" +msgstr[1] "" +"Skráarnafnið má mest vera %(max)d stafir að lengd (það er %(length)d nú)" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Vinsamlegast sendu annað hvort inn skrá eða merktu í boxið, ekki bæði." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Halaðu upp gildri myndskrá. Skráin sem þú halaðir upp var annað hvort gölluð " +"eða ekki mynd." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" +"Veldu gildan valmöguleika. %(value)s er ekki eitt af gildum valmöguleikum." + +msgid "Enter a list of values." +msgstr "Sláðu inn lista af gildum." + +msgid "Enter a complete value." +msgstr "Sláðu inn heilt gildi." + +msgid "Enter a valid UUID." +msgstr "Sláðu inn gilt UUID." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Falinn reitur %(name)s) %(error)s" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "Gögn fyrir ManagementForm vantar eða hefur verið breytt" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "Vinsamlegast sendu %d eða færri form." +msgstr[1] "Vinsamlegast sendu %d eða færri form." + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "Vinsamlegast sendu %d eða fleiri form." +msgstr[1] "Vinsamlegast sendu %d eða fleiri form." + +msgid "Order" +msgstr "Röð" + +msgid "Delete" +msgstr "Eyða" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Vinsamlegast leiðréttu tvítekin gögn í reit %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Vinsamlegast lagfærðu gögn í reit %(field)s, sem verða að vera einstök." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Vinsamlegast leiðréttu tvítekin gögn í reit %(field_name)s sem verða að vera " +"einstök fyrir %(lookup)s í %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Vinsamlegast lagfærðu tvítöldu gögnin fyrir neðan." + +msgid "The inline value did not match the parent instance." +msgstr "Innra gildið passar ekki við eiganda." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" +"Veldu gildan valmöguleika. Valið virðist ekki vera eitt af gildum " +"valmöguleikum." + +#, python-format +msgid "\"%(pk)s\" is not a valid value." +msgstr "„%(pk)s“ er ekki gilt gildi." + +#, python-format +msgid "" +"%(datetime)s couldn't be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s er ekki hægt að túlka í tímabelti %(current_timezone)s, það " +"getur verið óljóst eða að það er ekki til." + +msgid "Clear" +msgstr "Hreinsa" + +msgid "Currently" +msgstr "Eins og er:" + +msgid "Change" +msgstr "Breyta" + +msgid "Unknown" +msgstr "Óþekkt" + +msgid "Yes" +msgstr "Já" + +msgid "No" +msgstr "Nei" + +msgid "yes,no,maybe" +msgstr "já,nei,kannski" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d bæti" +msgstr[1] "%(size)d bæti" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "eftirmiðdegi" + +msgid "a.m." +msgstr "morgun" + +msgid "PM" +msgstr "Eftirmiðdegi" + +msgid "AM" +msgstr "Morgun" + +msgid "midnight" +msgstr "miðnætti" + +msgid "noon" +msgstr "hádegi" + +msgid "Monday" +msgstr "mánudagur" + +msgid "Tuesday" +msgstr "þriðjudagur" + +msgid "Wednesday" +msgstr "miðvikudagur" + +msgid "Thursday" +msgstr "fimmtudagur" + +msgid "Friday" +msgstr "föstudagur" + +msgid "Saturday" +msgstr "laugardagur" + +msgid "Sunday" +msgstr "sunnudagur" + +msgid "Mon" +msgstr "mán" + +msgid "Tue" +msgstr "þri" + +msgid "Wed" +msgstr "mið" + +msgid "Thu" +msgstr "fim" + +msgid "Fri" +msgstr "fös" + +msgid "Sat" +msgstr "lau" + +msgid "Sun" +msgstr "sun" + +msgid "January" +msgstr "janúar" + +msgid "February" +msgstr "febrúar" + +msgid "March" +msgstr "mars" + +msgid "April" +msgstr "apríl" + +msgid "May" +msgstr "maí" + +msgid "June" +msgstr "júní" + +msgid "July" +msgstr "júlí" + +msgid "August" +msgstr "ágúst" + +msgid "September" +msgstr "september" + +msgid "October" +msgstr "október" + +msgid "November" +msgstr "nóvember" + +msgid "December" +msgstr "desember" + +msgid "jan" +msgstr "jan" + +msgid "feb" +msgstr "feb" + +msgid "mar" +msgstr "mar" + +msgid "apr" +msgstr "apr" + +msgid "may" +msgstr "maí" + +msgid "jun" +msgstr "jún" + +msgid "jul" +msgstr "júl" + +msgid "aug" +msgstr "ágú" + +msgid "sep" +msgstr "sep" + +msgid "oct" +msgstr "okt" + +msgid "nov" +msgstr "nóv" + +msgid "dec" +msgstr "des" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "jan." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "feb." + +msgctxt "abbrev. month" +msgid "March" +msgstr "mars" + +msgctxt "abbrev. month" +msgid "April" +msgstr "apríl" + +msgctxt "abbrev. month" +msgid "May" +msgstr "maí" + +msgctxt "abbrev. month" +msgid "June" +msgstr "júní" + +msgctxt "abbrev. month" +msgid "July" +msgstr "júlí" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "ág." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "sept." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "okt." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "nóv." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "des." + +msgctxt "alt. month" +msgid "January" +msgstr "janúar" + +msgctxt "alt. month" +msgid "February" +msgstr "febrúar" + +msgctxt "alt. month" +msgid "March" +msgstr "mars" + +msgctxt "alt. month" +msgid "April" +msgstr "apríl" + +msgctxt "alt. month" +msgid "May" +msgstr "maí" + +msgctxt "alt. month" +msgid "June" +msgstr "júní" + +msgctxt "alt. month" +msgid "July" +msgstr "júlí" + +msgctxt "alt. month" +msgid "August" +msgstr "ágúst" + +msgctxt "alt. month" +msgid "September" +msgstr "september" + +msgctxt "alt. month" +msgid "October" +msgstr "október" + +msgctxt "alt. month" +msgid "November" +msgstr "nóvember" + +msgctxt "alt. month" +msgid "December" +msgstr "desember" + +msgid "This is not a valid IPv6 address." +msgstr "Þetta er ekki gilt IPv6 vistfang." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "eða" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d ár" +msgstr[1] "%d ár" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d mánuður" +msgstr[1] "%d mánuðir" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d vika" +msgstr[1] "%d vikur" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d dagur" +msgstr[1] "%d dagar" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d klukkustund" +msgstr[1] "%d klukkustundir" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d mínúta" +msgstr[1] "%d mínútur" + +msgid "0 minutes" +msgstr "0 mínútur" + +msgid "Forbidden" +msgstr "" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF auðkenning tókst ekki." + +msgid "" +"You are seeing this message because this HTTPS site requires a 'Referer " +"header' to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Þú ert að fá þessi skilaboð því þetta HTTPS vefsvæði þarfnast að vafrinn " +"þinn sendi ‚Referer‘ haus (e. referer header) sem var ekki sendur. Þessi " +"haus er nauðsynlegur af öryggisástæðum til að ganga úr skugga um að " +"utanaðkomandi aðili sé ekki að senda fyrirspurnir úr vafranum þínum." + +msgid "" +"If you have configured your browser to disable 'Referer' headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for 'same-" +"origin' requests." +msgstr "" +"Ef þú hefur stillt vafrann þinn til að gera ‚Referer‘ hausa óvirka þarftu að " +"virkja þá aftur. Að minnsta kosti fyrir þetta vefsvæði, eða HTTPS tengingar " +"eða ‚same-origin‘ fyrirspurnir." + +msgid "" +"If you are using the tag or " +"including the 'Referrer-Policy: no-referrer' header, please remove them. The " +"CSRF protection requires the 'Referer' header to do strict referer checking. " +"If you're concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Þú ert að fá þessi skilaboð því þetta vefsvæði þarfnast að CSRF kaka (e. " +"cookie) sé send þegar form eru send. Þessi kaka er nauðsynleg af " +"öryggisástæðum til að ganga úr skugga um að utanaðkomandi aðili sé ekki að " +"senda fyrirspurnir úr vafranum þínum." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for 'same-origin' requests." +msgstr "" +"Ef þú hefur stillt vafrann þinn til að gera kökur óvirkar þarftu að virkja " +"þær aftur. Að minnsta kosti fyrir þetta vefsvæði eða ‚same-origin‘ " +"fyrirspurnir." + +msgid "More information is available with DEBUG=True." +msgstr "Meiri upplýsingar fást með DEBUG=True." + +msgid "No year specified" +msgstr "Ekkert ár tilgreint" + +msgid "Date out of range" +msgstr "Dagsetning utan tímabils" + +msgid "No month specified" +msgstr "Enginn mánuður tilgreindur" + +msgid "No day specified" +msgstr "Enginn dagur tilgreindur" + +msgid "No week specified" +msgstr "Engin vika tilgreind" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Ekkert %(verbose_name_plural)s í boði" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Framtíðar %(verbose_name_plural)s ekki í boði því %(class_name)s." +"allow_future er Ósatt." + +#, python-format +msgid "Invalid date string '%(datestr)s' given format '%(format)s'" +msgstr "Ógilt snið dagsetningar \"%(datestr)s\" gefið sniðið \"%(format)s\"" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Ekkert %(verbose_name)s sem uppfyllir skilyrði" + +msgid "Page is not 'last', nor can it be converted to an int." +msgstr "Þetta er hvorki síðasta síða, né er hægt að breyta í heiltölu." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Ógild síða (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and '%(class_name)s.allow_empty' is False." +msgstr "Tómur listi og '%(class_name)s.allow_empty er Ósatt." + +msgid "Directory indexes are not allowed here." +msgstr "Möppulistar eru ekki leyfðir hér." + +#, python-format +msgid "\"%(path)s\" does not exist" +msgstr "\"%(path)s\" er ekki til" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Innihald %(directory)s " + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to's" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/ja/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/conf/locale/ja/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4440f6339ae9b0a8d879be5aeeb744abd6ddf2ec GIT binary patch literal 29182 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, 2016 +# GOTO Hayato , 2019 +# Jannis Leidel , 2011 +# Kentaro Matsuzaki , 2015 +# Masashi SHIBATA , 2017 +# Nikita K , 2019 +# Shinichi Katsumata , 2019 +# Shinya Okano , 2012-2019 +# Tetsuya Morimoto , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-06-07 08:56+0000\n" +"Last-Translator: GOTO Hayato \n" +"Language-Team: Japanese (http://www.transifex.com/django/django/language/" +"ja/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ja\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Afrikaans" +msgstr "アフリカーンス語" + +msgid "Arabic" +msgstr "アラビア語" + +msgid "Asturian" +msgstr "アストゥリアス語" + +msgid "Azerbaijani" +msgstr "アゼルバイジャン語" + +msgid "Bulgarian" +msgstr "ブルガリア語" + +msgid "Belarusian" +msgstr "ベラルーシ語" + +msgid "Bengali" +msgstr "ベンガル語" + +msgid "Breton" +msgstr "ブルトン語" + +msgid "Bosnian" +msgstr "ボスニア語" + +msgid "Catalan" +msgstr "カタロニア語" + +msgid "Czech" +msgstr "チェコ語" + +msgid "Welsh" +msgstr "ウェールズ語" + +msgid "Danish" +msgstr "デンマーク語" + +msgid "German" +msgstr "ドイツ語" + +msgid "Lower Sorbian" +msgstr "低地ソルブ語" + +msgid "Greek" +msgstr "ギリシャ語" + +msgid "English" +msgstr "英語(米国)" + +msgid "Australian English" +msgstr "英語(オーストラリア)" + +msgid "British English" +msgstr "英語(英国)" + +msgid "Esperanto" +msgstr "エスペラント語" + +msgid "Spanish" +msgstr "スペイン語" + +msgid "Argentinian Spanish" +msgstr "アルゼンチンスペイン語" + +msgid "Colombian Spanish" +msgstr "コロンビアスペイン語" + +msgid "Mexican Spanish" +msgstr "メキシコスペイン語" + +msgid "Nicaraguan Spanish" +msgstr "ニカラグアスペイン語" + +msgid "Venezuelan Spanish" +msgstr "ベネズエラスペイン語" + +msgid "Estonian" +msgstr "エストニア語" + +msgid "Basque" +msgstr "バスク語" + +msgid "Persian" +msgstr "ペルシア語" + +msgid "Finnish" +msgstr "フィンランド語" + +msgid "French" +msgstr "フランス語" + +msgid "Frisian" +msgstr "フリジア語" + +msgid "Irish" +msgstr "アイルランド語" + +msgid "Scottish Gaelic" +msgstr "ゲール語(スコットランド)" + +msgid "Galician" +msgstr "ガリシア語" + +msgid "Hebrew" +msgstr "ヘブライ語" + +msgid "Hindi" +msgstr "ヒンディー語" + +msgid "Croatian" +msgstr "クロアチア語" + +msgid "Upper Sorbian" +msgstr "高地ソルブ語" + +msgid "Hungarian" +msgstr "ハンガリー語" + +msgid "Armenian" +msgstr "アルメニア" + +msgid "Interlingua" +msgstr "インターリングア" + +msgid "Indonesian" +msgstr "インドネシア語" + +msgid "Ido" +msgstr "イド語" + +msgid "Icelandic" +msgstr "アイスランド語" + +msgid "Italian" +msgstr "イタリア語" + +msgid "Japanese" +msgstr "日本語" + +msgid "Georgian" +msgstr "グルジア語" + +msgid "Kabyle" +msgstr "カビル語" + +msgid "Kazakh" +msgstr "カザフ語" + +msgid "Khmer" +msgstr "クメール語" + +msgid "Kannada" +msgstr "カンナダ語" + +msgid "Korean" +msgstr "韓国語" + +msgid "Luxembourgish" +msgstr "ルクセンブルグ語" + +msgid "Lithuanian" +msgstr "リトアニア語" + +msgid "Latvian" +msgstr "ラトビア語" + +msgid "Macedonian" +msgstr "マケドニア語" + +msgid "Malayalam" +msgstr "マラヤーラム語" + +msgid "Mongolian" +msgstr "モンゴル語" + +msgid "Marathi" +msgstr "マラーティー語" + +msgid "Burmese" +msgstr "ビルマ語" + +msgid "Norwegian Bokmål" +msgstr "ノルウェーのブークモール" + +msgid "Nepali" +msgstr "ネパール語" + +msgid "Dutch" +msgstr "オランダ語" + +msgid "Norwegian Nynorsk" +msgstr "ノルウェーのニーノシュク" + +msgid "Ossetic" +msgstr "オセット語" + +msgid "Punjabi" +msgstr "パンジャブ語" + +msgid "Polish" +msgstr "ポーランド語" + +msgid "Portuguese" +msgstr "ポルトガル語" + +msgid "Brazilian Portuguese" +msgstr "ブラジルポルトガル語" + +msgid "Romanian" +msgstr "ルーマニア語" + +msgid "Russian" +msgstr "ロシア語" + +msgid "Slovak" +msgstr "スロバキア語" + +msgid "Slovenian" +msgstr "スロヴェニア語" + +msgid "Albanian" +msgstr "アルバニア語" + +msgid "Serbian" +msgstr "セルビア語" + +msgid "Serbian Latin" +msgstr "セルビア語ラテン文字" + +msgid "Swedish" +msgstr "スウェーデン語" + +msgid "Swahili" +msgstr "スワヒリ語" + +msgid "Tamil" +msgstr "タミル語" + +msgid "Telugu" +msgstr "テルグ語" + +msgid "Thai" +msgstr "タイ語" + +msgid "Turkish" +msgstr "トルコ語" + +msgid "Tatar" +msgstr "タタール語" + +msgid "Udmurt" +msgstr "ウドムルト語" + +msgid "Ukrainian" +msgstr "ウクライナ語" + +msgid "Urdu" +msgstr "ウルドゥー語" + +msgid "Vietnamese" +msgstr "ベトナム語" + +msgid "Simplified Chinese" +msgstr "簡体字中国語" + +msgid "Traditional Chinese" +msgstr "繁体字中国語" + +msgid "Messages" +msgstr "メッセージ" + +msgid "Site Maps" +msgstr "サイトマップ" + +msgid "Static Files" +msgstr "静的ファイル" + +msgid "Syndication" +msgstr "シンジケーション" + +msgid "That page number is not an integer" +msgstr "このページ番号は整数ではありません。" + +msgid "That page number is less than 1" +msgstr "ページ番号が 1 よりも小さいです。" + +msgid "That page contains no results" +msgstr "このページには結果が含まれていません。" + +msgid "Enter a valid value." +msgstr "値を正しく入力してください。" + +msgid "Enter a valid URL." +msgstr "URLを正しく入力してください。" + +msgid "Enter a valid integer." +msgstr "整数を正しく入力してください。" + +msgid "Enter a valid email address." +msgstr "有効なメールアドレスを入力してください。" + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens." +msgstr "スラグには半角の英数字、アンダースコア、ハイフン以外は使用できません。" + +msgid "" +"Enter a valid 'slug' consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"ユニコード文字、数字、アンダースコアまたはハイフンで構成された、有効なスラグ" +"を入力してください" + +msgid "Enter a valid IPv4 address." +msgstr "有効なIPアドレス (IPv4) を入力してください。" + +msgid "Enter a valid IPv6 address." +msgstr "IPv6の正しいアドレスを入力してください。" + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "IPv4またはIPv6の正しいアドレスを入力してください。" + +msgid "Enter only digits separated by commas." +msgstr "カンマ区切りの数字だけを入力してください。" + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"この値は %(limit_value)s でなければなりません(実際には %(show_value)s でし" +"た) 。" + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "この値は %(limit_value)s 以下でなければなりません。" + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "この値は %(limit_value)s 以上でなければなりません。" + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"この値が少なくとも %(limit_value)d 文字以上であることを確認してください" +"( %(show_value)d 文字になっています)。" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"この値は %(limit_value)d 文字以下でなければなりません( %(show_value)d 文字に" +"なっています)。" + +msgid "Enter a number." +msgstr "数値を入力してください。" + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "この値は合計 %(max)s 桁以内でなければなりません。" + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "この値は小数点以下が合計 %(max)s 桁以内でなければなりません。" + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "この値は小数点より前が合計 %(max)s 桁以内でなければなりません。" + +#, python-format +msgid "" +"File extension '%(extension)s' is not allowed. Allowed extensions are: " +"'%(allowed_extensions)s'." +msgstr "" +"ファイル拡張子 '%(extension)s' は許可されていません。許可されている拡張子は " +"'%(allowed_extensions)s' です。" + +msgid "Null characters are not allowed." +msgstr "何か文字を入力してください。" + +msgid "and" +msgstr "と" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "この %(field_labels)s を持った %(model_name)s が既に存在します。" + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "%(value)r は有効な選択肢ではありません。" + +msgid "This field cannot be null." +msgstr "このフィールドには NULL を指定できません。" + +msgid "This field cannot be blank." +msgstr "このフィールドは空ではいけません。" + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "この %(field_label)s を持った %(model_name)s が既に存在します。" + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(date_field_label)s %(lookup_type)s では %(field_label)s がユニークである必" +"要があります。" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "タイプが %(field_type)s のフィールド" + +msgid "Integer" +msgstr "整数" + +#, python-format +msgid "'%(value)s' value must be an integer." +msgstr "'%(value)s' は整数値にしなければなりません。" + +msgid "Big (8 byte) integer" +msgstr "大きな(8バイト)整数" + +#, python-format +msgid "'%(value)s' value must be either True or False." +msgstr "'%(value)s' は真偽値にしなければなりません。" + +#, python-format +msgid "'%(value)s' value must be either True, False, or None." +msgstr "'%(value)s' はTrue、FalseまたはNoneの値でなければなりません。" + +msgid "Boolean (Either True or False)" +msgstr "ブール値 (真: True または偽: False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "文字列 ( %(max_length)s 字まで )" + +msgid "Comma-separated integers" +msgstr "カンマ区切りの整数" + +#, python-format +msgid "" +"'%(value)s' value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"'%(value)s' は無効な日付形式です。YYYY-MM-DD形式にしなければなりません。" + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "'%(value)s' は有効な日付形式(YYYY-MM-DD)ですが、日付が不正です。" + +msgid "Date (without time)" +msgstr "日付" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"'%(value)s' は無効な形式の値です。 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] 形式で" +"なければなりません。" + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"'%(value)s' は正しい形式(YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ])の値ですが、無効" +"な日時です。" + +msgid "Date (with time)" +msgstr "日時" + +#, python-format +msgid "'%(value)s' value must be a decimal number." +msgstr "'%(value)s' は10進浮動小数値にしなければなりません。" + +msgid "Decimal number" +msgstr "10 進数 (小数可)" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in [DD] [HH:[MM:]]ss[." +"uuuuuu] format." +msgstr "" +"'%(value)s' は無効な形式の値です。 [DD] [HH:[MM:]]ss[.uuuuuu] 形式でなければ" +"なりません。" + +msgid "Duration" +msgstr "時間差分" + +msgid "Email address" +msgstr "メールアドレス" + +msgid "File path" +msgstr "ファイルの場所" + +#, python-format +msgid "'%(value)s' value must be a float." +msgstr "'%(value)s' は小数値にしなければなりません。" + +msgid "Floating point number" +msgstr "浮動小数点" + +msgid "IPv4 address" +msgstr "IPv4アドレス" + +msgid "IP address" +msgstr "IP アドレス" + +#, python-format +msgid "'%(value)s' value must be either None, True or False." +msgstr "'%(value)s' はNone、TrueまたはFalseの値でなければなりません。" + +msgid "Boolean (Either True, False or None)" +msgstr "ブール値 (真: True 、偽: False または None)" + +msgid "Positive integer" +msgstr "正の整数" + +msgid "Positive small integer" +msgstr "小さな正の整数" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "スラグ(%(max_length)s文字以内)" + +msgid "Small integer" +msgstr "小さな整数" + +msgid "Text" +msgstr "テキスト" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"'%(value)s' は無効な形式の値です。 HH:MM[:ss[.uuuuuu]] 形式でなければなりませ" +"ん。" + +#, python-format +msgid "" +"'%(value)s' value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "'%(value)s' は正しい形式(HH:MM[:ss[.uuuuuu]])ですが、無効な時刻です。" + +msgid "Time" +msgstr "時刻" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "生のバイナリデータ" + +#, python-format +msgid "'%(value)s' is not a valid UUID." +msgstr "'%(value)s' は有効なUUIDではありません。" + +msgid "Universally unique identifier" +msgstr "汎用一意識別子" + +msgid "File" +msgstr "ファイル" + +msgid "Image" +msgstr "画像" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "%(field)s が %(value)r である %(model)s のインスタンスは存在しません。" + +msgid "Foreign Key (type determined by related field)" +msgstr "外部キー(型は関連フィールドによって決まります)" + +msgid "One-to-one relationship" +msgstr "1対1の関連" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "%(from)s-%(to)s の関連" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "%(from)s-%(to)s の関連" + +msgid "Many-to-many relationship" +msgstr "多対多の関連" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "このフィールドは必須です。" + +msgid "Enter a whole number." +msgstr "整数を入力してください。" + +msgid "Enter a valid date." +msgstr "日付を正しく入力してください。" + +msgid "Enter a valid time." +msgstr "時間を正しく入力してください。" + +msgid "Enter a valid date/time." +msgstr "日時を正しく入力してください。" + +msgid "Enter a valid duration." +msgstr "時間差分を正しく入力してください。" + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "日数は{min_days}から{max_days}の間でなければなりません。" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "" +"ファイルが取得できませんでした。フォームのencoding typeを確認してください。" + +msgid "No file was submitted." +msgstr "ファイルが送信されていません。" + +msgid "The submitted file is empty." +msgstr "入力されたファイルは空です。" + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"このファイル名は %(max)d 文字以下でなければなりません( %(length)d 文字になっ" +"ています)。" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"ファイルを投稿するか、クリアチェックボックスをチェックするかどちらかを選択し" +"てください。両方とも行ってはいけません。" + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"画像をアップロードしてください。アップロードしたファイルは画像でないか、また" +"は壊れています。" + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "正しく選択してください。 %(value)s は候補にありません。" + +msgid "Enter a list of values." +msgstr "リストを入力してください。" + +msgid "Enter a complete value." +msgstr "すべての値を入力してください。" + +msgid "Enter a valid UUID." +msgstr "UUIDを正しく入力してください。" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(隠しフィールド %(name)s) %(error)s" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "マネジメントフォームのデータが見つからないか、改竄されています。" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "%d 個またはそれより少ないフォームを送信してください。" + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "%d 個またはそれより多いフォームを送信してください。" + +msgid "Order" +msgstr "並び変え" + +msgid "Delete" +msgstr "削除" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "%(field)s の重複したデータを修正してください。" + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"%(field)s の重複したデータを修正してください。このフィールドはユニークである" +"必要があります。" + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"%(field_name)s の重複したデータを修正してください。%(date_field)s %(lookup)s " +"では %(field_name)s がユニークである必要があります。" + +msgid "Please correct the duplicate values below." +msgstr "下記の重複したデータを修正してください。" + +msgid "The inline value did not match the parent instance." +msgstr "インライン値が親のインスタンスに一致しません。" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "正しく選択してください。選択したものは候補にありません。" + +#, python-format +msgid "\"%(pk)s\" is not a valid value." +msgstr "\"%(pk)s\" は無効な値です。" + +#, python-format +msgid "" +"%(datetime)s couldn't be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s は%(current_timezone)sのタイムゾーンでは解釈できませんでした。そ" +"れは曖昧であるか、存在しない可能性があります。" + +msgid "Clear" +msgstr "クリア" + +msgid "Currently" +msgstr "現在" + +msgid "Change" +msgstr "変更" + +msgid "Unknown" +msgstr "不明" + +msgid "Yes" +msgstr "はい" + +msgid "No" +msgstr "いいえ" + +msgid "yes,no,maybe" +msgstr "はい,いいえ,たぶん" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d バイト" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "0時" + +msgid "noon" +msgstr "12時" + +msgid "Monday" +msgstr "月曜日" + +msgid "Tuesday" +msgstr "火曜日" + +msgid "Wednesday" +msgstr "水曜日" + +msgid "Thursday" +msgstr "木曜日" + +msgid "Friday" +msgstr "金曜日" + +msgid "Saturday" +msgstr "土曜日" + +msgid "Sunday" +msgstr "日曜日" + +msgid "Mon" +msgstr "月" + +msgid "Tue" +msgstr "火" + +msgid "Wed" +msgstr "水" + +msgid "Thu" +msgstr "木" + +msgid "Fri" +msgstr "金" + +msgid "Sat" +msgstr "土" + +msgid "Sun" +msgstr "日" + +msgid "January" +msgstr "1月" + +msgid "February" +msgstr "2月" + +msgid "March" +msgstr "3月" + +msgid "April" +msgstr "4月" + +msgid "May" +msgstr "5月" + +msgid "June" +msgstr "6月" + +msgid "July" +msgstr "7月" + +msgid "August" +msgstr "8月" + +msgid "September" +msgstr "9月" + +msgid "October" +msgstr "10月" + +msgid "November" +msgstr "11月" + +msgid "December" +msgstr "12月" + +msgid "jan" +msgstr "1月" + +msgid "feb" +msgstr "2月" + +msgid "mar" +msgstr "3月" + +msgid "apr" +msgstr "4月" + +msgid "may" +msgstr "5月" + +msgid "jun" +msgstr "6月" + +msgid "jul" +msgstr "7月" + +msgid "aug" +msgstr "8月" + +msgid "sep" +msgstr "9月" + +msgid "oct" +msgstr "10月" + +msgid "nov" +msgstr "11月" + +msgid "dec" +msgstr "12月" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "1月" + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "2月" + +msgctxt "abbrev. month" +msgid "March" +msgstr "3月" + +msgctxt "abbrev. month" +msgid "April" +msgstr "4月" + +msgctxt "abbrev. month" +msgid "May" +msgstr "5月" + +msgctxt "abbrev. month" +msgid "June" +msgstr "6月" + +msgctxt "abbrev. month" +msgid "July" +msgstr "7月" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "8月" + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "9月" + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "10月" + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "11月" + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "12月" + +msgctxt "alt. month" +msgid "January" +msgstr "1月" + +msgctxt "alt. month" +msgid "February" +msgstr "2月" + +msgctxt "alt. month" +msgid "March" +msgstr "3月" + +msgctxt "alt. month" +msgid "April" +msgstr "4月" + +msgctxt "alt. month" +msgid "May" +msgstr "5月" + +msgctxt "alt. month" +msgid "June" +msgstr "6月" + +msgctxt "alt. month" +msgid "July" +msgstr "7月" + +msgctxt "alt. month" +msgid "August" +msgstr "8月" + +msgctxt "alt. month" +msgid "September" +msgstr "9月" + +msgctxt "alt. month" +msgid "October" +msgstr "10月" + +msgctxt "alt. month" +msgid "November" +msgstr "11月" + +msgctxt "alt. month" +msgid "December" +msgstr "12月" + +msgid "This is not a valid IPv6 address." +msgstr "これは有効なIPv6アドレスではありません。" + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "または" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d 年" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d ヶ月" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d 週間" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d 日" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d 時間" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d 分" + +msgid "0 minutes" +msgstr "0 分" + +msgid "Forbidden" +msgstr "アクセス禁止" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF検証に失敗したため、リクエストは中断されました。" + +msgid "" +"You are seeing this message because this HTTPS site requires a 'Referer " +"header' to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"このメッセージが表示されている理由は、このHTTPSのサイトはウェブブラウザからリ" +"ファラーヘッダが送信されることを必須としていますが、送信されなかったためで" +"す。このヘッダはセキュリティ上の理由(使用中のブラウザが第三者によってハイ" +"ジャックされていないことを確認するため)で必要です。" + +msgid "" +"If you have configured your browser to disable 'Referer' headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for 'same-" +"origin' requests." +msgstr "" +"もしブラウザのリファラーヘッダを無効に設定しているならば、HTTPS接続やsame-" +"originリクエストのために、少なくともこのサイトでは再度有効にしてください。" + +msgid "" +"If you are using the tag or " +"including the 'Referrer-Policy: no-referrer' header, please remove them. The " +"CSRF protection requires the 'Referer' header to do strict referer checking. " +"If you're concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"もし タグを使用しているか " +"'Referrer-Policy: no-referrer' ヘッダーを含んでいる場合は、削除してください。" +"CSRFプロテクションは、厳密に referer をチェックするために 'Referer' ヘッダー" +"が必要です。プライバシーについて心配がある場合は、" +"等を用いて、外部のサイトにリンクしてください。" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"このメッセージが表示されている理由は、このサイトはフォーム送信時にCSRFクッ" +"キーを必須としているためです。このクッキーはセキュリティ上の理由(使用中のブラ" +"ウザが第三者によってハイジャックされていないことを確認するため)で必要です。" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for 'same-origin' requests." +msgstr "" +"もしブラウザのクッキーを無効に設定しているならば、same-originリクエストのため" +"に少なくともこのサイトでは再度有効にしてください。" + +msgid "More information is available with DEBUG=True." +msgstr "詳細な情報は DEBUG=True を設定すると利用できます。" + +msgid "No year specified" +msgstr "年が未指定です" + +msgid "Date out of range" +msgstr "日付が有効範囲外です" + +msgid "No month specified" +msgstr "月が未指定です" + +msgid "No day specified" +msgstr "日が未指定です" + +msgid "No week specified" +msgstr "週が未指定です" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "%(verbose_name_plural)s は利用できません" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"%(class_name)s.allow_futureがFalseであるため、未来の%(verbose_name_plural)sは" +"利用できません。" + +#, python-format +msgid "Invalid date string '%(datestr)s' given format '%(format)s'" +msgstr "指定された形式 '%(format)s' では '%(datestr)s' は無効な日付文字列です" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "クエリーに一致する %(verbose_name)s は見つかりませんでした" + +msgid "Page is not 'last', nor can it be converted to an int." +msgstr "ページは数値に変換できる値、または 'last' ではありません。" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "無効なページです (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and '%(class_name)s.allow_empty' is False." +msgstr "空の一覧かつ '%(class_name)s.allow_empty' がFalseです。" + +msgid "Directory indexes are not allowed here." +msgstr "ここではディレクトリインデックスが許可されていません。" + +#, python-format +msgid "\"%(path)s\" does not exist" +msgstr "\"%(path)s\" が存在しません。" + +#, python-format +msgid "Index of %(directory)s" +msgstr "%(directory)sのディレクトリインデックス" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "Django: 納期を逃さない完璧主義者のためのWebフレームワーク" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Django%(version)sのリリースノートを見る。" + +msgid "The install worked successfully! Congratulations!" +msgstr "インストールは成功しました!おめでとうございます!" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"このページは、設定ファイルでDEBUG=Trueが指定され、何もURLが設定されていない時に表示されます。" + +msgid "Django Documentation" +msgstr "Django ドキュメント" + +msgid "Topics, references, & how-to's" +msgstr "トピック、リファレンス、ハウツー" + +msgid "Tutorial: A Polling App" +msgstr "チュートリアル: 投票アプリケーション" + +msgid "Get started with Django" +msgstr "Djangoを始めよう" + +msgid "Django Community" +msgstr "Djangoのコミュニティ" + +msgid "Connect, get help, or contribute" +msgstr "つながり、助け合い、貢献しよう" diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/ja/__init__.py b/venv/lib/python3.7/site-packages/django/conf/locale/ja/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/ka/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/conf/locale/ka/LC_MESSAGES/django.po new file mode 100644 index 0000000..7e27909 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/ka/LC_MESSAGES/django.po @@ -0,0 +1,1248 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# André Bouatchidzé , 2013-2015 +# David A. , 2019 +# David A. , 2011 +# Jannis Leidel , 2011 +# Tornike Beradze , 2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-01-25 09:06+0000\n" +"Last-Translator: David A. \n" +"Language-Team: Georgian (http://www.transifex.com/django/django/language/" +"ka/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ka\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" + +msgid "Afrikaans" +msgstr "აფრიკაანსი" + +msgid "Arabic" +msgstr "არაბული" + +msgid "Asturian" +msgstr "ასტურიული" + +msgid "Azerbaijani" +msgstr "აზერბაიჯანული" + +msgid "Bulgarian" +msgstr "ბულგარული" + +msgid "Belarusian" +msgstr "ბელარუსული" + +msgid "Bengali" +msgstr "ბენგალიური" + +msgid "Breton" +msgstr "ბრეტონული" + +msgid "Bosnian" +msgstr "ბოსნიური" + +msgid "Catalan" +msgstr "კატალანური" + +msgid "Czech" +msgstr "ჩეხური" + +msgid "Welsh" +msgstr "უელსური" + +msgid "Danish" +msgstr "დანიური" + +msgid "German" +msgstr "გერმანული" + +msgid "Lower Sorbian" +msgstr "ქვემო სორბული" + +msgid "Greek" +msgstr "ბერძნული" + +msgid "English" +msgstr "ინგლისური" + +msgid "Australian English" +msgstr "ავსტრალიური ინგლისური" + +msgid "British English" +msgstr "ბრიტანეთის ინგლისური" + +msgid "Esperanto" +msgstr "ესპერანტო" + +msgid "Spanish" +msgstr "ესპანური" + +msgid "Argentinian Spanish" +msgstr "არგენტინის ესპანური" + +msgid "Colombian Spanish" +msgstr "კოლუმბიური ესპანური" + +msgid "Mexican Spanish" +msgstr "მექსიკური ესპანური" + +msgid "Nicaraguan Spanish" +msgstr "ნიკარაგუული ესპანური" + +msgid "Venezuelan Spanish" +msgstr "ვენესუელის ესპანური" + +msgid "Estonian" +msgstr "ესტონური" + +msgid "Basque" +msgstr "ბასკური" + +msgid "Persian" +msgstr "სპარსული" + +msgid "Finnish" +msgstr "ფინური" + +msgid "French" +msgstr "ფრანგული" + +msgid "Frisian" +msgstr "ფრისიული" + +msgid "Irish" +msgstr "ირლანდიური" + +msgid "Scottish Gaelic" +msgstr "შოტლანდიური-გელური" + +msgid "Galician" +msgstr "გალიციური" + +msgid "Hebrew" +msgstr "ებრაული" + +msgid "Hindi" +msgstr "ჰინდი" + +msgid "Croatian" +msgstr "ხორვატიული" + +msgid "Upper Sorbian" +msgstr "ზემო სორბიული" + +msgid "Hungarian" +msgstr "უნგრული" + +msgid "Armenian" +msgstr "სომხური" + +msgid "Interlingua" +msgstr "ინტერლინგუა" + +msgid "Indonesian" +msgstr "ინდონეზიური" + +msgid "Ido" +msgstr "იდო" + +msgid "Icelandic" +msgstr "ისლანდიური" + +msgid "Italian" +msgstr "იტალიური" + +msgid "Japanese" +msgstr "იაპონური" + +msgid "Georgian" +msgstr "ქართული" + +msgid "Kabyle" +msgstr "კაბილური" + +msgid "Kazakh" +msgstr "ყაზახური" + +msgid "Khmer" +msgstr "ხმერული" + +msgid "Kannada" +msgstr "კანნადა" + +msgid "Korean" +msgstr "კორეული" + +msgid "Luxembourgish" +msgstr "ლუქსემბურგული" + +msgid "Lithuanian" +msgstr "ლიტვური" + +msgid "Latvian" +msgstr "ლატვიური" + +msgid "Macedonian" +msgstr "მაკედონიური" + +msgid "Malayalam" +msgstr "მალაიზიური" + +msgid "Mongolian" +msgstr "მონღოლური" + +msgid "Marathi" +msgstr "მარათული" + +msgid "Burmese" +msgstr "ბირმული" + +msgid "Norwegian Bokmål" +msgstr "ნორვეგიული Bokmål" + +msgid "Nepali" +msgstr "ნეპალური" + +msgid "Dutch" +msgstr "ჰოლანდიური" + +msgid "Norwegian Nynorsk" +msgstr "ნორვეგიული-ნინორსკი" + +msgid "Ossetic" +msgstr "ოსური" + +msgid "Punjabi" +msgstr "პუნჯაბი" + +msgid "Polish" +msgstr "პოლონური" + +msgid "Portuguese" +msgstr "პორტუგალიური" + +msgid "Brazilian Portuguese" +msgstr "ბრაზილიური პორტუგალიური" + +msgid "Romanian" +msgstr "რუმინული" + +msgid "Russian" +msgstr "რუსული" + +msgid "Slovak" +msgstr "სლოვაკური" + +msgid "Slovenian" +msgstr "სლოვენიური" + +msgid "Albanian" +msgstr "ალბანური" + +msgid "Serbian" +msgstr "სერბული" + +msgid "Serbian Latin" +msgstr "სერბული (ლათინური)" + +msgid "Swedish" +msgstr "შვედური" + +msgid "Swahili" +msgstr "სუაჰილი" + +msgid "Tamil" +msgstr "თამილური" + +msgid "Telugu" +msgstr "ტელუგუ" + +msgid "Thai" +msgstr "ტაი" + +msgid "Turkish" +msgstr "თურქული" + +msgid "Tatar" +msgstr "თათრული" + +msgid "Udmurt" +msgstr "უდმურტული" + +msgid "Ukrainian" +msgstr "უკრაინული" + +msgid "Urdu" +msgstr "ურდუ" + +msgid "Vietnamese" +msgstr "ვიეტნამური" + +msgid "Simplified Chinese" +msgstr "გამარტივებული ჩინური" + +msgid "Traditional Chinese" +msgstr "ტრადიციული ჩინური" + +msgid "Messages" +msgstr "შეტყობინებები" + +msgid "Site Maps" +msgstr "საიტის რუკები" + +msgid "Static Files" +msgstr "სტატიკური ფაილები" + +msgid "Syndication" +msgstr "სინდიკაცია" + +msgid "That page number is not an integer" +msgstr "გვერდის ნომერი არ არის მთელი რიცხვი" + +msgid "That page number is less than 1" +msgstr "გვერდის ნომერი ნაკლებია 1-ზე" + +msgid "That page contains no results" +msgstr "გვერდი არ შეიცავს მონაცემებს" + +msgid "Enter a valid value." +msgstr "შეიყვანეთ სწორი მნიშვნელობა." + +msgid "Enter a valid URL." +msgstr "შეიყვანეთ სწორი URL." + +msgid "Enter a valid integer." +msgstr "შეიყვანეთ სწორი მთელი რიცხვი." + +msgid "Enter a valid email address." +msgstr "შეიყვანეთ მართებული ელფოსტის მისამართი." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens." +msgstr "" +"შეიყვანეთ სწორი 'slug'-მნიშვნელობა, რომელიც შეიცავს მხოლოდ ასოებს, ციფრებს, " +"ხაზგასმის ნიშნებს და დეფისებს." + +msgid "" +"Enter a valid 'slug' consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"შეიყვანეთ სწორი 'slug' მნიშვნელობა, რომელიც უნდა შეიცავდეს Unicode ასოებს, " +"ციფრებს, ხაზგასმის ნიშნებს, ან დეფისებს." + +msgid "Enter a valid IPv4 address." +msgstr "შეიყვანეთ სწორი IPv4 მისამართი." + +msgid "Enter a valid IPv6 address." +msgstr "შეიყვანეთ მართებული IPv6 მისამართი." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "შეიყვანეთ მართებული IPv4 ან IPv6 მისამართი." + +msgid "Enter only digits separated by commas." +msgstr "შეიყვანეთ მხოლოდ მძიმეებით გამოყოფილი ციფრები." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "მნიშვნელობა უნდა იყოს %(limit_value)s (იგი არის %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "მნიშვნელობა უნდა იყოს %(limit_value)s-ზე ნაკლები ან ტოლი." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "მნიშვნელობა უნდა იყოს %(limit_value)s-ზე მეტი ან ტოლი." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"მნიშვნელობას უნდა ჰქონდეს სულ ცოტა %(limit_value)d სიმბოლო (მას აქვს " +"%(show_value)d)." +msgstr[1] "" +"მნიშვნელობას უნდა ჰქონდეს სულ ცოტა %(limit_value)d სიმბოლო (მას აქვს " +"%(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"მნიშვნელობას უნდა ჰქონდეს არაუმეტეს %(limit_value)d სიმბოლოსი (მას აქვს " +"%(show_value)d)." +msgstr[1] "" +"მნიშვნელობას უნდა ჰქონდეს არაუმეტეს %(limit_value)d სიმბოლოსი (მას აქვს " +"%(show_value)d)." + +msgid "Enter a number." +msgstr "შეიყვანეთ რიცხვი." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "ციფრების სრული რაოდენობა %(max)s-ს არ უნდა აღემატებოდეს." +msgstr[1] "ციფრების სრული რაოდენობა %(max)s-ს არ უნდა აღემატებოდეს." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" +"ათობითი გამყოფის შემდეგ ციფრების რაოდენობა %(max)s-ს არ უნდა აღემატებოდეს." +msgstr[1] "" +"ათობითი გამყოფის შემდეგ ციფრების რაოდენობა %(max)s-ს არ უნდა აღემატებოდეს." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"ათობითი გამყოფის შემდეგ ციფრების რაოდენობა %(max)s-ს არ უნდა აღემატებოდეს." +msgstr[1] "" +"ათობითი გამყოფის წინ ციფრების რაოდენობა %(max)s-ს არ უნდა აღემატებოდეს." + +#, python-format +msgid "" +"File extension '%(extension)s' is not allowed. Allowed extensions are: " +"'%(allowed_extensions)s'." +msgstr "" +"ფაილის გაფართოება \"%(extension)s\" დაუშვებელია. დასაშვები გაფართოებებია: " +"\"%(allowed_extensions)s\"." + +msgid "Null characters are not allowed." +msgstr "Null მნიშვნელობები დაუშვებელია." + +msgid "and" +msgstr "და" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s ამ %(field_labels)s-ით უკვე არსებობს." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "მნიშვნელობა %(value)r არ არის დასაშვები." + +msgid "This field cannot be null." +msgstr "ეს ველი არ შეიძლება იყოს null." + +msgid "This field cannot be blank." +msgstr "ეს ველი არ შეიძლება იყოს ცარიელი." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s მოცემული %(field_label)s-ით უკვე არსებობს." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s უნდა იყოს უნიკალური %(date_field_label)s %(lookup_type)s-" +"სთვის." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "ველის ტიპი: %(field_type)s" + +msgid "Integer" +msgstr "მთელი" + +#, python-format +msgid "'%(value)s' value must be an integer." +msgstr "მნიშვნელობა '%(value)s' უნდა იყოს მთელი რიცხვი." + +msgid "Big (8 byte) integer" +msgstr "დიდი მთელი (8-ბაიტიანი)" + +#, python-format +msgid "'%(value)s' value must be either True or False." +msgstr "მნიშვნელობა '%(value)s' უნდა იყოს True ან False." + +#, python-format +msgid "'%(value)s' value must be either True, False, or None." +msgstr "\"%(value)s\"-ის მნიშვნელობა შეიძლება იყოს True, False ან None." + +msgid "Boolean (Either True or False)" +msgstr "ლოგიკური (True ან False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "სტრიქონი (%(max_length)s სიმბოლომდე)" + +msgid "Comma-separated integers" +msgstr "მძიმით გამოყოფილი მთელი რიცხვები" + +#, python-format +msgid "" +"'%(value)s' value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"'%(value)s' მნიშვნელობას აქვს არასწორი თარიღის ფორმატი. ის უნდა იყოს YYYY-MM-" +"DD ფორმატში." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"'%(value)s' მნიშვნელობას აქვს სწორი ფორმატი (YYYY-MM-DD), მაგრამ ის არასწორი " +"თარიღია." + +msgid "Date (without time)" +msgstr "თარიღი (დროის გარეშე)" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"'%(value)s' მნიშვნელობას აქვს არასწორი ფორმატი. ის უნდა იყოს YYYY-MM-DD HH:" +"MM[:ss[.uuuuuu]][TZ] ფორმატში." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"'%(value)s' მნიშვნელობას აქვს სწორი ფორმატი (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]), მაგრამ ის არასწორი თარიღი/დრო-ა." + +msgid "Date (with time)" +msgstr "თარიღი (დროსთან ერთად)" + +#, python-format +msgid "'%(value)s' value must be a decimal number." +msgstr "მნიშვნელობა '%(value)s' უნდა იყოს ათობითი რიცხვი." + +msgid "Decimal number" +msgstr "ათობითი რიცხვი" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in [DD] [HH:[MM:]]ss[." +"uuuuuu] format." +msgstr "" +"'%(value)s' არასწორი ფორმატი აქვს. ის უნდა იყოს [DD] [HH:[MM:]]ss[.uuuuuu] " +"ფორმატში." + +msgid "Duration" +msgstr "ხანგრზლივობა" + +msgid "Email address" +msgstr "ელ. ფოსტის მისამართი" + +msgid "File path" +msgstr "გზა ფაილისაკენ" + +#, python-format +msgid "'%(value)s' value must be a float." +msgstr "\"%(value)s\"-ის მნიშვნელობა უნდა იყოს float ტიპის." + +msgid "Floating point number" +msgstr "რიცხვი მცოცავი წერტილით" + +msgid "IPv4 address" +msgstr "IPv4 მისამართი" + +msgid "IP address" +msgstr "IP-მისამართი" + +#, python-format +msgid "'%(value)s' value must be either None, True or False." +msgstr "მნიშვნელობა '%(value)s' უნდა იყოს None, True ან False." + +msgid "Boolean (Either True, False or None)" +msgstr "ლოგიკური (True, False ან None)" + +msgid "Positive integer" +msgstr "დადებითი მთელი რიცხვი" + +msgid "Positive small integer" +msgstr "დადებითი პატარა მთელი რიცხვი" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "სლაგი (%(max_length)s-მდე)" + +msgid "Small integer" +msgstr "პატარა მთელი რიცხვი" + +msgid "Text" +msgstr "ტექსტი" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"\"%(value)s\" მნიშვნელობას აქვს არასწორი ფორმატი. უნდა იყოს HH:MM[:ss[." +"uuuuuu]]." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"\"%(value)s\"-ს აქვს სწორი ფორმატი (HH:MM[:ss[.uuuuuu]]), მაგრამ დროის " +"მნიშვნელობა არასწორია." + +msgid "Time" +msgstr "დრო" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "დაუმუშავებელი ორობითი მონაცემები" + +#, python-format +msgid "'%(value)s' is not a valid UUID." +msgstr "\"%(value)s\"-ს აქვს დაუშვებელი UUID-ის მნიშვნელობა." + +msgid "Universally unique identifier" +msgstr "უნივერსალური უნიკალური იდენტიფიკატორი." + +msgid "File" +msgstr "ფაილი" + +msgid "Image" +msgstr "გამოსახულება" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +msgid "Foreign Key (type determined by related field)" +msgstr "გარე გასაღები (ტიპი განისაზღვრება დაკავშირებული ველის ტიპით)" + +msgid "One-to-one relationship" +msgstr "კავშირი ერთი-ერთტან" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "კავშირი მრავალი-მრავალთან" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr "" + +msgid "This field is required." +msgstr "ეს ველი აუცილებელია." + +msgid "Enter a whole number." +msgstr "შეიყვანეთ მთელი რიცხვი" + +msgid "Enter a valid date." +msgstr "შეიყვანეთ სწორი თარიღი." + +msgid "Enter a valid time." +msgstr "შეიყვანეთ სწორი დრო." + +msgid "Enter a valid date/time." +msgstr "შეიყვანეთ სწორი თარიღი და დრო." + +msgid "Enter a valid duration." +msgstr "შეიყვანეთ სწორი დროის პერიოდი." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "" +"ფაილი არ იყო გამოგზავნილი. შეამოწმეთ კოდირების ტიპი მოცემული ფორმისათვის." + +msgid "No file was submitted." +msgstr "ფაილი არ იყო გამოგზავნილი." + +msgid "The submitted file is empty." +msgstr "გამოგზავნილი ფაილი ცარიელია." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +msgstr[1] "" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "ან გამოგზავნეთ ფაილი, ან მონიშნეთ \"წაშლის\" დროშა." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"ატვირთეთ დასაშვები გამოსახულება. თქვენს მიერ გამოგზავნილი ფაილი ან არ არის " +"გამოსახულება, ან დაზიანებულია." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "აირჩიეთ დასაშვები მნიშვნელობა. %(value)s დასაშვები არ არის." + +msgid "Enter a list of values." +msgstr "შეიყვანეთ მნიშვნელობების სია." + +msgid "Enter a complete value." +msgstr "შეიყვანეთ სრული მნიშვნელობა." + +msgid "Enter a valid UUID." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr "" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(დამალული ველი %(name)s) %(error)s" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "" +msgstr[1] "" + +msgid "Order" +msgstr "დალაგება" + +msgid "Delete" +msgstr "წავშალოთ" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "გთხოვთ, შეასწოროთ დუბლირებული მონაცემები %(field)s-თვის." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"გთხოვთ, შეასწოროთ დუბლირებული მნიშვნელობა %(field)s ველისთვის, რომელიც უნდა " +"იყოს უნიკალური." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"გთხოვთ, შეასწოროთ დუბლირებული მნიშვნელობა %(field_name)s ველისთვის, რომელიც " +"უნდა იყოს უნიკალური %(lookup)s-ზე, %(date_field)s-თვის." + +msgid "Please correct the duplicate values below." +msgstr "გთხოვთ, შეასწოროთ დუბლირებული მნიშვნელობები." + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "აირჩიეთ დასაშვები მნიშვნელობა. ეს არჩევანი დასაშვები არ არის." + +#, python-format +msgid "\"%(pk)s\" is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn't be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "წაშლა" + +msgid "Currently" +msgstr "ამჟამად" + +msgid "Change" +msgstr "შეცვლა" + +msgid "Unknown" +msgstr "გაურკვეველი" + +msgid "Yes" +msgstr "კი" + +msgid "No" +msgstr "არა" + +msgid "yes,no,maybe" +msgstr "კი,არა,შესაძლოა" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d ბაიტი" +msgstr[1] "%(size)d ბაიტი" + +#, python-format +msgid "%s KB" +msgstr "%s კბ" + +#, python-format +msgid "%s MB" +msgstr "%s მბ" + +#, python-format +msgid "%s GB" +msgstr "%s გბ" + +#, python-format +msgid "%s TB" +msgstr "%s ტბ" + +#, python-format +msgid "%s PB" +msgstr "%s პბ" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "შუაღამე" + +msgid "noon" +msgstr "შუადღე" + +msgid "Monday" +msgstr "ორშაბათი" + +msgid "Tuesday" +msgstr "სამშაბათი" + +msgid "Wednesday" +msgstr "ოთხშაბათი" + +msgid "Thursday" +msgstr "ხუთშაბათი" + +msgid "Friday" +msgstr "პარასკევი" + +msgid "Saturday" +msgstr "შაბათი" + +msgid "Sunday" +msgstr "კვირა" + +msgid "Mon" +msgstr "ორშ" + +msgid "Tue" +msgstr "სამ" + +msgid "Wed" +msgstr "ოთხ" + +msgid "Thu" +msgstr "ხუთ" + +msgid "Fri" +msgstr "პარ" + +msgid "Sat" +msgstr "შაბ" + +msgid "Sun" +msgstr "კვრ" + +msgid "January" +msgstr "იანვარი" + +msgid "February" +msgstr "თებერვალი" + +msgid "March" +msgstr "მარტი" + +msgid "April" +msgstr "აპრილი" + +msgid "May" +msgstr "მაისი" + +msgid "June" +msgstr "ივნისი" + +msgid "July" +msgstr "ივლისი" + +msgid "August" +msgstr "აგვისტო" + +msgid "September" +msgstr "სექტემბერი" + +msgid "October" +msgstr "ოქტომბერი" + +msgid "November" +msgstr "ნოემბერი" + +msgid "December" +msgstr "დეკემბერი" + +msgid "jan" +msgstr "იან" + +msgid "feb" +msgstr "თებ" + +msgid "mar" +msgstr "მარ" + +msgid "apr" +msgstr "აპრ" + +msgid "may" +msgstr "მაი" + +msgid "jun" +msgstr "ივნ" + +msgid "jul" +msgstr "ივლ" + +msgid "aug" +msgstr "აგვ" + +msgid "sep" +msgstr "სექ" + +msgid "oct" +msgstr "ოქტ" + +msgid "nov" +msgstr "ნოე" + +msgid "dec" +msgstr "დეკ" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "იან." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "თებ." + +msgctxt "abbrev. month" +msgid "March" +msgstr "მარ." + +msgctxt "abbrev. month" +msgid "April" +msgstr "აპრ." + +msgctxt "abbrev. month" +msgid "May" +msgstr "მაი" + +msgctxt "abbrev. month" +msgid "June" +msgstr "ივნ." + +msgctxt "abbrev. month" +msgid "July" +msgstr "ივლ." + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "აგვ." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "სექტ." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "ოქტ." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "ნოემ." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "დეკ." + +msgctxt "alt. month" +msgid "January" +msgstr "იანვარი" + +msgctxt "alt. month" +msgid "February" +msgstr "თებერვალი" + +msgctxt "alt. month" +msgid "March" +msgstr "მარტი" + +msgctxt "alt. month" +msgid "April" +msgstr "აპრილი" + +msgctxt "alt. month" +msgid "May" +msgstr "მაისი" + +msgctxt "alt. month" +msgid "June" +msgstr "ივნისი" + +msgctxt "alt. month" +msgid "July" +msgstr "ივლისი" + +msgctxt "alt. month" +msgid "August" +msgstr "აგვისტო" + +msgctxt "alt. month" +msgid "September" +msgstr "სექტემბერი" + +msgctxt "alt. month" +msgid "October" +msgstr "ოქტომბერი" + +msgctxt "alt. month" +msgid "November" +msgstr "ნოემბერი" + +msgctxt "alt. month" +msgid "December" +msgstr "დეკემბერი" + +msgid "This is not a valid IPv6 address." +msgstr "ეს არ არის სწორი IPv6 მისამართი." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +msgid "or" +msgstr "ან" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d წელი" +msgstr[1] "%d წელი" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d თვე" +msgstr[1] "%d თვე" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d კვირა" +msgstr[1] "%d კვირა" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d დღე" +msgstr[1] "%d დღე" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d საათი" +msgstr[1] "%d საათი" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d წუთი" +msgstr[1] "%d წუთი" + +msgid "0 minutes" +msgstr "0 წუთი" + +msgid "Forbidden" +msgstr "აკრძალული" + +msgid "CSRF verification failed. Request aborted." +msgstr "" + +msgid "" +"You are seeing this message because this HTTPS site requires a 'Referer " +"header' to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable 'Referer' headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for 'same-" +"origin' requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the 'Referrer-Policy: no-referrer' header, please remove them. The " +"CSRF protection requires the 'Referer' header to do strict referer checking. " +"If you're concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for 'same-origin' requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "მეტი ინფორმაცია მისაწვდომია DEBUG=True-ს მეშვეობით." + +msgid "No year specified" +msgstr "არ არის მითითებული წელი" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "არ არის მითითებული თვე" + +msgid "No day specified" +msgstr "არ არის მითითებული დღე" + +msgid "No week specified" +msgstr "არ არის მითითებული კვირა" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "%(verbose_name_plural)s არ არსებობს" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"მომავალი %(verbose_name_plural)s არ არსებობს იმიტომ, რომ %(class_name)s." +"allow_future არის False." + +#, python-format +msgid "Invalid date string '%(datestr)s' given format '%(format)s'" +msgstr "" +"არასწორი თარიღის სტრიქონი '%(datestr)s' გამომდინარე ფორმატიდან '%(format)s'" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "არ მოიძებნა არცერთი მოთხოვნის თანმხვედრი %(verbose_name)s" + +msgid "Page is not 'last', nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "" + +#, python-format +msgid "Empty list and '%(class_name)s.allow_empty' is False." +msgstr "ცარიელი სია და '%(class_name)s.allow_empty' არის False." + +msgid "Directory indexes are not allowed here." +msgstr "" + +#, python-format +msgid "\"%(path)s\" does not exist" +msgstr "\"%(path)s\" არ არსებობს" + +#, python-format +msgid "Index of %(directory)s" +msgstr "%(directory)s-ის იდექსი" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to's" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/kab/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/conf/locale/kab/LC_MESSAGES/django.po new file mode 100644 index 0000000..f21e906 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/kab/LC_MESSAGES/django.po @@ -0,0 +1,1182 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-11-15 16:15+0100\n" +"PO-Revision-Date: 2017-11-16 01:13+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Kabyle (http://www.transifex.com/django/django/language/" +"kab/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kab\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "Tafrikanst" + +msgid "Arabic" +msgstr "Taɛṛabt" + +msgid "Asturian" +msgstr "Tasturyant" + +msgid "Azerbaijani" +msgstr "Tazeṛbayǧant" + +msgid "Bulgarian" +msgstr "Tabulgarit" + +msgid "Belarusian" +msgstr "Tabilurusit" + +msgid "Bengali" +msgstr "Tabelgalit" + +msgid "Breton" +msgstr "Tabrutunt" + +msgid "Bosnian" +msgstr "Tabusnit" + +msgid "Catalan" +msgstr "Takaṭalant" + +msgid "Czech" +msgstr "Tačikit" + +msgid "Welsh" +msgstr "Takusit" + +msgid "Danish" +msgstr "Tadanit" + +msgid "German" +msgstr "Talmanit" + +msgid "Lower Sorbian" +msgstr "Tasiṛbit n wadda" + +msgid "Greek" +msgstr "Tagrigit" + +msgid "English" +msgstr "Taglizit" + +msgid "Australian English" +msgstr "Taglizit n Ustralya" + +msgid "British English" +msgstr "Taglizit (UK)" + +msgid "Esperanto" +msgstr "Taspirantit" + +msgid "Spanish" +msgstr "Taspanit" + +msgid "Argentinian Spanish" +msgstr "Taspanit n Arjuntin" + +msgid "Colombian Spanish" +msgstr "Taspanit n Kulumbya" + +msgid "Mexican Spanish" +msgstr "Taspanit n Miksik" + +msgid "Nicaraguan Spanish" +msgstr "Taspanit n Nikaragwa" + +msgid "Venezuelan Spanish" +msgstr "Taspanit n Vinizwila" + +msgid "Estonian" +msgstr "Tastunit" + +msgid "Basque" +msgstr "Tabaskit" + +msgid "Persian" +msgstr "Tafarsit" + +msgid "Finnish" +msgstr "Tafinit" + +msgid "French" +msgstr "Tafṛansist" + +msgid "Frisian" +msgstr "" + +msgid "Irish" +msgstr "" + +msgid "Scottish Gaelic" +msgstr "" + +msgid "Galician" +msgstr "" + +msgid "Hebrew" +msgstr "" + +msgid "Hindi" +msgstr "Tahendit" + +msgid "Croatian" +msgstr "Takarwasit" + +msgid "Upper Sorbian" +msgstr "" + +msgid "Hungarian" +msgstr "Tahungarit" + +msgid "Interlingua" +msgstr "" + +msgid "Indonesian" +msgstr "Tandunizit" + +msgid "Ido" +msgstr "" + +msgid "Icelandic" +msgstr "Taslandit" + +msgid "Italian" +msgstr "Taṭelyanit" + +msgid "Japanese" +msgstr "" + +msgid "Georgian" +msgstr "Tajyuṛjit" + +msgid "Kazakh" +msgstr "Takazaxt" + +msgid "Khmer" +msgstr "" + +msgid "Kannada" +msgstr "Takannadat" + +msgid "Korean" +msgstr "Takurit" + +msgid "Luxembourgish" +msgstr "" + +msgid "Lithuanian" +msgstr "Talitwanit" + +msgid "Latvian" +msgstr "Talitunit" + +msgid "Macedonian" +msgstr "Tamasidunit" + +msgid "Malayalam" +msgstr "Tamayalamt" + +msgid "Mongolian" +msgstr "" + +msgid "Marathi" +msgstr "" + +msgid "Burmese" +msgstr "Tabirmanit" + +msgid "Norwegian Bokmål" +msgstr "" + +msgid "Nepali" +msgstr "Tanipalit" + +msgid "Dutch" +msgstr "Tahulandit" + +msgid "Norwegian Nynorsk" +msgstr "" + +msgid "Ossetic" +msgstr "" + +msgid "Punjabi" +msgstr "Tabenjabit" + +msgid "Polish" +msgstr "Tapulandit" + +msgid "Portuguese" +msgstr "Tapurtugit" + +msgid "Brazilian Portuguese" +msgstr "" + +msgid "Romanian" +msgstr "Tarumanit" + +msgid "Russian" +msgstr "Tarusit" + +msgid "Slovak" +msgstr "Tasluvakt" + +msgid "Slovenian" +msgstr "" + +msgid "Albanian" +msgstr "Talbanit" + +msgid "Serbian" +msgstr "Tasiṛbit" + +msgid "Serbian Latin" +msgstr "" + +msgid "Swedish" +msgstr "Taswidit" + +msgid "Swahili" +msgstr "Taswahilit" + +msgid "Tamil" +msgstr "Taṭamult" + +msgid "Telugu" +msgstr "" + +msgid "Thai" +msgstr "" + +msgid "Turkish" +msgstr "Taṭurkit" + +msgid "Tatar" +msgstr "" + +msgid "Udmurt" +msgstr "" + +msgid "Ukrainian" +msgstr "" + +msgid "Urdu" +msgstr "" + +msgid "Vietnamese" +msgstr "" + +msgid "Simplified Chinese" +msgstr "" + +msgid "Traditional Chinese" +msgstr "" + +msgid "Messages" +msgstr "Iznan" + +msgid "Site Maps" +msgstr "" + +msgid "Static Files" +msgstr "" + +msgid "Syndication" +msgstr "" + +msgid "That page number is not an integer" +msgstr "" + +msgid "That page number is less than 1" +msgstr "" + +msgid "That page contains no results" +msgstr "" + +msgid "Enter a valid value." +msgstr "Sekcem azal ameɣtu." + +msgid "Enter a valid URL." +msgstr "" + +msgid "Enter a valid integer." +msgstr "" + +msgid "Enter a valid email address." +msgstr "Sekcem tansa imayl tameɣtut." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens." +msgstr "" + +msgid "" +"Enter a valid 'slug' consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "Sekcem tansa IPv4 tameɣtut." + +msgid "Enter a valid IPv6 address." +msgstr "" + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "" + +msgid "Enter only digits separated by commas." +msgstr "" + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "" + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "" + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"File extension '%(extension)s' is not allowed. Allowed extensions are: " +"'%(allowed_extensions)s'." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "akked" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "" + +msgid "This field cannot be null." +msgstr "" + +msgid "This field cannot be blank." +msgstr "" + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "" + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "" + +msgid "Integer" +msgstr "Ummid" + +#, python-format +msgid "'%(value)s' value must be an integer." +msgstr "" + +msgid "Big (8 byte) integer" +msgstr "" + +#, python-format +msgid "'%(value)s' value must be either True or False." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "" + +msgid "Comma-separated integers" +msgstr "" + +#, python-format +msgid "" +"'%(value)s' value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "Azemz (s wakud)" + +#, python-format +msgid "'%(value)s' value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in [DD] [HH:[MM:]]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "Tanzagt" + +msgid "Email address" +msgstr "Tansa email" + +msgid "File path" +msgstr "Abrid n ufaylu" + +#, python-format +msgid "'%(value)s' value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "" + +msgid "IPv4 address" +msgstr "" + +msgid "IP address" +msgstr "Tansa IP" + +#, python-format +msgid "'%(value)s' value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "" + +msgid "Positive integer" +msgstr "" + +msgid "Positive small integer" +msgstr "" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "" + +msgid "Small integer" +msgstr "" + +msgid "Text" +msgstr "Aḍris" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"'%(value)s' value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "Akud" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "" + +#, python-format +msgid "'%(value)s' is not a valid UUID." +msgstr "" + +msgid "File" +msgstr "Afaylu" + +msgid "Image" +msgstr "Tugna" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +msgid "Foreign Key (type determined by related field)" +msgstr "" + +msgid "One-to-one relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "" + +msgid "Enter a whole number." +msgstr "Sekcem amḍan ummid." + +msgid "Enter a number." +msgstr "Sekcem amḍan." + +msgid "Enter a valid date." +msgstr "" + +msgid "Enter a valid time." +msgstr "" + +msgid "Enter a valid date/time." +msgstr "" + +msgid "Enter a valid duration." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "" + +msgid "No file was submitted." +msgstr "Afaylu ur yettwazen ara." + +msgid "The submitted file is empty." +msgstr "" + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +msgstr[1] "" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" + +msgid "Enter a list of values." +msgstr "" + +msgid "Enter a complete value." +msgstr "Sekcem azal ummid." + +msgid "Enter a valid UUID." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "" +msgstr[1] "" + +msgid "Order" +msgstr "Amizwer" + +msgid "Delete" +msgstr "KKES" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "" + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" + +msgid "Please correct the duplicate values below." +msgstr "" + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" + +#, python-format +msgid "\"%(pk)s\" is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn't be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "Sfeḍ" + +msgid "Currently" +msgstr "Tura" + +msgid "Change" +msgstr "Beddel" + +msgid "Unknown" +msgstr "Arussin" + +msgid "Yes" +msgstr "Ih" + +msgid "No" +msgstr "Uhu" + +msgid "yes,no,maybe" +msgstr "" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%s KB" +msgstr "%s KAṬ" + +#, python-format +msgid "%s MB" +msgstr "%s MAṬ" + +#, python-format +msgid "%s GB" +msgstr "%s GAṬ" + +#, python-format +msgid "%s TB" +msgstr "%s TAṬ" + +#, python-format +msgid "%s PB" +msgstr "%s PAṬ" + +msgid "p.m." +msgstr "m.d." + +msgid "a.m." +msgstr "f.t." + +msgid "PM" +msgstr "MD" + +msgid "AM" +msgstr "FT" + +msgid "midnight" +msgstr "ttnaṣfa n yiḍ" + +msgid "noon" +msgstr "ttnaṣfa n uzal" + +msgid "Monday" +msgstr "Arim" + +msgid "Tuesday" +msgstr "Aram" + +msgid "Wednesday" +msgstr "Ahad" + +msgid "Thursday" +msgstr "Amhad" + +msgid "Friday" +msgstr "Sem" + +msgid "Saturday" +msgstr "Sed" + +msgid "Sunday" +msgstr "Acer" + +msgid "Mon" +msgstr "Ari" + +msgid "Tue" +msgstr "Ara" + +msgid "Wed" +msgstr "Aha" + +msgid "Thu" +msgstr "Amh" + +msgid "Fri" +msgstr "Sem" + +msgid "Sat" +msgstr "Sed" + +msgid "Sun" +msgstr "Ace" + +msgid "January" +msgstr "Yennayer" + +msgid "February" +msgstr "Fuṛaṛ" + +msgid "March" +msgstr "Meɣres" + +msgid "April" +msgstr "Yebrir" + +msgid "May" +msgstr "Mayyu" + +msgid "June" +msgstr "Yunyu" + +msgid "July" +msgstr "Yulyu" + +msgid "August" +msgstr "Ɣuct" + +msgid "September" +msgstr "Ctamber" + +msgid "October" +msgstr "Tuber" + +msgid "November" +msgstr "Wamber" + +msgid "December" +msgstr "Dujamber" + +msgid "jan" +msgstr "yen" + +msgid "feb" +msgstr "fuṛ" + +msgid "mar" +msgstr "meɣ" + +msgid "apr" +msgstr "yeb" + +msgid "may" +msgstr "may" + +msgid "jun" +msgstr "yun" + +msgid "jul" +msgstr "yul" + +msgid "aug" +msgstr "ɣuc" + +msgid "sep" +msgstr "cte" + +msgid "oct" +msgstr "tub" + +msgid "nov" +msgstr "wam" + +msgid "dec" +msgstr "duj" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Yen." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Fuṛ." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Meɣres" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Yebrir" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Mayyu" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Yunyu" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Yulyu" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Ɣuc." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "" + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Tub." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Wam." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Duj." + +msgctxt "alt. month" +msgid "January" +msgstr "Yennayer" + +msgctxt "alt. month" +msgid "February" +msgstr "Fuṛaṛ" + +msgctxt "alt. month" +msgid "March" +msgstr "Meɣres" + +msgctxt "alt. month" +msgid "April" +msgstr "Yebrir" + +msgctxt "alt. month" +msgid "May" +msgstr "Mayyu" + +msgctxt "alt. month" +msgid "June" +msgstr "Yunyu" + +msgctxt "alt. month" +msgid "July" +msgstr "Yulyu" + +msgctxt "alt. month" +msgid "August" +msgstr "Ɣuct" + +msgctxt "alt. month" +msgid "September" +msgstr "Ctamber" + +msgctxt "alt. month" +msgid "October" +msgstr "Tuber" + +msgctxt "alt. month" +msgid "November" +msgstr "Wamber" + +msgctxt "alt. month" +msgid "December" +msgstr "Dujamber" + +msgid "This is not a valid IPv6 address." +msgstr "" + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s..." +msgstr "" + +msgid "or" +msgstr "neɣ" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" + +msgid "0 minutes" +msgstr "0 n tisdatin" + +msgid "Forbidden" +msgstr "Yegdel" + +msgid "CSRF verification failed. Request aborted." +msgstr "" + +msgid "" +"You are seeing this message because this HTTPS site requires a 'Referer " +"header' to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable 'Referer' headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for 'same-" +"origin' requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the 'Referrer-Policy: no-referrer' header, please remove them. The " +"CSRF protection requires the 'Referer' header to do strict referer checking. " +"If you're concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for 'same-origin' requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "" + +msgid "No year specified" +msgstr "" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "" + +msgid "No day specified" +msgstr "" + +msgid "No week specified" +msgstr "" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" + +#, python-format +msgid "Invalid date string '%(datestr)s' given format '%(format)s'" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "" + +msgid "Page is not 'last', nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "" + +#, python-format +msgid "Empty list and '%(class_name)s.allow_empty' is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "" + +#, python-format +msgid "\"%(path)s\" does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to's" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "Bdu s Django" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/kk/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/conf/locale/kk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0c426b6c0516b9dc95ced33a1eab67d18f20347e GIT binary patch literal 13916 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 S=?Seg#shRafS<81%>M$-rBfaN literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/kk/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/conf/locale/kk/LC_MESSAGES/django.po new file mode 100644 index 0000000..01e7bb7 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/kk/LC_MESSAGES/django.po @@ -0,0 +1,1213 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Baurzhan Muftakhidinov , 2015 +# Zharzhan Kulmyrza , 2011 +# Leo Trubach , 2017 +# Nurlan Rakhimzhanov , 2011 +# yun_man_ger , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-01-18 00:44+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Kazakh (http://www.transifex.com/django/django/language/kk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kk\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" + +msgid "Afrikaans" +msgstr "" + +msgid "Arabic" +msgstr "Араб" + +msgid "Asturian" +msgstr "" + +msgid "Azerbaijani" +msgstr "Әзірбайжан" + +msgid "Bulgarian" +msgstr "Болгар" + +msgid "Belarusian" +msgstr "" + +msgid "Bengali" +msgstr "Бенгал" + +msgid "Breton" +msgstr "" + +msgid "Bosnian" +msgstr "Босния" + +msgid "Catalan" +msgstr "Каталан" + +msgid "Czech" +msgstr "Чех" + +msgid "Welsh" +msgstr "Валлий" + +msgid "Danish" +msgstr "Дания" + +msgid "German" +msgstr "Неміс" + +msgid "Lower Sorbian" +msgstr "" + +msgid "Greek" +msgstr "Грек" + +msgid "English" +msgstr "Ағылшын" + +msgid "Australian English" +msgstr "" + +msgid "British English" +msgstr "Британдық ағылшын" + +msgid "Esperanto" +msgstr "" + +msgid "Spanish" +msgstr "Испан" + +msgid "Argentinian Spanish" +msgstr "Аргентиналық испан" + +msgid "Colombian Spanish" +msgstr "" + +msgid "Mexican Spanish" +msgstr "Мексикалық испан" + +msgid "Nicaraguan Spanish" +msgstr "Никарагуа испан" + +msgid "Venezuelan Spanish" +msgstr "" + +msgid "Estonian" +msgstr "Эстон" + +msgid "Basque" +msgstr "Баск" + +msgid "Persian" +msgstr "Парсы" + +msgid "Finnish" +msgstr "Фин" + +msgid "French" +msgstr "Француз" + +msgid "Frisian" +msgstr "Фриз" + +msgid "Irish" +msgstr "Ирландия" + +msgid "Scottish Gaelic" +msgstr "" + +msgid "Galician" +msgstr "Галиц" + +msgid "Hebrew" +msgstr "Иврит" + +msgid "Hindi" +msgstr "Хинди" + +msgid "Croatian" +msgstr "Кроат" + +msgid "Upper Sorbian" +msgstr "" + +msgid "Hungarian" +msgstr "Венгрия" + +msgid "Armenian" +msgstr "" + +msgid "Interlingua" +msgstr "" + +msgid "Indonesian" +msgstr "Индонезия" + +msgid "Ido" +msgstr "" + +msgid "Icelandic" +msgstr "Исладия" + +msgid "Italian" +msgstr "Итальян" + +msgid "Japanese" +msgstr "Жапон" + +msgid "Georgian" +msgstr "Грузин" + +msgid "Kabyle" +msgstr "" + +msgid "Kazakh" +msgstr "Қазақша" + +msgid "Khmer" +msgstr "Кхмер" + +msgid "Kannada" +msgstr "Канада" + +msgid "Korean" +msgstr "Корей" + +msgid "Luxembourgish" +msgstr "" + +msgid "Lithuanian" +msgstr "Литва" + +msgid "Latvian" +msgstr "Латвия" + +msgid "Macedonian" +msgstr "Македон" + +msgid "Malayalam" +msgstr "Малаялам" + +msgid "Mongolian" +msgstr "Монғол" + +msgid "Marathi" +msgstr "" + +msgid "Burmese" +msgstr "" + +msgid "Norwegian Bokmål" +msgstr "" + +msgid "Nepali" +msgstr "" + +msgid "Dutch" +msgstr "Голланд" + +msgid "Norwegian Nynorsk" +msgstr "Норвегиялық нюнор" + +msgid "Ossetic" +msgstr "" + +msgid "Punjabi" +msgstr "Пенджаб" + +msgid "Polish" +msgstr "Поляк" + +msgid "Portuguese" +msgstr "Португал" + +msgid "Brazilian Portuguese" +msgstr "Бразилиялық португал" + +msgid "Romanian" +msgstr "Роман" + +msgid "Russian" +msgstr "Орыс" + +msgid "Slovak" +msgstr "Словак" + +msgid "Slovenian" +msgstr "Словениялық" + +msgid "Albanian" +msgstr "Албан" + +msgid "Serbian" +msgstr "Серб" + +msgid "Serbian Latin" +msgstr "Сербиялық латын" + +msgid "Swedish" +msgstr "Швед" + +msgid "Swahili" +msgstr "" + +msgid "Tamil" +msgstr "Тамиль" + +msgid "Telugu" +msgstr "Телугу" + +msgid "Thai" +msgstr "Тай" + +msgid "Turkish" +msgstr "Түрік" + +msgid "Tatar" +msgstr "" + +msgid "Udmurt" +msgstr "" + +msgid "Ukrainian" +msgstr "Украин" + +msgid "Urdu" +msgstr "Урду" + +msgid "Vietnamese" +msgstr "Вьетнам" + +msgid "Simplified Chinese" +msgstr "Жеңілдетілген қытай" + +msgid "Traditional Chinese" +msgstr "Дәстүрлі қытай" + +msgid "Messages" +msgstr "" + +msgid "Site Maps" +msgstr "" + +msgid "Static Files" +msgstr "" + +msgid "Syndication" +msgstr "" + +msgid "That page number is not an integer" +msgstr "" + +msgid "That page number is less than 1" +msgstr "" + +msgid "That page contains no results" +msgstr "" + +msgid "Enter a valid value." +msgstr "Тура мәнін енгізіңіз." + +msgid "Enter a valid URL." +msgstr "Тура URL-ді енгізіңіз." + +msgid "Enter a valid integer." +msgstr "" + +msgid "Enter a valid email address." +msgstr "" + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Тек әріптерден, сандардан, астыңғы сызықтардан немесе дефистерден құралатын " +"тура 'slug'-ті енгізіңіз." + +msgid "" +"Enter a valid 'slug' consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "Тура IPv4 адресті енгізіңіз." + +msgid "Enter a valid IPv6 address." +msgstr "" + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "" + +msgid "Enter only digits separated by commas." +msgstr "Тек үтірлермен бөлінген цифрлерді енгізіңіз." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Бұл мәннің %(limit_value)s екендігін тексеріңіз (қазір ол %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "" +"Бұл мәннің мынадан %(limit_value)s кіші немесе тең екендігін тексеріңіз." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "" +"Бұл мәннің мынадан %(limit_value)s үлкен немесе тең екендігін тексеріңіз." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +msgid "Enter a number." +msgstr "Сан енгізіңіз." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"File extension '%(extension)s' is not allowed. Allowed extensions are: " +"'%(allowed_extensions)s'." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "және" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "" + +msgid "This field cannot be null." +msgstr "Бұл жолақ null болмау керек." + +msgid "This field cannot be blank." +msgstr "Бұл жолақ бос болмау керек." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s %(field_label)s жолақпен бұрыннан бар." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Жолақтын түрі: %(field_type)s" + +msgid "Integer" +msgstr "Бүтін сан" + +#, python-format +msgid "'%(value)s' value must be an integer." +msgstr "" + +msgid "Big (8 byte) integer" +msgstr "Ұзын (8 байт) бүтін сан" + +#, python-format +msgid "'%(value)s' value must be either True or False." +msgstr "" + +#, python-format +msgid "'%(value)s' value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "Boolean (True немесе False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Жол (%(max_length)s символға дейін)" + +msgid "Comma-separated integers" +msgstr "Үтірмен бөлінген бүтін сандар" + +#, python-format +msgid "" +"'%(value)s' value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "Дата (уақытсыз)" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "Дата (уақытпен)" + +#, python-format +msgid "'%(value)s' value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "Ондық сан" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in [DD] [HH:[MM:]]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "" + +msgid "Email address" +msgstr "Email адрес" + +msgid "File path" +msgstr "Файл жолы" + +#, python-format +msgid "'%(value)s' value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "Реал сан" + +msgid "IPv4 address" +msgstr "" + +msgid "IP address" +msgstr "IP мекенжайы" + +#, python-format +msgid "'%(value)s' value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "Булеан (True, False немесе None)" + +msgid "Positive integer" +msgstr "" + +msgid "Positive small integer" +msgstr "" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "" + +msgid "Small integer" +msgstr "" + +msgid "Text" +msgstr "Мәтін" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"'%(value)s' value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "Уақыт" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "" + +#, python-format +msgid "'%(value)s' is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Image" +msgstr "" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +msgid "Foreign Key (type determined by related field)" +msgstr "Foreign Key (тип related field арқылы анықталады)" + +msgid "One-to-one relationship" +msgstr "One-to-one қатынас" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "Many-to-many қатынас" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr "" + +msgid "This field is required." +msgstr "Бұл өрісті толтыру міндетті." + +msgid "Enter a whole number." +msgstr "Толық санды енгізіңіз." + +msgid "Enter a valid date." +msgstr "Дұрыс күнді енгізіңіз." + +msgid "Enter a valid time." +msgstr "Дұрыс уақытты енгізіңіз." + +msgid "Enter a valid date/time." +msgstr "Дұрыс күнді/уақытты енгізіңіз." + +msgid "Enter a valid duration." +msgstr "" + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Ешқандай файл жіберілмеді. Форманың кодтау түрін тексеріңіз." + +msgid "No file was submitted." +msgstr "Ешқандай файл жіберілмеді." + +msgid "The submitted file is empty." +msgstr "Бос файл жіберілді." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +msgstr[1] "" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Файлды жіберіңіз немесе тазалауды белгіленіз, екеуін бірге емес." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Дұрыс сүретті жүктеңіз. Сіз жүктеген файл - сүрет емес немесе бұзылған сүрет." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Дұрыс тандау жасаңыз. %(value)s дұрыс тандау емес." + +msgid "Enter a list of values." +msgstr "Мәндер тізімін енгізіңіз." + +msgid "Enter a complete value." +msgstr "" + +msgid "Enter a valid UUID." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr "" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "" +msgstr[1] "" + +msgid "Order" +msgstr "Сұрыптау" + +msgid "Delete" +msgstr "Жою" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "%(field)s жолақтағы қайталанған мәнді түзетіңіз." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "%(field)s жолақтағы мәнді түзетіңіз, ол бірегей болу керек." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"%(field_name)s жолақтағы мәнді түзетіңіз. Ол %(date_field)s жолақтың ішінде " +"%(lookup)s үшін бірегей болу керек." + +msgid "Please correct the duplicate values below." +msgstr "Қайталанатын мәндерді түзетіңіз." + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Дұрыс нұсқаны таңдаңыз. Бұл нұсқа дұрыс таңдаулардың арасында жоқ." + +#, python-format +msgid "\"%(pk)s\" is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn't be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "Тазалау" + +msgid "Currently" +msgstr "Ағымдағы" + +msgid "Change" +msgstr "Түзету" + +msgid "Unknown" +msgstr "Белгісіз" + +msgid "Yes" +msgstr "Иә" + +msgid "No" +msgstr "Жоқ" + +msgid "yes,no,maybe" +msgstr "иә,жоқ,мүмкін" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d байт" +msgstr[1] "%(size)d байт" + +#, python-format +msgid "%s KB" +msgstr "%s КБ" + +#, python-format +msgid "%s MB" +msgstr "%s МБ" + +#, python-format +msgid "%s GB" +msgstr "%s ГБ" + +#, python-format +msgid "%s TB" +msgstr "%s ТБ" + +#, python-format +msgid "%s PB" +msgstr "%s ПБ" + +msgid "p.m." +msgstr "Т.Қ." + +msgid "a.m." +msgstr "Т.Ж." + +msgid "PM" +msgstr "ТҚ" + +msgid "AM" +msgstr "ТЖ" + +msgid "midnight" +msgstr "түнжарым" + +msgid "noon" +msgstr "түсқайта" + +msgid "Monday" +msgstr "Дүйсенбі" + +msgid "Tuesday" +msgstr "Сейсенбі" + +msgid "Wednesday" +msgstr "Сәрсенбі" + +msgid "Thursday" +msgstr "Бейсенбі" + +msgid "Friday" +msgstr "Жума" + +msgid "Saturday" +msgstr "Сенбі" + +msgid "Sunday" +msgstr "Жексенбі" + +msgid "Mon" +msgstr "Дб" + +msgid "Tue" +msgstr "Сб" + +msgid "Wed" +msgstr "Ср" + +msgid "Thu" +msgstr "Бс" + +msgid "Fri" +msgstr "Жм" + +msgid "Sat" +msgstr "Сн" + +msgid "Sun" +msgstr "Жк" + +msgid "January" +msgstr "Қаңтар" + +msgid "February" +msgstr "Ақпан" + +msgid "March" +msgstr "Наурыз" + +msgid "April" +msgstr "Сәуір" + +msgid "May" +msgstr "Мамыр" + +msgid "June" +msgstr "Маусым" + +msgid "July" +msgstr "Шілде" + +msgid "August" +msgstr "Тамыз" + +msgid "September" +msgstr "Қыркүйек" + +msgid "October" +msgstr "Қазан" + +msgid "November" +msgstr "Қараша" + +msgid "December" +msgstr "Желтоқсан" + +msgid "jan" +msgstr "қан" + +msgid "feb" +msgstr "ақп" + +msgid "mar" +msgstr "нау" + +msgid "apr" +msgstr "сәу" + +msgid "may" +msgstr "мам" + +msgid "jun" +msgstr "мау" + +msgid "jul" +msgstr "шіл" + +msgid "aug" +msgstr "там" + +msgid "sep" +msgstr "қыр" + +msgid "oct" +msgstr "қаз" + +msgid "nov" +msgstr "қар" + +msgid "dec" +msgstr "жел" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Қаң." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Ақп." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Наурыз" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Сәуір" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Мамыр" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Маусым" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Шілде" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Там." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Қыр." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Қаз." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Қар." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Жел." + +msgctxt "alt. month" +msgid "January" +msgstr "Қаңтар" + +msgctxt "alt. month" +msgid "February" +msgstr "Ақпан" + +msgctxt "alt. month" +msgid "March" +msgstr "Наурыз" + +msgctxt "alt. month" +msgid "April" +msgstr "Сәуір" + +msgctxt "alt. month" +msgid "May" +msgstr "Мамыр" + +msgctxt "alt. month" +msgid "June" +msgstr "Маусым" + +msgctxt "alt. month" +msgid "July" +msgstr "Шілде" + +msgctxt "alt. month" +msgid "August" +msgstr "Тамыз" + +msgctxt "alt. month" +msgid "September" +msgstr "Қыркүйек" + +msgctxt "alt. month" +msgid "October" +msgstr "Қазан" + +msgctxt "alt. month" +msgid "November" +msgstr "Қараша" + +msgctxt "alt. month" +msgid "December" +msgstr "Желтоқсан" + +msgid "This is not a valid IPv6 address." +msgstr "" + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +msgid "or" +msgstr "немесе" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" + +msgid "0 minutes" +msgstr "" + +msgid "Forbidden" +msgstr "" + +msgid "CSRF verification failed. Request aborted." +msgstr "" + +msgid "" +"You are seeing this message because this HTTPS site requires a 'Referer " +"header' to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable 'Referer' headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for 'same-" +"origin' requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the 'Referrer-Policy: no-referrer' header, please remove them. The " +"CSRF protection requires the 'Referer' header to do strict referer checking. " +"If you're concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for 'same-origin' requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "" + +msgid "No year specified" +msgstr "Жыл таңдалмаған" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "Ай таңдалмаған" + +msgid "No day specified" +msgstr "Күн таңдалмаған" + +msgid "No week specified" +msgstr "Апта таңдалмаған" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "%(verbose_name_plural)s қол жеткізгісіз" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Болашақ %(verbose_name_plural)s қол жеткізгісіз, себебі %(class_name)s." +"allow_future False." + +#, python-format +msgid "Invalid date string '%(datestr)s' given format '%(format)s'" +msgstr "'%(format)s' пішімі үшін дұрыс емес '%(datestr)s' уақыт жолы" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "%(verbose_name)s табылған жоқ" + +msgid "Page is not 'last', nor can it be converted to an int." +msgstr "Бет соңғы емес және оны санға түрлендіруге болмайды." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "" + +#, python-format +msgid "Empty list and '%(class_name)s.allow_empty' is False." +msgstr "Бос тізім және '%(class_name)s.allow_empty' - False." + +msgid "Directory indexes are not allowed here." +msgstr "" + +#, python-format +msgid "\"%(path)s\" does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to's" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/kn/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/conf/locale/kn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ccae161f314611069c61ac59a4fa670b34325bb0 GIT binary patch literal 18634 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/kn/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/conf/locale/kn/LC_MESSAGES/django.po new file mode 100644 index 0000000..cb0e8ed --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/kn/LC_MESSAGES/django.po @@ -0,0 +1,1224 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# karthikbgl , 2011-2012 +# Ramakrishna Yekulla , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-01-18 00:44+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Kannada (http://www.transifex.com/django/django/language/" +"kn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kn\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Afrikaans" +msgstr "" + +msgid "Arabic" +msgstr "ಅರೇಬಿಕ್" + +msgid "Asturian" +msgstr "" + +msgid "Azerbaijani" +msgstr "ಆಜೆರ್ಬೈಜನಿ" + +msgid "Bulgarian" +msgstr "ಬಲ್ಗೇರಿಯನ್" + +msgid "Belarusian" +msgstr "" + +msgid "Bengali" +msgstr "ಬೆಂಗಾಲಿ" + +msgid "Breton" +msgstr "" + +msgid "Bosnian" +msgstr "ಬೋಸ್ನಿಯನ್" + +msgid "Catalan" +msgstr "ಕೆಟಲಾನ್" + +msgid "Czech" +msgstr "ಝೆಕ್" + +msgid "Welsh" +msgstr "ವೆಲ್ಷ್" + +msgid "Danish" +msgstr "ಡ್ಯಾನಿಷ್" + +msgid "German" +msgstr "ಜರ್ಮನ್" + +msgid "Lower Sorbian" +msgstr "" + +msgid "Greek" +msgstr "ಗ್ರೀಕ್" + +msgid "English" +msgstr "ಇಂಗ್ಲಿಷ್" + +msgid "Australian English" +msgstr "" + +msgid "British English" +msgstr "ಬ್ರಿಟೀಶ್ ಇಂಗ್ಲಿಷ್" + +msgid "Esperanto" +msgstr "" + +msgid "Spanish" +msgstr "ಸ್ಪ್ಯಾನಿಷ್" + +msgid "Argentinian Spanish" +msgstr "ಅರ್ಜೆಂಟಿನಿಯನ್ ಸ್ಪಾನಿಷ್" + +msgid "Colombian Spanish" +msgstr "" + +msgid "Mexican Spanish" +msgstr "ಮೆಕ್ಸಿಕನ್ ಸ್ಪಾನಿಷ್" + +msgid "Nicaraguan Spanish" +msgstr "nicarguan ಸ್ಪಾನಿಷ್" + +msgid "Venezuelan Spanish" +msgstr "" + +msgid "Estonian" +msgstr "ಎಷ್ಟೋನಿಯನ್" + +msgid "Basque" +msgstr "ಬಾಸ್ಕ್‍" + +msgid "Persian" +msgstr "ಪರ್ಶಿಯನ್" + +msgid "Finnish" +msgstr "ಫಿನ್ನಿಶ್" + +msgid "French" +msgstr "ಫ್ರೆಂಚ್" + +msgid "Frisian" +msgstr "ಫ್ರಿಸಿಯನ್" + +msgid "Irish" +msgstr "ಐರಿಶ್" + +msgid "Scottish Gaelic" +msgstr "" + +msgid "Galician" +msgstr "ಗೆಲಿಶಿಯನ್" + +msgid "Hebrew" +msgstr "ಹೀಬ್ರೂ" + +msgid "Hindi" +msgstr "ಹಿಂದಿ" + +msgid "Croatian" +msgstr "ಕ್ರೊಯೇಶಿಯನ್" + +msgid "Upper Sorbian" +msgstr "" + +msgid "Hungarian" +msgstr "ಹಂಗೇರಿಯನ್" + +msgid "Armenian" +msgstr "" + +msgid "Interlingua" +msgstr "" + +msgid "Indonesian" +msgstr "ಇಂಡೋನಿಶಿಯನ್" + +msgid "Ido" +msgstr "" + +msgid "Icelandic" +msgstr "ಐಸ್‌ಲ್ಯಾಂಡಿಕ್" + +msgid "Italian" +msgstr "ಇಟಾಲಿಯನ್" + +msgid "Japanese" +msgstr "ಜಾಪನೀಸ್" + +msgid "Georgian" +msgstr "ಜಾರ್ಜೆಯನ್ " + +msgid "Kabyle" +msgstr "" + +msgid "Kazakh" +msgstr "" + +msgid "Khmer" +msgstr "ಖಮೇರ್" + +msgid "Kannada" +msgstr "ಕನ್ನಡ" + +msgid "Korean" +msgstr "ಕೊರಿಯನ್" + +msgid "Luxembourgish" +msgstr "" + +msgid "Lithuanian" +msgstr "ಲಿತುವಾನಿಯನ್ " + +msgid "Latvian" +msgstr "ಲಾಟ್ವಿಯನ್" + +msgid "Macedonian" +msgstr "ಮೆಸಡೊನಿಯನ್" + +msgid "Malayalam" +msgstr "ಮಲಯಾಳಂ" + +msgid "Mongolian" +msgstr "ಮಂಗೊಲಿಯನ್" + +msgid "Marathi" +msgstr "" + +msgid "Burmese" +msgstr "" + +msgid "Norwegian Bokmål" +msgstr "" + +msgid "Nepali" +msgstr "" + +msgid "Dutch" +msgstr "ಡಚ್" + +msgid "Norwegian Nynorsk" +msgstr "ನಾರ್ವೇಜಿಯನ್ ನಿನೋರ್ಕ್" + +msgid "Ossetic" +msgstr "" + +msgid "Punjabi" +msgstr "ಪಂಜಾಬಿ" + +msgid "Polish" +msgstr "ಪೋಲಿಷ್" + +msgid "Portuguese" +msgstr "ಪೋರ್ಚುಗೀಸ್" + +msgid "Brazilian Portuguese" +msgstr "ಬ್ರಜೀಲಿಯನ್ ಪೋರ್ಚುಗೀಸ್" + +msgid "Romanian" +msgstr "ರೋಮೇನಿಯನ್" + +msgid "Russian" +msgstr "ರಶಿಯನ್" + +msgid "Slovak" +msgstr "ಸ್ಲೋವಾಕ್" + +msgid "Slovenian" +msgstr "ಸ್ಲೋವೇನಿಯನ್" + +msgid "Albanian" +msgstr "ಅಲ್ಬೆನಿಯನ್ " + +msgid "Serbian" +msgstr "ಸರ್ಬಿಯನ್" + +msgid "Serbian Latin" +msgstr "ಸರ್ಬಿಯನ್ ಲ್ಯಾಟಿನ್" + +msgid "Swedish" +msgstr "ಸ್ವೀಡಿಷ್" + +msgid "Swahili" +msgstr "" + +msgid "Tamil" +msgstr "ತಮಿಳು" + +msgid "Telugu" +msgstr "ತೆಲುಗು" + +msgid "Thai" +msgstr "ಥಾಯ್" + +msgid "Turkish" +msgstr "ಟರ್ಕಿಶ್" + +msgid "Tatar" +msgstr "" + +msgid "Udmurt" +msgstr "" + +msgid "Ukrainian" +msgstr "ಉಕ್ರೇನಿಯನ್" + +msgid "Urdu" +msgstr "ಉರ್ದು" + +msgid "Vietnamese" +msgstr "ವಿಯೆತ್ನಾಮೀಸ್" + +msgid "Simplified Chinese" +msgstr "ಸರಳೀಕೃತ ಚೈನೀಸ್" + +msgid "Traditional Chinese" +msgstr "ಸಂಪ್ರದಾಯಿಕ ಚೈನೀಸ್ " + +msgid "Messages" +msgstr "" + +msgid "Site Maps" +msgstr "" + +msgid "Static Files" +msgstr "" + +msgid "Syndication" +msgstr "" + +msgid "That page number is not an integer" +msgstr "" + +msgid "That page number is less than 1" +msgstr "" + +msgid "That page contains no results" +msgstr "" + +msgid "Enter a valid value." +msgstr "ಸಿಂಧುವಾದ ಮೌಲ್ಯವನ್ನು ನಮೂದಿಸಿ." + +msgid "Enter a valid URL." +msgstr "ಸರಿಯಾದ ಒಂದು URL ಅನ್ನು ನಮೂದಿಸಿ." + +msgid "Enter a valid integer." +msgstr "" + +msgid "Enter a valid email address." +msgstr "" + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens." +msgstr "" +"ಅಕ್ಷರಗಳು, ಅಂಕೆಗಳು, ಅಡಿಗೆರೆಗಳು (ಅಂಡರ್ಸ್ಕೋರ್) ಹಾಗು ಅಡ್ಡಗೆರೆಗಳನ್ನು ಹೊಂದಿರುವ ಒಂದು " +"ಸರಿಯಾದ 'slug' ಅನ್ನು ನಮೂದಿಸಿ." + +msgid "" +"Enter a valid 'slug' consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "ಒಂದು ಸರಿಯಾದ IPv4 ವಿಳಾಸವನ್ನು ನಮೂದಿಸಿ." + +msgid "Enter a valid IPv6 address." +msgstr "ಮಾನ್ಯವಾದ IPv6 ವಿಳಾಸ ದಾಖಲಿಸಿ" + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "ಮಾನ್ಯವಾದ IPv4 ಅಥವಾ IPv6 ವಿಳಾಸ ದಾಖಲಿಸಿ" + +msgid "Enter only digits separated by commas." +msgstr "ಅಲ್ಪವಿರಾಮ(,)ಗಳಿಂದ ಬೇರ್ಪಟ್ಟ ಅಂಕೆಗಳನ್ನು ಮಾತ್ರ ಬರೆಯಿರಿ." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"ಈ ಮೌಲ್ಯವು %(limit_value)s ಆಗಿದೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ (ಇದು %(show_value)s ಆಗಿದೆ)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "" +"ಈ ಮೌಲ್ಯವು %(limit_value)s ಕ್ಕಿಂತ ಕಡಿಮೆಯ ಅಥವ ಸಮನಾದ ಮೌಲ್ಯವಾಗಿದೆ ಎಂದು ಖಾತ್ರಿ " +"ಮಾಡಿಕೊಳ್ಳಿ." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "" +"ಈ ಮೌಲ್ಯವು %(limit_value)s ಕ್ಕಿಂತ ಹೆಚ್ಚಿನ ಅಥವ ಸಮನಾದ ಮೌಲ್ಯವಾಗಿದೆ ಎಂದು ಖಾತ್ರಿ " +"ಮಾಡಿಕೊಳ್ಳಿ." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +msgid "Enter a number." +msgstr "ಒಂದು ಸಂಖ್ಯೆಯನ್ನು ನಮೂದಿಸಿ." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"File extension '%(extension)s' is not allowed. Allowed extensions are: " +"'%(allowed_extensions)s'." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "ಮತ್ತು" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "" + +msgid "This field cannot be null." +msgstr "ಈ ಅಂಶವನ್ನು ಖಾಲಿ ಬಿಡುವಂತಿಲ್ಲ." + +msgid "This field cannot be blank." +msgstr "ಈ ಸ್ಥಳವು ಖಾಲಿ ಇರುವಂತಿಲ್ಲ." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "" +"ಈ %(field_label)s ಅನ್ನು ಹೊಂದಿರುವ ಒಂದು %(model_name)s ಈಗಾಗಲೆ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "ಕ್ಷೇತ್ರದ ಬಗೆ: %(field_type)s" + +msgid "Integer" +msgstr "ಪೂರ್ಣಾಂಕ" + +#, python-format +msgid "'%(value)s' value must be an integer." +msgstr "" + +msgid "Big (8 byte) integer" +msgstr "ಬೃಹತ್ (೮ ಬೈಟ್) ಪೂರ್ಣ ಸಂಖ್ಯೆ" + +#, python-format +msgid "'%(value)s' value must be either True or False." +msgstr "" + +#, python-format +msgid "'%(value)s' value must be either True, False, or None." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "ಬೂಲಿಯನ್ (ಹೌದು ಅಥವ ಅಲ್ಲ)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "ಪದಪುಂಜ (%(max_length)s ವರೆಗೆ)" + +msgid "Comma-separated integers" +msgstr "ಅಲ್ಪವಿರಾಮ(,) ದಿಂದ ಬೇರ್ಪಟ್ಟ ಪೂರ್ಣಸಂಖ್ಯೆಗಳು" + +#, python-format +msgid "" +"'%(value)s' value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "ದಿನಾಂಕ (ಸಮಯವಿಲ್ಲದೆ)" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "ದಿನಾಂಕ (ಸಮಯದೊಂದಿಗೆ)" + +#, python-format +msgid "'%(value)s' value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "ದಶಮಾನ ಸಂಖ್ಯೆ" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in [DD] [HH:[MM:]]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "" + +msgid "Email address" +msgstr "" + +msgid "File path" +msgstr "ಕಡತದ ಸ್ಥಾನಪಥ" + +#, python-format +msgid "'%(value)s' value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "ತೇಲುವ-ಬಿಂದು ಸಂಖ್ಯೆ" + +msgid "IPv4 address" +msgstr "IPv4 ವಿಳಾಸ" + +msgid "IP address" +msgstr "IP ವಿಳಾಸ" + +#, python-format +msgid "'%(value)s' value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "ಬೂಲಿಯನ್ (ನಿಜ, ಸುಳ್ಳು ಅಥವ ಯಾವುದೂ ಅಲ್ಲ ಇವುಗಳಲ್ಲಿ ಒಂದು)" + +msgid "Positive integer" +msgstr "" + +msgid "Positive small integer" +msgstr "" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "" + +msgid "Small integer" +msgstr "" + +msgid "Text" +msgstr "ಪಠ್ಯ" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"'%(value)s' value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "ಸಮಯ" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "" + +#, python-format +msgid "'%(value)s' is not a valid UUID." +msgstr "" + +msgid "Universally unique identifier" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Image" +msgstr "" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +msgid "Foreign Key (type determined by related field)" +msgstr "ಬಾಹ್ಯ ಕೀಲಿ (ಸಂಬಂಧಿತ ಸ್ಥಳದಿಂದ ಪ್ರಕಾರವನ್ನು ನಿರ್ಧರಿಸಲಾಗುತ್ತದೆ)" + +msgid "One-to-one relationship" +msgstr "ಒನ್-ಟು-ಒನ್ (ಪರಸ್ಪರ) ಸಂಬಂಧ" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "ಮೆನಿ-ಟು-ಮೆನಿ (ಸಾರ್ವಜನಿಕ) ಸಂಬಂಧ" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr "" + +msgid "This field is required." +msgstr "ಈ ಸ್ಥಳವು ಅಗತ್ಯವಿರುತ್ತದೆ." + +msgid "Enter a whole number." +msgstr "ಪೂರ್ಣಾಂಕವೊಂದನ್ನು ನಮೂದಿಸಿ." + +msgid "Enter a valid date." +msgstr "ಸರಿಯಾದ ದಿನಾಂಕವನ್ನು ನಮೂದಿಸಿ." + +msgid "Enter a valid time." +msgstr "ಸರಿಯಾದ ಸಮಯವನ್ನು ನಮೂದಿಸಿ." + +msgid "Enter a valid date/time." +msgstr "ಸರಿಯಾದ ದಿನಾಂಕ/ಸಮಯವನ್ನು ನಮೂದಿಸಿ." + +msgid "Enter a valid duration." +msgstr "" + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "" +"ಯಾವದೇ ಕಡತವನ್ನೂ ಸಲ್ಲಿಸಲಾಗಿಲ್ಲ. ನಮೂನೆಯ ಮೇಲಿನ ಸಂಕೇತೀಕರಣ (ಎನ್ಕೋಡಿಂಗ್) ಬಗೆಯನ್ನು " +"ಪರೀಕ್ಷಿಸಿ." + +msgid "No file was submitted." +msgstr "ಯಾವದೇ ಕಡತವನ್ನೂ ಸಲ್ಲಿಸಲಾಗಿಲ್ಲ." + +msgid "The submitted file is empty." +msgstr "ಸಲ್ಲಿಸಲಾದ ಕಡತ ಖಾಲಿ ಇದೆ." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +msgstr[1] "" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"ದಯವಿಟ್ಟು ಕಡತವನ್ನು ಸಲ್ಲಿಸಿ ಅಥವ ಅಳಿಸುವ ಗುರುತುಚೌಕವನ್ನು ಗುರುತು ಹಾಕಿ, ಎರಡನ್ನೂ ಒಟ್ಟಿಗೆ " +"ಮಾಡಬೇಡಿ." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"ಸರಿಯಾದ ಚಿತ್ರವನ್ನು ಸೇರಿಸಿ. ನೀವು ಸೇರಿಸಿದ ಕಡತವು ಚಿತ್ರವೇ ಅಲ್ಲ ಅಥವಾ ಅದು ಒಂದು ಹಾಳಾದ " +"ಚಿತ್ರವಾಗಿದೆ. " + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "ಸರಿಯಾದ ಒಂದು ಆಯ್ಕೆಯನ್ನು ಆರಿಸಿ. %(value)s ಎನ್ನುವುದು ಲಭ್ಯವಿರುವ ಆಯ್ಕೆಗಳಲ್ಲಿ ಇಲ್ಲ." + +msgid "Enter a list of values." +msgstr "ಮೌಲ್ಯಗಳ ಒಂದು ಪಟ್ಟಿಯನ್ನು ನಮೂದಿಸಿ." + +msgid "Enter a complete value." +msgstr "" + +msgid "Enter a valid UUID." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr "" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "" +msgstr[1] "" + +msgid "Order" +msgstr "ಕ್ರಮ" + +msgid "Delete" +msgstr "ಅಳಿಸಿಹಾಕಿ" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "%(field)s ಗಾಗಿ ಎರಡು ಬಾರಿ ನಮೂದಿಸಲಾದ ಮಾಹಿತಿಯನ್ನು ಸರಿಪಡಿಸಿ." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"%(field)s ಗಾಗಿ ಎರಡು ಬಾರಿ ನಮೂದಿಸಲಾದ ಮಾಹಿತಿಯನ್ನು ಸರಿಪಡಿಸಿ, ಇದರ ಮೌಲ್ಯವು " +"ವಿಶಿಷ್ಟವಾಗಿರಬೇಕು." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"%(field_name)s ಗಾಗಿ ಎರಡು ಬಾರಿ ನಮೂದಿಸಲಾದ ಮಾಹಿತಿಯನ್ನು ಸರಿಪಡಿಸಿ, %(date_field)s " +"ನಲ್ಲಿನ %(lookup)s ಗಾಗಿ ಇದರ ಮೌಲ್ಯವು ವಿಶಿಷ್ಟವಾಗಿರಬೇಕು." + +msgid "Please correct the duplicate values below." +msgstr "ದಯವಿಟ್ಟು ಈ ಕೆಳಗೆ ಎರಡು ಬಾರಿ ನಮೂದಿಸಲಾದ ಮೌಲ್ಯವನ್ನು ಸರಿಪಡಿಸಿ." + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "ಸರಿಯಾದ ಒಂದು ಆಯ್ಕೆಯನ್ನು ಆರಿಸಿ. ಆ ಆಯ್ಕೆಯು ಲಭ್ಯವಿರುವ ಆಯ್ಕೆಗಳಲ್ಲಿ ಇಲ್ಲ." + +#, python-format +msgid "\"%(pk)s\" is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn't be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "ಮುಕ್ತಗೊಳಿಸು" + +msgid "Currently" +msgstr "ಪ್ರಸಕ್ತ" + +msgid "Change" +msgstr "ಬದಲಾವಣೆ" + +msgid "Unknown" +msgstr "ಗೊತ್ತಿರದ" + +msgid "Yes" +msgstr "ಹೌದು" + +msgid "No" +msgstr "ಇಲ್ಲ" + +msgid "yes,no,maybe" +msgstr "ಹೌದು,ಇಲ್ಲ,ಇರಬಹುದು" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d ಬೈಟ್‌ಗಳು" +msgstr[1] "%(size)d ಬೈಟ್‌ಗಳು" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "ಅಪರಾಹ್ನ" + +msgid "a.m." +msgstr "ಪೂರ್ವಾಹ್ನ" + +msgid "PM" +msgstr "ಅಪರಾಹ್ನ" + +msgid "AM" +msgstr "ಪೂರ್ವಾಹ್ನ" + +msgid "midnight" +msgstr "ಮಧ್ಯರಾತ್ರಿ" + +msgid "noon" +msgstr "ಮಧ್ಯಾಹ್ನ" + +msgid "Monday" +msgstr "ಸೋಮವಾರ" + +msgid "Tuesday" +msgstr "ಮಂಗಳವಾರ" + +msgid "Wednesday" +msgstr "ಬುಧವಾರ" + +msgid "Thursday" +msgstr "ಗುರುವಾರ" + +msgid "Friday" +msgstr "ಶುಕ್ರವಾರ" + +msgid "Saturday" +msgstr "ಶನಿವಾರ" + +msgid "Sunday" +msgstr "ರವಿವಾರ" + +msgid "Mon" +msgstr "ಸೋಮ" + +msgid "Tue" +msgstr "ಮಂಗಳ" + +msgid "Wed" +msgstr "ಬುಧ" + +msgid "Thu" +msgstr "ಗುರು" + +msgid "Fri" +msgstr "ಶುಕ್ರ" + +msgid "Sat" +msgstr "ಶನಿ" + +msgid "Sun" +msgstr "ರವಿ" + +msgid "January" +msgstr "ಜನವರಿ" + +msgid "February" +msgstr "ಫೆಬ್ರುವರಿ" + +msgid "March" +msgstr "ಮಾರ್ಚ್" + +msgid "April" +msgstr "ಎಪ್ರಿಲ್" + +msgid "May" +msgstr "ಮೇ" + +msgid "June" +msgstr "ಜೂನ್" + +msgid "July" +msgstr "ಜುಲೈ" + +msgid "August" +msgstr "ಆಗಸ್ಟ್" + +msgid "September" +msgstr "ಸೆಪ್ಟೆಂಬರ್" + +msgid "October" +msgstr "ಅಕ್ಟೋಬರ್" + +msgid "November" +msgstr "ನವೆಂಬರ್" + +msgid "December" +msgstr "ಡಿಸೆಂಬರ್" + +msgid "jan" +msgstr "ಜನವರಿ" + +msgid "feb" +msgstr "ಫೆಬ್ರವರಿ" + +msgid "mar" +msgstr "ಮಾರ್ಚ್" + +msgid "apr" +msgstr "ಏಪ್ರಿಲ್" + +msgid "may" +msgstr "ಮೇ" + +msgid "jun" +msgstr "ಜೂನ್" + +msgid "jul" +msgstr "ಜುಲೈ" + +msgid "aug" +msgstr "ಆಗಸ್ಟ್‍" + +msgid "sep" +msgstr "ಸೆಪ್ಟೆಂಬರ್" + +msgid "oct" +msgstr "ಅಕ್ಟೋಬರ್" + +msgid "nov" +msgstr "ನವೆಂಬರ್" + +msgid "dec" +msgstr "ಡಿಸೆಂಬರ್" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "ಜನ." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "ಫೆಬ್ರ." + +msgctxt "abbrev. month" +msgid "March" +msgstr "ಮಾರ್ಚ್" + +msgctxt "abbrev. month" +msgid "April" +msgstr "ಏಪ್ರಿಲ್" + +msgctxt "abbrev. month" +msgid "May" +msgstr "ಮೇ" + +msgctxt "abbrev. month" +msgid "June" +msgstr "ಜೂನ್" + +msgctxt "abbrev. month" +msgid "July" +msgstr "ಜುಲೈ" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "ಆಗ." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "ಸೆಪ್ಟೆ." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "ಅಕ್ಟೋ." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "ನವೆಂ." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "ಡಿಸೆಂ." + +msgctxt "alt. month" +msgid "January" +msgstr "ಜನವರಿ" + +msgctxt "alt. month" +msgid "February" +msgstr "ಫೆಬ್ರವರಿ" + +msgctxt "alt. month" +msgid "March" +msgstr "ಮಾರ್ಚ್" + +msgctxt "alt. month" +msgid "April" +msgstr "ಏಪ್ರಿಲ್" + +msgctxt "alt. month" +msgid "May" +msgstr "ಮೇ" + +msgctxt "alt. month" +msgid "June" +msgstr "ಜೂನ್" + +msgctxt "alt. month" +msgid "July" +msgstr "ಜುಲೈ" + +msgctxt "alt. month" +msgid "August" +msgstr "ಆಗಸ್ಟ್‍" + +msgctxt "alt. month" +msgid "September" +msgstr "ಸಪ್ಟೆಂಬರ್" + +msgctxt "alt. month" +msgid "October" +msgstr "ಅಕ್ಟೋಬರ್" + +msgctxt "alt. month" +msgid "November" +msgstr "ನವೆಂಬರ್" + +msgctxt "alt. month" +msgid "December" +msgstr "ಡಿಸೆಂಬರ್" + +msgid "This is not a valid IPv6 address." +msgstr "" + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +msgid "or" +msgstr "ಅಥವ" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" + +msgid "0 minutes" +msgstr "" + +msgid "Forbidden" +msgstr "" + +msgid "CSRF verification failed. Request aborted." +msgstr "" + +msgid "" +"You are seeing this message because this HTTPS site requires a 'Referer " +"header' to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable 'Referer' headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for 'same-" +"origin' requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the 'Referrer-Policy: no-referrer' header, please remove them. The " +"CSRF protection requires the 'Referer' header to do strict referer checking. " +"If you're concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for 'same-origin' requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "" + +msgid "No year specified" +msgstr "ಯಾವುದೆ ವರ್ಷವನ್ನು ಸೂಚಿಲಾಗಿಲ್ಲ" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "ಯಾವುದೆ ತಿಂಗಳನ್ನು ಸೂಚಿಸಲಾಗಿಲ್ಲ" + +msgid "No day specified" +msgstr "ಯಾವುದೆ ದಿನವನ್ನು ಸೂಚಿಸಲಾಗಿಲ್ಲ" + +msgid "No week specified" +msgstr "ಯಾವುದೆ ವಾರವನ್ನು ಸೂಚಿಸಲಾಗಿಲ್ಲ" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "ಯಾವುದೆ %(verbose_name_plural)s ಲಭ್ಯವಿಲ್ಲ" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"ಭವಿಷ್ಯದ %(verbose_name_plural)s ಲಭ್ಯವಿಲ್ಲ ಏಕೆಂದರೆ %(class_name)s.allow_future " +"ಎನ್ನುವುದು ಅಸತ್ಯವಾಗಿದೆ (ಫಾಲ್ಸ್‍) ಆಗಿದೆ." + +#, python-format +msgid "Invalid date string '%(datestr)s' given format '%(format)s'" +msgstr "" +"ಅಸಿಂಧುವಾದ '%(datestr)s' ದಿನಾಂಕ ಪದಪುಂಜ ಒದಗಿಸಲಾದ ವಿನ್ಯಾಸವು '%(format)s' ಆಗಿದೆ" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "ಮನವಿಗೆ ತಾಳೆಯಾಗುವ ಯಾವುದೆ %(verbose_name)s ಕಂಡುಬಂದಿಲ್ಲ" + +msgid "Page is not 'last', nor can it be converted to an int." +msgstr "ಪುಟವು 'ಕೊನೆಯ'ದಲ್ಲ, ಅಥವ ಅದನ್ನು ಒಂದು int ಆಗಿ ಮಾರ್ಪಡಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "" + +#, python-format +msgid "Empty list and '%(class_name)s.allow_empty' is False." +msgstr "" +"ಖಾಲಿ ಪಟ್ಟಿ ಹಾಗು '%(class_name)s.allow_empty' ಎನ್ನುವುದು ಅಸತ್ಯವಾಗಿದೆ (ಫಾಲ್ಸ್‍)." + +msgid "Directory indexes are not allowed here." +msgstr "" + +#, python-format +msgid "\"%(path)s\" does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to's" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/lt/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/conf/locale/lt/LC_MESSAGES/django.po new file mode 100644 index 0000000..0af50ea --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/lt/LC_MESSAGES/django.po @@ -0,0 +1,1324 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Kostas , 2011 +# lauris , 2011 +# Matas Dailyda , 2015-2019 +# naktinis , 2012 +# Nikolajus Krauklis , 2013 +# Povilas Balzaravičius , 2011-2012 +# Simonas Kazlauskas , 2012-2014 +# Vytautas Astrauskas , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-01-18 10:33+0000\n" +"Last-Translator: Matas Dailyda \n" +"Language-Team: Lithuanian (http://www.transifex.com/django/django/language/" +"lt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lt\n" +"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < " +"11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? " +"1 : n % 1 != 0 ? 2: 3);\n" + +msgid "Afrikaans" +msgstr "Afrikiečių" + +msgid "Arabic" +msgstr "Arabų" + +msgid "Asturian" +msgstr "Austrų" + +msgid "Azerbaijani" +msgstr "Azerbaidžaniečių" + +msgid "Bulgarian" +msgstr "Bulgarų" + +msgid "Belarusian" +msgstr "Gudų" + +msgid "Bengali" +msgstr "Bengalų" + +msgid "Breton" +msgstr "Bretonų" + +msgid "Bosnian" +msgstr "Bosnių" + +msgid "Catalan" +msgstr "Katalonų" + +msgid "Czech" +msgstr "Čekų" + +msgid "Welsh" +msgstr "Velso" + +msgid "Danish" +msgstr "Danų" + +msgid "German" +msgstr "Vokiečių" + +msgid "Lower Sorbian" +msgstr "Žemutinė Sorbų" + +msgid "Greek" +msgstr "Graikų" + +msgid "English" +msgstr "Anglų" + +msgid "Australian English" +msgstr "Australų Anlgų" + +msgid "British English" +msgstr "Britų Anglų" + +msgid "Esperanto" +msgstr "Esperanto" + +msgid "Spanish" +msgstr "Ispanų" + +msgid "Argentinian Spanish" +msgstr "Argentiniečių Ispanų" + +msgid "Colombian Spanish" +msgstr "Kolumbų Ispanų" + +msgid "Mexican Spanish" +msgstr "Meksikiečių Ispanų" + +msgid "Nicaraguan Spanish" +msgstr "Nikaragvos Ispanijos" + +msgid "Venezuelan Spanish" +msgstr "Venesuelos Ispanų" + +msgid "Estonian" +msgstr "Estų" + +msgid "Basque" +msgstr "Baskų" + +msgid "Persian" +msgstr "Persų" + +msgid "Finnish" +msgstr "Suomių" + +msgid "French" +msgstr "Prancūzų" + +msgid "Frisian" +msgstr "Fryzų" + +msgid "Irish" +msgstr "Airių" + +msgid "Scottish Gaelic" +msgstr "Škotų Gėlų" + +msgid "Galician" +msgstr "Galų" + +msgid "Hebrew" +msgstr "Hebrajų" + +msgid "Hindi" +msgstr "Hindi" + +msgid "Croatian" +msgstr "Kroatų" + +msgid "Upper Sorbian" +msgstr "Aukštutinė Sorbų" + +msgid "Hungarian" +msgstr "Vengrų" + +msgid "Armenian" +msgstr "Armėnų" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "Indoneziečių" + +msgid "Ido" +msgstr "Ido" + +msgid "Icelandic" +msgstr "Islandų" + +msgid "Italian" +msgstr "Italų" + +msgid "Japanese" +msgstr "Japonų" + +msgid "Georgian" +msgstr "Gruzinų" + +msgid "Kabyle" +msgstr "Kabilų" + +msgid "Kazakh" +msgstr "Kazachų" + +msgid "Khmer" +msgstr "Khmerų" + +msgid "Kannada" +msgstr "Dravidų" + +msgid "Korean" +msgstr "Korėjiečių" + +msgid "Luxembourgish" +msgstr "Liuksemburgų" + +msgid "Lithuanian" +msgstr "Lietuvių" + +msgid "Latvian" +msgstr "Latvių" + +msgid "Macedonian" +msgstr "Makedonų" + +msgid "Malayalam" +msgstr "Malajalių" + +msgid "Mongolian" +msgstr "Mongolų" + +msgid "Marathi" +msgstr "Marati" + +msgid "Burmese" +msgstr "Mjanmų" + +msgid "Norwegian Bokmål" +msgstr "Norvegų Bokmal" + +msgid "Nepali" +msgstr "Nepalų" + +msgid "Dutch" +msgstr "Olandų" + +msgid "Norwegian Nynorsk" +msgstr "Norvegų Nynorsk" + +msgid "Ossetic" +msgstr "Osetinų" + +msgid "Punjabi" +msgstr "Pandžabi" + +msgid "Polish" +msgstr "Lenkų" + +msgid "Portuguese" +msgstr "Protugalų" + +msgid "Brazilian Portuguese" +msgstr "Brazilijos Portugalų" + +msgid "Romanian" +msgstr "Rumunų" + +msgid "Russian" +msgstr "Rusų" + +msgid "Slovak" +msgstr "Slovakų" + +msgid "Slovenian" +msgstr "Slovėnų" + +msgid "Albanian" +msgstr "Albanų" + +msgid "Serbian" +msgstr "Serbų" + +msgid "Serbian Latin" +msgstr "Serbų Lotynų" + +msgid "Swedish" +msgstr "Švedų" + +msgid "Swahili" +msgstr "Svahili" + +msgid "Tamil" +msgstr "Tamilų" + +msgid "Telugu" +msgstr "Telugų" + +msgid "Thai" +msgstr "Tailando" + +msgid "Turkish" +msgstr "Turkų" + +msgid "Tatar" +msgstr "Totorių" + +msgid "Udmurt" +msgstr "Udmurtų" + +msgid "Ukrainian" +msgstr "Ukrainiečių" + +msgid "Urdu" +msgstr "Urdu" + +msgid "Vietnamese" +msgstr "Vietnamiečių" + +msgid "Simplified Chinese" +msgstr "Supaprastinta kinų" + +msgid "Traditional Chinese" +msgstr "Tradicinė kinų" + +msgid "Messages" +msgstr "Žinutės" + +msgid "Site Maps" +msgstr "Tinklalapio struktūros" + +msgid "Static Files" +msgstr "Statiniai failai" + +msgid "Syndication" +msgstr "Sindikacija" + +msgid "That page number is not an integer" +msgstr "To puslapio numeris nėra sveikasis skaičius." + +msgid "That page number is less than 1" +msgstr "To numerio puslapis yra mažesnis už 1" + +msgid "That page contains no results" +msgstr "Tas puslapis neturi jokių rezultatų" + +msgid "Enter a valid value." +msgstr "Įveskite tinkamą reikšmę." + +msgid "Enter a valid URL." +msgstr "Įveskite tinkamą URL adresą." + +msgid "Enter a valid integer." +msgstr "Įveskite tinkamą sveikąjį skaičių." + +msgid "Enter a valid email address." +msgstr "Įveskite teisingą el. pašto adresą." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Šią reikšmę gali sudaryti tik raidės, skaičiai, pabraukimo arba paprasto " +"brūkšnio simboliai." + +msgid "" +"Enter a valid 'slug' consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Įveskite teisingą adresą sudarytą iš Unikodo raidžių, skaičių, pabraukimo " +"arba paprastų brūkšnių." + +msgid "Enter a valid IPv4 address." +msgstr "Įveskite validų IPv4 adresą." + +msgid "Enter a valid IPv6 address." +msgstr "Įveskite validų IPv6 adresą." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Įveskite validų IPv4 arba IPv6 adresą." + +msgid "Enter only digits separated by commas." +msgstr "Įveskite skaitmenis atskirtus kableliais." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Įsitikinkite, kad reikšmę sudaro %(limit_value)s simbolių (dabar yra " +"%(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Įsitikinkite, kad reikšmė yra mažesnė arba lygi %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Įsitikinkite, kad reikšmė yra didesnė arba lygi %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Įsitikinkite, kad reikšmė sudaryta iš nemažiau kaip %(limit_value)d ženklo " +"(dabartinis ilgis %(show_value)d)." +msgstr[1] "" +"Įsitikinkite, kad reikšmė sudaryta iš nemažiau kaip %(limit_value)d ženklų " +"(dabartinis ilgis %(show_value)d)." +msgstr[2] "" +"Įsitikinkite, kad reikšmė sudaryta iš nemažiau kaip %(limit_value)d ženklų " +"(dabartinis ilgis %(show_value)d)." +msgstr[3] "" +"Įsitikinkite, kad reikšmė sudaryta iš nemažiau kaip %(limit_value)d ženklų " +"(dabartinis ilgis %(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Įsitikinkite, kad reikšmė sudaryta iš nedaugiau kaip %(limit_value)d ženklo " +"(dabartinis ilgis %(show_value)d)." +msgstr[1] "" +"Įsitikinkite, kad reikšmė sudaryta iš nedaugiau kaip %(limit_value)d ženklų " +"(dabartinis ilgis %(show_value)d)." +msgstr[2] "" +"Įsitikinkite, kad reikšmė sudaryta iš nedaugiau kaip %(limit_value)d ženklų " +"(dabartinis ilgis %(show_value)d)." +msgstr[3] "" +"Įsitikinkite, kad reikšmė sudaryta iš nedaugiau kaip %(limit_value)d ženklų " +"(dabartinis ilgis %(show_value)d)." + +msgid "Enter a number." +msgstr "Įveskite skaičių." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Įsitikinkite, kad yra nedaugiau nei %(max)s skaitmuo." +msgstr[1] "Įsitikinkite, kad yra nedaugiau nei %(max)s skaitmenys." +msgstr[2] "Įsitikinkite, kad yra nedaugiau nei %(max)s skaitmenų." +msgstr[3] "Įsitikinkite, kad yra nedaugiau nei %(max)s skaitmenų." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Įsitikinkite, kad yra nedaugiau nei %(max)s skaitmuo po kablelio." +msgstr[1] "Įsitikinkite, kad yra nedaugiau nei %(max)s skaitmenys po kablelio." +msgstr[2] "Įsitikinkite, kad yra nedaugiau nei %(max)s skaitmenų po kablelio." +msgstr[3] "Įsitikinkite, kad yra nedaugiau nei %(max)s skaitmenų po kablelio." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "Įsitikinkite, kad yra nedaugiau nei %(max)s skaitmuo prieš kablelį." +msgstr[1] "" +"Įsitikinkite, kad yra nedaugiau nei %(max)s skaitmenys prieš kablelį." +msgstr[2] "" +"Įsitikinkite, kad yra nedaugiau nei %(max)s skaitmenų prieš kablelį." +msgstr[3] "" +"Įsitikinkite, kad yra nedaugiau nei %(max)s skaitmenų prieš kablelį." + +#, python-format +msgid "" +"File extension '%(extension)s' is not allowed. Allowed extensions are: " +"'%(allowed_extensions)s'." +msgstr "" +"Bylos tipas '%(extension)s' negalimas. Galimi tipai yra: " +"'%(allowed_extensions)s'." + +msgid "Null characters are not allowed." +msgstr "Nuliniai simboliai neleidžiami." + +msgid "and" +msgstr "ir" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s su šiais %(field_labels)s jau egzistuoja." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Reikšmės %(value)r rinktis negalima." + +msgid "This field cannot be null." +msgstr "Šis laukas negali būti null." + +msgid "This field cannot be blank." +msgstr "Lauką privaloma užpildyti." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s su šiuo %(field_label)s jau egzistuoja." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s privalo būti unikalus %(date_field_label)s %(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Lauko tipas: %(field_type)s " + +msgid "Integer" +msgstr "Sveikas skaičius" + +#, python-format +msgid "'%(value)s' value must be an integer." +msgstr "'%(value)s' turi būti sveikas skaičius." + +msgid "Big (8 byte) integer" +msgstr "Didelis (8 baitų) sveikas skaičius" + +#, python-format +msgid "'%(value)s' value must be either True or False." +msgstr "'%(value)s' reikšmė turi būti arba True, arba False." + +#, python-format +msgid "'%(value)s' value must be either True, False, or None." +msgstr "'%(value)s' reikšmė turi būti True, False, arba None." + +msgid "Boolean (Either True or False)" +msgstr "Loginė reikšmė (Tiesa arba Netiesa)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Eilutė (ilgis iki %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Kableliais atskirti sveikieji skaičiai" + +#, python-format +msgid "" +"'%(value)s' value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"'%(value)s' reikšmė yra netinkamu datos formatu. Reikšmė turi būti YYYY-MM-" +"DD formatu." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"'%(value)s' reikšmė yra teisingo (YYYY-MM-DD) formato, tačiau tai nėra " +"teisinga data." + +msgid "Date (without time)" +msgstr "Data (be laiko)" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"'%(value)s' reikšmė yra neteisingo formato. Reikšmė turi būti pateikta YYYY-" +"MM-DD HH:MM[:ss[.uuuuuu]][TZ] formatu." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"'%(value)s' reikšmė yra teisingo (YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]) " +"formato, tačiau tai nėra teisinga data ar laikas." + +msgid "Date (with time)" +msgstr "Data (su laiku)" + +#, python-format +msgid "'%(value)s' value must be a decimal number." +msgstr "'%(value)s' reikšmė turi būti dešimtainis skaičius." + +msgid "Decimal number" +msgstr "Dešimtainis skaičius" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in [DD] [HH:[MM:]]ss[." +"uuuuuu] format." +msgstr "" +"'%(value)s' reikšmė yra neteisingo formato. Reikšmė turi būti pateikta [DD] " +"[HH:[MM:]]ss[.uuuuuu] formatu." + +msgid "Duration" +msgstr "Trukmė" + +msgid "Email address" +msgstr "El. pašto adresas" + +msgid "File path" +msgstr "Kelias iki failo" + +#, python-format +msgid "'%(value)s' value must be a float." +msgstr "'%(value)s' reikšmė turi būti realus skaičius." + +msgid "Floating point number" +msgstr "Realus skaičius" + +msgid "IPv4 address" +msgstr "IPv4 adresas" + +msgid "IP address" +msgstr "IP adresas" + +#, python-format +msgid "'%(value)s' value must be either None, True or False." +msgstr "'%(value)s' reikšmė turi būti None, True arba False." + +msgid "Boolean (Either True, False or None)" +msgstr "Loginė reikšmė (Tiesa, Netiesa arba Nieko)" + +msgid "Positive integer" +msgstr "Teigiamas sveikasis skaičius" + +msgid "Positive small integer" +msgstr "Nedidelis teigiamas sveikasis skaičius" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Unikalus adresas (iki %(max_length)s ženklų)" + +msgid "Small integer" +msgstr "Nedidelis sveikasis skaičius" + +msgid "Text" +msgstr "Tekstas" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"'%(value)s' reikšmė yra neteisingo formato. Reikšmė turi būti pateikta HH:" +"MM[:ss[.uuuuuu]] formatu." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"'%(value)s' reikšmė yra teisingo (HH:MM[:ss[.uuuuuu]]) formato, tačiau tai " +"nėra teisingas laikas." + +msgid "Time" +msgstr "Laikas" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Neapdorota informacija" + +#, python-format +msgid "'%(value)s' is not a valid UUID." +msgstr "'%(value)s' yra netinkama UUID reikšmė." + +msgid "Universally unique identifier" +msgstr "Universaliai unikalus identifikatorius" + +msgid "File" +msgstr "Failas" + +msgid "Image" +msgstr "Paveiksliukas" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "%(model)s objektas su %(field)s %(value)r neegzistuoja." + +msgid "Foreign Key (type determined by related field)" +msgstr "Išorinis raktas (tipas nustatomas susijusiame lauke)" + +msgid "One-to-one relationship" +msgstr "Sąryšis vienas su vienu" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "%(from)s-%(to)s sąryšis" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "%(from)s-%(to)s sąryšiai" + +msgid "Many-to-many relationship" +msgstr "Sąryšis daug su daug" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Šis laukas yra privalomas." + +msgid "Enter a whole number." +msgstr "Įveskite pilną skaičių." + +msgid "Enter a valid date." +msgstr "Įveskite tinkamą datą." + +msgid "Enter a valid time." +msgstr "Įveskite tinkamą laiką." + +msgid "Enter a valid date/time." +msgstr "Įveskite tinkamą datą/laiką." + +msgid "Enter a valid duration." +msgstr "Įveskite tinkamą trukmę." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Dienų skaičius turi būti tarp {min_days} ir {max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Nebuvo nurodytas failas. Patikrinkite formos koduotę." + +msgid "No file was submitted." +msgstr "Failas nebuvo nurodytas." + +msgid "The submitted file is empty." +msgstr "Nurodytas failas yra tuščias." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Įsitikinkite, kad failo pavadinimas sudarytas iš nedaugiau kaip %(max)d " +"ženklo (dabartinis ilgis %(length)d)." +msgstr[1] "" +"Įsitikinkite, kad failo pavadinimas sudarytas iš nedaugiau kaip %(max)d " +"ženklų (dabartinis ilgis %(length)d)." +msgstr[2] "" +"Įsitikinkite, kad failo pavadinimas sudarytas iš nedaugiau kaip %(max)d " +"ženklų (dabartinis ilgis %(length)d)." +msgstr[3] "" +"Įsitikinkite, kad failo pavadinimas sudarytas iš nedaugiau kaip %(max)d " +"ženklų (dabartinis ilgis %(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Nurodykite failą arba pažymėkite išvalyti. Abu pasirinkimai negalimi." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Atsiųskite tinkamą paveiksliuką. Failas, kurį siuntėte nebuvo paveiksliukas, " +"arba buvo sugadintas." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Nurodykite tinkamą reikšmę. %(value)s nėra galimas pasirinkimas." + +msgid "Enter a list of values." +msgstr "Įveskite reikšmių sarašą." + +msgid "Enter a complete value." +msgstr "Įveskite pilną reikšmę." + +msgid "Enter a valid UUID." +msgstr "Įveskite tinkamą UUID." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Paslėptas laukelis %(name)s) %(error)s" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "ManagementForm duomenys buvo sugadinti arba neegzistuoja" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "Prašome pateikti %d arba mažiau formų." +msgstr[1] "Prašome pateikti %d arba mažiau formų." +msgstr[2] "Prašome pateikti %d arba mažiau formų." +msgstr[3] "Prašome pateikti %d arba mažiau formų." + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "Prašome pateikti %d arba daugiau formų." +msgstr[1] "Prašome pateikti %d arba daugiau formų." +msgstr[2] "Prašome pateikti %d arba daugiau formų." +msgstr[3] "Prašome pateikti %d arba daugiau formų." + +msgid "Order" +msgstr "Nurodyti" + +msgid "Delete" +msgstr "Ištrinti" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Pataisykite pasikartojančius duomenis laukui %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Pataisykite pasikartojančius duomenis laukui %(field)s. Duomenys privalo " +"būti unikalūs." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Pataisykite pasikartojančius duomenis laukui %(field_name)s. Duomenys " +"privalo būti unikalūs %(lookup)s peržiūroms per %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Pataisykite žemiau esančias pasikartojančias reikšmes." + +msgid "The inline value did not match the parent instance." +msgstr "Reikšmė nesutapo su pirminiu objektu." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Pasirinkite tinkamą reikšmę. Parinkta reikšmė nėra galima." + +#, python-format +msgid "\"%(pk)s\" is not a valid value." +msgstr "\"%(pk)s\" nėra tinkama reikšmė." + +#, python-format +msgid "" +"%(datetime)s couldn't be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"Nepavyko interpretuoti %(datetime)s %(current_timezone)s laiko juostoje; " +"Data gali turėti keletą reikšmių arba neegzistuoti." + +msgid "Clear" +msgstr "Išvalyti" + +msgid "Currently" +msgstr "Šiuo metu" + +msgid "Change" +msgstr "Pakeisti" + +msgid "Unknown" +msgstr "Nežinomas" + +msgid "Yes" +msgstr "Taip" + +msgid "No" +msgstr "Ne" + +msgid "yes,no,maybe" +msgstr "taip,ne,galbūt" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d baitas" +msgstr[1] "%(size)d baitai" +msgstr[2] "%(size)d baitai" +msgstr[3] "%(size)d baitai" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "vidurnaktis" + +msgid "noon" +msgstr "vidurdienis" + +msgid "Monday" +msgstr "Pirmadienis" + +msgid "Tuesday" +msgstr "Antradienis" + +msgid "Wednesday" +msgstr "Trečiadienis" + +msgid "Thursday" +msgstr "Ketvirtadienis" + +msgid "Friday" +msgstr "Penktadienis" + +msgid "Saturday" +msgstr "Šeštadienis" + +msgid "Sunday" +msgstr "Sekmadienis" + +msgid "Mon" +msgstr "Pr" + +msgid "Tue" +msgstr "A" + +msgid "Wed" +msgstr "T" + +msgid "Thu" +msgstr "K" + +msgid "Fri" +msgstr "P" + +msgid "Sat" +msgstr "Š" + +msgid "Sun" +msgstr "S" + +msgid "January" +msgstr "sausis" + +msgid "February" +msgstr "vasaris" + +msgid "March" +msgstr "kovas" + +msgid "April" +msgstr "balandis" + +msgid "May" +msgstr "gegužė" + +msgid "June" +msgstr "birželis" + +msgid "July" +msgstr "liepa" + +msgid "August" +msgstr "rugpjūtis" + +msgid "September" +msgstr "rugsėjis" + +msgid "October" +msgstr "spalis" + +msgid "November" +msgstr "lapkritis" + +msgid "December" +msgstr "gruodis" + +msgid "jan" +msgstr "sau" + +msgid "feb" +msgstr "vas" + +msgid "mar" +msgstr "kov" + +msgid "apr" +msgstr "bal" + +msgid "may" +msgstr "geg" + +msgid "jun" +msgstr "bir" + +msgid "jul" +msgstr "lie" + +msgid "aug" +msgstr "rugp" + +msgid "sep" +msgstr "rugs" + +msgid "oct" +msgstr "spa" + +msgid "nov" +msgstr "lap" + +msgid "dec" +msgstr "grd" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "saus." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "vas." + +msgctxt "abbrev. month" +msgid "March" +msgstr "kov." + +msgctxt "abbrev. month" +msgid "April" +msgstr "bal." + +msgctxt "abbrev. month" +msgid "May" +msgstr "geg." + +msgctxt "abbrev. month" +msgid "June" +msgstr "birž." + +msgctxt "abbrev. month" +msgid "July" +msgstr "liep." + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "rugpj." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "rugs." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "spal." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "lapkr." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "gruod." + +msgctxt "alt. month" +msgid "January" +msgstr "sausio" + +msgctxt "alt. month" +msgid "February" +msgstr "vasario" + +msgctxt "alt. month" +msgid "March" +msgstr "kovo" + +msgctxt "alt. month" +msgid "April" +msgstr "balandžio" + +msgctxt "alt. month" +msgid "May" +msgstr "gegužės" + +msgctxt "alt. month" +msgid "June" +msgstr "birželio" + +msgctxt "alt. month" +msgid "July" +msgstr "liepos" + +msgctxt "alt. month" +msgid "August" +msgstr "rugpjūčio" + +msgctxt "alt. month" +msgid "September" +msgstr "rugsėjo" + +msgctxt "alt. month" +msgid "October" +msgstr "spalio" + +msgctxt "alt. month" +msgid "November" +msgstr "lapkričio" + +msgctxt "alt. month" +msgid "December" +msgstr "gruodžio" + +msgid "This is not a valid IPv6 address." +msgstr "Tai nėra teisingas IPv6 adresas." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s..." + +msgid "or" +msgstr "arba" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr "," + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d metas" +msgstr[1] "%d metai" +msgstr[2] "%d metų" +msgstr[3] "%d metų" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d mėnuo" +msgstr[1] "%d mėnesiai" +msgstr[2] "%d mėnesių" +msgstr[3] "%d mėnesių" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d savaitė" +msgstr[1] "%d savaitės" +msgstr[2] "%d savaičių" +msgstr[3] "%d savaičių" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d diena" +msgstr[1] "%d dienos" +msgstr[2] "%d dienų" +msgstr[3] "%d dienų" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d valanda" +msgstr[1] "%d valandos" +msgstr[2] "%d valandų" +msgstr[3] "%d valandų" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minutė" +msgstr[1] "%d minutės" +msgstr[2] "%d minučių" +msgstr[3] "%d minučių" + +msgid "0 minutes" +msgstr "0 minučių" + +msgid "Forbidden" +msgstr "Uždrausta" + +msgid "CSRF verification failed. Request aborted." +msgstr "Nepavyko CSRF patvirtinimas. Užklausa nutraukta." + +msgid "" +"You are seeing this message because this HTTPS site requires a 'Referer " +"header' to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Jūs matote šią žinutę nes šis HTTPS puslapis reikalauja kad Jūsų naršyklė " +"siųstų 'Referer header', bet jis nebuvo išsiųstas. Šis 'Header' " +"reikalaujamas saugumo sumetimais, kad užtikrinti jog jūsų naršyklė nėra " +"užgrobiama trečiųjų asmenų." + +msgid "" +"If you have configured your browser to disable 'Referer' headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for 'same-" +"origin' requests." +msgstr "" +"Jeigu Jūsų naršyklėje išjungti 'Referer headers', prašome juos įjungti, bent " +"jau šitame tinklalapyje, arba HTTPS prisijungimams, arba 'same-origin' " +"užklausoms." + +msgid "" +"If you are using the tag or " +"including the 'Referrer-Policy: no-referrer' header, please remove them. The " +"CSRF protection requires the 'Referer' header to do strict referer checking. " +"If you're concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"Jei naudojate žymeną " +"pridedate 'Referrer-Policy: no-referrer' antraštę, prašome juo panaikinti. " +"CSRF apsauga reikalauja 'Referer' antraštės vykdyti griežtą patikrinimą. Jei " +"esate susirūpinę privatumu, naudokite tokias alternatyvas nuorodoms į " +"išorinius tinklalapius kaip ." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Jūs matote šią žinutę nes šis puslapis reikalauja CSRF slapuko, kai " +"pateikiama forma. Slapukas reikalaujamas saugumo sumetimais, kad užtikrinti " +"jog jūsų naršyklė nėra užgrobiama trečiųjų asmenų." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for 'same-origin' requests." +msgstr "" +"Jeigu Jūsų naršyklėje išjungti slapukai, prašome juos įjungti, bent jau " +"šitame tinklalapyje, arba 'same-origin' užklausoms." + +msgid "More information is available with DEBUG=True." +msgstr "Gauti daugiau informacijos galima su DEBUG=True nustatymu." + +msgid "No year specified" +msgstr "Nenurodyti metai" + +msgid "Date out of range" +msgstr "Data išeina iš ribų" + +msgid "No month specified" +msgstr "Nenurodytas mėnuo" + +msgid "No day specified" +msgstr "Nenurodyta diena" + +msgid "No week specified" +msgstr "Nenurodyta savaitė" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Nėra %(verbose_name_plural)s" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Ateities %(verbose_name_plural)s nėra prieinami, nes %(class_name)s." +"allow_future yra False." + +#, python-format +msgid "Invalid date string '%(datestr)s' given format '%(format)s'" +msgstr "Data '%(datestr)s' neatitinka formato '%(format)s'" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Atitinkantis užklausą %(verbose_name)s nerastas" + +msgid "Page is not 'last', nor can it be converted to an int." +msgstr "" +"Puslapis nėra 'paskutinis', taip pat negali būti paverstas į sveiką skaičių." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Neegzistuojantis puslapis (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and '%(class_name)s.allow_empty' is False." +msgstr "Tuščias sąrašas ir '%(class_name)s.allow_empty' yra False." + +msgid "Directory indexes are not allowed here." +msgstr "Aplankų indeksai čia neleidžiami." + +#, python-format +msgid "\"%(path)s\" does not exist" +msgstr "\"%(path)s\" neegzistuoja" + +#, python-format +msgid "Index of %(directory)s" +msgstr "%(directory)s indeksas" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "Django: Žiniatinklio karkasas perfekcionistams su terminais." + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Žiūrėti Django %(version)s išleidimo " +"pastabas" + +msgid "The install worked successfully! Congratulations!" +msgstr "Diegimas pavyko! Sveikiname!" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Jūs matote šią žinutę dėl to kad Django nustatymų faile įvesta DEBUG = True ir Jūs nenustatėte jokių URL'ų." + +msgid "Django Documentation" +msgstr "Django dokumentacija" + +msgid "Topics, references, & how-to's" +msgstr "Temos, nuorodos ir & kaip tai padaryti" + +msgid "Tutorial: A Polling App" +msgstr "Pamoka: Apklausos aplikacija" + +msgid "Get started with Django" +msgstr "Pradėti su Django" + +msgid "Django Community" +msgstr "Django Bendrija" + +msgid "Connect, get help, or contribute" +msgstr "Prisijunk, gauk pagalbą arba prisidėk" diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/mk/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/conf/locale/mk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..659db90057a1c99a72606740721762ea2339c6db GIT binary patch literal 29431 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/mk/__init__.py b/venv/lib/python3.7/site-packages/django/conf/locale/mk/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/mn/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/conf/locale/mn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f09d90040bd72419912cc17df3cca19916b6715d GIT binary patch literal 31170 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 ChAFTB literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/mn/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/conf/locale/mn/LC_MESSAGES/django.po new file mode 100644 index 0000000..756331e --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/mn/LC_MESSAGES/django.po @@ -0,0 +1,1274 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ankhbayar , 2013 +# Bayarkhuu Bataa, 2014,2017-2018 +# Baskhuu Lodoikhuu , 2011 +# Jannis Leidel , 2011 +# jargalan , 2011 +# Tsolmon , 2011 +# Zorig, 2013-2014,2016,2018 +# Zorig, 2019 +# Анхбаяр Анхаа , 2013-2016,2018-2019 +# Баясгалан Цэвлээ , 2011,2015,2017 +# Ганзориг БП , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-02-19 08:42+0000\n" +"Last-Translator: Анхбаяр Анхаа \n" +"Language-Team: Mongolian (http://www.transifex.com/django/django/language/" +"mn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "Африк" + +msgid "Arabic" +msgstr "Араб" + +msgid "Asturian" +msgstr "Астури" + +msgid "Azerbaijani" +msgstr "Азербажан" + +msgid "Bulgarian" +msgstr "Болгар" + +msgid "Belarusian" +msgstr "Беларус" + +msgid "Bengali" +msgstr "Бенгал" + +msgid "Breton" +msgstr "Бэрэйтон " + +msgid "Bosnian" +msgstr "Босни" + +msgid "Catalan" +msgstr "Каталан" + +msgid "Czech" +msgstr "Чех" + +msgid "Welsh" +msgstr "Уэльс" + +msgid "Danish" +msgstr "Дани" + +msgid "German" +msgstr "Герман" + +msgid "Lower Sorbian" +msgstr "Доод Сорбин" + +msgid "Greek" +msgstr "Грек" + +msgid "English" +msgstr "Англи" + +msgid "Australian English" +msgstr "Австрали Англи" + +msgid "British English" +msgstr "Британи Англи" + +msgid "Esperanto" +msgstr "Эсперанто" + +msgid "Spanish" +msgstr "Испани" + +msgid "Argentinian Spanish" +msgstr "Аргентинийн Испани" + +msgid "Colombian Spanish" +msgstr "Колумбийн Испаниар" + +msgid "Mexican Spanish" +msgstr "Мексикийн Испани" + +msgid "Nicaraguan Spanish" +msgstr "Никрагуан Испани" + +msgid "Venezuelan Spanish" +msgstr "Венесуэлийн Спани" + +msgid "Estonian" +msgstr "Эстони" + +msgid "Basque" +msgstr "Баск" + +msgid "Persian" +msgstr "Перс" + +msgid "Finnish" +msgstr "Финлянд" + +msgid "French" +msgstr "Франц" + +msgid "Frisian" +msgstr "Фриз" + +msgid "Irish" +msgstr "Ирланд" + +msgid "Scottish Gaelic" +msgstr "Шотландийн Гаелик" + +msgid "Galician" +msgstr "Галици" + +msgid "Hebrew" +msgstr "Еврэй" + +msgid "Hindi" +msgstr "Хинди" + +msgid "Croatian" +msgstr "Хорват" + +msgid "Upper Sorbian" +msgstr "Дээд Сорбин" + +msgid "Hungarian" +msgstr "Унгар" + +msgid "Armenian" +msgstr "Армен" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "Индонези" + +msgid "Ido" +msgstr "Идо" + +msgid "Icelandic" +msgstr "Исланд" + +msgid "Italian" +msgstr "Итали" + +msgid "Japanese" +msgstr "Япон" + +msgid "Georgian" +msgstr "Гүрж" + +msgid "Kabyle" +msgstr "Кабилэ" + +msgid "Kazakh" +msgstr "Казак" + +msgid "Khmer" +msgstr "Кхмер" + +msgid "Kannada" +msgstr "Канад" + +msgid "Korean" +msgstr "Солонгос" + +msgid "Luxembourgish" +msgstr "Лүксенбүргиш" + +msgid "Lithuanian" +msgstr "Литва" + +msgid "Latvian" +msgstr "Латви" + +msgid "Macedonian" +msgstr "Македон" + +msgid "Malayalam" +msgstr "Малайз" + +msgid "Mongolian" +msgstr "Монгол" + +msgid "Marathi" +msgstr "маратхи" + +msgid "Burmese" +msgstr "Бирм" + +msgid "Norwegian Bokmål" +msgstr "Норвеги Бокмал" + +msgid "Nepali" +msgstr "Непал" + +msgid "Dutch" +msgstr "Голланд" + +msgid "Norwegian Nynorsk" +msgstr "Норвегийн нюнорск" + +msgid "Ossetic" +msgstr "Оссетик" + +msgid "Punjabi" +msgstr "Панжаби" + +msgid "Polish" +msgstr "Польш" + +msgid "Portuguese" +msgstr "Португал" + +msgid "Brazilian Portuguese" +msgstr "Бразилийн Португали" + +msgid "Romanian" +msgstr "Румын" + +msgid "Russian" +msgstr "Орос" + +msgid "Slovak" +msgstr "Словак" + +msgid "Slovenian" +msgstr "Словен" + +msgid "Albanian" +msgstr "Альбани" + +msgid "Serbian" +msgstr "Серби" + +msgid "Serbian Latin" +msgstr "Серби латин" + +msgid "Swedish" +msgstr "Щвед" + +msgid "Swahili" +msgstr "Савахил" + +msgid "Tamil" +msgstr "Тамил" + +msgid "Telugu" +msgstr "Тэлүгү" + +msgid "Thai" +msgstr "Тайланд" + +msgid "Turkish" +msgstr "Турк" + +msgid "Tatar" +msgstr "Татар" + +msgid "Udmurt" +msgstr "Удмурт" + +msgid "Ukrainian" +msgstr "Украйн" + +msgid "Urdu" +msgstr "Урду" + +msgid "Vietnamese" +msgstr "Вьетнам" + +msgid "Simplified Chinese" +msgstr "Хятад (хялбаршуулсан) " + +msgid "Traditional Chinese" +msgstr "Хятад (уламжлалт)" + +msgid "Messages" +msgstr "Мэдээллүүд" + +msgid "Site Maps" +msgstr "Сайтын бүтэц" + +msgid "Static Files" +msgstr "Статик файлууд" + +msgid "Syndication" +msgstr "Нэгтгэл" + +msgid "That page number is not an integer" +msgstr "Хуудасны дугаар бүхэл тоо / Integer / биш байна" + +msgid "That page number is less than 1" +msgstr "Хуудасны дугаар 1-ээс байга байна" + +msgid "That page contains no results" +msgstr "Хуудас үр дүн агуулаагүй байна" + +msgid "Enter a valid value." +msgstr "Зөв утга оруулна уу." + +msgid "Enter a valid URL." +msgstr "Зөв, хүчинтэй хаяг (URL) оруулна уу." + +msgid "Enter a valid integer." +msgstr "Бүхэл тоо оруулна уу" + +msgid "Enter a valid email address." +msgstr "Зөв имэйл хаяг оруулна уу" + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Үсэг, тоо, доогуур зураас, дундуур зурааснаас бүрдэх зөв 'slug' оруулна уу." + +msgid "" +"Enter a valid 'slug' consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Үсэг, тоо, доогуур зураас, дундуур зурааснаас бүрдэх зөв 'slug' оруулна уу." + +msgid "Enter a valid IPv4 address." +msgstr "Зөв IPv4 хаяг оруулна уу. " + +msgid "Enter a valid IPv6 address." +msgstr "Зөв IPv6 хаяг оруулна уу." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Зөв IPv4 эсвэл IPv6 хаяг оруулна уу." + +msgid "Enter only digits separated by commas." +msgstr "Зөвхөн таслалаар тусгаарлагдсан цифр оруулна уу." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Энэ утга хамгийн ихдээ %(limit_value)s байх ёстой. (одоо %(show_value)s " +"байна)" + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Энэ утга %(limit_value)s -с бага эсвэл тэнцүү байх ёстой." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Энэ утга %(limit_value)s -с их эсвэл тэнцүү байх нөхцлийг хангана уу." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Хамгийн ихдээ %(limit_value)d тэмдэгт байх нөхцлийг хангана уу. " +"(%(show_value)d-ийн дагуу)" +msgstr[1] "" +"Хамгийн ихдээ %(limit_value)d тэмдэгт байх нөхцлийг хангана уу. " +"(%(show_value)d-ийн дагуу)" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[1] "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." + +msgid "Enter a number." +msgstr "Тоон утга оруулна уу." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "%(max)s -ээс ихгүй утга оруулна уу " +msgstr[1] "%(max)s -ээс ихгүй утга оруулна уу " + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Энд %(max)s -аас олонгүй бутархайн орон байх ёстой. " +msgstr[1] "Энд %(max)s -аас олонгүй бутархайн орон байх ёстой. " + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "Энд бутархайн таслалаас өмнө %(max)s-аас олонгүй цифр байх ёстой." +msgstr[1] "Энд бутархайн таслалаас өмнө %(max)s-аас олонгүй цифр байх ёстой." + +#, python-format +msgid "" +"File extension '%(extension)s' is not allowed. Allowed extensions are: " +"'%(allowed_extensions)s'." +msgstr "" +"Файлын '%(extension)s' өргөтгөл зөвшөөрөгдөөгүй байна. Дараах өргөтгөлүүд " +"зөвшөөрөгдсөн: '%(allowed_extensions)s'." + +msgid "Null characters are not allowed." +msgstr "Хоосон тэмдэгт зөвшөөрөгдөхгүй." + +msgid "and" +msgstr "ба" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(field_labels)s талбар бүхий %(model_name)s аль хэдийн орсон байна." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "%(value)r буруу сонголт байна." + +msgid "This field cannot be null." +msgstr "Энэ хэсгийг хоосон орхиж болохгүй." + +msgid "This field cannot be blank." +msgstr "Энэ хэсэг хоосон байж болохгүй." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(field_label)s-тэй %(model_name)s-ийг аль хэдийнэ оруулсан байна." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s талбарт давхардахгүй байх хэрэгтэй %(date_field_label)s " +"%(lookup_type)s оруулна." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Талбарийн төрөл нь : %(field_type)s" + +msgid "Integer" +msgstr "Бүхэл тоо" + +#, python-format +msgid "'%(value)s' value must be an integer." +msgstr "'%(value)s' бүхэл тоо байх ёстой." + +msgid "Big (8 byte) integer" +msgstr "Том (8 байт) бүхэл тоо" + +#, python-format +msgid "'%(value)s' value must be either True or False." +msgstr "'%(value)s' заавал True эсвэл False утга авах." + +#, python-format +msgid "'%(value)s' value must be either True, False, or None." +msgstr "'%(value)s' утга True,False, None ийн аль нэг байх ёстой." + +msgid "Boolean (Either True or False)" +msgstr "Boolean (Үнэн худлын аль нэг нь)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Бичвэр (%(max_length)s хүртэл)" + +msgid "Comma-separated integers" +msgstr "Таслалаар тусгаарлагдсан бүхэл тоо" + +#, python-format +msgid "" +"'%(value)s' value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "'%(value)s' нь буруу байна. Энэ нь ОООО-СС-ӨӨ форматтай байх ёстой." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "'%(value)s' утга (YYYY-MM-DD) форматтай байх хэрэгтэй." + +msgid "Date (without time)" +msgstr "Огноо (цаггүй)" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"'%(value)s' утга буруу форматтай байна. Формат нь заавал YYYY-MM-DD HH:MM[:" +"ss[.uuuuuu]][TZ] байх хэрэгтэй." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"'%(value)s' утга зөв форматтай байна(YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]) " +"гэвч буруу огноо/цаг байна. " + +msgid "Date (with time)" +msgstr "Огноо (цагтай)" + +#, python-format +msgid "'%(value)s' value must be a decimal number." +msgstr "'%(value)s' заавал decimal утга байх." + +msgid "Decimal number" +msgstr "Аравтын бутархайт тоо" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in [DD] [HH:[MM:]]ss[." +"uuuuuu] format." +msgstr "" +"'%(value)s' утга буруу форматтай байна. Формат нь заавал [DD] [HH:[MM:]]ss[." +"uuuuuu] байх хэрэгтэй." + +msgid "Duration" +msgstr "Үргэлжлэх хугацаа" + +msgid "Email address" +msgstr "Имэйл хаяг" + +msgid "File path" +msgstr "Файлын зам " + +#, python-format +msgid "'%(value)s' value must be a float." +msgstr "'%(value)s' нь бутархай тоо байх ёстой." + +msgid "Floating point number" +msgstr "Хөвөгч таслалтай тоо" + +msgid "IPv4 address" +msgstr "IPv4 хаяг" + +msgid "IP address" +msgstr "IP хаяг" + +#, python-format +msgid "'%(value)s' value must be either None, True or False." +msgstr "'%(value)s' заавал None, True эсвэл False утга авах ёстой." + +msgid "Boolean (Either True, False or None)" +msgstr "Boolean (Үнэн, худал, эсвэл юу ч биш)" + +msgid "Positive integer" +msgstr "Бүхэл тоох утга" + +msgid "Positive small integer" +msgstr "Бага бүхэл тоон утга" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Слаг (ихдээ %(max_length)s )" + +msgid "Small integer" +msgstr "Бага тоон утна" + +msgid "Text" +msgstr "Текст" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"'%(value)s' утга буруу форматтай байна. Формат нь заавал HH:MM[:ss[.uuuuuu]] " +"байх хэрэгтэй." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"'%(value)s' утгын формат зөв байна (HH:MM[:ss[.uuuuuu]]) гэвч цаг буруу " +"байна." + +msgid "Time" +msgstr "Цаг" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Бинари өгөгдөл" + +#, python-format +msgid "'%(value)s' is not a valid UUID." +msgstr "'%(value)s' утга зөв UUID биш байна." + +msgid "Universally unique identifier" +msgstr "UUID" + +msgid "File" +msgstr "Файл" + +msgid "Image" +msgstr "Зураг" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "%(field)s %(value)r утгатай %(model)s байхгүй байна." + +msgid "Foreign Key (type determined by related field)" +msgstr "Гадаад түлхүүр (тодорхой төрлийн холбоос талбар)" + +msgid "One-to-one relationship" +msgstr "Нэг-нэг холбоос" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "%(from)s-%(to)s холбоос" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "%(from)s-%(to)s холбоосууд" + +msgid "Many-to-many relationship" +msgstr "Олон-олон холбоос" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Энэ талбарыг бөглөх шаардлагатай." + +msgid "Enter a whole number." +msgstr "Бүхэл тоон утга оруулна уу." + +msgid "Enter a valid date." +msgstr "Зөв огноо оруулна уу." + +msgid "Enter a valid time." +msgstr "Зөв цаг оруулна уу." + +msgid "Enter a valid date/time." +msgstr "Огноо/цаг-ыг зөв оруулна уу." + +msgid "Enter a valid duration." +msgstr "Үргэлжилэх хугацааг зөв оруулна уу." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Өдөрийн утга {min_days} ээс {max_days} ийн хооронд байх ёстой." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Файл оруулаагүй байна. Маягтаас кодлох төрлийг чагтал. " + +msgid "No file was submitted." +msgstr "Файл оруулаагүй байна." + +msgid "The submitted file is empty." +msgstr "Оруулсан файл хоосон байна. " + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[1] "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"Нэг бол сонголтын чягтыг авах эсвэл файл оруулна уу. Зэрэг хэрэгжих " +"боломжгүй." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Зөв зураг оруулна уу. Таны оруулсан файл нэг бол зургийн файл биш эсвэл " +"гэмтсэн зураг байна." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Зөв сонголт хийнэ үү. %(value)s гэсэн сонголт байхгүй байна." + +msgid "Enter a list of values." +msgstr "Өгөгдхүүний жагсаалтаа оруулна уу." + +msgid "Enter a complete value." +msgstr "Бүрэн утга оруулна уу." + +msgid "Enter a valid UUID." +msgstr "Зөв UUID оруулна уу." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Нууц талбар%(name)s) %(error)s" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "УдирдахФормын мэдээлэл олдсонгүй эсвэл өөрчлөгдсөн байна" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "%d ихгүй форм илгээн үү" +msgstr[1] "%d ихгүй форм илгээн үү" + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "%d эсвэл их форм илгээнэ үү" +msgstr[1] "%d эсвэл их форм илгээнэ үү" + +msgid "Order" +msgstr "Эрэмбэлэх" + +msgid "Delete" +msgstr "Устгах" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "%(field)s хэсэг дэх давхардсан утгыг засварлана уу. " + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"%(field)s хэсэг дэх давхардсан утгыг засварлана уу. Түүний утгууд " +"давхардахгүй байх ёстой." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"%(field_name)s хэсэг дэх давхардсан утгыг засварлана уу. %(date_field)s-н " +"%(lookup)s хувьд давхардахгүй байх ёстой." + +msgid "Please correct the duplicate values below." +msgstr "Доорх давхардсан утгуудыг засна уу." + +msgid "The inline value did not match the parent instance." +msgstr "Inline утга эцэг обекттой таарахгүй байна." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Зөв сонголт хийнэ үү. Энэ утга сонголтонд алга." + +#, python-format +msgid "\"%(pk)s\" is not a valid value." +msgstr "\"%(pk)s\" зөв утга биш байна." + +#, python-format +msgid "" +"%(datetime)s couldn't be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s цагийн бүсийг хөрвүүлэж чадахгүй байна. %(current_timezone)s; " +"цагийн бүс буруу эсвэл байхгүй байж магадгүй." + +msgid "Clear" +msgstr "Цэвэрлэх" + +msgid "Currently" +msgstr "Одоогийн" + +msgid "Change" +msgstr "Засах" + +msgid "Unknown" +msgstr "Тодорхойгүй" + +msgid "Yes" +msgstr "Тийм" + +msgid "No" +msgstr "Үгүй" + +msgid "yes,no,maybe" +msgstr "тийм,үгүй,магадгүй" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d байт" +msgstr[1] "%(size)d байт" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "шөнө дунд" + +msgid "noon" +msgstr "үд дунд" + +msgid "Monday" +msgstr "Даваа гариг" + +msgid "Tuesday" +msgstr "Мягмар гариг" + +msgid "Wednesday" +msgstr "Лхагва гариг" + +msgid "Thursday" +msgstr "Пүрэв гариг" + +msgid "Friday" +msgstr "Баасан гариг" + +msgid "Saturday" +msgstr "Бямба гариг" + +msgid "Sunday" +msgstr "Ням гариг" + +msgid "Mon" +msgstr "Дав" + +msgid "Tue" +msgstr "Мяг" + +msgid "Wed" +msgstr "Лха" + +msgid "Thu" +msgstr "Пүр" + +msgid "Fri" +msgstr "Баа" + +msgid "Sat" +msgstr "Бям" + +msgid "Sun" +msgstr "Ням" + +msgid "January" +msgstr "1-р сар" + +msgid "February" +msgstr "2-р сар" + +msgid "March" +msgstr "3-р сар" + +msgid "April" +msgstr "4-р сар" + +msgid "May" +msgstr "5-р сар" + +msgid "June" +msgstr "6-р сар" + +msgid "July" +msgstr "7-р сар" + +msgid "August" +msgstr "8-р сар" + +msgid "September" +msgstr "9-р сар" + +msgid "October" +msgstr "10-р сар" + +msgid "November" +msgstr "11-р сар" + +msgid "December" +msgstr "12-р сар" + +msgid "jan" +msgstr "1-р сар" + +msgid "feb" +msgstr "2-р сар" + +msgid "mar" +msgstr "3-р сар" + +msgid "apr" +msgstr "4-р сар" + +msgid "may" +msgstr "5-р сар" + +msgid "jun" +msgstr "6-р сар" + +msgid "jul" +msgstr "7-р сар" + +msgid "aug" +msgstr "8-р сар " + +msgid "sep" +msgstr "9-р сар" + +msgid "oct" +msgstr "10-р сар" + +msgid "nov" +msgstr "11-р сар" + +msgid "dec" +msgstr "12-р сар" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "1-р сар." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "2-р сар." + +msgctxt "abbrev. month" +msgid "March" +msgstr "3-р сар." + +msgctxt "abbrev. month" +msgid "April" +msgstr "4-р сар." + +msgctxt "abbrev. month" +msgid "May" +msgstr "5-р сар." + +msgctxt "abbrev. month" +msgid "June" +msgstr "6-р сар." + +msgctxt "abbrev. month" +msgid "July" +msgstr "7-р сар." + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "8-р сар." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "9-р сар." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "10-р сар." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "11-р сар." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "12-р сар." + +msgctxt "alt. month" +msgid "January" +msgstr "Хулгана" + +msgctxt "alt. month" +msgid "February" +msgstr "Үхэр" + +msgctxt "alt. month" +msgid "March" +msgstr "Бар" + +msgctxt "alt. month" +msgid "April" +msgstr "Туулай" + +msgctxt "alt. month" +msgid "May" +msgstr "Луу" + +msgctxt "alt. month" +msgid "June" +msgstr "Могой" + +msgctxt "alt. month" +msgid "July" +msgstr "Морь" + +msgctxt "alt. month" +msgid "August" +msgstr "Хонь" + +msgctxt "alt. month" +msgid "September" +msgstr "Бич" + +msgctxt "alt. month" +msgid "October" +msgstr "Тахиа" + +msgctxt "alt. month" +msgid "November" +msgstr "Нохой" + +msgctxt "alt. month" +msgid "December" +msgstr "Гахай" + +msgid "This is not a valid IPv6 address." +msgstr "Энэ буруу IPv6 хаяг байна." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "буюу" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d жил" +msgstr[1] "%d жил" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d сар" +msgstr[1] "%d сар" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d долоо хоног" +msgstr[1] "%d долоо хоног" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d өдөр" +msgstr[1] "%d өдөр" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d цаг" +msgstr[1] "%d цаг" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d минут" +msgstr[1] "%d минут" + +msgid "0 minutes" +msgstr "0 минут" + +msgid "Forbidden" +msgstr "Хориотой" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF дээр уналаа. Хүсэлт таслагдсан." + +msgid "" +"You are seeing this message because this HTTPS site requires a 'Referer " +"header' to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Таны веб хөтөчөөс 'Referer header'-ийг HTTPS хуудасд илгээх шаардлагатай " +"байдаг учир Та энэ мэдэгдлийг харж байна. Энэ нь гуравдагч этгээдээс " +"хамгаалахын тулд шаардлагатай." + +msgid "" +"If you have configured your browser to disable 'Referer' headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for 'same-" +"origin' requests." +msgstr "" +"Хэрвээ та веб хөтөчөө 'Referer' толгойг идэвхигүй болгосон бол энэ хуудас, " +"HTTPS холболт эсвэл 'same-origin' хүсэлтэнд зориулж идэвхижүүлнэ үү." + +msgid "" +"If you are using the tag or " +"including the 'Referrer-Policy: no-referrer' header, please remove them. The " +"CSRF protection requires the 'Referer' header to do strict referer checking. " +"If you're concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"Хэрвээ та таг ашиглаж " +"байгаа бол эсвэл 'Referrer-Policy: no-referrer' толгойг нэмсэн бол, " +"эдгээрийг устгана уу. CSRF хамгаалалт 'Referer' толгойг чанд шалгалт хийхийг " +"шаарддаг. Хэрвээ та хувийн аюулгүй байдалд санаа тавьдаг бол 3-дагч сайтыг " +"холбохдоо ашиглана уу." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Энэ хуудсанд форм илгээхийн тулд CSRF күүки шаардлагатай учир Та энэ " +"мэдэгдлийг харж байна. Энэ күүки нь гуравдагч этгээдээс хамгаалахын тулд " +"шаардлагатай." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for 'same-origin' requests." +msgstr "" +"Хэрвээ та веб хөтөчийн күүкийг хаасан бол энэ хуудас эсвэл 'same-origin' " +"хүсэлтэнд зориулж идэвхижүүлнэ үү." + +msgid "More information is available with DEBUG=True." +msgstr "DEBUG=True үед дэлгэрэнгүй мэдээлэл харах боломжтой." + +msgid "No year specified" +msgstr "Он тодорхойлоогүй байна" + +msgid "Date out of range" +msgstr "Хугацааны хязгаар хэтэрсэн байна" + +msgid "No month specified" +msgstr "Сар тодорхойлоогүй байна" + +msgid "No day specified" +msgstr "Өдөр тодорхойлоогүй байна" + +msgid "No week specified" +msgstr "Долоо хоног тодорхойлоогүй байна" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "%(verbose_name_plural)s боломжгүй" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"%(class_name)s.allow_future нь худлаа учраас %(verbose_name_plural)s нь " +"боломжгүй." + +#, python-format +msgid "Invalid date string '%(datestr)s' given format '%(format)s'" +msgstr "" +"Буруу огноо. '%(datestr)s' огноо '%(format)s' хэлбэрт тохирохгүй байна." + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Шүүлтүүрт таарах %(verbose_name)s олдсонгүй " + +msgid "Page is not 'last', nor can it be converted to an int." +msgstr "Хуудас нь 'last' биш, эсвэл тоонд хөрвүүлэж болохгүй байна." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Буруу хуудас (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and '%(class_name)s.allow_empty' is False." +msgstr "" +"Жагсаалт хоосон байна бас '%(class_name)s.allow_empty' ийг False гэж өгсөн." + +msgid "Directory indexes are not allowed here." +msgstr "Файлын жагсаалтыг энд зөвшөөрөөгүй." + +#, python-format +msgid "\"%(path)s\" does not exist" +msgstr "\"%(path)s\" байхгүй байна." + +#, python-format +msgid "Index of %(directory)s" +msgstr "%(directory)s ийн жагсаалт" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "Джанго: Чанартай бөгөөд хугацаанд нь хийхэд зориулсан Web framework." + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Джанго %(version)s хувирбарын тэмдэглэл харах " + +msgid "The install worked successfully! Congratulations!" +msgstr "Амжилттай суулгалаа! Баяр хүргэе!" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Таний тохиргооны файл дээр DEBUG=TRUE гэж тохируулсан мөн URLs дээр тохиргоо хийгээгүй учраас " +"энэ хуудасыг харж байна." + +msgid "Django Documentation" +msgstr "Джанго баримтжуулалт" + +msgid "Topics, references, & how-to's" +msgstr "Сэдэв, лавлахууд болон заавар-ууд" + +msgid "Tutorial: A Polling App" +msgstr "Хичээл: Санал асуулга App" + +msgid "Get started with Django" +msgstr "Джанготой ажиллаж эхлэх" + +msgid "Django Community" +msgstr "Django Бүлгэм" + +msgid "Connect, get help, or contribute" +msgstr "Холбогдох, тусламж авах эсвэл хувь нэмрээ оруулах" diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/mn/__init__.py b/venv/lib/python3.7/site-packages/django/conf/locale/mn/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/mn/formats.py b/venv/lib/python3.7/site-packages/django/conf/locale/mn/formats.py new file mode 100644 index 0000000..24c7dec --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/mn/formats.py @@ -0,0 +1,21 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = 'd F Y' +TIME_FORMAT = 'g:i A' +# DATETIME_FORMAT = +# YEAR_MONTH_FORMAT = +# MONTH_DAY_FORMAT = +SHORT_DATE_FORMAT = 'j M Y' +# SHORT_DATETIME_FORMAT = +# FIRST_DAY_OF_WEEK = + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +# DATE_INPUT_FORMATS = +# TIME_INPUT_FORMATS = +# DATETIME_INPUT_FORMATS = +# DECIMAL_SEPARATOR = +# THOUSAND_SEPARATOR = +# NUMBER_GROUPING = diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/nb/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/conf/locale/nb/LC_MESSAGES/django.po new file mode 100644 index 0000000..eb536cd --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/nb/LC_MESSAGES/django.po @@ -0,0 +1,1271 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Alexander Hansen , 2014 +# Eirik Krogstad , 2014 +# Jannis Leidel , 2011 +# jensadne , 2014-2015 +# Jon , 2015-2016 +# Jon , 2014 +# Jon , 2017-2019 +# Jon , 2013 +# Jon , 2011 +# Sigurd Gartmann , 2012 +# Tommy Strand , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-05-06 13:02+0000\n" +"Last-Translator: Jon \n" +"Language-Team: Norwegian Bokmål (http://www.transifex.com/django/django/" +"language/nb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "Afrikaans" + +msgid "Arabic" +msgstr "Arabisk" + +msgid "Asturian" +msgstr "Asturiansk" + +msgid "Azerbaijani" +msgstr "Aserbajdsjansk" + +msgid "Bulgarian" +msgstr "Bulgarsk" + +msgid "Belarusian" +msgstr "Hviterussisk" + +msgid "Bengali" +msgstr "Bengalsk" + +msgid "Breton" +msgstr "Bretonsk" + +msgid "Bosnian" +msgstr "Bosnisk" + +msgid "Catalan" +msgstr "Katalansk" + +msgid "Czech" +msgstr "Tsjekkisk" + +msgid "Welsh" +msgstr "Walisisk" + +msgid "Danish" +msgstr "Dansk" + +msgid "German" +msgstr "Tysk" + +msgid "Lower Sorbian" +msgstr "Lavsorbisk" + +msgid "Greek" +msgstr "Gresk" + +msgid "English" +msgstr "Engelsk" + +msgid "Australian English" +msgstr "Engelsk (australsk)" + +msgid "British English" +msgstr "Engelsk (britisk)" + +msgid "Esperanto" +msgstr "Esperanto" + +msgid "Spanish" +msgstr "Spansk" + +msgid "Argentinian Spanish" +msgstr "Argentinsk spansk" + +msgid "Colombian Spanish" +msgstr "Colombiansk spansk" + +msgid "Mexican Spanish" +msgstr "Meksikansk spansk" + +msgid "Nicaraguan Spanish" +msgstr "Nicaraguansk spansk" + +msgid "Venezuelan Spanish" +msgstr "Venezuelanske spansk" + +msgid "Estonian" +msgstr "Estisk" + +msgid "Basque" +msgstr "Baskisk" + +msgid "Persian" +msgstr "Persisk" + +msgid "Finnish" +msgstr "Finsk" + +msgid "French" +msgstr "Fransk" + +msgid "Frisian" +msgstr "Frisisk" + +msgid "Irish" +msgstr "Irsk" + +msgid "Scottish Gaelic" +msgstr "Skotsk-gælisk" + +msgid "Galician" +msgstr "Galisisk" + +msgid "Hebrew" +msgstr "Hebraisk" + +msgid "Hindi" +msgstr "Hindi" + +msgid "Croatian" +msgstr "Kroatisk" + +msgid "Upper Sorbian" +msgstr "Høysorbisk" + +msgid "Hungarian" +msgstr "Ungarsk" + +msgid "Armenian" +msgstr "Armensk" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "Indonesisk" + +msgid "Ido" +msgstr "Ido" + +msgid "Icelandic" +msgstr "Islandsk" + +msgid "Italian" +msgstr "Italiensk" + +msgid "Japanese" +msgstr "Japansk" + +msgid "Georgian" +msgstr "Georgisk" + +msgid "Kabyle" +msgstr "Kabylsk" + +msgid "Kazakh" +msgstr "Kasakhisk" + +msgid "Khmer" +msgstr "Khmer" + +msgid "Kannada" +msgstr "Kannada" + +msgid "Korean" +msgstr "Koreansk" + +msgid "Luxembourgish" +msgstr "Luxembourgsk" + +msgid "Lithuanian" +msgstr "Litauisk" + +msgid "Latvian" +msgstr "Latvisk" + +msgid "Macedonian" +msgstr "Makedonsk" + +msgid "Malayalam" +msgstr "Malayalam" + +msgid "Mongolian" +msgstr "Mongolsk" + +msgid "Marathi" +msgstr "Marathi" + +msgid "Burmese" +msgstr "Burmesisk" + +msgid "Norwegian Bokmål" +msgstr "Norsk (bokmål)" + +msgid "Nepali" +msgstr "Nepali" + +msgid "Dutch" +msgstr "Nederlandsk" + +msgid "Norwegian Nynorsk" +msgstr "Norsk (nynorsk)" + +msgid "Ossetic" +msgstr "Ossetisk" + +msgid "Punjabi" +msgstr "Panjabi" + +msgid "Polish" +msgstr "Polsk" + +msgid "Portuguese" +msgstr "Portugisisk" + +msgid "Brazilian Portuguese" +msgstr "Brasiliansk portugisisk" + +msgid "Romanian" +msgstr "Rumensk" + +msgid "Russian" +msgstr "Russisk" + +msgid "Slovak" +msgstr "Slovakisk" + +msgid "Slovenian" +msgstr "Slovensk" + +msgid "Albanian" +msgstr "Albansk" + +msgid "Serbian" +msgstr "Serbisk" + +msgid "Serbian Latin" +msgstr "Serbisk latin" + +msgid "Swedish" +msgstr "Svensk" + +msgid "Swahili" +msgstr "Swahili" + +msgid "Tamil" +msgstr "Tamil" + +msgid "Telugu" +msgstr "Telugu" + +msgid "Thai" +msgstr "Thai" + +msgid "Turkish" +msgstr "Tyrkisk" + +msgid "Tatar" +msgstr "Tatarisk" + +msgid "Udmurt" +msgstr "Udmurtisk" + +msgid "Ukrainian" +msgstr "Ukrainsk" + +msgid "Urdu" +msgstr "Urdu" + +msgid "Vietnamese" +msgstr "Vietnamesisk" + +msgid "Simplified Chinese" +msgstr "Forenklet kinesisk" + +msgid "Traditional Chinese" +msgstr "Tradisjonell kinesisk" + +msgid "Messages" +msgstr "Meldinger" + +msgid "Site Maps" +msgstr "Sidekart" + +msgid "Static Files" +msgstr "Statiske filer" + +msgid "Syndication" +msgstr "Syndikering" + +msgid "That page number is not an integer" +msgstr "Sidenummeret er ikke et heltall" + +msgid "That page number is less than 1" +msgstr "Sidenummeret er mindre enn 1" + +msgid "That page contains no results" +msgstr "Siden inneholder ingen resultater" + +msgid "Enter a valid value." +msgstr "Oppgi en gyldig verdi." + +msgid "Enter a valid URL." +msgstr "Oppgi en gyldig nettadresse." + +msgid "Enter a valid integer." +msgstr "Skriv inn et gyldig heltall." + +msgid "Enter a valid email address." +msgstr "Oppgi en gyldig e-postadresse" + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Oppgi en gyldig «slug» bestående av bokstaver, nummer, understreker eller " +"bindestreker." + +msgid "" +"Enter a valid 'slug' consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Oppgi en gyldig «slug» bestående av Unicode-bokstaver, nummer, understreker " +"eller bindestreker." + +msgid "Enter a valid IPv4 address." +msgstr "Oppgi en gyldig IPv4-adresse." + +msgid "Enter a valid IPv6 address." +msgstr "Oppgi en gyldig IPv6-adresse." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Oppgi en gyldig IPv4- eller IPv6-adresse." + +msgid "Enter only digits separated by commas." +msgstr "Oppgi kun tall adskilt med komma." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "Verdien må være %(limit_value)s (den er %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Verdien må være mindre enn eller lik %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Verdien må være større enn eller lik %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Sørg for denne verdien har minst %(limit_value)d tegn (den har " +"%(show_value)d)." +msgstr[1] "" +"Sørg for at denne verdien har minst %(limit_value)d tegn (den har " +"%(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Sørg for denne verdien har %(limit_value)d tegn (den har nå %(show_value)d)." +msgstr[1] "" +"Sørg for at denne verdien har %(limit_value)d eller færre tegn (den har nå " +"%(show_value)d)." + +msgid "Enter a number." +msgstr "Oppgi et tall." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Sørg for at det er kun %(max)s tall." +msgstr[1] "Sørg for at det er %(max)s eller færre tall totalt." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Sørg for at det er kun %(max)s desimal." +msgstr[1] "Sørg for at det er %(max)s eller færre desimaler." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "Sørg for at det kun %(max)s tall før desimalpunkt." +msgstr[1] "Sørg for at det er %(max)s eller færre tall før desimalpunkt." + +#, python-format +msgid "" +"File extension '%(extension)s' is not allowed. Allowed extensions are: " +"'%(allowed_extensions)s'." +msgstr "" +"Filendelsen '%(extension)s' er ikke tillatt. Tillatte filendelser er: " +"'%(allowed_extensions)s'." + +msgid "Null characters are not allowed." +msgstr "Null-tegn er ikke tillatt." + +msgid "and" +msgstr "og" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s med denne %(field_labels)s finnes allerede." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Verdien %(value)r er ikke et gyldig valg." + +msgid "This field cannot be null." +msgstr "Feltet kan ikke være tomt." + +msgid "This field cannot be blank." +msgstr "Feltet kan ikke være blankt." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s med %(field_label)s finnes allerede." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "%(field_label)s må være unik for %(date_field_label)s %(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Felt av typen: %(field_type)s" + +msgid "Integer" +msgstr "Heltall" + +#, python-format +msgid "'%(value)s' value must be an integer." +msgstr "Verdien '%(value)s' må være et heltall." + +msgid "Big (8 byte) integer" +msgstr "Stort (8 byte) heltall" + +#, python-format +msgid "'%(value)s' value must be either True or False." +msgstr "Verdien '%(value)s' må være enten True eller False." + +#, python-format +msgid "'%(value)s' value must be either True, False, or None." +msgstr "'%(value)s'-verdien må være enten True, False, eller None." + +msgid "Boolean (Either True or False)" +msgstr "Boolsk (True eller False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Tekst (opp til %(max_length)s tegn)" + +msgid "Comma-separated integers" +msgstr "Heltall adskilt med komma" + +#, python-format +msgid "" +"'%(value)s' value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"Verdien '%(value)s' har ugyldig datoformat. Den må være i formatet ÅÅÅÅ-MM-" +"DD." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"Verdien '%(value)s' har riktig format (ÅÅÅÅ-MM-DD), men er en ugyldig dato." + +msgid "Date (without time)" +msgstr "Dato (uten tid)" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"'%(value)s'-verdien har et ugyldig format. Det må være på formen YYYY-MM-DD " +"HH:MM[:ss[.uuuuuu]][TZ]." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"'%(value)s'-verdien er på den korrekte formen (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]), men er ugyldig dato/tid." + +msgid "Date (with time)" +msgstr "Dato (med tid)" + +#, python-format +msgid "'%(value)s' value must be a decimal number." +msgstr "Verdien '%(value)s' må være et desimaltall." + +msgid "Decimal number" +msgstr "Desimaltall" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in [DD] [HH:[MM:]]ss[." +"uuuuuu] format." +msgstr "" +"'%(value)s'-verdien har et ugyldig format. Det må være på formen [DD] [HH:" +"[MM:]]ss[.uuuuuu]." + +msgid "Duration" +msgstr "Varighet" + +msgid "Email address" +msgstr "E-postadresse" + +msgid "File path" +msgstr "Filsti" + +#, python-format +msgid "'%(value)s' value must be a float." +msgstr "Verdien '%(value)s' må være et flyttall." + +msgid "Floating point number" +msgstr "Flyttall" + +msgid "IPv4 address" +msgstr "IPv4-adresse" + +msgid "IP address" +msgstr "IP-adresse" + +#, python-format +msgid "'%(value)s' value must be either None, True or False." +msgstr "Verdien '%(value)s' må være enten None, True eller False." + +msgid "Boolean (Either True, False or None)" +msgstr "Boolsk (True, False eller None)" + +msgid "Positive integer" +msgstr "Positivt heltall" + +msgid "Positive small integer" +msgstr "Positivt lite heltall" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug (opp til %(max_length)s)" + +msgid "Small integer" +msgstr "Lite heltall" + +msgid "Text" +msgstr "Tekst" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"Verdien '%(value)s' er i et ugyldig format. Formatet må være HH:MM[:ss[." +"uuuuuu]]." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"Verdien '%(value)s' har riktig format (HH:MM[:ss[.uuuuuu]]), men er ikke et " +"gyldig klokkeslett." + +msgid "Time" +msgstr "Tid" + +msgid "URL" +msgstr "Nettadresse" + +msgid "Raw binary data" +msgstr "Rå binærdata" + +#, python-format +msgid "'%(value)s' is not a valid UUID." +msgstr "'%(value)s' er ikke en gyldig UUID." + +msgid "Universally unique identifier" +msgstr "Universelt unik identifikator" + +msgid "File" +msgstr "Fil" + +msgid "Image" +msgstr "Bilde" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "%(model)s-instansen med %(field)s %(value)r finnes ikke." + +msgid "Foreign Key (type determined by related field)" +msgstr "Fremmednøkkel (type bestemmes av relatert felt)" + +msgid "One-to-one relationship" +msgstr "En-til-en-relasjon" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "%(from)s-%(to)s-relasjon" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "%(from)s-%(to)s-relasjoner" + +msgid "Many-to-many relationship" +msgstr "Mange-til-mange-relasjon" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Feltet er påkrevet." + +msgid "Enter a whole number." +msgstr "Oppgi et heltall." + +msgid "Enter a valid date." +msgstr "Oppgi en gyldig dato." + +msgid "Enter a valid time." +msgstr "Oppgi et gyldig tidspunkt." + +msgid "Enter a valid date/time." +msgstr "Oppgi gyldig dato og tidspunkt." + +msgid "Enter a valid duration." +msgstr "Oppgi en gyldig varighet." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Antall dager må være mellom {min_days} og {max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Ingen fil ble sendt. Sjekk «encoding»-typen på skjemaet." + +msgid "No file was submitted." +msgstr "Ingen fil ble sendt." + +msgid "The submitted file is empty." +msgstr "Filen er tom." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "Sørg for at filnavnet har %(max)d tegn (det har nå %(length)d)." +msgstr[1] "" +"Sørg for at filnavnet har færre enn %(max)d tegn (det har nå %(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Vennligst last opp en ny fil eller marker fjern-boksen, ikke begge." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Last opp et gyldig bilde. Filen du lastet opp var ødelagt eller ikke et " +"bilde." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Velg et gyldig valg. %(value)s er ikke et av de tilgjengelige valgene." + +msgid "Enter a list of values." +msgstr "Oppgi en liste med verdier." + +msgid "Enter a complete value." +msgstr "Skriv inn en fullstendig verdi." + +msgid "Enter a valid UUID." +msgstr "Oppgi en gyldig UUID." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Skjult felt %(name)s) %(error)s" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "ManagementForm-data mangler eller har blitt endret." + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "Vennligst oppgi %d skjema." +msgstr[1] "Vennligst oppgi %d eller færre skjema." + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "Vennligst send inn %d eller flere skjemaer." +msgstr[1] "Vennligst send inn %d eller flere skjemaer." + +msgid "Order" +msgstr "Rekkefølge" + +msgid "Delete" +msgstr "Slett" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Vennligst korriger dupliserte data for %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "Vennligst korriger dupliserte data for %(field)s, som må være unike." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Vennligst korriger dupliserte data for %(field_name)s, som må være unike for " +"%(lookup)s i %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Vennligst korriger de dupliserte verdiene nedenfor." + +msgid "The inline value did not match the parent instance." +msgstr "Inline-verdien var ikke i samsvar med foreldre-instansen." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Velg et gyldig valg. Valget er ikke av de tilgjengelige valgene." + +#, python-format +msgid "\"%(pk)s\" is not a valid value." +msgstr "\"%(pk)s\" er ikke en gyldig verdi." + +#, python-format +msgid "" +"%(datetime)s couldn't be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s kunne ikke tolkes i tidssonen %(current_timezone)s, det kan " +"være tvetydig eller ikke eksistere." + +msgid "Clear" +msgstr "Fjern" + +msgid "Currently" +msgstr "Nåværende" + +msgid "Change" +msgstr "Endre" + +msgid "Unknown" +msgstr "Ukjent" + +msgid "Yes" +msgstr "Ja" + +msgid "No" +msgstr "Nei" + +msgid "yes,no,maybe" +msgstr "ja,nei,kanskje" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d byte" +msgstr[1] "%(size)d byte" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "midnatt" + +msgid "noon" +msgstr "12:00" + +msgid "Monday" +msgstr "mandag" + +msgid "Tuesday" +msgstr "tirsdag" + +msgid "Wednesday" +msgstr "onsdag" + +msgid "Thursday" +msgstr "torsdag" + +msgid "Friday" +msgstr "fredag" + +msgid "Saturday" +msgstr "lørdag" + +msgid "Sunday" +msgstr "søndag" + +msgid "Mon" +msgstr "man" + +msgid "Tue" +msgstr "tir" + +msgid "Wed" +msgstr "ons" + +msgid "Thu" +msgstr "tor" + +msgid "Fri" +msgstr "fre" + +msgid "Sat" +msgstr "lør" + +msgid "Sun" +msgstr "søn" + +msgid "January" +msgstr "januar" + +msgid "February" +msgstr "februar" + +msgid "March" +msgstr "mars" + +msgid "April" +msgstr "april" + +msgid "May" +msgstr "mai" + +msgid "June" +msgstr "juni" + +msgid "July" +msgstr "juli" + +msgid "August" +msgstr "august" + +msgid "September" +msgstr "september" + +msgid "October" +msgstr "oktober" + +msgid "November" +msgstr "november" + +msgid "December" +msgstr "desember" + +msgid "jan" +msgstr "jan" + +msgid "feb" +msgstr "feb" + +msgid "mar" +msgstr "mar" + +msgid "apr" +msgstr "apr" + +msgid "may" +msgstr "mai" + +msgid "jun" +msgstr "jun" + +msgid "jul" +msgstr "jul" + +msgid "aug" +msgstr "aug" + +msgid "sep" +msgstr "sep" + +msgid "oct" +msgstr "okt" + +msgid "nov" +msgstr "nov" + +msgid "dec" +msgstr "des" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "jan." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "feb." + +msgctxt "abbrev. month" +msgid "March" +msgstr "mar." + +msgctxt "abbrev. month" +msgid "April" +msgstr "apr." + +msgctxt "abbrev. month" +msgid "May" +msgstr "mai" + +msgctxt "abbrev. month" +msgid "June" +msgstr "jun." + +msgctxt "abbrev. month" +msgid "July" +msgstr "jul." + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "aug." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "sept." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "okt." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "nov." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "des." + +msgctxt "alt. month" +msgid "January" +msgstr "Januar" + +msgctxt "alt. month" +msgid "February" +msgstr "Februar" + +msgctxt "alt. month" +msgid "March" +msgstr "Mars" + +msgctxt "alt. month" +msgid "April" +msgstr "April" + +msgctxt "alt. month" +msgid "May" +msgstr "Mai" + +msgctxt "alt. month" +msgid "June" +msgstr "Juni" + +msgctxt "alt. month" +msgid "July" +msgstr "Juli" + +msgctxt "alt. month" +msgid "August" +msgstr "August" + +msgctxt "alt. month" +msgid "September" +msgstr "September" + +msgctxt "alt. month" +msgid "October" +msgstr "Oktober" + +msgctxt "alt. month" +msgid "November" +msgstr "November" + +msgctxt "alt. month" +msgid "December" +msgstr "Desember" + +msgid "This is not a valid IPv6 address." +msgstr "Dette er ikke en gyldig IPv6-adresse." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "eller" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d år" +msgstr[1] "%d år" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d måned" +msgstr[1] "%d måneder" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d uke" +msgstr[1] "%d uker" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d dag" +msgstr[1] "%d dager" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d time" +msgstr[1] "%d timer" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minutt" +msgstr[1] "%d minutter" + +msgid "0 minutes" +msgstr "0 minutter" + +msgid "Forbidden" +msgstr "Forbudt" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF-verifisering feilet. Forespørsel avbrutt." + +msgid "" +"You are seeing this message because this HTTPS site requires a 'Referer " +"header' to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Du ser denne meldingen fordi dette HTTPS-nettstedet krever en 'Referer'-" +"header for å bli sendt av nettleseren, men ingen ble sendt. Denne headeren " +"er nødvendig av sikkerhetsmessige årsaker, for å sikre at nettleseren din " +"ikke blir kapret av tredjeparter." + +msgid "" +"If you have configured your browser to disable 'Referer' headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for 'same-" +"origin' requests." +msgstr "" +"Hvis du har konfigurert nettleseren din til å deaktivere 'Referer'-headers, " +"kan du aktivere dem, i hvert fall for dette nettstedet, eller for HTTPS-" +"tilkoblinger, eller for 'same-origin'-forespørsler." + +msgid "" +"If you are using the tag or " +"including the 'Referrer-Policy: no-referrer' header, please remove them. The " +"CSRF protection requires the 'Referer' header to do strict referer checking. " +"If you're concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"Hvis du bruker -taggen eller " +"inkluderer 'Referrer-Policy: no-referrer'-header, vennligst fjern dem. CSRF-" +"beskyttelsen krever 'Referer'-headeren for å utføre streng kontroll av " +"referanser. Hvis du er bekymret for personvern, bruk alternativer som for koblinger til tredjeparts nettsteder." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Du ser denne meldingen fordi denne nettsiden krever en CSRF-cookie når du " +"sender inn skjemaer. Denne informasjonskapselen er nødvendig av " +"sikkerhetsmessige årsaker, for å sikre at nettleseren din ikke blir kapret " +"av tredjeparter." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for 'same-origin' requests." +msgstr "" +"Hvis du har konfigurert nettleseren din til å deaktivere " +"informasjonskapsler, kan du aktivere dem, i hvert fall for dette nettstedet, " +"eller for 'same-origin'-forespørsler." + +msgid "More information is available with DEBUG=True." +msgstr "Mer informasjon er tilgjengelig med DEBUG=True." + +msgid "No year specified" +msgstr "År ikke spesifisert" + +msgid "Date out of range" +msgstr "Date utenfor rekkevidde" + +msgid "No month specified" +msgstr "Måned ikke spesifisert" + +msgid "No day specified" +msgstr "Dag ikke spesifisert" + +msgid "No week specified" +msgstr "Uke ikke spesifisert" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Ingen %(verbose_name_plural)s tilgjengelig" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Fremtidig %(verbose_name_plural)s ikke tilgjengelig fordi %(class_name)s." +"allow_future er False." + +#, python-format +msgid "Invalid date string '%(datestr)s' given format '%(format)s'" +msgstr "Ugyldig datostreng «%(datestr)s» gitt formatet «%(format)s»" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Fant ingen %(verbose_name)s som passet spørringen" + +msgid "Page is not 'last', nor can it be converted to an int." +msgstr "Siden er ikke «last», og kan heller ikke konverteres til et tall." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Ugyldig side (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and '%(class_name)s.allow_empty' is False." +msgstr "Tom liste og «%(class_name)s.allow_empty» er False." + +msgid "Directory indexes are not allowed here." +msgstr "Mappeinnhold er ikke tillatt her." + +#, python-format +msgid "\"%(path)s\" does not exist" +msgstr "«%(path)s» finnes ikke" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Innhold i %(directory)s" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "Django: web-rammeverket for perfeksjonister med tidsfrister." + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Se produktmerknader for Django " +"%(version)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "Installasjonen var vellykket! Gratulerer!" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Du ser denne siden fordi DEBUG=True er i din Django-innstillingsfil og du ikke har konfigurert " +"noen URL-er." + +msgid "Django Documentation" +msgstr "Django-dokumentasjon" + +msgid "Topics, references, & how-to's" +msgstr "Temaer, referanser & how-tos" + +msgid "Tutorial: A Polling App" +msgstr "Tutorial: en polling-app" + +msgid "Get started with Django" +msgstr "Kom i gang med Django" + +msgid "Django Community" +msgstr "Django nettsamfunn" + +msgid "Connect, get help, or contribute" +msgstr "Koble, få hjelp eller bidra" diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/nb/__init__.py b/venv/lib/python3.7/site-packages/django/conf/locale/nb/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/nb/formats.py b/venv/lib/python3.7/site-packages/django/conf/locale/nb/formats.py new file mode 100644 index 0000000..2180cf3 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/nb/formats.py @@ -0,0 +1,39 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = 'j. F Y' +TIME_FORMAT = 'H:i' +DATETIME_FORMAT = 'j. F Y H:i' +YEAR_MONTH_FORMAT = 'F Y' +MONTH_DAY_FORMAT = 'j. F' +SHORT_DATE_FORMAT = 'd.m.Y' +SHORT_DATETIME_FORMAT = 'd.m.Y H:i' +FIRST_DAY_OF_WEEK = 1 # Monday + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +# Kept ISO formats as they are in first position +DATE_INPUT_FORMATS = [ + '%Y-%m-%d', '%d.%m.%Y', '%d.%m.%y', # '2006-10-25', '25.10.2006', '25.10.06' + # '%d. %b %Y', '%d %b %Y', # '25. okt 2006', '25 okt 2006' + # '%d. %b. %Y', '%d %b. %Y', # '25. okt. 2006', '25 okt. 2006' + # '%d. %B %Y', '%d %B %Y', # '25. oktober 2006', '25 oktober 2006' +] +DATETIME_INPUT_FORMATS = [ + '%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59' + '%Y-%m-%d %H:%M:%S.%f', # '2006-10-25 14:30:59.000200' + '%Y-%m-%d %H:%M', # '2006-10-25 14:30' + '%Y-%m-%d', # '2006-10-25' + '%d.%m.%Y %H:%M:%S', # '25.10.2006 14:30:59' + '%d.%m.%Y %H:%M:%S.%f', # '25.10.2006 14:30:59.000200' + '%d.%m.%Y %H:%M', # '25.10.2006 14:30' + '%d.%m.%Y', # '25.10.2006' + '%d.%m.%y %H:%M:%S', # '25.10.06 14:30:59' + '%d.%m.%y %H:%M:%S.%f', # '25.10.06 14:30:59.000200' + '%d.%m.%y %H:%M', # '25.10.06 14:30' + '%d.%m.%y', # '25.10.06' +] +DECIMAL_SEPARATOR = ',' +THOUSAND_SEPARATOR = '\xa0' # non-breaking space +NUMBER_GROUPING = 3 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/nn/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/conf/locale/nn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6ebecb9cf629ef637dc80136c6bc170e300878c7 GIT binary patch literal 14256 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/os/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/conf/locale/os/LC_MESSAGES/django.po new file mode 100644 index 0000000..4c2fdc6 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/os/LC_MESSAGES/django.po @@ -0,0 +1,1210 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Soslan Khubulov , 2013 +# Soslan Khubulov , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-11-15 16:15+0100\n" +"PO-Revision-Date: 2017-11-16 01:13+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Ossetic (http://www.transifex.com/django/django/language/" +"os/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: os\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "Африкаанс" + +msgid "Arabic" +msgstr "Араббаг" + +msgid "Asturian" +msgstr "" + +msgid "Azerbaijani" +msgstr "Тӕтӕйраг" + +msgid "Bulgarian" +msgstr "Болгайраг" + +msgid "Belarusian" +msgstr "Беларусаг" + +msgid "Bengali" +msgstr "Бенгалаг" + +msgid "Breton" +msgstr "Бретойнаг" + +msgid "Bosnian" +msgstr "Босниаг" + +msgid "Catalan" +msgstr "Каталайнаг" + +msgid "Czech" +msgstr "Чехаг" + +msgid "Welsh" +msgstr "Уельсаг" + +msgid "Danish" +msgstr "Даниаг" + +msgid "German" +msgstr "Немыцаг" + +msgid "Lower Sorbian" +msgstr "" + +msgid "Greek" +msgstr "Грекъаг" + +msgid "English" +msgstr "Англисаг" + +msgid "Australian English" +msgstr "" + +msgid "British English" +msgstr "Бритайнаг англисаг" + +msgid "Esperanto" +msgstr "Есперанто" + +msgid "Spanish" +msgstr "Испайнаг" + +msgid "Argentinian Spanish" +msgstr "Аргентинаг испайнаг" + +msgid "Colombian Spanish" +msgstr "" + +msgid "Mexican Spanish" +msgstr "Мексикайнаг Испайнаг" + +msgid "Nicaraguan Spanish" +msgstr "Никарагуайаг испайнаг" + +msgid "Venezuelan Spanish" +msgstr "Венесуелаг испайнаг" + +msgid "Estonian" +msgstr "Эстойнаг" + +msgid "Basque" +msgstr "Баскаг" + +msgid "Persian" +msgstr "Персайнаг" + +msgid "Finnish" +msgstr "Финнаг" + +msgid "French" +msgstr "Францаг" + +msgid "Frisian" +msgstr "Фризаг" + +msgid "Irish" +msgstr "Ирландиаг" + +msgid "Scottish Gaelic" +msgstr "" + +msgid "Galician" +msgstr "Галициаг" + +msgid "Hebrew" +msgstr "Иврит" + +msgid "Hindi" +msgstr "Хинди" + +msgid "Croatian" +msgstr "Хорватаг" + +msgid "Upper Sorbian" +msgstr "" + +msgid "Hungarian" +msgstr "Венгриаг" + +msgid "Interlingua" +msgstr "Интерлингва" + +msgid "Indonesian" +msgstr "Индонезиаг" + +msgid "Ido" +msgstr "" + +msgid "Icelandic" +msgstr "Исландаг" + +msgid "Italian" +msgstr "Италиаг" + +msgid "Japanese" +msgstr "Япойнаг" + +msgid "Georgian" +msgstr "Гуырдзиаг" + +msgid "Kazakh" +msgstr "Казахаг" + +msgid "Khmer" +msgstr "Хмераг" + +msgid "Kannada" +msgstr "Каннадаг" + +msgid "Korean" +msgstr "Корейаг" + +msgid "Luxembourgish" +msgstr "Люксембургаг" + +msgid "Lithuanian" +msgstr "Литвайаг" + +msgid "Latvian" +msgstr "Латвийаг" + +msgid "Macedonian" +msgstr "Мӕчъидон" + +msgid "Malayalam" +msgstr "Малайаг" + +msgid "Mongolian" +msgstr "Монголиаг" + +msgid "Marathi" +msgstr "" + +msgid "Burmese" +msgstr "Бурмизаг" + +msgid "Norwegian Bokmål" +msgstr "" + +msgid "Nepali" +msgstr "Непалаг" + +msgid "Dutch" +msgstr "Нидерландаг" + +msgid "Norwegian Nynorsk" +msgstr "Норвегийаг Нинорск" + +msgid "Ossetic" +msgstr "Ирон" + +msgid "Punjabi" +msgstr "Пенджабаг" + +msgid "Polish" +msgstr "Полаг" + +msgid "Portuguese" +msgstr "Португалаг" + +msgid "Brazilian Portuguese" +msgstr "Бразилаг португалаг" + +msgid "Romanian" +msgstr "Румынаг" + +msgid "Russian" +msgstr "Уырыссаг" + +msgid "Slovak" +msgstr "Словакиаг" + +msgid "Slovenian" +msgstr "Словенаг" + +msgid "Albanian" +msgstr "Албайнаг" + +msgid "Serbian" +msgstr "Сербаг" + +msgid "Serbian Latin" +msgstr "Латинаг Сербаг" + +msgid "Swedish" +msgstr "Шведаг" + +msgid "Swahili" +msgstr "Суахили" + +msgid "Tamil" +msgstr "Тамилаг" + +msgid "Telugu" +msgstr "Телугу" + +msgid "Thai" +msgstr "Тайаг" + +msgid "Turkish" +msgstr "Туркаг" + +msgid "Tatar" +msgstr "Тӕтӕйраг" + +msgid "Udmurt" +msgstr "Удмуртаг" + +msgid "Ukrainian" +msgstr "Украинаг" + +msgid "Urdu" +msgstr "Урду" + +msgid "Vietnamese" +msgstr "Вьетнамаг" + +msgid "Simplified Chinese" +msgstr "Ӕнцонгонд Китайаг" + +msgid "Traditional Chinese" +msgstr "Традицион Китайаг" + +msgid "Messages" +msgstr "" + +msgid "Site Maps" +msgstr "" + +msgid "Static Files" +msgstr "" + +msgid "Syndication" +msgstr "" + +msgid "That page number is not an integer" +msgstr "" + +msgid "That page number is less than 1" +msgstr "" + +msgid "That page contains no results" +msgstr "" + +msgid "Enter a valid value." +msgstr "Раст бӕрц бафысс." + +msgid "Enter a valid URL." +msgstr "Раст URL бафысс." + +msgid "Enter a valid integer." +msgstr "" + +msgid "Enter a valid email address." +msgstr "Раст email адрис бафысс." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Раст бӕрӕг ном бафысс, цӕмӕй дзы уой дамгъӕтӕ, нымӕцтӕ бынылхӕххытӕ кӕнӕ " +"дефистӕ." + +msgid "" +"Enter a valid 'slug' consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "Раст IPv4 адрис бафысс." + +msgid "Enter a valid IPv6 address." +msgstr "Раст IPv6 адрис бафысс." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Раст IPv4 кӕнӕ IPv6 адрис бафысс." + +msgid "Enter only digits separated by commas." +msgstr "Бафысс ӕрмӕст нымӕцтӕ, къӕдзгуытӕй дихгонд." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "Ацы бӕрц хъуамӕ уа %(limit_value)s (у %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Ацы бӕрц хъуамӕ уа %(limit_value)s, кӕнӕ цъусдӕр." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Ацы бӕрц хъуамӕ уа %(limit_value)s, кӕнӕ цъусдӕр." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Дӕ хъус бадар цӕмӕй ам %(limit_value)d дамгъӕ уӕддӕр уа (ис дзы " +"%(show_value)d)." +msgstr[1] "" +"Дӕ хъус бадар цӕмӕй ам %(limit_value)d дамгъӕйы уӕддӕр уа (ис дзы " +"%(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Дӕ хъус бадар цӕмӕй ам %(limit_value)d дамгъӕйӕ фылдӕр ма уа (ис дзы " +"%(show_value)d)." +msgstr[1] "" +"Дӕ хъус бадар цӕмӕй ам %(limit_value)d дамгъӕйӕ фылдӕр ма уа (ис дзы " +"%(show_value)d)." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Дӕ хъус бадар цӕмӕй иууыл иумӕ %(max)s цифрӕйӕ фылдӕр уой." +msgstr[1] "Дӕ хъус бадар цӕмӕй иууыл иумӕ %(max)s цифрӕйӕ фылдӕр уой." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Дӕ хъус бадар цӕмӕй дӕсон бынӕттӕ %(max)s-ӕй фылдӕр ма уой." +msgstr[1] "Дӕ хъус бадар цӕмӕй дӕсон бынӕттӕ %(max)s-ӕй фылдӕр ма уой." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"Дӕ хъус бадар цӕмӕй дӕсон стъӕлфы размӕ %(max)s цифрӕйӕ фылдӕр ма уа." +msgstr[1] "" +"Дӕ хъус бадар цӕмӕй дӕсон стъӕлфы размӕ %(max)s цифрӕйӕ фылдӕр ма уа." + +#, python-format +msgid "" +"File extension '%(extension)s' is not allowed. Allowed extensions are: " +"'%(allowed_extensions)s'." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "ӕмӕ" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "" + +msgid "This field cannot be null." +msgstr "Ацы быдыр нул ма хъуамӕ уа." + +msgid "This field cannot be blank." +msgstr "Ацы быдыр афтид ма хъуамӕ уа." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s ацы %(field_label)s-имӕ нырид ис." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Быдыры хуыз: %(field_type)s" + +msgid "Integer" +msgstr "Ӕгас нымӕц" + +#, python-format +msgid "'%(value)s' value must be an integer." +msgstr "" + +msgid "Big (8 byte) integer" +msgstr "Стыр (8 байты) ӕгас нымӕц" + +#, python-format +msgid "'%(value)s' value must be either True or False." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "Булон (Бӕлвырд кӕнӕ Мӕнг)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Рӕнхъ (%(max_length)s-ы йонг)" + +msgid "Comma-separated integers" +msgstr "Къӕдзыгӕй хицӕнгонд ӕгас нымӕцтӕ" + +#, python-format +msgid "" +"'%(value)s' value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "Бон (ӕнӕ рӕстӕг)" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "Бон (ӕд рӕстӕг)" + +#, python-format +msgid "'%(value)s' value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "Дӕсон нымӕц" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in [DD] [HH:[MM:]]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "" + +msgid "Email address" +msgstr "Электрон посты адрис" + +msgid "File path" +msgstr "Файлы фӕт" + +#, python-format +msgid "'%(value)s' value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "Уӕгъд стъӕлфимӕ нымӕц" + +msgid "IPv4 address" +msgstr "IPv4 адрис" + +msgid "IP address" +msgstr "IP адрис" + +#, python-format +msgid "'%(value)s' value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "Булон (Бӕлвырд, Мӕнг кӕнӕ Ницы)" + +msgid "Positive integer" +msgstr "Позитивон ӕгас нымӕц" + +msgid "Positive small integer" +msgstr "Позитивон гыццыл ӕгас нымӕц" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Слаг (ӕппӕты фылдӕр %(max_length)s)" + +msgid "Small integer" +msgstr "Гыццыл ӕгас нымӕц" + +msgid "Text" +msgstr "Текст" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"'%(value)s' value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "Рӕстӕг" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Хом бинарон рардтӕ" + +#, python-format +msgid "'%(value)s' is not a valid UUID." +msgstr "" + +msgid "File" +msgstr "Файл" + +msgid "Image" +msgstr "Ныв" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +msgid "Foreign Key (type determined by related field)" +msgstr "Ӕттагон Амонӕн (хӕстӕг быдырӕй бӕрӕггонд хуыз)" + +msgid "One-to-one relationship" +msgstr "Иуӕн-иу бастдзинад" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "Бирӕйӕн-бирӕ бастдзинад" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr "" + +msgid "This field is required." +msgstr "Ацы быдыр ӕнӕмӕнг у." + +msgid "Enter a whole number." +msgstr "Бафысс ӕнӕхъӕн нымӕц." + +msgid "Enter a number." +msgstr "Бафысс нымӕц." + +msgid "Enter a valid date." +msgstr "Раст бон бафысс." + +msgid "Enter a valid time." +msgstr "Раст рӕстӕг бафысс." + +msgid "Enter a valid date/time." +msgstr "Раст бон/рӕстӕг бафысс." + +msgid "Enter a valid duration." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Ницы файл уыд лӕвӕрд. Абӕрӕг кӕн формӕйы кодкӕнынады хуыз." + +msgid "No file was submitted." +msgstr "Ницы файл уыд лӕвӕрд." + +msgid "The submitted file is empty." +msgstr "Лӕвӕрд файл афтид у." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Дӕ хъус бадар цӕмӕй ацы файлы номы %(max)d дамгъӕйӕ фылдӕр ма уа(ис дзы " +"%(length)d)." +msgstr[1] "" +"Дӕ хъус бадар цӕмӕй ацы файлы номы %(max)d дамгъӕйӕ фылдӕр ма уа(ис дзы " +"%(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"Дӕ хорзӕхӕй, кӕнӕ бадӕтт файл, кӕнӕ банысан кӕн сыгъдӕг чекбокс. Дыууӕ иумӕ " +"нӕ." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Раст ныв бавгӕн. Ды цы файл бавгӕдтай, уый кӕнӕ ныв нӕ уыд, кӕнӕ хӕлд ныв " +"уыд." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Раст фадат равзар. %(value)s фадӕтты ӕхсӕн нӕй." + +msgid "Enter a list of values." +msgstr "Бафысс мидисты номхыгъд." + +msgid "Enter a complete value." +msgstr "" + +msgid "Enter a valid UUID." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr "" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Ӕмбӕхст быдыр %(name)s) %(error)s" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "" +msgstr[1] "" + +msgid "Order" +msgstr "Рад" + +msgid "Delete" +msgstr "Схафын" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Дӕ хорзӕхӕй, %(field)s-ы дывӕр рардтӕ сраст кӕн." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "Дӕ хорзӕхӕй, %(field)s-ы дывӕр рардтӕ сраст кӕн. Хъуамӕ уникалон уа." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Дӕ хорзӕхӕй, %(field_name)s-ы дывӕр рардтӕ сраст кӕн. Хъуамӕ %(date_field)s-" +"ы %(lookup)s-ӕн уникалон уа. " + +msgid "Please correct the duplicate values below." +msgstr "Дӕ хорзӕхӕй, бындӕр цы дывӕр рардтӕ ис, уыдон сраст кӕн." + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Раст фадат равзар. УКыцы фадат фадӕтты ӕхсӕн нӕй." + +#, python-format +msgid "\"%(pk)s\" is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn't be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s нӕ бӕрӕг кӕны ацы рӕстӕджы тагы %(current_timezone)s; гӕнӕн ис " +"бирӕнысанон у кӕнӕ та нӕй." + +msgid "Clear" +msgstr "Сыгъдӕг" + +msgid "Currently" +msgstr "Ныр" + +msgid "Change" +msgstr "Фӕивын" + +msgid "Unknown" +msgstr "Ӕнӕбӕрӕг" + +msgid "Yes" +msgstr "О" + +msgid "No" +msgstr "Нӕ" + +msgid "yes,no,maybe" +msgstr "о,нӕ,гӕнӕн ис" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d байт" +msgstr[1] "%(size)d байты" + +#, python-format +msgid "%s KB" +msgstr "%s КБ" + +#, python-format +msgid "%s MB" +msgstr "%s МБ" + +#, python-format +msgid "%s GB" +msgstr "%s ГБ" + +#, python-format +msgid "%s TB" +msgstr "%s ТБ" + +#, python-format +msgid "%s PB" +msgstr "%s ПБ" + +msgid "p.m." +msgstr "ӕ.ф." + +msgid "a.m." +msgstr "ӕ.р." + +msgid "PM" +msgstr "ӔФ" + +msgid "AM" +msgstr "ӔР" + +msgid "midnight" +msgstr "ӕмбисӕхсӕв" + +msgid "noon" +msgstr "ӕмбисбон" + +msgid "Monday" +msgstr "Къуырисӕр" + +msgid "Tuesday" +msgstr "Дыццӕг" + +msgid "Wednesday" +msgstr "Ӕртыццӕг" + +msgid "Thursday" +msgstr "Цыппӕрӕм" + +msgid "Friday" +msgstr "Майрӕмбон" + +msgid "Saturday" +msgstr "Сабат" + +msgid "Sunday" +msgstr "Хуыцаубон" + +msgid "Mon" +msgstr "Крс" + +msgid "Tue" +msgstr "Дцг" + +msgid "Wed" +msgstr "Ӕрт" + +msgid "Thu" +msgstr "Цпр" + +msgid "Fri" +msgstr "Мрб" + +msgid "Sat" +msgstr "Сбт" + +msgid "Sun" +msgstr "Хцб" + +msgid "January" +msgstr "Январь" + +msgid "February" +msgstr "Февраль" + +msgid "March" +msgstr "Мартъи" + +msgid "April" +msgstr "Апрель" + +msgid "May" +msgstr "Май" + +msgid "June" +msgstr "Июнь" + +msgid "July" +msgstr "Июль" + +msgid "August" +msgstr "Август" + +msgid "September" +msgstr "Сентябрь" + +msgid "October" +msgstr "Октябрь" + +msgid "November" +msgstr "Ноябрь" + +msgid "December" +msgstr "Декабрь" + +msgid "jan" +msgstr "янв" + +msgid "feb" +msgstr "фев" + +msgid "mar" +msgstr "мар" + +msgid "apr" +msgstr "апр" + +msgid "may" +msgstr "май" + +msgid "jun" +msgstr "июн" + +msgid "jul" +msgstr "июл" + +msgid "aug" +msgstr "авг" + +msgid "sep" +msgstr "сен" + +msgid "oct" +msgstr "окт" + +msgid "nov" +msgstr "ноя" + +msgid "dec" +msgstr "дек" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Янв." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Фев." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Мартъи" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Апрель" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Май" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Июнь" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Июль" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Авг." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Сен." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Окт." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Ноя." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Дек." + +msgctxt "alt. month" +msgid "January" +msgstr "Январь" + +msgctxt "alt. month" +msgid "February" +msgstr "Февраль" + +msgctxt "alt. month" +msgid "March" +msgstr "Мартъи" + +msgctxt "alt. month" +msgid "April" +msgstr "Апрель" + +msgctxt "alt. month" +msgid "May" +msgstr "Май" + +msgctxt "alt. month" +msgid "June" +msgstr "Июнь" + +msgctxt "alt. month" +msgid "July" +msgstr "Июль" + +msgctxt "alt. month" +msgid "August" +msgstr "Август" + +msgctxt "alt. month" +msgid "September" +msgstr "Сентябрь" + +msgctxt "alt. month" +msgid "October" +msgstr "Октябрь" + +msgctxt "alt. month" +msgid "November" +msgstr "Ноябрь" + +msgctxt "alt. month" +msgid "December" +msgstr "Декабрь" + +msgid "This is not a valid IPv6 address." +msgstr "" + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s..." +msgstr "%(truncated_text)s..." + +msgid "or" +msgstr "кӕнӕ" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d аз" +msgstr[1] "%d азы" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d мӕй" +msgstr[1] "%d мӕйы" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d къуыри" +msgstr[1] "%d къуырийы" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d бон" +msgstr[1] "%d боны" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d сахат" +msgstr[1] "%d сахаты" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d минут" +msgstr[1] "%d минуты" + +msgid "0 minutes" +msgstr "0 минуты" + +msgid "Forbidden" +msgstr "" + +msgid "CSRF verification failed. Request aborted." +msgstr "" + +msgid "" +"You are seeing this message because this HTTPS site requires a 'Referer " +"header' to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable 'Referer' headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for 'same-" +"origin' requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the 'Referrer-Policy: no-referrer' header, please remove them. The " +"CSRF protection requires the 'Referer' header to do strict referer checking. " +"If you're concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for 'same-origin' requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "" + +msgid "No year specified" +msgstr "Аз амынд нӕ уыд" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "Мӕй амынд нӕ уыд" + +msgid "No day specified" +msgstr "Бон амынд нӕ уыд" + +msgid "No week specified" +msgstr "Къуыри амынд нӕ уыд" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Ницы %(verbose_name_plural)s ис" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Фидӕн %(verbose_name_plural)s-мӕ бавналӕн нӕй, уымӕн ӕмӕ %(class_name)s." +"allow_future Мӕнг у." + +#, python-format +msgid "Invalid date string '%(datestr)s' given format '%(format)s'" +msgstr "Боны рӕнхъ '%(datestr)s'-ы лӕвӕрд формат '%(format)s' раст нӕу" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Домӕнӕн ницы %(verbose_name)s ӕмбӕлы" + +msgid "Page is not 'last', nor can it be converted to an int." +msgstr "Фарс 'last' нӕу, нӕдӕр ӕй int-мӕ ис гӕнӕн раивын." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Мӕнг фарс (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and '%(class_name)s.allow_empty' is False." +msgstr "Номхыгъд афтид у, ӕмӕ '%(class_name)s.allow_empty' мӕнг у." + +msgid "Directory indexes are not allowed here." +msgstr "Ам директориты индекстӕ нӕй гӕнӕн." + +#, python-format +msgid "\"%(path)s\" does not exist" +msgstr "\"%(path)s\" нӕй" + +#, python-format +msgid "Index of %(directory)s" +msgstr "%(directory)s-ы индекс" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to's" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/pl/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/conf/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ee95a2b0eee78fc5d8b8e2cb38cae0504ddd68b4 GIT binary patch literal 28877 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/pl/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/conf/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 0000000..3d593df --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,1345 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# sidewinder , 2014 +# Adam Stachowicz , 2015 +# angularcircle, 2011,2013 +# angularcircle, 2011,2013 +# angularcircle, 2014 +# Dariusz Paluch , 2015 +# Jannis Leidel , 2011 +# Janusz Harkot , 2014-2015 +# Kacper Krupa , 2013 +# Karol , 2012 +# konryd , 2011 +# konryd , 2011 +# Łukasz Rekucki (lqc) , 2011 +# m_aciek , 2016-2019 +# m_aciek , 2015 +# Michał Pasternak , 2013 +# p , 2012 +# Piotr Meuś , 2014 +# p , 2012 +# Quadric , 2014 +# Radek Czajka , 2013 +# Radek Czajka , 2013 +# Roman Barczyński, 2012 +# sidewinder , 2014 +# Tomasz Kajtoch , 2016-2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-01-26 20:41+0000\n" +"Last-Translator: m_aciek \n" +"Language-Team: Polish (http://www.transifex.com/django/django/language/pl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pl\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n" +"%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n" +"%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" + +msgid "Afrikaans" +msgstr "afrykanerski" + +msgid "Arabic" +msgstr "arabski" + +msgid "Asturian" +msgstr "asturyjski" + +msgid "Azerbaijani" +msgstr "azerski" + +msgid "Bulgarian" +msgstr "bułgarski" + +msgid "Belarusian" +msgstr "białoruski" + +msgid "Bengali" +msgstr "bengalski" + +msgid "Breton" +msgstr "bretoński" + +msgid "Bosnian" +msgstr "bośniacki" + +msgid "Catalan" +msgstr "kataloński" + +msgid "Czech" +msgstr "czeski" + +msgid "Welsh" +msgstr "walijski" + +msgid "Danish" +msgstr "duński" + +msgid "German" +msgstr "niemiecki" + +msgid "Lower Sorbian" +msgstr "dolnołużycki" + +msgid "Greek" +msgstr "grecki" + +msgid "English" +msgstr "angielski" + +msgid "Australian English" +msgstr "australijski angielski" + +msgid "British English" +msgstr "brytyjski angielski" + +msgid "Esperanto" +msgstr "esperanto" + +msgid "Spanish" +msgstr "hiszpański" + +msgid "Argentinian Spanish" +msgstr "hiszpański argentyński" + +msgid "Colombian Spanish" +msgstr "hiszpański kolumbijski" + +msgid "Mexican Spanish" +msgstr "hiszpański meksykański" + +msgid "Nicaraguan Spanish" +msgstr "hiszpański nikaraguański" + +msgid "Venezuelan Spanish" +msgstr "hiszpański wenezuelski" + +msgid "Estonian" +msgstr "estoński" + +msgid "Basque" +msgstr "baskijski" + +msgid "Persian" +msgstr "perski" + +msgid "Finnish" +msgstr "fiński" + +msgid "French" +msgstr "francuski" + +msgid "Frisian" +msgstr "fryzyjski" + +msgid "Irish" +msgstr "irlandzki" + +msgid "Scottish Gaelic" +msgstr "Szkocki gaelicki" + +msgid "Galician" +msgstr "galicyjski" + +msgid "Hebrew" +msgstr "hebrajski" + +msgid "Hindi" +msgstr "hindi" + +msgid "Croatian" +msgstr "chorwacki" + +msgid "Upper Sorbian" +msgstr "górnołużycki" + +msgid "Hungarian" +msgstr "węgierski" + +msgid "Armenian" +msgstr "ormiański" + +msgid "Interlingua" +msgstr "interlingua" + +msgid "Indonesian" +msgstr "indonezyjski" + +msgid "Ido" +msgstr "ido" + +msgid "Icelandic" +msgstr "islandzki" + +msgid "Italian" +msgstr "włoski" + +msgid "Japanese" +msgstr "japoński" + +msgid "Georgian" +msgstr "gruziński" + +msgid "Kabyle" +msgstr "kabylski" + +msgid "Kazakh" +msgstr "kazachski" + +msgid "Khmer" +msgstr "khmerski" + +msgid "Kannada" +msgstr "kannada" + +msgid "Korean" +msgstr "koreański" + +msgid "Luxembourgish" +msgstr "luksemburski" + +msgid "Lithuanian" +msgstr "litewski" + +msgid "Latvian" +msgstr "łotewski" + +msgid "Macedonian" +msgstr "macedoński" + +msgid "Malayalam" +msgstr "malajski" + +msgid "Mongolian" +msgstr "mongolski" + +msgid "Marathi" +msgstr "marathi" + +msgid "Burmese" +msgstr "birmański" + +msgid "Norwegian Bokmål" +msgstr "norweski (bokmål)" + +msgid "Nepali" +msgstr "nepalski" + +msgid "Dutch" +msgstr "holenderski" + +msgid "Norwegian Nynorsk" +msgstr "norweski (nynorsk)" + +msgid "Ossetic" +msgstr "osetyjski" + +msgid "Punjabi" +msgstr "pendżabski" + +msgid "Polish" +msgstr "polski" + +msgid "Portuguese" +msgstr "portugalski" + +msgid "Brazilian Portuguese" +msgstr "portugalski brazylijski" + +msgid "Romanian" +msgstr "rumuński" + +msgid "Russian" +msgstr "rosyjski" + +msgid "Slovak" +msgstr "słowacki" + +msgid "Slovenian" +msgstr "słoweński" + +msgid "Albanian" +msgstr "albański" + +msgid "Serbian" +msgstr "serbski" + +msgid "Serbian Latin" +msgstr "serbski (łaciński)" + +msgid "Swedish" +msgstr "szwedzki" + +msgid "Swahili" +msgstr "suahili" + +msgid "Tamil" +msgstr "tamilski" + +msgid "Telugu" +msgstr "telugu" + +msgid "Thai" +msgstr "tajski" + +msgid "Turkish" +msgstr "turecki" + +msgid "Tatar" +msgstr "tatarski" + +msgid "Udmurt" +msgstr "udmurcki" + +msgid "Ukrainian" +msgstr "ukraiński" + +msgid "Urdu" +msgstr "urdu" + +msgid "Vietnamese" +msgstr "wietnamski" + +msgid "Simplified Chinese" +msgstr "chiński uproszczony" + +msgid "Traditional Chinese" +msgstr "chiński tradycyjny" + +msgid "Messages" +msgstr "Wiadomości" + +msgid "Site Maps" +msgstr "Mapy stron" + +msgid "Static Files" +msgstr "Pliki statyczne" + +msgid "Syndication" +msgstr "Syndykacja treści" + +msgid "That page number is not an integer" +msgstr "Ten numer strony nie jest liczbą całkowitą" + +msgid "That page number is less than 1" +msgstr "Ten numer strony jest mniejszy niż 1" + +msgid "That page contains no results" +msgstr "Ta strona nie zawiera wyników" + +msgid "Enter a valid value." +msgstr "Wpisz poprawną wartość." + +msgid "Enter a valid URL." +msgstr "Wpisz poprawny URL." + +msgid "Enter a valid integer." +msgstr "Wprowadź poprawną liczbę całkowitą." + +msgid "Enter a valid email address." +msgstr "Wprowadź poprawny adres email." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Wpisz poprawną uproszczoną nazwę zawierającą jedynie litery, cyfry, " +"podkreślenia i myślniki." + +msgid "" +"Enter a valid 'slug' consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Wpisz poprawną uproszczoną nazwę zawierającą jedynie litery Unicode, cyfry, " +"podkreślenia i myślniki." + +msgid "Enter a valid IPv4 address." +msgstr "Wprowadź poprawny adres IPv4." + +msgid "Enter a valid IPv6 address." +msgstr "Wprowadź poprawny adres IPv6." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Wprowadź poprawny adres IPv4 lub IPv6." + +msgid "Enter only digits separated by commas." +msgstr "Wpisz tylko cyfry oddzielone przecinkami." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "Upewnij się, że ta wartość jest %(limit_value)s (jest %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Upewnij się, że ta wartość jest mniejsza lub równa %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Upewnij się, że ta wartość jest większa lub równa %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Upewnij się, że ta wartość ma przynajmniej %(limit_value)d znak (obecnie ma " +"%(show_value)d)." +msgstr[1] "" +"Upewnij się, że ta wartość ma przynajmniej %(limit_value)d znaki (obecnie ma " +"%(show_value)d)." +msgstr[2] "" +"Upewnij się, że ta wartość ma przynajmniej %(limit_value)d znaków (obecnie " +"ma %(show_value)d)." +msgstr[3] "" +"Upewnij się, że ta wartość ma przynajmniej %(limit_value)d znaków (obecnie " +"ma %(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Upewnij się, że ta wartość ma co najwyżej %(limit_value)d znak (obecnie ma " +"%(show_value)d)." +msgstr[1] "" +"Upewnij się, że ta wartość ma co najwyżej %(limit_value)d znaki (obecnie ma " +"%(show_value)d)." +msgstr[2] "" +"Upewnij się, że ta wartość ma co najwyżej %(limit_value)d znaków (obecnie ma " +"%(show_value)d)." +msgstr[3] "" +"Upewnij się, że ta wartość ma co najwyżej %(limit_value)d znaków (obecnie ma " +"%(show_value)d)." + +msgid "Enter a number." +msgstr "Wpisz liczbę." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Upewnij się, że łącznie nie ma więcej niż %(max)s cyfry." +msgstr[1] "Upewnij się, że łącznie nie ma więcej niż %(max)s cyfry." +msgstr[2] "Upewnij się, że łącznie nie ma więcej niż %(max)s cyfr." +msgstr[3] "Upewnij się, że łącznie nie ma więcej niż %(max)s cyfr." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" +"Upewnij się, że liczba ma nie więcej niż %(max)s cyfrę po przecinku." +msgstr[1] "" +"Upewnij się, że liczba ma nie więcej niż %(max)s cyfry po przecinku." +msgstr[2] "Upewnij się, że liczba ma nie więcej niż %(max)s cyfr po przecinku." +msgstr[3] "Upewnij się, że liczba ma nie więcej niż %(max)s cyfr po przecinku." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"Upewnij się, że liczba ma nie więcej niż %(max)s cyfrę przed przecinkiem." +msgstr[1] "" +"Upewnij się, że liczba ma nie więcej niż %(max)s cyfry przed przecinkiem." +msgstr[2] "" +"Upewnij się, że liczba ma nie więcej niż %(max)s cyfr przed przecinkiem." +msgstr[3] "" +"Upewnij się, że liczba ma nie więcej niż %(max)s cyfr przed przecinkiem." + +#, python-format +msgid "" +"File extension '%(extension)s' is not allowed. Allowed extensions are: " +"'%(allowed_extensions)s'." +msgstr "" +"Rozszerzenie pliku '%(extension)s' jest niedozwolone. Dozwolone rozszerzenia " +"to: '%(allowed_extensions)s'." + +msgid "Null characters are not allowed." +msgstr "Znaki null są niedozwolone." + +msgid "and" +msgstr "i" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s z tymi %(field_labels)s już istnieje." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Wartość %(value)r nie jest poprawnym wyborem." + +msgid "This field cannot be null." +msgstr "To pole nie może być puste." + +msgid "This field cannot be blank." +msgstr "To pole nie może być puste." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "Istnieje już %(model_name)s z tą wartością pola %(field_label)s." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"Wartość pola %(field_label)s musi być unikatowa dla %(date_field_label)s " +"%(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Pole typu: %(field_type)s" + +msgid "Integer" +msgstr "Liczba całkowita" + +#, python-format +msgid "'%(value)s' value must be an integer." +msgstr "wartość '%(value)s' musi być liczbą całkowitą." + +msgid "Big (8 byte) integer" +msgstr "Duża liczba całkowita (8 bajtów)" + +#, python-format +msgid "'%(value)s' value must be either True or False." +msgstr "wartość '%(value)s' musi być True lub False." + +#, python-format +msgid "'%(value)s' value must be either True, False, or None." +msgstr "Wartość „%(value)s” musi być True, False lub None." + +msgid "Boolean (Either True or False)" +msgstr "Wartość logiczna (True lub False – prawda lub fałsz)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Ciąg znaków (do %(max_length)s znaków)" + +msgid "Comma-separated integers" +msgstr "Liczby całkowite rozdzielone przecinkami" + +#, python-format +msgid "" +"'%(value)s' value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"Wartość '%(value)s' ma nieprawidłowy format daty. Musi być ona w formacie " +"YYYY-MM-DD." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"Wartość '%(value)s' ma prawidłowy format (YYYY-MM-DD), ale jest " +"nieprawidłową datą." + +msgid "Date (without time)" +msgstr "Data (bez godziny)" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"Wartość '%(value)s' ma nieprawidłowy format. Musi być ona w formacie YYYY-MM-" +"DD HH:MM[:ss[.uuuuuu]][TZ]." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"Wartość '%(value)s' ma prawidłowy format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]), ale jest nieprawidłową datą/godziną." + +msgid "Date (with time)" +msgstr "Data (z godziną)" + +#, python-format +msgid "'%(value)s' value must be a decimal number." +msgstr "wartość '%(value)s' musi być liczbą dziesiętną." + +msgid "Decimal number" +msgstr "Liczba dziesiętna" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in [DD] [HH:[MM:]]ss[." +"uuuuuu] format." +msgstr "" +"Wartość '%(value)s' ma błędny format. Poprawny format to [DD] [HH:[MM:]]ss[." +"uuuuuu]." + +msgid "Duration" +msgstr "Czas trwania" + +msgid "Email address" +msgstr "Adres e-mail" + +msgid "File path" +msgstr "Ścieżka do pliku" + +#, python-format +msgid "'%(value)s' value must be a float." +msgstr "wartość '%(value)s' musi być liczbą zmiennoprzecinkową." + +msgid "Floating point number" +msgstr "Liczba zmiennoprzecinkowa" + +msgid "IPv4 address" +msgstr "adres IPv4" + +msgid "IP address" +msgstr "Adres IP" + +#, python-format +msgid "'%(value)s' value must be either None, True or False." +msgstr "Wartość '%(value)s' musi być None, True lub False." + +msgid "Boolean (Either True, False or None)" +msgstr "Wartość logiczna (True, False, None – prawda, fałsz lub nic)" + +msgid "Positive integer" +msgstr "Dodatnia liczba całkowita" + +msgid "Positive small integer" +msgstr "Dodatnia mała liczba całkowita" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug (max. %(max_length)s znaków)" + +msgid "Small integer" +msgstr "Mała liczba całkowita" + +msgid "Text" +msgstr "Tekst" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"Wartość '%(value)s' ma nieprawidłowy format. Musi być ona w formacie HH:MM[:" +"ss[.uuuuuu]]." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"Wartość '%(value)s' ma prawidłowy format (HH:MM[:ss[.uuuuuu]]), ale jest " +"nieprawidłową godziną." + +msgid "Time" +msgstr "Czas" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Dane w postaci binarnej" + +#, python-format +msgid "'%(value)s' is not a valid UUID." +msgstr "Wartość '%(value)s' nie jest poprawnym UUID." + +msgid "Universally unique identifier" +msgstr "Uniwersalnie unikalny identyfikator" + +msgid "File" +msgstr "Plik" + +msgid "Image" +msgstr "Plik graficzny" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "%(model)s z polem %(field)s o wartości %(value)r nie istnieje." + +msgid "Foreign Key (type determined by related field)" +msgstr "Klucz obcy (typ określony przez pole powiązane)" + +msgid "One-to-one relationship" +msgstr "Powiązanie jeden do jednego" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "powiązanie %(from)s do %(to)s" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "powiązania %(from)s do %(to)s" + +msgid "Many-to-many relationship" +msgstr "Powiązanie wiele-do-wielu" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "To pole jest wymagane." + +msgid "Enter a whole number." +msgstr "Wpisz liczbę całkowitą." + +msgid "Enter a valid date." +msgstr "Wpisz poprawną datę." + +msgid "Enter a valid time." +msgstr "Wpisz poprawną godzinę." + +msgid "Enter a valid date/time." +msgstr "Wpisz poprawną datę/godzinę." + +msgid "Enter a valid duration." +msgstr "Wpisz poprawny czas trwania." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Liczba dni musi wynosić między {min_days} a {max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Nie wysłano żadnego pliku. Sprawdź typ kodowania formularza." + +msgid "No file was submitted." +msgstr "Żaden plik nie został przesłany." + +msgid "The submitted file is empty." +msgstr "Wysłany plik jest pusty." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Upewnij się, że nazwa pliku ma co najwyżej %(max)d znak (obecnie ma " +"%(length)d)." +msgstr[1] "" +"Upewnij się, że nazwa pliku ma co najwyżej %(max)d znaki (obecnie ma " +"%(length)d)." +msgstr[2] "" +"Upewnij się, że nazwa pliku ma co najwyżej %(max)d znaków (obecnie ma " +"%(length)d)." +msgstr[3] "" +"Upewnij się, że nazwa pliku ma co najwyżej %(max)d znaków (obecnie ma " +"%(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Prześlij plik lub zaznacz by usunąć, ale nie oba na raz." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Prześlij poprawny plik graficzny. Aktualnie przesłany plik nie jest " +"grafiką lub jest uszkodzony." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Wybierz poprawną wartość. %(value)s nie jest żadną z dostępnych opcji." + +msgid "Enter a list of values." +msgstr "Podaj listę wartości." + +msgid "Enter a complete value." +msgstr "Wprowadź kompletną wartość." + +msgid "Enter a valid UUID." +msgstr "Wpisz poprawny UUID." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Ukryte pole %(name)s) %(error)s" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "Brakuje danych ManagementForm lub zostały one zmodyfikowane." + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "Proszę wysłać %d lub mniej formularzy." +msgstr[1] "Proszę wysłać %d lub mniej formularze." +msgstr[2] "Proszę wysłać %d lub mniej formularzy." +msgstr[3] "Proszę wysłać %d lub mniej formularzy." + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "Proszę wysłać %d lub więcej formularzy." +msgstr[1] "Proszę wysłać %d lub więcej formularze." +msgstr[2] "Proszę wysłać %d lub więcej formularzy." +msgstr[3] "Proszę wysłać %d lub więcej formularzy." + +msgid "Order" +msgstr "Kolejność" + +msgid "Delete" +msgstr "Usuń" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Popraw zduplikowane dane w %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "Popraw zduplikowane dane w %(field)s, które muszą być unikalne." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Popraw zduplikowane dane w %(field_name)s, które wymaga unikalności dla " +"%(lookup)s w polu %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Popraw poniższe zduplikowane wartości." + +msgid "The inline value did not match the parent instance." +msgstr "Wartość inline nie pasuje do obiektu rodzica." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Wybierz poprawną wartość. Podana nie jest jednym z dostępnych wyborów." + +#, python-format +msgid "\"%(pk)s\" is not a valid value." +msgstr "„%(pk)s” nie jest poprawną wartością." + +#, python-format +msgid "" +"%(datetime)s couldn't be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s nie może być interpretowany w strefie czasowej " +"%(current_timezone)s; może być niejednoznaczne lub nie istnieć." + +msgid "Clear" +msgstr "Wyczyść" + +msgid "Currently" +msgstr "Teraz" + +msgid "Change" +msgstr "Zmień" + +msgid "Unknown" +msgstr "Nieznany" + +msgid "Yes" +msgstr "Tak" + +msgid "No" +msgstr "Nie" + +msgid "yes,no,maybe" +msgstr "tak,nie,może" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d bajt" +msgstr[1] "%(size)d bajty" +msgstr[2] "%(size)d bajtów" +msgstr[3] "%(size)d bajtów" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "po południu" + +msgid "a.m." +msgstr "rano" + +msgid "PM" +msgstr "po południu" + +msgid "AM" +msgstr "rano" + +msgid "midnight" +msgstr "północ" + +msgid "noon" +msgstr "południe" + +msgid "Monday" +msgstr "Poniedziałek" + +msgid "Tuesday" +msgstr "Wtorek" + +msgid "Wednesday" +msgstr "Środa" + +msgid "Thursday" +msgstr "Czwartek" + +msgid "Friday" +msgstr "Piątek" + +msgid "Saturday" +msgstr "Sobota" + +msgid "Sunday" +msgstr "Niedziela" + +msgid "Mon" +msgstr "Pon" + +msgid "Tue" +msgstr "Wt" + +msgid "Wed" +msgstr "Śr" + +msgid "Thu" +msgstr "Czw" + +msgid "Fri" +msgstr "Pt" + +msgid "Sat" +msgstr "So" + +msgid "Sun" +msgstr "Nd" + +msgid "January" +msgstr "Styczeń" + +msgid "February" +msgstr "Luty" + +msgid "March" +msgstr "Marzec" + +msgid "April" +msgstr "Kwiecień" + +msgid "May" +msgstr "Maj" + +msgid "June" +msgstr "Czerwiec" + +msgid "July" +msgstr "Lipiec" + +msgid "August" +msgstr "Sierpień" + +msgid "September" +msgstr "Wrzesień" + +msgid "October" +msgstr "Październik" + +msgid "November" +msgstr "Listopad" + +msgid "December" +msgstr "Grudzień" + +msgid "jan" +msgstr "sty" + +msgid "feb" +msgstr "lut" + +msgid "mar" +msgstr "mar" + +msgid "apr" +msgstr "kwi" + +msgid "may" +msgstr "maj" + +msgid "jun" +msgstr "cze" + +msgid "jul" +msgstr "lip" + +msgid "aug" +msgstr "sie" + +msgid "sep" +msgstr "wrz" + +msgid "oct" +msgstr "paź" + +msgid "nov" +msgstr "lis" + +msgid "dec" +msgstr "gru" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Sty." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Lut." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Mar." + +msgctxt "abbrev. month" +msgid "April" +msgstr "Kwi." + +msgctxt "abbrev. month" +msgid "May" +msgstr "Maj" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Cze." + +msgctxt "abbrev. month" +msgid "July" +msgstr "Lip." + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Sie." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Wrz." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Paź." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Lis." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Gru" + +msgctxt "alt. month" +msgid "January" +msgstr "stycznia" + +msgctxt "alt. month" +msgid "February" +msgstr "lutego" + +msgctxt "alt. month" +msgid "March" +msgstr "marca" + +msgctxt "alt. month" +msgid "April" +msgstr "kwietnia" + +msgctxt "alt. month" +msgid "May" +msgstr "maja" + +msgctxt "alt. month" +msgid "June" +msgstr "czerwca" + +msgctxt "alt. month" +msgid "July" +msgstr "lipca" + +msgctxt "alt. month" +msgid "August" +msgstr "sierpnia" + +msgctxt "alt. month" +msgid "September" +msgstr "września" + +msgctxt "alt. month" +msgid "October" +msgstr "października" + +msgctxt "alt. month" +msgid "November" +msgstr "listopada" + +msgctxt "alt. month" +msgid "December" +msgstr "grudnia" + +msgid "This is not a valid IPv6 address." +msgstr "To nie jest poprawny adres IPv6." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "lub" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d rok" +msgstr[1] "%d lata" +msgstr[2] "%d lat" +msgstr[3] "%d lat" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d miesiąc" +msgstr[1] "%d miesiące" +msgstr[2] "%d miesięcy" +msgstr[3] "%d miesięcy" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d tydzień" +msgstr[1] "%d tygodnie" +msgstr[2] "%d tygodni" +msgstr[3] "%d tygodni" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d dzień" +msgstr[1] "%d dni" +msgstr[2] "%d dni" +msgstr[3] "%d dni" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d godzina" +msgstr[1] "%d godziny" +msgstr[2] "%d godzin" +msgstr[3] "%d godzin" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minuta" +msgstr[1] "%d minuty" +msgstr[2] "%d minut" +msgstr[3] "%d minut" + +msgid "0 minutes" +msgstr "0 minut" + +msgid "Forbidden" +msgstr "Dostęp zabroniony" + +msgid "CSRF verification failed. Request aborted." +msgstr "Weryfikacja CSRF nie powiodła się. Żądanie zostało przerwane." + +msgid "" +"You are seeing this message because this HTTPS site requires a 'Referer " +"header' to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Widzisz tą wiadomość, ponieważ ta witryna HTTPS wymaga aby przeglądarka " +"wysłała nagłówek 'Referer header', a żaden nie został wysłany. Nagłówek ten " +"jest wymagane ze względów bezpieczeństwa, aby upewnić się, że Twoja " +"przeglądarka nie została przechwycona przez osoby trzecie." + +msgid "" +"If you have configured your browser to disable 'Referer' headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for 'same-" +"origin' requests." +msgstr "" +"Jeżeli nagłówki „Referer” w Twojej przeglądarce są wyłączone, to proszę " +"włącz je ponownie. Przynajmniej dla tej strony, połączeń HTTPS lub zapytań " +"typu „same-origin”." + +msgid "" +"If you are using the tag or " +"including the 'Referrer-Policy: no-referrer' header, please remove them. The " +"CSRF protection requires the 'Referer' header to do strict referer checking. " +"If you're concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"Jeśli używasz taga lub " +"umieszczasz nagłówek „Referrer-Policy: no-referrer”, prosimy je usunąć. " +"Ochrona przed atakami CSRF wymaga nagłówka „Referer”, aby wykonać ścisłe " +"sprawdzenie referera HTTP. Jeśli zależy ci na prywatności, użyj alternatyw " +"takich jak dla linków do stron osób trzecich." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Widzisz tą wiadomość, ponieważ ta witryna wymaga ciasteczka CSRF do " +"przesyłania formularza. Ciasteczko to jest wymagane ze względów " +"bezpieczeństwa, aby upewnić się, że Twoja przeglądarka nie została " +"przechwycona przez osoby trzecie." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for 'same-origin' requests." +msgstr "" +"Jeżeli ciasteczka w Twojej przeglądarce są wyłączone, to proszę włącz je " +"ponownie. Przynajmniej dla tej strony lub żadań typu „same-origin”." + +msgid "More information is available with DEBUG=True." +msgstr "Więcej informacji jest dostępnych po ustawieniu DEBUG=True." + +msgid "No year specified" +msgstr "Nie określono roku" + +msgid "Date out of range" +msgstr "Data poza zakresem" + +msgid "No month specified" +msgstr "Nie określono miesiąca" + +msgid "No day specified" +msgstr "Nie określono dnia" + +msgid "No week specified" +msgstr "Nie określono tygodnia" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "%(verbose_name_plural)s nie są dostępne" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Wyświetlanie %(verbose_name_plural)s z datą przyszłą jest niedostępne, gdyż " +"atrybut '%(class_name)s.allow_future' ma wartość 'False'." + +#, python-format +msgid "Invalid date string '%(datestr)s' given format '%(format)s'" +msgstr "" +"Ciąg znaków '%(datestr)s' jest niezgodny z podanym formatem daty '%(format)s'" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Nie znaleziono %(verbose_name)s spełniających wybrane kryteria" + +msgid "Page is not 'last', nor can it be converted to an int." +msgstr "" +"Podanego numeru strony nie można przekształcić na liczbę całkowitą, nie " +"przyjął on również wartości 'last' oznaczającej ostatnią stronę z dostępnego " +"zakresu." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Nieprawidłowy numer strony (%(page_number)s): %(message)s " + +#, python-format +msgid "Empty list and '%(class_name)s.allow_empty' is False." +msgstr "" +"Lista nie zawiera żadnych elementów, a atrybut '%(class_name)s.allow_empty' " +"ma wartość 'False'." + +msgid "Directory indexes are not allowed here." +msgstr "Wyświetlanie zawartości katalogu jest tu niedozwolone." + +#, python-format +msgid "\"%(path)s\" does not exist" +msgstr "\" %(path)s \" nie istnieje" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Zawartość %(directory)s " + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "Django: framework WWW dla perfekcjonistów z deadline'ami." + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Zobacz informacje o wydaniu dla Django " +"%(version)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "Instalacja przebiegła pomyślnie! Gratulacje!" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Widzisz tę stronę, ponieważ w swoim pliku ustawień masz DEBUG=True i nie skonfigurowałeś żadnych URL-i." + +msgid "Django Documentation" +msgstr "Dokumentacja Django" + +msgid "Topics, references, & how-to's" +msgstr "Przewodniki tematyczne, podręczniki i przewodniki „jak to zrobić”" + +msgid "Tutorial: A Polling App" +msgstr "Samouczek: Aplikacja ankietowa" + +msgid "Get started with Django" +msgstr "Pierwsze kroki z Django" + +msgid "Django Community" +msgstr "Społeczność Django" + +msgid "Connect, get help, or contribute" +msgstr "Nawiąż kontakt, uzyskaj pomoc lub wnieś swój wkład" diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/pt/formats.py b/venv/lib/python3.7/site-packages/django/conf/locale/pt/formats.py new file mode 100644 index 0000000..5789cd8 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/pt/formats.py @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = r'j \d\e F \d\e Y' +TIME_FORMAT = 'H:i' +DATETIME_FORMAT = r'j \d\e F \d\e Y à\s H:i' +YEAR_MONTH_FORMAT = r'F \d\e Y' +MONTH_DAY_FORMAT = r'j \d\e F' +SHORT_DATE_FORMAT = 'd/m/Y' +SHORT_DATETIME_FORMAT = 'd/m/Y H:i' +FIRST_DAY_OF_WEEK = 0 # Sunday + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +# Kept ISO formats as they are in first position +DATE_INPUT_FORMATS = [ + '%Y-%m-%d', '%d/%m/%Y', '%d/%m/%y', # '2006-10-25', '25/10/2006', '25/10/06' + # '%d de %b de %Y', '%d de %b, %Y', # '25 de Out de 2006', '25 Out, 2006' + # '%d de %B de %Y', '%d de %B, %Y', # '25 de Outubro de 2006', '25 de Outubro, 2006' +] +DATETIME_INPUT_FORMATS = [ + '%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59' + '%Y-%m-%d %H:%M:%S.%f', # '2006-10-25 14:30:59.000200' + '%Y-%m-%d %H:%M', # '2006-10-25 14:30' + '%Y-%m-%d', # '2006-10-25' + '%d/%m/%Y %H:%M:%S', # '25/10/2006 14:30:59' + '%d/%m/%Y %H:%M:%S.%f', # '25/10/2006 14:30:59.000200' + '%d/%m/%Y %H:%M', # '25/10/2006 14:30' + '%d/%m/%Y', # '25/10/2006' + '%d/%m/%y %H:%M:%S', # '25/10/06 14:30:59' + '%d/%m/%y %H:%M:%S.%f', # '25/10/06 14:30:59.000200' + '%d/%m/%y %H:%M', # '25/10/06 14:30' + '%d/%m/%y', # '25/10/06' +] +DECIMAL_SEPARATOR = ',' +THOUSAND_SEPARATOR = '.' +NUMBER_GROUPING = 3 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/pt_BR/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/conf/locale/pt_BR/LC_MESSAGES/django.po new file mode 100644 index 0000000..86fafd7 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/pt_BR/LC_MESSAGES/django.po @@ -0,0 +1,1295 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Allisson Azevedo , 2014 +# amcorreia , 2018 +# andrewsmedina , 2014-2015 +# Arthur Silva , 2017 +# bruno.devpod , 2014 +# Camilo B. Moreira , 2017 +# Carlos Leite , 2016 +# Filipe Cifali Stangler , 2016 +# dudanogueira , 2012 +# dudanogueira , 2019 +# Elyézer Rezende , 2013 +# Fábio C. Barrionuevo da Luz , 2014-2015 +# Felipe Rodrigues , 2016 +# Gladson , 2013 +# semente, 2011-2014 +# Igor Cavalcante , 2017 +# Jannis Leidel , 2011 +# Lucas Infante , 2015 +# Luiz Boaretto , 2017 +# Marcelo Moro Brondani , 2018 +# Sandro , 2011 +# Sergio Garcia , 2015 +# Tânia Andrea , 2017 +# Wiliam Souza , 2015 +# Xico Petry , 2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-02-18 17:13+0000\n" +"Last-Translator: dudanogueira \n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/django/django/" +"language/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Afrikaans" +msgstr "Africânder" + +msgid "Arabic" +msgstr "Árabe" + +msgid "Asturian" +msgstr "Asturiano" + +msgid "Azerbaijani" +msgstr "Azerbaijão" + +msgid "Bulgarian" +msgstr "Búlgaro" + +msgid "Belarusian" +msgstr "Bielorrussa" + +msgid "Bengali" +msgstr "Bengali" + +msgid "Breton" +msgstr "Bretão" + +msgid "Bosnian" +msgstr "Bósnio" + +msgid "Catalan" +msgstr "Catalão" + +msgid "Czech" +msgstr "Tcheco" + +msgid "Welsh" +msgstr "Galês" + +msgid "Danish" +msgstr "Dinamarquês" + +msgid "German" +msgstr "Alemão" + +msgid "Lower Sorbian" +msgstr "Sorábio Baixo" + +msgid "Greek" +msgstr "Grego" + +msgid "English" +msgstr "Inglês" + +msgid "Australian English" +msgstr "Inglês Australiano" + +msgid "British English" +msgstr "Inglês Britânico" + +msgid "Esperanto" +msgstr "Esperanto" + +msgid "Spanish" +msgstr "Espanhol" + +msgid "Argentinian Spanish" +msgstr "Espanhol Argentino" + +msgid "Colombian Spanish" +msgstr "Espanhol Colombiano" + +msgid "Mexican Spanish" +msgstr "Espanhol Mexicano" + +msgid "Nicaraguan Spanish" +msgstr "Espanhol Nicaraguense" + +msgid "Venezuelan Spanish" +msgstr "Espanhol Venuzuelano" + +msgid "Estonian" +msgstr "Estoniano" + +msgid "Basque" +msgstr "Basco" + +msgid "Persian" +msgstr "Persa" + +msgid "Finnish" +msgstr "Finlandês" + +msgid "French" +msgstr "Francês" + +msgid "Frisian" +msgstr "Frísia" + +msgid "Irish" +msgstr "Irlandês" + +msgid "Scottish Gaelic" +msgstr "Gaélico Escocês" + +msgid "Galician" +msgstr "Galiciano" + +msgid "Hebrew" +msgstr "Hebraico" + +msgid "Hindi" +msgstr "Hindi" + +msgid "Croatian" +msgstr "Croata" + +msgid "Upper Sorbian" +msgstr "Sorábio Alto" + +msgid "Hungarian" +msgstr "Húngaro" + +msgid "Armenian" +msgstr "Armênio" + +msgid "Interlingua" +msgstr "Interlíngua" + +msgid "Indonesian" +msgstr "Indonésio" + +msgid "Ido" +msgstr "Ido" + +msgid "Icelandic" +msgstr "Islandês" + +msgid "Italian" +msgstr "Italiano" + +msgid "Japanese" +msgstr "Japonês" + +msgid "Georgian" +msgstr "Georgiano" + +msgid "Kabyle" +msgstr "Cabila" + +msgid "Kazakh" +msgstr "Cazaque" + +msgid "Khmer" +msgstr "Khmer" + +msgid "Kannada" +msgstr "Canarês" + +msgid "Korean" +msgstr "Coreano" + +msgid "Luxembourgish" +msgstr "Luxemburguês" + +msgid "Lithuanian" +msgstr "Lituano" + +msgid "Latvian" +msgstr "Letão" + +msgid "Macedonian" +msgstr "Macedônio" + +msgid "Malayalam" +msgstr "Malaiala" + +msgid "Mongolian" +msgstr "Mongol" + +msgid "Marathi" +msgstr "Marathi" + +msgid "Burmese" +msgstr "Birmanês" + +msgid "Norwegian Bokmål" +msgstr "Dano-norueguês" + +msgid "Nepali" +msgstr "Nepalês" + +msgid "Dutch" +msgstr "Neerlandês" + +msgid "Norwegian Nynorsk" +msgstr "Novo Norueguês" + +msgid "Ossetic" +msgstr "Osseto" + +msgid "Punjabi" +msgstr "Punjabi" + +msgid "Polish" +msgstr "Polonês" + +msgid "Portuguese" +msgstr "Português" + +msgid "Brazilian Portuguese" +msgstr "Português Brasileiro" + +msgid "Romanian" +msgstr "Romeno" + +msgid "Russian" +msgstr "Russo" + +msgid "Slovak" +msgstr "Eslovaco" + +msgid "Slovenian" +msgstr "Esloveno" + +msgid "Albanian" +msgstr "Albanesa" + +msgid "Serbian" +msgstr "Sérvio" + +msgid "Serbian Latin" +msgstr "Sérvio Latino" + +msgid "Swedish" +msgstr "Sueco" + +msgid "Swahili" +msgstr "Suaíli" + +msgid "Tamil" +msgstr "Tâmil" + +msgid "Telugu" +msgstr "Telugu" + +msgid "Thai" +msgstr "Tailandês" + +msgid "Turkish" +msgstr "Turco" + +msgid "Tatar" +msgstr "Tatar" + +msgid "Udmurt" +msgstr "Udmurt" + +msgid "Ukrainian" +msgstr "Ucraniano" + +msgid "Urdu" +msgstr "Urdu" + +msgid "Vietnamese" +msgstr "Vietnamita" + +msgid "Simplified Chinese" +msgstr "Chinês Simplificado" + +msgid "Traditional Chinese" +msgstr "Chinês Tradicional" + +msgid "Messages" +msgstr "Mensagens" + +msgid "Site Maps" +msgstr "Site Maps" + +msgid "Static Files" +msgstr "Arquivos Estáticos" + +msgid "Syndication" +msgstr "Syndication" + +msgid "That page number is not an integer" +msgstr "Esse número de página não é um número inteiro" + +msgid "That page number is less than 1" +msgstr "Esse número de página é menor que 1" + +msgid "That page contains no results" +msgstr "Essa página não contém resultados" + +msgid "Enter a valid value." +msgstr "Informe um valor válido." + +msgid "Enter a valid URL." +msgstr "Informe uma URL válida." + +msgid "Enter a valid integer." +msgstr "Insira um número inteiro válido." + +msgid "Enter a valid email address." +msgstr "Informe um endereço de email válido." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Insira um \"slug\" válido consistindo de letras, números, sublinhados (_) ou " +"hífens." + +msgid "" +"Enter a valid 'slug' consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Insira um 'slug' válido composto de letras Unicode, números, sublinhados ou " +"hífens." + +msgid "Enter a valid IPv4 address." +msgstr "Insira um endereço IPv4 válido." + +msgid "Enter a valid IPv6 address." +msgstr "Insira um endereço IPv6 válido." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Insira um endereço IPv4 ou IPv6 válido." + +msgid "Enter only digits separated by commas." +msgstr "Insira apenas dígitos separados por vírgulas." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "Certifique-se de que o valor é %(limit_value)s (ele é %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Certifique-se que este valor seja menor ou igual a %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Certifique-se que este valor seja maior ou igual a %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Certifique-se de que o valor tenha no mínimo %(limit_value)d caractere (ele " +"possui %(show_value)d)." +msgstr[1] "" +"Certifique-se de que o valor tenha no mínimo %(limit_value)d caracteres (ele " +"possui %(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Certifique-se de que o valor tenha no máximo %(limit_value)d caractere (ele " +"possui %(show_value)d)." +msgstr[1] "" +"Certifique-se de que o valor tenha no máximo %(limit_value)d caracteres (ele " +"possui %(show_value)d)." + +msgid "Enter a number." +msgstr "Informe um número." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Certifique-se de que não tenha mais de %(max)s dígito no total." +msgstr[1] "Certifique-se de que não tenha mais de %(max)s dígitos no total." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Certifique-se de que não tenha mais de %(max)s casa decimal." +msgstr[1] "Certifique-se de que não tenha mais de %(max)s casas decimais." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"Certifique-se de que não tenha mais de %(max)s dígito antes do ponto decimal." +msgstr[1] "" +"Certifique-se de que não tenha mais de %(max)s dígitos antes do ponto " +"decimal." + +#, python-format +msgid "" +"File extension '%(extension)s' is not allowed. Allowed extensions are: " +"'%(allowed_extensions)s'." +msgstr "" +"A extensão de arquivo '%(extension)s' não é permitida. As extensões " +"permitidas são: '%(allowed_extensions)s'." + +msgid "Null characters are not allowed." +msgstr "Caracteres nulos não são permitidos." + +msgid "and" +msgstr "e" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s com este %(field_labels)s já existe." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Valor %(value)r não é uma opção válida." + +msgid "This field cannot be null." +msgstr "Este campo não pode ser nulo." + +msgid "This field cannot be blank." +msgstr "Este campo não pode estar vazio." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s com este %(field_label)s já existe." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s deve ser único para %(date_field_label)s %(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Campo do tipo: %(field_type)s" + +msgid "Integer" +msgstr "Inteiro" + +#, python-format +msgid "'%(value)s' value must be an integer." +msgstr "'%(value)s' valor deve ser um inteiro." + +msgid "Big (8 byte) integer" +msgstr "Inteiro grande (8 byte)" + +#, python-format +msgid "'%(value)s' value must be either True or False." +msgstr "'%(value)s' valor deve ser True ou False." + +#, python-format +msgid "'%(value)s' value must be either True, False, or None." +msgstr "O valor '%(value)s' deve ser True, False ou Nenhum." + +msgid "Boolean (Either True or False)" +msgstr "Booleano (Verdadeiro ou Falso)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "String (até %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Inteiros separados por vírgula" + +#, python-format +msgid "" +"'%(value)s' value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"'%(value)s' valor tem um formato de data inválido. Ele deve estar no formato " +"AAAA-MM-DD." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"'%(value)s' valor tem o formato correto (AAAA-MM-DD), mas é uma data " +"inválida." + +msgid "Date (without time)" +msgstr "Data (sem hora)" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"'%(value)s' valor tem um formato inválido. Ele deve estar no formato AAAA-MM-" +"DD HH: MM [:. Ss [uuuuuu]] [TZ]." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"'%(value)s' valor tem o formato correto (AAAA-MM-DD HH: MM [:. Ss [uuuuuu]] " +"[TZ]), mas é uma data/hora inválida." + +msgid "Date (with time)" +msgstr "Data (com hora)" + +#, python-format +msgid "'%(value)s' value must be a decimal number." +msgstr "'%(value)s' valor deve ser um número decimal." + +msgid "Decimal number" +msgstr "Número decimal" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in [DD] [HH:[MM:]]ss[." +"uuuuuu] format." +msgstr "" +"O valor '%(value)s' está em um formato inválido. Ele deve estar no formato " +"[DD] [HH:[MM:]]ss[.uuuuuu]." + +msgid "Duration" +msgstr "Duração" + +msgid "Email address" +msgstr "Endereço de e-mail" + +msgid "File path" +msgstr "Caminho do arquivo" + +#, python-format +msgid "'%(value)s' value must be a float." +msgstr "'%(value)s' valor deve ser um float." + +msgid "Floating point number" +msgstr "Número de ponto flutuante" + +msgid "IPv4 address" +msgstr "Endereço IPv4" + +msgid "IP address" +msgstr "Endereço IP" + +#, python-format +msgid "'%(value)s' value must be either None, True or False." +msgstr "'%(value)s' valor deve ser None, verdadeiro ou falso." + +msgid "Boolean (Either True, False or None)" +msgstr "Booleano (Verdadeiro, Falso ou Nada)" + +msgid "Positive integer" +msgstr "Inteiro positivo" + +msgid "Positive small integer" +msgstr "Inteiro curto positivo" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slug (até %(max_length)s)" + +msgid "Small integer" +msgstr "Inteiro curto" + +msgid "Text" +msgstr "Texto" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"'%(value)s' valor tem um formato inválido. Deve ser no formato HH: MM [: ss " +"[uuuuuu].] Formato." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"'%(value)s' valor tem o formato correto (HH: MM [:. Ss [uuuuuu]]), mas é uma " +"hora inválida." + +msgid "Time" +msgstr "Hora" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Dados binários bruto" + +#, python-format +msgid "'%(value)s' is not a valid UUID." +msgstr "'%(value)s' não é um UUID válido." + +msgid "Universally unique identifier" +msgstr "Identificador único universal" + +msgid "File" +msgstr "Arquivo" + +msgid "Image" +msgstr "Imagem" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "A instância de %(model)s com %(field)s %(value)r não existe." + +msgid "Foreign Key (type determined by related field)" +msgstr "Chave Estrangeira (tipo determinado pelo campo relacionado)" + +msgid "One-to-one relationship" +msgstr "Relacionamento um-para-um" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "Relacionamento %(from)s-%(to)s" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "Relacionamentos %(from)s-%(to)s" + +msgid "Many-to-many relationship" +msgstr "Relacionamento muitos-para-muitos" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Este campo é obrigatório." + +msgid "Enter a whole number." +msgstr "Informe um número inteiro." + +msgid "Enter a valid date." +msgstr "Informe uma data válida." + +msgid "Enter a valid time." +msgstr "Informe uma hora válida." + +msgid "Enter a valid date/time." +msgstr "Informe uma data/hora válida." + +msgid "Enter a valid duration." +msgstr "Insira uma duração válida." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "O número de dias deve ser entre {min_days} e {max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Nenhum arquivo enviado. Verifique o tipo de codificação do formulário." + +msgid "No file was submitted." +msgstr "Nenhum arquivo foi enviado." + +msgid "The submitted file is empty." +msgstr "O arquivo enviado está vazio." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Certifique-se de que o arquivo tenha no máximo %(max)d caractere (ele possui " +"%(length)d)." +msgstr[1] "" +"Certifique-se de que o arquivo tenha no máximo %(max)d caracteres (ele " +"possui %(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Por favor, envie um arquivo ou marque o checkbox, mas não ambos." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Envie uma imagem válida. O arquivo enviado não é uma imagem ou está " +"corrompido." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Faça uma escolha válida. %(value)s não é uma das escolhas disponíveis." + +msgid "Enter a list of values." +msgstr "Informe uma lista de valores." + +msgid "Enter a complete value." +msgstr "Insira um valor completo." + +msgid "Enter a valid UUID." +msgstr "Insira um UUID válido." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Campo oculto %(name)s) %(error)s" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "Os dados do ManagementForm não foram encontrados ou foram adulterados" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "Por favor envie %d ou menos formulário." +msgstr[1] "Por favor envie %d ou menos formulários." + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "Por favor envie %d ou mais formulários." +msgstr[1] "Por favor envie %d ou mais formulários." + +msgid "Order" +msgstr "Ordem" + +msgid "Delete" +msgstr "Remover" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Por favor, corrija o valor duplicado para %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Por favor, corrija o valor duplicado para %(field)s, o qual deve ser único." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Por favor, corrija o dado duplicado para %(field_name)s, o qual deve ser " +"único para %(lookup)s em %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Por favor, corrija os valores duplicados abaixo." + +msgid "The inline value did not match the parent instance." +msgstr "O valor na linha não correspondeu com a instância pai." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Faça uma escolha válida. Sua escolha não é uma das disponíveis." + +#, python-format +msgid "\"%(pk)s\" is not a valid value." +msgstr "\"%(pk)s\" não é um valor válido." + +#, python-format +msgid "" +"%(datetime)s couldn't be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +" %(datetime)s não pôde ser interpretado no fuso horário " +"%(current_timezone)s; pode estar ambíguo ou pode não existir." + +msgid "Clear" +msgstr "Limpar" + +msgid "Currently" +msgstr "Atualmente" + +msgid "Change" +msgstr "Modificar" + +msgid "Unknown" +msgstr "Desconhecido" + +msgid "Yes" +msgstr "Sim" + +msgid "No" +msgstr "Não" + +msgid "yes,no,maybe" +msgstr "sim,não,talvez" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d byte" +msgstr[1] "%(size)d bytes" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "meia-noite" + +msgid "noon" +msgstr "meio-dia" + +msgid "Monday" +msgstr "Segunda-feira" + +msgid "Tuesday" +msgstr "Terça-feira" + +msgid "Wednesday" +msgstr "Quarta-feira" + +msgid "Thursday" +msgstr "Quinta-feira" + +msgid "Friday" +msgstr "Sexta-feira" + +msgid "Saturday" +msgstr "Sábado" + +msgid "Sunday" +msgstr "Domingo" + +msgid "Mon" +msgstr "Seg" + +msgid "Tue" +msgstr "Ter" + +msgid "Wed" +msgstr "Qua" + +msgid "Thu" +msgstr "Qui" + +msgid "Fri" +msgstr "Sex" + +msgid "Sat" +msgstr "Sab" + +msgid "Sun" +msgstr "Dom" + +msgid "January" +msgstr "Janeiro" + +msgid "February" +msgstr "Fevereiro" + +msgid "March" +msgstr "Março" + +msgid "April" +msgstr "Abril" + +msgid "May" +msgstr "Maio" + +msgid "June" +msgstr "Junho" + +msgid "July" +msgstr "Julho" + +msgid "August" +msgstr "Agosto" + +msgid "September" +msgstr "Setembro" + +msgid "October" +msgstr "Outubro" + +msgid "November" +msgstr "Novembro" + +msgid "December" +msgstr "Dezembro" + +msgid "jan" +msgstr "jan" + +msgid "feb" +msgstr "fev" + +msgid "mar" +msgstr "mar" + +msgid "apr" +msgstr "abr" + +msgid "may" +msgstr "mai" + +msgid "jun" +msgstr "jun" + +msgid "jul" +msgstr "jul" + +msgid "aug" +msgstr "ago" + +msgid "sep" +msgstr "set" + +msgid "oct" +msgstr "out" + +msgid "nov" +msgstr "nov" + +msgid "dec" +msgstr "dez" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Jan." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Fev." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Março" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Abril" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Maio" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Junho" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Julho" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Ago." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Set." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Out." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Nov." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Dez." + +msgctxt "alt. month" +msgid "January" +msgstr "Janeiro" + +msgctxt "alt. month" +msgid "February" +msgstr "Fevereiro" + +msgctxt "alt. month" +msgid "March" +msgstr "Março" + +msgctxt "alt. month" +msgid "April" +msgstr "Abril" + +msgctxt "alt. month" +msgid "May" +msgstr "Maio" + +msgctxt "alt. month" +msgid "June" +msgstr "Junho" + +msgctxt "alt. month" +msgid "July" +msgstr "Julho" + +msgctxt "alt. month" +msgid "August" +msgstr "Agosto" + +msgctxt "alt. month" +msgid "September" +msgstr "Setembro" + +msgctxt "alt. month" +msgid "October" +msgstr "Outubro" + +msgctxt "alt. month" +msgid "November" +msgstr "Novembro" + +msgctxt "alt. month" +msgid "December" +msgstr "Dezembro" + +msgid "This is not a valid IPv6 address." +msgstr "Este não é um endereço IPv6 válido." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "" + +msgid "or" +msgstr "ou" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d ano" +msgstr[1] "%d anos" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d mês" +msgstr[1] "%d meses" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d semana" +msgstr[1] "%d semanas" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d dia" +msgstr[1] "%d dias" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d hora" +msgstr[1] "%d horas" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minuto" +msgstr[1] "%d minutos" + +msgid "0 minutes" +msgstr "0 minutos" + +msgid "Forbidden" +msgstr "Proibido" + +msgid "CSRF verification failed. Request aborted." +msgstr "Verificação CSRF falhou. Pedido cancelado." + +msgid "" +"You are seeing this message because this HTTPS site requires a 'Referer " +"header' to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Você está vendo esta mensagem, porque este site HTTPS exige que um " +"'cabeçalho Referer' seja enviado pelo seu navegador, mas nenhum foi enviado. " +"Este cabeçalho é necessário por razões de segurança, para garantir que o seu " +"browser não está sendo invadido por terceiros." + +msgid "" +"If you have configured your browser to disable 'Referer' headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for 'same-" +"origin' requests." +msgstr "" +"Se você tiver configurado seu navegador para desativar os cabeçalhos " +"'Referer', por favor ative-os novamente, pelo menos para este site, ou para " +"conexões HTTPS ou para pedidos de 'mesma origem'." + +msgid "" +"If you are using the tag or " +"including the 'Referrer-Policy: no-referrer' header, please remove them. The " +"CSRF protection requires the 'Referer' header to do strict referer checking. " +"If you're concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"Se você estiver usando a tag ou incluindo o cabeçalho \"Referrer-Policy: no-referrer\", remova-os. A " +"proteção contra CSRF requer que o cabeçalho 'Referer' faça uma verificação " +"rigorosa do referenciador. Se você estiver preocupado com a privacidade, use " +"alternativas para links para sites de terceiros." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Você está vendo esta mensagem, porque este site requer um cookie CSRF no " +"envio de formulários. Este cookie é necessário por razões de segurança, para " +"garantir que o seu browser não está sendo sequestrado por terceiros." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for 'same-origin' requests." +msgstr "" +"Se você tiver configurado seu browser para desativar os cookies, por favor " +"ative-os novamente, pelo menos para este site, ou para pedidos de 'mesma " +"origem'." + +msgid "More information is available with DEBUG=True." +msgstr "Mais informações estão disponíveis com DEBUG=True." + +msgid "No year specified" +msgstr "Ano não especificado" + +msgid "Date out of range" +msgstr "Data fora de alcance" + +msgid "No month specified" +msgstr "Mês não especificado" + +msgid "No day specified" +msgstr "Dia não especificado" + +msgid "No week specified" +msgstr "Semana não especificada" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Nenhum(a) %(verbose_name_plural)s disponível" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"%(verbose_name_plural)s futuros não disponíveis pois %(class_name)s." +"allow_future é False." + +#, python-format +msgid "Invalid date string '%(datestr)s' given format '%(format)s'" +msgstr "' %(datestr)s ' string de data inválida dado o formato ' %(format)s '" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "%(verbose_name)s não encontrado de acordo com a consulta" + +msgid "Page is not 'last', nor can it be converted to an int." +msgstr "" +"A página não é 'final', nem tampouco pode ser convertido para um inteiro." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Página inválida (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and '%(class_name)s.allow_empty' is False." +msgstr "Lista vazia e '%(class_name)s.allow_empty' é False." + +msgid "Directory indexes are not allowed here." +msgstr "Índices de diretório não são permitidos aqui." + +#, python-format +msgid "\"%(path)s\" does not exist" +msgstr "\"%(path)s\" não existe" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Índice de %(directory)s " + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "Django: o framework web para perfeccionistas com prazo de entrega." + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Ver as notas de lançamento do Django " +"%(version)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "A instalação foi com sucesso! Parabéns!" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Você está vendo esta página pois possui DEBUG=True no seu arquivo de configurações e não configurou nenhuma " +"URL." + +msgid "Django Documentation" +msgstr "Documentação do Django" + +msgid "Topics, references, & how-to's" +msgstr "Tópicos, referências, & how-to's" + +msgid "Tutorial: A Polling App" +msgstr "Tutorial: Um aplicativo de votação" + +msgid "Get started with Django" +msgstr "Comece a usar Django" + +msgid "Django Community" +msgstr "Comunidade Django" + +msgid "Connect, get help, or contribute" +msgstr "Conecte-se, obtenha ajuda ou contribua" diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/pt_BR/__init__.py b/venv/lib/python3.7/site-packages/django/conf/locale/pt_BR/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/ro/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/conf/locale/ro/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..62de5aa72130382988b907ee88d70454ec8c798f GIT binary patch literal 27531 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
I0gFl!hSIX3W!#uYLhDX(n$;}XsIdV| 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 U);nU<k literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/ru/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/conf/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 0000000..3a0b6c2 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,1349 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Mingun , 2014 +# Anton Bazhanov , 2017 +# Denis Darii , 2011 +# Dimmus , 2011 +# eigrad , 2012 +# Eugene , 2013 +# eXtractor , 2015 +# Igor Melnyk, 2014 +# Ivan Khomutov , 2017 +# Jannis Leidel , 2011 +# lilo.panic, 2016 +# Mikhail Zholobov , 2013 +# Nikolay Korotkiy , 2018 +# Вася Аникин , 2017 +# Алексей Борискин , 2013-2017,2019 +# Дмитрий Шатера , 2016,2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-02-18 21:13+0000\n" +"Last-Translator: Алексей Борискин \n" +"Language-Team: Russian (http://www.transifex.com/django/django/language/" +"ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" +"%100>=11 && n%100<=14)? 2 : 3);\n" + +msgid "Afrikaans" +msgstr "Бурский" + +msgid "Arabic" +msgstr "Арабский" + +msgid "Asturian" +msgstr "Астурийский" + +msgid "Azerbaijani" +msgstr "Азербайджанский" + +msgid "Bulgarian" +msgstr "Болгарский" + +msgid "Belarusian" +msgstr "Белоруский" + +msgid "Bengali" +msgstr "Бенгальский" + +msgid "Breton" +msgstr "Бретонский" + +msgid "Bosnian" +msgstr "Боснийский" + +msgid "Catalan" +msgstr "Каталанский" + +msgid "Czech" +msgstr "Чешский" + +msgid "Welsh" +msgstr "Уэльский" + +msgid "Danish" +msgstr "Датский" + +msgid "German" +msgstr "Немецкий" + +msgid "Lower Sorbian" +msgstr "Нижнелужицкий" + +msgid "Greek" +msgstr "Греческий" + +msgid "English" +msgstr "Английский" + +msgid "Australian English" +msgstr "Австралийский английский" + +msgid "British English" +msgstr "Британский английский" + +msgid "Esperanto" +msgstr "Эсперанто" + +msgid "Spanish" +msgstr "Испанский" + +msgid "Argentinian Spanish" +msgstr "Аргентинский испанский" + +msgid "Colombian Spanish" +msgstr "Колумбийский испанский" + +msgid "Mexican Spanish" +msgstr "Мексиканский испанский" + +msgid "Nicaraguan Spanish" +msgstr "Никарагуанский испанский" + +msgid "Venezuelan Spanish" +msgstr "Венесуэльский Испанский" + +msgid "Estonian" +msgstr "Эстонский" + +msgid "Basque" +msgstr "Баскский" + +msgid "Persian" +msgstr "Персидский" + +msgid "Finnish" +msgstr "Финский" + +msgid "French" +msgstr "Французский" + +msgid "Frisian" +msgstr "Фризский" + +msgid "Irish" +msgstr "Ирландский" + +msgid "Scottish Gaelic" +msgstr "Шотландский гэльский" + +msgid "Galician" +msgstr "Галисийский" + +msgid "Hebrew" +msgstr "Иврит" + +msgid "Hindi" +msgstr "Хинди" + +msgid "Croatian" +msgstr "Хорватский" + +msgid "Upper Sorbian" +msgstr "Верхнелужицкий" + +msgid "Hungarian" +msgstr "Венгерский" + +msgid "Armenian" +msgstr "Армянский" + +msgid "Interlingua" +msgstr "Интерлингва" + +msgid "Indonesian" +msgstr "Индонезийский" + +msgid "Ido" +msgstr "Идо" + +msgid "Icelandic" +msgstr "Исландский" + +msgid "Italian" +msgstr "Итальянский" + +msgid "Japanese" +msgstr "Японский" + +msgid "Georgian" +msgstr "Грузинский" + +msgid "Kabyle" +msgstr "Кабильский" + +msgid "Kazakh" +msgstr "Казахский" + +msgid "Khmer" +msgstr "Кхмерский" + +msgid "Kannada" +msgstr "Каннада" + +msgid "Korean" +msgstr "Корейский" + +msgid "Luxembourgish" +msgstr "Люксембургский" + +msgid "Lithuanian" +msgstr "Литовский" + +msgid "Latvian" +msgstr "Латвийский" + +msgid "Macedonian" +msgstr "Македонский" + +msgid "Malayalam" +msgstr "Малаялам" + +msgid "Mongolian" +msgstr "Монгольский" + +msgid "Marathi" +msgstr "Маратхи" + +msgid "Burmese" +msgstr "Бирманский" + +msgid "Norwegian Bokmål" +msgstr "Норвежский (Букмол)" + +msgid "Nepali" +msgstr "Непальский" + +msgid "Dutch" +msgstr "Голландский" + +msgid "Norwegian Nynorsk" +msgstr "Норвежский (Нюнорск)" + +msgid "Ossetic" +msgstr "Осетинский" + +msgid "Punjabi" +msgstr "Панджаби" + +msgid "Polish" +msgstr "Польский" + +msgid "Portuguese" +msgstr "Португальский" + +msgid "Brazilian Portuguese" +msgstr "Бразильский португальский" + +msgid "Romanian" +msgstr "Румынский" + +msgid "Russian" +msgstr "Русский" + +msgid "Slovak" +msgstr "Словацкий" + +msgid "Slovenian" +msgstr "Словенский" + +msgid "Albanian" +msgstr "Албанский" + +msgid "Serbian" +msgstr "Сербский" + +msgid "Serbian Latin" +msgstr "Сербский (латиница)" + +msgid "Swedish" +msgstr "Шведский" + +msgid "Swahili" +msgstr "Суахили" + +msgid "Tamil" +msgstr "Тамильский" + +msgid "Telugu" +msgstr "Телугу" + +msgid "Thai" +msgstr "Тайский" + +msgid "Turkish" +msgstr "Турецкий" + +msgid "Tatar" +msgstr "Татарский" + +msgid "Udmurt" +msgstr "Удмуртский" + +msgid "Ukrainian" +msgstr "Украинский" + +msgid "Urdu" +msgstr "Урду" + +msgid "Vietnamese" +msgstr "Вьетнамский" + +msgid "Simplified Chinese" +msgstr "Упрощенный китайский" + +msgid "Traditional Chinese" +msgstr "Традиционный китайский" + +msgid "Messages" +msgstr "Сообщения" + +msgid "Site Maps" +msgstr "Карта сайта" + +msgid "Static Files" +msgstr "Статические файлы" + +msgid "Syndication" +msgstr "Ленты новостей" + +msgid "That page number is not an integer" +msgstr "Номер страницы не является натуральным числом" + +msgid "That page number is less than 1" +msgstr "Номер страницы меньше 1" + +msgid "That page contains no results" +msgstr "Страница не содержит результатов" + +msgid "Enter a valid value." +msgstr "Введите правильное значение." + +msgid "Enter a valid URL." +msgstr "Введите правильный URL." + +msgid "Enter a valid integer." +msgstr "Введите правильное число." + +msgid "Enter a valid email address." +msgstr "Введите правильный адрес электронной почты." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Значение должно состоять только из букв, цифр, знаков подчеркивания или " +"дефиса." + +msgid "" +"Enter a valid 'slug' consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Значение должно состоять только из букв, цифр, символов подчёркивания или " +"дефисов, входящих в стандарт Юникод." + +msgid "Enter a valid IPv4 address." +msgstr "Введите правильный IPv4 адрес." + +msgid "Enter a valid IPv6 address." +msgstr "Введите действительный IPv6 адрес." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Введите действительный IPv4 или IPv6 адрес." + +msgid "Enter only digits separated by commas." +msgstr "Введите цифры, разделенные запятыми." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Убедитесь, что это значение — %(limit_value)s (сейчас оно — %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Убедитесь, что это значение меньше либо равно %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Убедитесь, что это значение больше либо равно %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Убедитесь, что это значение содержит не менее %(limit_value)d символ (сейчас " +"%(show_value)d)." +msgstr[1] "" +"Убедитесь, что это значение содержит не менее %(limit_value)d символов " +"(сейчас %(show_value)d)." +msgstr[2] "" +"Убедитесь, что это значение содержит не менее %(limit_value)d символов " +"(сейчас %(show_value)d)." +msgstr[3] "" +"Убедитесь, что это значение содержит не менее %(limit_value)d символов " +"(сейчас %(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Убедитесь, что это значение содержит не более %(limit_value)d символ (сейчас " +"%(show_value)d)." +msgstr[1] "" +"Убедитесь, что это значение содержит не более %(limit_value)d символов " +"(сейчас %(show_value)d)." +msgstr[2] "" +"Убедитесь, что это значение содержит не более %(limit_value)d символов " +"(сейчас %(show_value)d)." +msgstr[3] "" +"Убедитесь, что это значение содержит не более %(limit_value)d символов " +"(сейчас %(show_value)d)." + +msgid "Enter a number." +msgstr "Введите число." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Убедитесь, что вы ввели не более %(max)s цифры." +msgstr[1] "Убедитесь, что вы ввели не более %(max)s цифр." +msgstr[2] "Убедитесь, что вы ввели не более %(max)s цифр." +msgstr[3] "Убедитесь, что вы ввели не более %(max)s цифр." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Убедитесь, что вы ввели не более %(max)s цифры после запятой." +msgstr[1] "Убедитесь, что вы ввели не более %(max)s цифр после запятой." +msgstr[2] "Убедитесь, что вы ввели не более %(max)s цифр после запятой." +msgstr[3] "Убедитесь, что вы ввели не более %(max)s цифр после запятой." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "Убедитесь, что вы ввели не более %(max)s цифры перед запятой." +msgstr[1] "Убедитесь, что вы ввели не более %(max)s цифр перед запятой." +msgstr[2] "Убедитесь, что вы ввели не более %(max)s цифр перед запятой." +msgstr[3] "Убедитесь, что вы ввели не более %(max)s цифр перед запятой." + +#, python-format +msgid "" +"File extension '%(extension)s' is not allowed. Allowed extensions are: " +"'%(allowed_extensions)s'." +msgstr "" +"Формат файлов '%(extension)s' не поддерживается. Поддерживаемые форматы " +"файлов: '%(allowed_extensions)s'." + +msgid "Null characters are not allowed." +msgstr "Данные содержат запрещённый символ: ноль-байт" + +msgid "and" +msgstr "и" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" +"%(model_name)s с такими значениями полей %(field_labels)s уже существует." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Значения %(value)r нет среди допустимых вариантов." + +msgid "This field cannot be null." +msgstr "Это поле не может иметь значение NULL." + +msgid "This field cannot be blank." +msgstr "Это поле не может быть пустым." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s с таким %(field_label)s уже существует." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"Значение в поле «%(field_label)s» должно быть уникальным для фрагмента " +"«%(lookup_type)s» даты в поле %(date_field_label)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Поле типа %(field_type)s" + +msgid "Integer" +msgstr "Целое" + +#, python-format +msgid "'%(value)s' value must be an integer." +msgstr "Значение '%(value)s' должно быть целым числом." + +msgid "Big (8 byte) integer" +msgstr "Длинное целое (8 байт)" + +#, python-format +msgid "'%(value)s' value must be either True or False." +msgstr "Значение '%(value)s' должно быть True или False." + +#, python-format +msgid "'%(value)s' value must be either True, False, or None." +msgstr "Значение '%(value)s' должно быть True, False или None." + +msgid "Boolean (Either True or False)" +msgstr "Логическое (True или False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Строка (до %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Целые, разделенные запятыми" + +#, python-format +msgid "" +"'%(value)s' value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"Значение '%(value)s' имеет неверный формат даты. Оно должно быть в формате " +"YYYY-MM-DD." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"Значение '%(value)s' имеет корректный формат (YYYY-MM-DD), но это " +"недействительная дата." + +msgid "Date (without time)" +msgstr "Дата (без указания времени)" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"Значение '%(value)s' имеет неверный формат. Оно должно быть в формате YYYY-" +"MM-DD HH:MM[:ss[.uuuuuu]][TZ]." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"Значение '%(value)s' имеет корректный формат (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]), но это недействительные дата/время." + +msgid "Date (with time)" +msgstr "Дата (с указанием времени)" + +#, python-format +msgid "'%(value)s' value must be a decimal number." +msgstr "Значение '%(value)s' должно быть числом с фиксированной запятой." + +msgid "Decimal number" +msgstr "Число с фиксированной запятой" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in [DD] [HH:[MM:]]ss[." +"uuuuuu] format." +msgstr "" +"Значение '%(value)s' имеет неверный формат. Оно должно быть в формате [DD] " +"[HH:[MM:]]ss[.uuuuuu]." + +msgid "Duration" +msgstr "Продолжительность" + +msgid "Email address" +msgstr "Адрес электронной почты" + +msgid "File path" +msgstr "Путь к файлу" + +#, python-format +msgid "'%(value)s' value must be a float." +msgstr "Значение '%(value)s' должно быть числом с плавающей запятой." + +msgid "Floating point number" +msgstr "Число с плавающей запятой" + +msgid "IPv4 address" +msgstr "IPv4 адрес" + +msgid "IP address" +msgstr "IP-адрес" + +#, python-format +msgid "'%(value)s' value must be either None, True or False." +msgstr "Значение '%(value)s' должно быть None, True или False." + +msgid "Boolean (Either True, False or None)" +msgstr "Логическое (True, False или None)" + +msgid "Positive integer" +msgstr "Положительное целое число" + +msgid "Positive small integer" +msgstr "Положительное малое целое число" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Слаг (до %(max_length)s)" + +msgid "Small integer" +msgstr "Малое целое число" + +msgid "Text" +msgstr "Текст" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"Значение '%(value)s' имеет неверный формат. Оно должно быть в формате HH:MM[:" +"ss[.uuuuuu]]." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"Значение '%(value)s' имеет корректный формат (HH:MM[:ss[.uuuuuu]]), но это " +"недействительное время." + +msgid "Time" +msgstr "Время" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Необработанные двоичные данные" + +#, python-format +msgid "'%(value)s' is not a valid UUID." +msgstr "Значение '%(value)s' не является верным UUID-ом." + +msgid "Universally unique identifier" +msgstr "Поле для UUID, универсального уникального идентификатора" + +msgid "File" +msgstr "Файл" + +msgid "Image" +msgstr "Изображение" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" +"Объект модели %(model)s со значением поля %(field)s, равным %(value)r, не " +"существует." + +msgid "Foreign Key (type determined by related field)" +msgstr "Внешний Ключ (тип определен по связанному полю)" + +msgid "One-to-one relationship" +msgstr "Связь \"один к одному\"" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "Связь %(from)s-%(to)s" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "Связьи %(from)s-%(to)s" + +msgid "Many-to-many relationship" +msgstr "Связь \"многие ко многим\"" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Обязательное поле." + +msgid "Enter a whole number." +msgstr "Введите целое число." + +msgid "Enter a valid date." +msgstr "Введите правильную дату." + +msgid "Enter a valid time." +msgstr "Введите правильное время." + +msgid "Enter a valid date/time." +msgstr "Введите правильную дату и время." + +msgid "Enter a valid duration." +msgstr "Введите правильную продолжительность." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Количество дней должно быть в диапазоне от {min_days} до {max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Ни одного файла не было отправлено. Проверьте тип кодировки формы." + +msgid "No file was submitted." +msgstr "Ни одного файла не было отправлено." + +msgid "The submitted file is empty." +msgstr "Отправленный файл пуст." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Убедитесь, что это имя файла содержит не более %(max)d символ (сейчас " +"%(length)d)." +msgstr[1] "" +"Убедитесь, что это имя файла содержит не более %(max)d символов (сейчас " +"%(length)d)." +msgstr[2] "" +"Убедитесь, что это имя файла содержит не более %(max)d символов (сейчас " +"%(length)d)." +msgstr[3] "" +"Убедитесь, что это имя файла содержит не более %(max)d символов (сейчас " +"%(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"Пожалуйста, загрузите файл или поставьте флажок \"Очистить\", но не " +"совершайте оба действия одновременно." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Загрузите правильное изображение. Файл, который вы загрузили, поврежден или " +"не является изображением." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Выберите корректный вариант. %(value)s нет среди допустимых значений." + +msgid "Enter a list of values." +msgstr "Введите список значений." + +msgid "Enter a complete value." +msgstr "Введите весь список значений." + +msgid "Enter a valid UUID." +msgstr "Введите правильный UUID." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Скрытое поле %(name)s) %(error)s" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "Данные управляющей формы отсутствуют или были повреждены" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "Пожалуйста, заполните не более %d формы." +msgstr[1] "Пожалуйста, заполните не более %d форм." +msgstr[2] "Пожалуйста, заполните не более %d форм." +msgstr[3] "Пожалуйста, заполните не более %d форм." + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "Пожалуйста, отправьте как минимум %d форму." +msgstr[1] "Пожалуйста, отправьте как минимум %d формы." +msgstr[2] "Пожалуйста, отправьте как минимум %d форм." +msgstr[3] "Пожалуйста, отправьте как минимум %d форм." + +msgid "Order" +msgstr "Порядок" + +msgid "Delete" +msgstr "Удалить" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Пожалуйста, измените повторяющееся значение в поле \"%(field)s\"." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Пожалуйста, измените значение в поле %(field)s, оно должно быть уникальным." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Пожалуйста, измените значение в поле %(field_name)s, оно должно быть " +"уникальным для %(lookup)s в поле %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Пожалуйста, измените повторяющиеся значения ниже." + +msgid "The inline value did not match the parent instance." +msgstr "Значение во вложенной форме не совпадает со значением в базовой форме." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" +"Выберите корректный вариант. Вашего варианта нет среди допустимых значений." + +#, python-format +msgid "\"%(pk)s\" is not a valid value." +msgstr "\"%(pk)s\" не является верным значением." + +#, python-format +msgid "" +"%(datetime)s couldn't be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s не может быть интерпретирована в часовом поясе " +"%(current_timezone)s; дата может быть неоднозначной или оказаться " +"несуществующей." + +msgid "Clear" +msgstr "Очистить" + +msgid "Currently" +msgstr "На данный момент" + +msgid "Change" +msgstr "Изменить" + +msgid "Unknown" +msgstr "Неизвестно" + +msgid "Yes" +msgstr "Да" + +msgid "No" +msgstr "Нет" + +msgid "yes,no,maybe" +msgstr "да,нет,может быть" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d байт" +msgstr[1] "%(size)d байта" +msgstr[2] "%(size)d байт" +msgstr[3] "%(size)d байт" + +#, python-format +msgid "%s KB" +msgstr "%s КБ" + +#, python-format +msgid "%s MB" +msgstr "%s МБ" + +#, python-format +msgid "%s GB" +msgstr "%s ГБ" + +#, python-format +msgid "%s TB" +msgstr "%s ТБ" + +#, python-format +msgid "%s PB" +msgstr "%s ПБ" + +msgid "p.m." +msgstr "п.п." + +msgid "a.m." +msgstr "д.п." + +msgid "PM" +msgstr "ПП" + +msgid "AM" +msgstr "ДП" + +msgid "midnight" +msgstr "полночь" + +msgid "noon" +msgstr "полдень" + +msgid "Monday" +msgstr "Понедельник" + +msgid "Tuesday" +msgstr "Вторник" + +msgid "Wednesday" +msgstr "Среда" + +msgid "Thursday" +msgstr "Четверг" + +msgid "Friday" +msgstr "Пятница" + +msgid "Saturday" +msgstr "Суббота" + +msgid "Sunday" +msgstr "Воскресенье" + +msgid "Mon" +msgstr "Пн" + +msgid "Tue" +msgstr "Вт" + +msgid "Wed" +msgstr "Ср" + +msgid "Thu" +msgstr "Чт" + +msgid "Fri" +msgstr "Пт" + +msgid "Sat" +msgstr "Сб" + +msgid "Sun" +msgstr "Вс" + +msgid "January" +msgstr "Январь" + +msgid "February" +msgstr "Февраль" + +msgid "March" +msgstr "Март" + +msgid "April" +msgstr "Апрель" + +msgid "May" +msgstr "Май" + +msgid "June" +msgstr "Июнь" + +msgid "July" +msgstr "Июль" + +msgid "August" +msgstr "Август" + +msgid "September" +msgstr "Сентябрь" + +msgid "October" +msgstr "Октябрь" + +msgid "November" +msgstr "Ноябрь" + +msgid "December" +msgstr "Декабрь" + +msgid "jan" +msgstr "янв" + +msgid "feb" +msgstr "фев" + +msgid "mar" +msgstr "мар" + +msgid "apr" +msgstr "апр" + +msgid "may" +msgstr "май" + +msgid "jun" +msgstr "июн" + +msgid "jul" +msgstr "июл" + +msgid "aug" +msgstr "авг" + +msgid "sep" +msgstr "сен" + +msgid "oct" +msgstr "окт" + +msgid "nov" +msgstr "ноя" + +msgid "dec" +msgstr "дек" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Янв." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Фев." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Март" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Апрель" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Май" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Июнь" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Июль" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Авг." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Сен." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Окт." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Ноя." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Дек." + +msgctxt "alt. month" +msgid "January" +msgstr "января" + +msgctxt "alt. month" +msgid "February" +msgstr "февраля" + +msgctxt "alt. month" +msgid "March" +msgstr "марта" + +msgctxt "alt. month" +msgid "April" +msgstr "апреля" + +msgctxt "alt. month" +msgid "May" +msgstr "мая" + +msgctxt "alt. month" +msgid "June" +msgstr "июня" + +msgctxt "alt. month" +msgid "July" +msgstr "июля" + +msgctxt "alt. month" +msgid "August" +msgstr "августа" + +msgctxt "alt. month" +msgid "September" +msgstr "сентября" + +msgctxt "alt. month" +msgid "October" +msgstr "октября" + +msgctxt "alt. month" +msgid "November" +msgstr "ноября" + +msgctxt "alt. month" +msgid "December" +msgstr "декабря" + +msgid "This is not a valid IPv6 address." +msgstr "Значение не является корректным адресом IPv6." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "или" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d год" +msgstr[1] "%d года" +msgstr[2] "%d лет" +msgstr[3] "%d лет" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d месяц" +msgstr[1] "%d месяца" +msgstr[2] "%d месяцев" +msgstr[3] "%d месяцев" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d неделя" +msgstr[1] "%d недели" +msgstr[2] "%d недель" +msgstr[3] "%d недель" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d день" +msgstr[1] "%d дня" +msgstr[2] "%d дней" +msgstr[3] "%d дней" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d час" +msgstr[1] "%d часа" +msgstr[2] "%d часов" +msgstr[3] "%d часов" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d минута" +msgstr[1] "%d минуты" +msgstr[2] "%d минут" +msgstr[3] "%d минут" + +msgid "0 minutes" +msgstr "0 минут" + +msgid "Forbidden" +msgstr "Ошибка доступа" + +msgid "CSRF verification failed. Request aborted." +msgstr "Ошибка проверки CSRF. Запрос отклонён." + +msgid "" +"You are seeing this message because this HTTPS site requires a 'Referer " +"header' to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Вы видите это сообщение, потому что данный сайт использует защищённое " +"соединение и требует, чтобы заголовок 'Referer' был передан вашим браузером, " +"но он не был им передан. Данный заголовок необходим по соображениям " +"безопасности, чтобы убедиться, что ваш браузер не был взломан, а запрос к " +"серверу не был перехвачен или подменён." + +msgid "" +"If you have configured your browser to disable 'Referer' headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for 'same-" +"origin' requests." +msgstr "" +"Если вы настроили свой браузер таким образом, чтобы запретить ему передавать " +"заголовок 'Referer', пожалуйста, разрешите ему отсылать данный заголовок по " +"крайней мере для данного сайта, или для всех HTTPS-соединений, или для " +"запросов, домен и порт назначения совпадают с доменом и портом текущей " +"страницы." + +msgid "" +"If you are using the tag or " +"including the 'Referrer-Policy: no-referrer' header, please remove them. The " +"CSRF protection requires the 'Referer' header to do strict referer checking. " +"If you're concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"Если Вы используете HTML-тэг или добавили HTTP-заголовок 'Referrer-Policy: no-referrer', пожалуйста " +"удалите их. CSRF защите необходим заголовок 'Referer' для строгой проверки " +"адреса ссылающейся страницы. Если Вы беспокоитесь о приватности, используйте " +"альтернативы, например , для ссылок на сайты " +"третьих лиц." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Вы видите это сообщение, потому что данный сайт требует, чтобы при отправке " +"форм была отправлена и CSRF-cookie. Данный тип cookie необходим по " +"соображениям безопасности, чтобы убедиться, что ваш браузер не был взломан и " +"не выполняет от вашего лица действий, запрограммированных третьими лицами." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for 'same-origin' requests." +msgstr "" +"Если вы настроили свой браузер таким образом, чтобы он не передавал или не " +"хранил cookie, пожалуйста, включите эту функцию вновь, по крайней мере для " +"этого сайта, или для запросов, чьи домен и порт совпадают с доменом и портом " +"текущей страницы." + +msgid "More information is available with DEBUG=True." +msgstr "" +"В отладочном режиме доступно больше информации. Включить отладочный режим " +"можно, установив значение переменной DEBUG=True." + +msgid "No year specified" +msgstr "Не указан год" + +msgid "Date out of range" +msgstr "Дата выходит за пределы диапазона" + +msgid "No month specified" +msgstr "Не указан месяц" + +msgid "No day specified" +msgstr "Не указан день" + +msgid "No week specified" +msgstr "Не указана неделя" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "%(verbose_name_plural)s не доступен" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Будущие %(verbose_name_plural)s недоступны, потому что %(class_name)s." +"allow_future выставлен в значение \"Ложь\"." + +#, python-format +msgid "Invalid date string '%(datestr)s' given format '%(format)s'" +msgstr "" +"Не удалось распознать строку с датой '%(datestr)s', используя формат " +"'%(format)s'" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Не найден ни один %(verbose_name)s, соответствующий запросу" + +msgid "Page is not 'last', nor can it be converted to an int." +msgstr "" +"Номер страницы не содержит особое значение 'last', и его не удалось " +"преобразовать к целому числу." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Неправильная страница (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and '%(class_name)s.allow_empty' is False." +msgstr "" +"Список пуст, но '%(class_name)s.allow_empty' выставлено в значение \"Ложь\", " +"что запрещает показывать пустые списки." + +msgid "Directory indexes are not allowed here." +msgstr "Просмотр списка файлов директории здесь не разрешен." + +#, python-format +msgid "\"%(path)s\" does not exist" +msgstr "\"%(path)s\" не существует" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Список файлов директории %(directory)s" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "Django: веб-фреймворк для перфекционистов с дедлайнами." + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Посмотреть замечания к выпуску для Django " +"%(version)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "Установка прошла успешно! Поздравляем!" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Вы видите данную страницу, потому что указали DEBUG=True в файле настроек и не настроили ни одного " +"обработчика URL-адресов." + +msgid "Django Documentation" +msgstr "Документация Django" + +msgid "Topics, references, & how-to's" +msgstr "Разделы, справочник, & примеры" + +msgid "Tutorial: A Polling App" +msgstr "Руководство: Приложение для голосования" + +msgid "Get started with Django" +msgstr "Начало работы с Django" + +msgid "Django Community" +msgstr "Сообщество Django" + +msgid "Connect, get help, or contribute" +msgstr "Присоединяйтесь, получайте помощь или помогайте в разработке" diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/sk/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/conf/locale/sk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6f5900941ab0c678cae4565d7b3d79f0c4daf57f GIT binary patch literal 27960 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/sq/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/conf/locale/sq/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ac3953dab1351c6f3b1bbe16a18d8d5784ca8ca0 GIT binary patch literal 26966 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, 2011-2014 +# Besnik , 2015-2019 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-03-30 10:51+0000\n" +"Last-Translator: Besnik \n" +"Language-Team: Albanian (http://www.transifex.com/django/django/language/" +"sq/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sq\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "Afrikaans" + +msgid "Arabic" +msgstr "Arabe" + +msgid "Asturian" +msgstr "Asturiase" + +msgid "Azerbaijani" +msgstr "Azerbaixhanase" + +msgid "Bulgarian" +msgstr "Bulgare" + +msgid "Belarusian" +msgstr "Bjelloruse" + +msgid "Bengali" +msgstr "Bengaleze" + +msgid "Breton" +msgstr "Bretone" + +msgid "Bosnian" +msgstr "Boshnjake" + +msgid "Catalan" +msgstr "Katalane" + +msgid "Czech" +msgstr "Çeke" + +msgid "Welsh" +msgstr "Uellsiane" + +msgid "Danish" +msgstr "Daneze" + +msgid "German" +msgstr "Gjermane" + +msgid "Lower Sorbian" +msgstr "Sorbiane e Poshtme" + +msgid "Greek" +msgstr "Greke" + +msgid "English" +msgstr "Angleze" + +msgid "Australian English" +msgstr "Angleze Australiane" + +msgid "British English" +msgstr "Angleze Britanike" + +msgid "Esperanto" +msgstr "Esperanto" + +msgid "Spanish" +msgstr "Spanjolle" + +msgid "Argentinian Spanish" +msgstr "Spanjolle Argjentinase" + +msgid "Colombian Spanish" +msgstr "Spanjolle Kolumbiane" + +msgid "Mexican Spanish" +msgstr "Spanjolle Meksikane" + +msgid "Nicaraguan Spanish" +msgstr "Spanjolle Nikaraguane" + +msgid "Venezuelan Spanish" +msgstr "Spanjolle Venezuelane" + +msgid "Estonian" +msgstr "Estoneze" + +msgid "Basque" +msgstr "Baske" + +msgid "Persian" +msgstr "Persiane" + +msgid "Finnish" +msgstr "Finlandeze" + +msgid "French" +msgstr "Frënge" + +msgid "Frisian" +msgstr "Frisiane" + +msgid "Irish" +msgstr "Irlandeze" + +msgid "Scottish Gaelic" +msgstr "Skoceze Gaelike" + +msgid "Galician" +msgstr "Galike" + +msgid "Hebrew" +msgstr "Hebraishte" + +msgid "Hindi" +msgstr "Indiane" + +msgid "Croatian" +msgstr "Kroate" + +msgid "Upper Sorbian" +msgstr "Sorbiane e Sipërme" + +msgid "Hungarian" +msgstr "Hungareze" + +msgid "Armenian" +msgstr "Armenisht" + +msgid "Interlingua" +msgstr "Interlingua" + +msgid "Indonesian" +msgstr "Indoneziane" + +msgid "Ido" +msgstr "Ido" + +msgid "Icelandic" +msgstr "Islandeze" + +msgid "Italian" +msgstr "Italiane" + +msgid "Japanese" +msgstr "Japoneze" + +msgid "Georgian" +msgstr "Gjeorgjiane" + +msgid "Kabyle" +msgstr "Kabilase" + +msgid "Kazakh" +msgstr "Kazake" + +msgid "Khmer" +msgstr "Khmere" + +msgid "Kannada" +msgstr "Kannada" + +msgid "Korean" +msgstr "Koreane" + +msgid "Luxembourgish" +msgstr "Luksemburgase" + +msgid "Lithuanian" +msgstr "Lituaneze" + +msgid "Latvian" +msgstr "Letoneze" + +msgid "Macedonian" +msgstr "Maqedone" + +msgid "Malayalam" +msgstr "Malajalame" + +msgid "Mongolian" +msgstr "Mongoliane" + +msgid "Marathi" +msgstr "Marati" + +msgid "Burmese" +msgstr "Burmeze" + +msgid "Norwegian Bokmål" +msgstr "Norvegjeze Bokmal" + +msgid "Nepali" +msgstr "Nepaleze" + +msgid "Dutch" +msgstr "Holandeze" + +msgid "Norwegian Nynorsk" +msgstr "Norvegjeze Nynorsk" + +msgid "Ossetic" +msgstr "Osetishte" + +msgid "Punjabi" +msgstr "Panxhabe" + +msgid "Polish" +msgstr "Polake" + +msgid "Portuguese" +msgstr "Portugeze" + +msgid "Brazilian Portuguese" +msgstr "Portugeze Braziliane" + +msgid "Romanian" +msgstr "Rumune" + +msgid "Russian" +msgstr "Ruse" + +msgid "Slovak" +msgstr "Sllovake " + +msgid "Slovenian" +msgstr "Slovene" + +msgid "Albanian" +msgstr "Shqipe" + +msgid "Serbian" +msgstr "Serbe" + +msgid "Serbian Latin" +msgstr "Serbe Latine" + +msgid "Swedish" +msgstr "Suedeze" + +msgid "Swahili" +msgstr "Swahili" + +msgid "Tamil" +msgstr "Tamileze" + +msgid "Telugu" +msgstr "Telugu" + +msgid "Thai" +msgstr "Tajlandeze" + +msgid "Turkish" +msgstr "Turke" + +msgid "Tatar" +msgstr "Tatare" + +msgid "Udmurt" +msgstr "Udmurt" + +msgid "Ukrainian" +msgstr "Ukrainase" + +msgid "Urdu" +msgstr "Urdu" + +msgid "Vietnamese" +msgstr "Vietnameze" + +msgid "Simplified Chinese" +msgstr "Kineze e Thjeshtuar" + +msgid "Traditional Chinese" +msgstr "Kineze Tradicionale" + +msgid "Messages" +msgstr "Mesazhe" + +msgid "Site Maps" +msgstr "Harta Sajti" + +msgid "Static Files" +msgstr "Kartela Statike" + +msgid "Syndication" +msgstr "" + +msgid "That page number is not an integer" +msgstr "Ai numër faqeje s’është numër i plotë" + +msgid "That page number is less than 1" +msgstr "Ai numër faqeje është më i vogël se 1" + +msgid "That page contains no results" +msgstr "Ajo faqe s’përmban përfundime" + +msgid "Enter a valid value." +msgstr "Jepni një vlerë të vlefshme." + +msgid "Enter a valid URL." +msgstr "Jepni një URL të vlefshme." + +msgid "Enter a valid integer." +msgstr "Jepni një numër të plotë të vlefshëm." + +msgid "Enter a valid email address." +msgstr "Jepni një adresë email të vlefshme." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Jepni një 'slug' të vlefshëm, të përbërë nga shkronja, numra, nënvija ose " +"vija në mes." + +msgid "" +"Enter a valid 'slug' consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Jeoni një 'slug' të vlefshëm, të përbërë nga shkronja, numra, nënvija ose " +"vija ndarëse Unikod." + +msgid "Enter a valid IPv4 address." +msgstr "Jepni një adresë IPv4 të vlefshme." + +msgid "Enter a valid IPv6 address." +msgstr "Jepni një adresë IPv6 të vlefshme." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Jepni një adresë IPv4 ose IPv6 të vlefshme." + +msgid "Enter only digits separated by commas." +msgstr "Jepni vetëm shifra të ndara nga presje." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "Siguroni që kjo vlerë të jetë %(limit_value)s (është %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Siguroni që kjo vlerë të jetë më e vogël ose baras me %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Siguroni që kjo vlerë është më e madhe ose baras me %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Sigurohuni që kjo vlerë ka të paktën %(limit_value)d shenjë (ka " +"%(show_value)d)." +msgstr[1] "" +"Sigurohuni që kjo vlerë ka të paktën %(limit_value)d shenja (ka " +"%(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Sigurohuni që kjo vlerë ka të shumtën %(limit_value)d shenjë (ka " +"%(show_value)d)." +msgstr[1] "" +"Sigurohuni që kjo vlerë ka të shumtën %(limit_value)d shenja (ka " +"%(show_value)d)." + +msgid "Enter a number." +msgstr "Jepni një numër." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Sigurohuni që s’ka më tepër se %(max)s shifër gjithsej." +msgstr[1] "Sigurohuni që s’ka më tepër se %(max)s shifra gjithsej." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Sigurohuni që s’ka më shumë se %(max)s vend dhjetor." +msgstr[1] "Sigurohuni që s’ka më shumë se %(max)s vende dhjetore." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +"Sigurohuni që s’ka më tepër se %(max)s shifër para presjes dhjetore." +msgstr[1] "" +"Sigurohuni që s’ka më tepër se %(max)s shifra para presjes dhjetore." + +#, python-format +msgid "" +"File extension '%(extension)s' is not allowed. Allowed extensions are: " +"'%(allowed_extensions)s'." +msgstr "" +"Zgjatimi '%(extension)s' për kartela nuk lejohet. Zgjatime të lejuara janë: " +"'%(allowed_extensions)s'." + +msgid "Null characters are not allowed." +msgstr "Nuk lejohen shenja null." + +msgid "and" +msgstr "dhe " + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "Ka tashmë %(model_name)s me këtë %(field_labels)s." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Vlera %(value)r s’është zgjedhje e vlefshme." + +msgid "This field cannot be null." +msgstr "Kjo fushë s’mund të përmbajë shenja null." + +msgid "This field cannot be blank." +msgstr "Kjo fushë s’mund të jetë e paplotësuar." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "Ka tashmë një %(model_name)s me këtë %(field_label)s." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s duhet të jetë unike për %(date_field_label)s %(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Fushë e llojit: %(field_type)s" + +msgid "Integer" +msgstr "Numër i plotë" + +#, python-format +msgid "'%(value)s' value must be an integer." +msgstr "Vlera '%(value)s' duhet të jetë një numër i plotë." + +msgid "Big (8 byte) integer" +msgstr "Numër i plotë i madh (8 bajte)" + +#, python-format +msgid "'%(value)s' value must be either True or False." +msgstr "Vlera '%(value)s' duhet të jetë True ose False." + +#, python-format +msgid "'%(value)s' value must be either True, False, or None." +msgstr "Vlera për '%(value)s' duhet të jetë ose True, ose False, ose None." + +msgid "Boolean (Either True or False)" +msgstr "Buleane (Ose True, ose False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Varg (deri në %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Numra të plotë të ndarë me presje" + +#, python-format +msgid "" +"'%(value)s' value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"Vlera '%(value)s' ka një format të pavlefshëm datash. Duhet të jetë në " +"formatin YYYY-MM-DD." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"Vlera '%(value)s' ka formatin e saktë (YYYY-MM-DD), por është datë e " +"pavlefshme." + +msgid "Date (without time)" +msgstr "Datë (pa kohë)" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"Vlera '%(value)s' ka një format të pavlefshëm. Duhet të jetë në formatin " +"YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"Vlera '%(value)s' ka format të saktë (YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]), " +"por është datë/kohë e pavlefshme." + +msgid "Date (with time)" +msgstr "Datë (me kohë)" + +#, python-format +msgid "'%(value)s' value must be a decimal number." +msgstr "Vlera '%(value)s' duhet të jetë një numër dhjetor." + +msgid "Decimal number" +msgstr "Numër dhjetor" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in [DD] [HH:[MM:]]ss[." +"uuuuuu] format." +msgstr "" +"Vlera '%(value)s' ka format të pavlefshëm. Duhet të jetë në formatin [DD] " +"[HH:[MM:]]ss[.uuuuuu]." + +msgid "Duration" +msgstr "Kohëzgjatje" + +msgid "Email address" +msgstr "Adresë email" + +msgid "File path" +msgstr "Shteg kartele" + +#, python-format +msgid "'%(value)s' value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "" + +msgid "IPv4 address" +msgstr "Adresë IPv4" + +msgid "IP address" +msgstr "Adresë IP" + +#, python-format +msgid "'%(value)s' value must be either None, True or False." +msgstr "Vlera '%(value)s' duhet të jetë None, True ose False." + +msgid "Boolean (Either True, False or None)" +msgstr "Buleane (Ose True, ose False, ose None)" + +msgid "Positive integer" +msgstr "Numër i plotë pozitiv" + +msgid "Positive small integer" +msgstr "Numër i plotë pozitiv i vogël" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Identifikues (deri në %(max_length)s)" + +msgid "Small integer" +msgstr "Numër i plotë i vogël" + +msgid "Text" +msgstr "Tekst" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"Vlera '%(value)s' ka format të pavlefshëm. Duhet të jetë në formatin HH:MM[:" +"ss[.uuuuuu]]." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"Vlera '%(value)s' ka formatin e saktë (HH:MM[:ss[.uuuuuu]]) por është kohë e " +"pavlefshme." + +msgid "Time" +msgstr "Kohë" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Të dhëna dyore të papërpunuara" + +#, python-format +msgid "'%(value)s' is not a valid UUID." +msgstr "'%(value)s' s’është UUID i vlefshëm." + +msgid "Universally unique identifier" +msgstr "Identifikues universalisht unik" + +msgid "File" +msgstr "Kartelë" + +msgid "Image" +msgstr "Figurë" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "Instanca %(model)s me %(field)s %(value)r s’ekziston." + +msgid "Foreign Key (type determined by related field)" +msgstr "Kyç i Jashtëm (lloj i përcaktuar nga fusha përkatëse)" + +msgid "One-to-one relationship" +msgstr "Marrëdhënie një-për-një" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "Marrëdhënie %(from)s-%(to)s" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "Marrëdhënie %(from)s-%(to)s" + +msgid "Many-to-many relationship" +msgstr "Marrëdhënie shumë-për-shumë" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Kjo fushë është e domosdoshme." + +msgid "Enter a whole number." +msgstr "Jepni një numër të tërë." + +msgid "Enter a valid date." +msgstr "Jepni një datë të vlefshme." + +msgid "Enter a valid time." +msgstr "Jepni një kohë të vlefshme." + +msgid "Enter a valid date/time." +msgstr "Jepni një datë/kohë të vlefshme." + +msgid "Enter a valid duration." +msgstr "Jepni një kohëzgjatje të vlefshme." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Numri i ditëve duhet të jetë mes {min_days} dhe {max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "" +"S’u parashtrua ndonjë kartelë. Kontrolloni llojin e kodimit te formulari." + +msgid "No file was submitted." +msgstr "S’u parashtrua kartelë." + +msgid "The submitted file is empty." +msgstr "Kartela e parashtruar është e zbrazët." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Sigurohuni që ky emër kartele ka të shumtën %(max)d shenjë (it has " +"%(length)d)." +msgstr[1] "" +"Sigurohuni që ky emër kartele ka të shumtën %(max)d shenja (it has " +"%(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"Ju lutemi, ose parashtroni një kartelë, ose i vini shenjë kutizës për " +"pastrim, jo që të dyja." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Ngarkoni një figurë të vlefshme. Kartela që ngarkuat ose nuk qe figurë, ose " +"qe figurë e dëmtuar." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" +"Përzgjidhni një zgjedhje të vlefshme. %(value)s s’është një nga zgjedhjet e " +"mundshme." + +msgid "Enter a list of values." +msgstr "Jepni një listë vlerash." + +msgid "Enter a complete value." +msgstr "Jepni një vlerë të plotë." + +msgid "Enter a valid UUID." +msgstr "Jepni një UUID të vlefshëm." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Fushë e fshehur %(name)s) %(error)s" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "Të dhënat ManagementForm mungojnë ose është vënë dorë mbi to" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "Ju lutemi, parashtroni %d ose më pak formularë." +msgstr[1] "Ju lutemi, parashtroni %d ose më pak formularë." + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "Ju lutemi, parashtroni %d ose më shumë formularë." +msgstr[1] "Ju lutemi, parashtroni %d ose më shumë formularë." + +msgid "Order" +msgstr "Renditi" + +msgid "Delete" +msgstr "Fshije" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Ju lutemi, ndreqni të dhënat e përsëdytura për %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Ju lutemi, ndreqni të dhënat e përsëdytura për %(field)s, të cilat duhet të " +"jenë unike." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Ju lutemi, ndreqni të dhënat e përsëdytura për %(field_name)s të cilat duhet " +"të jenë unike për %(lookup)s te %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Ju lutemi, ndreqni më poshtë vlerat e përsëdytura." + +msgid "The inline value did not match the parent instance." +msgstr "Vlera e brendshme s’u përputh me instancën prind." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" +"Përzgjidhni një zgjedhje të vlefshme. Ajo zgjedhje nuk është një nga " +"zgjedhjet e mundshme." + +#, python-format +msgid "\"%(pk)s\" is not a valid value." +msgstr "\"%(pk)s\" s’është vlerë e vlefshme." + +#, python-format +msgid "" +"%(datetime)s couldn't be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s s’u interpretua dot brenda zonës kohore %(current_timezone)s; " +"mund të jetë e dykuptimtë, ose mund të mos ekzistojë." + +msgid "Clear" +msgstr "Pastroje" + +msgid "Currently" +msgstr "Tani" + +msgid "Change" +msgstr "Ndryshoje" + +msgid "Unknown" +msgstr "E panjohur" + +msgid "Yes" +msgstr "Po" + +msgid "No" +msgstr "Jo" + +msgid "yes,no,maybe" +msgstr "po,jo,ndoshta" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d bajt" +msgstr[1] "%(size)d bajte" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "p.m." + +msgid "a.m." +msgstr "a.m." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "mesnatë" + +msgid "noon" +msgstr "mesditë" + +msgid "Monday" +msgstr "E hënë" + +msgid "Tuesday" +msgstr "E martë" + +msgid "Wednesday" +msgstr "E mërkurë" + +msgid "Thursday" +msgstr "E enjte" + +msgid "Friday" +msgstr "E premte" + +msgid "Saturday" +msgstr "E shtunë" + +msgid "Sunday" +msgstr "E dielë" + +msgid "Mon" +msgstr "Hën" + +msgid "Tue" +msgstr "Mar" + +msgid "Wed" +msgstr "Mër" + +msgid "Thu" +msgstr "Enj" + +msgid "Fri" +msgstr "Pre" + +msgid "Sat" +msgstr "Sht" + +msgid "Sun" +msgstr "Die" + +msgid "January" +msgstr "Janar" + +msgid "February" +msgstr "Shkurt" + +msgid "March" +msgstr "Mars" + +msgid "April" +msgstr "Prill" + +msgid "May" +msgstr "Maj" + +msgid "June" +msgstr "Qershor" + +msgid "July" +msgstr "Korrik" + +msgid "August" +msgstr "Gusht" + +msgid "September" +msgstr "Shtator" + +msgid "October" +msgstr "Tetor" + +msgid "November" +msgstr "Nëntor" + +msgid "December" +msgstr "Dhjetor" + +msgid "jan" +msgstr "jan" + +msgid "feb" +msgstr "shk" + +msgid "mar" +msgstr "mar" + +msgid "apr" +msgstr "pri" + +msgid "may" +msgstr "maj" + +msgid "jun" +msgstr "qer" + +msgid "jul" +msgstr "kor" + +msgid "aug" +msgstr "gus" + +msgid "sep" +msgstr "sht" + +msgid "oct" +msgstr "tet" + +msgid "nov" +msgstr "nën" + +msgid "dec" +msgstr "dhj" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Jan." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Shk." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Mars" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Prill" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Maj" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Qershor" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Korrik" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Gus." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Shta." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Tet." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Nën." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Dhj." + +msgctxt "alt. month" +msgid "January" +msgstr "Janar" + +msgctxt "alt. month" +msgid "February" +msgstr "Shkurt" + +msgctxt "alt. month" +msgid "March" +msgstr "Mars" + +msgctxt "alt. month" +msgid "April" +msgstr "Prill" + +msgctxt "alt. month" +msgid "May" +msgstr "Maj" + +msgctxt "alt. month" +msgid "June" +msgstr "Qershor" + +msgctxt "alt. month" +msgid "July" +msgstr "Korrik" + +msgctxt "alt. month" +msgid "August" +msgstr "Gusht" + +msgctxt "alt. month" +msgid "September" +msgstr "Shtator" + +msgctxt "alt. month" +msgid "October" +msgstr "Tetor" + +msgctxt "alt. month" +msgid "November" +msgstr "Nëntor" + +msgctxt "alt. month" +msgid "December" +msgstr "Dhjetor" + +msgid "This is not a valid IPv6 address." +msgstr "Kjo s’është adresë IPv6 e vlefshme." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s…" + +msgid "or" +msgstr "ose" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d vit" +msgstr[1] "%d vjet" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d muaj" +msgstr[1] "%d muaj" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d javë" +msgstr[1] "%d javë" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d ditë" +msgstr[1] "%d ditë" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d orë" +msgstr[1] "%d orë" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minutë" +msgstr[1] "%d minuta" + +msgid "0 minutes" +msgstr "0 minuta" + +msgid "Forbidden" +msgstr "E ndaluar" + +msgid "CSRF verification failed. Request aborted." +msgstr "Verifikimi CSRF dështoi. Kërkesa u ndërpre." + +msgid "" +"You are seeing this message because this HTTPS site requires a 'Referer " +"header' to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Këtë mesazh po e shihni ngaqë ky sajt HTTPS e ka të domosdoshme dërgimin e " +"'Referer header' te shfletuesi juaj Web, por s’u dërgua ndonjë i tillë. Kjo " +"krye është e domosdoshme për arsye sigurie, për të bërë të mundur që " +"shfletuesi juaj të mos komprometohet nga palë të treta." + +msgid "" +"If you have configured your browser to disable 'Referer' headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for 'same-" +"origin' requests." +msgstr "" +"Nëse e keni formësuar shfletuesin tuaj t’i çaktivizojë kryet 'Referer', ju " +"lutemi, riaktivizojini ato, të paktën për këtë sajt, ose për lidhjet HTTPS, " +"ose për kërkesat 'same-origin'." + +msgid "" +"If you are using the tag or " +"including the 'Referrer-Policy: no-referrer' header, please remove them. The " +"CSRF protection requires the 'Referer' header to do strict referer checking. " +"If you're concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"Nëse përdorni etiketën ose " +"kryet e përfshira 'Referrer-Policy: no-referrer', ju lutemi, hiqini. " +"Mbrojtja CSRF lyp që kryet 'Referer' të kryejnë kontroll strikt referuesi. " +"Nëse shqetësoheni për privatësinë, përdorni alternativa si për lidhje te sajte palësh të treta." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Këtë mesazh po e shihni ngaqë ky sajt lyp një cookie CSRF, kur parashtrohen " +"formularë. Kjo cookie është e domosdoshme për arsye sigurie, për të bërë të " +"mundur që shfletuesi juaj të mos komprometohet nga palë të treta." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for 'same-origin' requests." +msgstr "" +"Nëse e keni formësuar shfletuesin tuaj të çaktivizojë cookie-t, ju lutemi, " +"riaktivizojini ato, të paktën për këtë sajt, ose për kërkesa 'same-origin'." + +msgid "More information is available with DEBUG=True." +msgstr "Më tepër të dhëna mund të gjeni me DEBUG=True." + +msgid "No year specified" +msgstr "Nuk është caktuar vit" + +msgid "Date out of range" +msgstr "Datë jashtë intervali" + +msgid "No month specified" +msgstr "Nuk është caktuar muaj" + +msgid "No day specified" +msgstr "Nuk është caktuar ditë" + +msgid "No week specified" +msgstr "Nuk është caktuar javë" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Nuk ka %(verbose_name_plural)s të përcaktuar" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"%(verbose_name_plural)s i ardhshëm jo i passhëm, ngaqë %(class_name)s." +"allow_future është False." + +#, python-format +msgid "Invalid date string '%(datestr)s' given format '%(format)s'" +msgstr "" +"U dha varg i pavlefshëm date '%(datestr)s' formati i dhënë '%(format)s'" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "S’u gjetën %(verbose_name)s me përputhje" + +msgid "Page is not 'last', nor can it be converted to an int." +msgstr "Faqja s’është 'last', as mund të shndërrohet në një int." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Faqe e pavlefshme (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and '%(class_name)s.allow_empty' is False." +msgstr "Listë e zbrazët dhe '%(class_name)s.allow_empty' është False." + +msgid "Directory indexes are not allowed here." +msgstr "Këtu s’lejohen tregues drejtorish." + +#, python-format +msgid "\"%(path)s\" does not exist" +msgstr "\"%(path)s\" s’ekziston" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Tregues i %(directory)s" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "Django: platforma Web për perfeksionistë me afate." + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Shihni shënimet për hedhjen në qarkullim të " +"Django %(version)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "Instalimi funksionoi me sukses! Përgëzime!" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Po e shihni këtë faqe ngaqë te kartela juaj e rregullimeve gjendet DEBUG=True dhe s’keni formësuar ndonjë URL." + +msgid "Django Documentation" +msgstr "Dokumentim i Django-s" + +msgid "Topics, references, & how-to's" +msgstr "Tema, referenca, & how-to" + +msgid "Tutorial: A Polling App" +msgstr "Përkujdesore: Një Aplikacion Për Sondazhe" + +msgid "Get started with Django" +msgstr "Si t’ia filloni me Django-n" + +msgid "Django Community" +msgstr "Bashkësia Django" + +msgid "Connect, get help, or contribute" +msgstr "Lidhuni, merrni ndihmë, ose jepni ndihmesë" diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/sq/formats.py b/venv/lib/python3.7/site-packages/django/conf/locale/sq/formats.py new file mode 100644 index 0000000..2f0da0d --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/sq/formats.py @@ -0,0 +1,21 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = 'd F Y' +TIME_FORMAT = 'g.i.A' +# DATETIME_FORMAT = +YEAR_MONTH_FORMAT = 'F Y' +MONTH_DAY_FORMAT = 'j F' +SHORT_DATE_FORMAT = 'Y-m-d' +# SHORT_DATETIME_FORMAT = +# FIRST_DAY_OF_WEEK = + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +# DATE_INPUT_FORMATS = +# TIME_INPUT_FORMATS = +# DATETIME_INPUT_FORMATS = +DECIMAL_SEPARATOR = ',' +THOUSAND_SEPARATOR = '.' +# NUMBER_GROUPING = diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/sr/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/conf/locale/sr/LC_MESSAGES/django.po new file mode 100644 index 0000000..81df886 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/sr/LC_MESSAGES/django.po @@ -0,0 +1,1290 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Branko Kokanovic , 2018 +# Igor Jerosimić, 2019 +# Jannis Leidel , 2011 +# Janos Guljas , 2011-2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-06-27 19:31+0000\n" +"Last-Translator: Igor Jerosimić\n" +"Language-Team: Serbian (http://www.transifex.com/django/django/language/" +"sr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sr\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +msgid "Afrikaans" +msgstr "африкански" + +msgid "Arabic" +msgstr "арапски" + +msgid "Asturian" +msgstr "астуријски" + +msgid "Azerbaijani" +msgstr "азербејџански" + +msgid "Bulgarian" +msgstr "бугарски" + +msgid "Belarusian" +msgstr "белоруски" + +msgid "Bengali" +msgstr "бенгалски" + +msgid "Breton" +msgstr "бретонски" + +msgid "Bosnian" +msgstr "босански" + +msgid "Catalan" +msgstr "каталонски" + +msgid "Czech" +msgstr "чешки" + +msgid "Welsh" +msgstr "велшки" + +msgid "Danish" +msgstr "дански" + +msgid "German" +msgstr "немачки" + +msgid "Lower Sorbian" +msgstr "доњолужичкосрпски" + +msgid "Greek" +msgstr "грчки" + +msgid "English" +msgstr "енглески" + +msgid "Australian English" +msgstr "аустралијски енглески" + +msgid "British English" +msgstr "британски енглески" + +msgid "Esperanto" +msgstr "есперанто" + +msgid "Spanish" +msgstr "шпански" + +msgid "Argentinian Spanish" +msgstr "аргентински шпански" + +msgid "Colombian Spanish" +msgstr "колумбијски шпански" + +msgid "Mexican Spanish" +msgstr "мексички шпански" + +msgid "Nicaraguan Spanish" +msgstr "никарагвански шпански" + +msgid "Venezuelan Spanish" +msgstr "венецуелански шпански" + +msgid "Estonian" +msgstr "естонски" + +msgid "Basque" +msgstr "баскијски" + +msgid "Persian" +msgstr "персијски" + +msgid "Finnish" +msgstr "фински" + +msgid "French" +msgstr "француски" + +msgid "Frisian" +msgstr "фризијски" + +msgid "Irish" +msgstr "ирски" + +msgid "Scottish Gaelic" +msgstr "шкотски гелски" + +msgid "Galician" +msgstr "галицијски" + +msgid "Hebrew" +msgstr "хебрејски" + +msgid "Hindi" +msgstr "хинду" + +msgid "Croatian" +msgstr "хрватски" + +msgid "Upper Sorbian" +msgstr "горњолужичкосрпски" + +msgid "Hungarian" +msgstr "мађарски" + +msgid "Armenian" +msgstr "јерменски" + +msgid "Interlingua" +msgstr "интерлингва" + +msgid "Indonesian" +msgstr "индонежански" + +msgid "Ido" +msgstr "идо" + +msgid "Icelandic" +msgstr "исландски" + +msgid "Italian" +msgstr "италијански" + +msgid "Japanese" +msgstr "јапански" + +msgid "Georgian" +msgstr "грузијски" + +msgid "Kabyle" +msgstr "кабилски" + +msgid "Kazakh" +msgstr "казашки" + +msgid "Khmer" +msgstr "кмерски" + +msgid "Kannada" +msgstr "канада" + +msgid "Korean" +msgstr "корејски" + +msgid "Luxembourgish" +msgstr "луксембуршки" + +msgid "Lithuanian" +msgstr "литвански" + +msgid "Latvian" +msgstr "латвијски" + +msgid "Macedonian" +msgstr "македонски" + +msgid "Malayalam" +msgstr "малајаламски" + +msgid "Mongolian" +msgstr "монголски" + +msgid "Marathi" +msgstr "маратхи" + +msgid "Burmese" +msgstr "бурмански" + +msgid "Norwegian Bokmål" +msgstr "норвешки књижевни" + +msgid "Nepali" +msgstr "непалски" + +msgid "Dutch" +msgstr "холандски" + +msgid "Norwegian Nynorsk" +msgstr "норвешки нови" + +msgid "Ossetic" +msgstr "осетински" + +msgid "Punjabi" +msgstr "панџаби" + +msgid "Polish" +msgstr "пољски" + +msgid "Portuguese" +msgstr "португалски" + +msgid "Brazilian Portuguese" +msgstr "бразилски португалски" + +msgid "Romanian" +msgstr "румунски" + +msgid "Russian" +msgstr "руски" + +msgid "Slovak" +msgstr "словачки" + +msgid "Slovenian" +msgstr "словеначки" + +msgid "Albanian" +msgstr "албански" + +msgid "Serbian" +msgstr "српски" + +msgid "Serbian Latin" +msgstr "српски (латиница)" + +msgid "Swedish" +msgstr "шведски" + +msgid "Swahili" +msgstr "свахили" + +msgid "Tamil" +msgstr "тамилски" + +msgid "Telugu" +msgstr "телугу" + +msgid "Thai" +msgstr "тајландски" + +msgid "Turkish" +msgstr "турски" + +msgid "Tatar" +msgstr "татарски" + +msgid "Udmurt" +msgstr "удмуртски" + +msgid "Ukrainian" +msgstr "украјински" + +msgid "Urdu" +msgstr "урду" + +msgid "Vietnamese" +msgstr "вијетнамски" + +msgid "Simplified Chinese" +msgstr "поједностављени кинески" + +msgid "Traditional Chinese" +msgstr "традиционални кинески" + +msgid "Messages" +msgstr "Poruke" + +msgid "Site Maps" +msgstr "Мапе сајта" + +msgid "Static Files" +msgstr "Статички фајлови" + +msgid "Syndication" +msgstr "Удруживање садржаја" + +msgid "That page number is not an integer" +msgstr "Задати број стране није цео број" + +msgid "That page number is less than 1" +msgstr "Задати број стране је мањи од 1" + +msgid "That page contains no results" +msgstr "Тражена страна не садржи резултате" + +msgid "Enter a valid value." +msgstr "Унесите исправну вредност." + +msgid "Enter a valid URL." +msgstr "Унесите исправан URL." + +msgid "Enter a valid integer." +msgstr "Унесите исправан цео број." + +msgid "Enter a valid email address." +msgstr "Унесите исправну и-мејл адресу." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Унесите исправан 'слаг', који се састоји од слова, бројки, доњих црта или " +"цртица." + +msgid "" +"Enter a valid 'slug' consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" +"Унесите исправан 'слаг', који се састоји од Уникод слова, бројки, доњих црта " +"или цртица." + +msgid "Enter a valid IPv4 address." +msgstr "Унесите исправну IPv4 адресу." + +msgid "Enter a valid IPv6 address." +msgstr "Унесите исправну IPv6 адресу." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Унесите исправну IPv4 или IPv6 адресу." + +msgid "Enter only digits separated by commas." +msgstr "Унесите само цифре раздвојене запетама." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "Ово поље мора да буде %(limit_value)s (тренутно има %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Ова вредност мора да буде мања од %(limit_value)s. или тачно толико." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Ова вредност мора бити већа од %(limit_value)s или тачно толико." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Ово поље мора да има најмање %(limit_value)d карактер (тренутно има " +"%(show_value)d)." +msgstr[1] "" +"Ово поље мора да има најмање %(limit_value)d карактера (тренутно има " +"%(show_value)d)." +msgstr[2] "" +"Ово поље мора да има најмање %(limit_value)d карактера (тренутно има " +"%(show_value)d)." + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +"Ово поље не сме да има више од %(limit_value)d карактера (тренутно има " +"%(show_value)d)." +msgstr[1] "" +"Ово поље не сме да има више од %(limit_value)d карактера (тренутно има " +"%(show_value)d)." +msgstr[2] "" +"Ово поље не сме да има више од %(limit_value)d карактера (тренутно има " +"%(show_value)d)." + +msgid "Enter a number." +msgstr "Унесите број." + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "Укупно не може бити више од %(max)s цифре." +msgstr[1] "Укупно не може бити више од %(max)s цифре." +msgstr[2] "Укупно не може бити више од %(max)s цифара." + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "Не може бити више од %(max)s децимале." +msgstr[1] "Не може бити више од %(max)s децимале." +msgstr[2] "Не може бити више од %(max)s децимала." + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "Не може бити више од %(max)s цифре пре децималног зареза." +msgstr[1] "Не може бити више од %(max)s цифре пре децималног зареза." +msgstr[2] "Не може бити више од %(max)s цифара пре децималног зареза." + +#, python-format +msgid "" +"File extension '%(extension)s' is not allowed. Allowed extensions are: " +"'%(allowed_extensions)s'." +msgstr "" +"Фајл екстензија '%(extension)s' није дозвољена. Дозвољене су следеће " +"екстензије: '%(allowed_extensions)s'." + +msgid "Null characters are not allowed." +msgstr "'Null' карактери нису дозвољени." + +msgid "and" +msgstr "и" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "%(model_name)s са пољем %(field_labels)s већ постоји." + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "Вредност %(value)r није валидна." + +msgid "This field cannot be null." +msgstr "Ово поље не може бити 'null'." + +msgid "This field cannot be blank." +msgstr "Ово поље не може да остане празно." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "%(model_name)s са пољем %(field_label)s већ постоји." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" +"%(field_label)s мора бити јединствен(a) за %(date_field_label)s " +"%(lookup_type)s." + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Поље типа: %(field_type)s" + +msgid "Integer" +msgstr "Цео број" + +#, python-format +msgid "'%(value)s' value must be an integer." +msgstr "Вредност '%(value)s' мора бити цео број." + +msgid "Big (8 byte) integer" +msgstr "Велики (8 бајтова) цео број" + +#, python-format +msgid "'%(value)s' value must be either True or False." +msgstr "Вредност '%(value)s' мора бити или True или False." + +#, python-format +msgid "'%(value)s' value must be either True, False, or None." +msgstr "'%(value)s' вредност мора бити или True, False, или None." + +msgid "Boolean (Either True or False)" +msgstr "Булова вредност (True или False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Стринг са макс. дужином %(max_length)s" + +msgid "Comma-separated integers" +msgstr "Цели бројеви раздвојени запетама" + +#, python-format +msgid "" +"'%(value)s' value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" +"Вредност '%(value)s' нема валидан формат датума. Мора бити у формату ГГГГ-ММ-" +"ДД ." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" +"Вредност '%(value)s' има исправан формат (ГГГГ-ММ-ДД) али то није валидан " +"датум." + +msgid "Date (without time)" +msgstr "Датум (без времена)" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" +"Вредност '%(value)s' нема валидан формат. Мора бити у формату ГГГГ-ММ-ДД ЧЧ:" +"ММ[:сс[.uuuuuu]][TZ] ." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" +"Вредност '%(value)s' има исправан формат (ГГГГ-ММ-ДД ЧЧ:ММ[:сс[.uuuuuu]]" +"[TZ]) али то није валидан датум/време." + +msgid "Date (with time)" +msgstr "Датум (са временом)" + +#, python-format +msgid "'%(value)s' value must be a decimal number." +msgstr "Вредност '%(value)s' мора бити децимални број." + +msgid "Decimal number" +msgstr "Децимални број" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in [DD] [HH:[MM:]]ss[." +"uuuuuu] format." +msgstr "" +"'%(value)s' нема валидан формат. Мора бити у формату [ДД] [ЧЧ:[ММ:]]ss[." +"uuuuuu] ." + +msgid "Duration" +msgstr "Временски интервал" + +msgid "Email address" +msgstr "Имејл адреса" + +msgid "File path" +msgstr "Путања фајла" + +#, python-format +msgid "'%(value)s' value must be a float." +msgstr "Вредност '%(value)s' мора бити 'float'." + +msgid "Floating point number" +msgstr "Број са покретним зарезом" + +msgid "IPv4 address" +msgstr "IPv4 адреса" + +msgid "IP address" +msgstr "IP адреса" + +#, python-format +msgid "'%(value)s' value must be either None, True or False." +msgstr "Вредност '%(value)s' мора бити None, True или False." + +msgid "Boolean (Either True, False or None)" +msgstr "Булова вредност (True, False или None)" + +msgid "Positive integer" +msgstr "Позитиван цео број" + +msgid "Positive small integer" +msgstr "Позитиван мали цео број" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Слаг са макс. дужином %(max_length)s" + +msgid "Small integer" +msgstr "Мали цео број" + +msgid "Text" +msgstr "Текст" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" +"Вредност '%(value)s' нема валидан формат. Мора бити у формату ЧЧ:ММ[:сс[." +"uuuuuu]] ." + +#, python-format +msgid "" +"'%(value)s' value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" +"Вредност '%(value)s' има исправан формат (ЧЧ:ММ[:сс[.uuuuuu]]) али то није " +"валидно време." + +msgid "Time" +msgstr "Време" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "Сирови бинарни подаци" + +#, python-format +msgid "'%(value)s' is not a valid UUID." +msgstr "'%(value)s' није валидан UUID." + +msgid "Universally unique identifier" +msgstr "Универзално јединствени идентификатор" + +msgid "File" +msgstr "Фајл" + +msgid "Image" +msgstr "Слика" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "%(model)s инстанца са вредношћу %(value)r у пољу %(field)s не постоји." + +msgid "Foreign Key (type determined by related field)" +msgstr "Спољни кључ (тип је одређен асоцираном колоном)" + +msgid "One-to-one relationship" +msgstr "Релација један на један" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "Релација %(from)s-%(to)s" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "Релације %(from)s-%(to)s" + +msgid "Many-to-many relationship" +msgstr "Релација више на више" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Ово поље се мора попунити." + +msgid "Enter a whole number." +msgstr "Унесите цео број." + +msgid "Enter a valid date." +msgstr "Унесите исправан датум." + +msgid "Enter a valid time." +msgstr "Унесите исправно време" + +msgid "Enter a valid date/time." +msgstr "Унесите исправан датум/време." + +msgid "Enter a valid duration." +msgstr "Унесите исправан временски интервал." + +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "Број дана мора бити између {min_days} и {max_days}." + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Фајл није пребачен. Проверите тип енкодирања на форми." + +msgid "No file was submitted." +msgstr "Фајл није пребачен." + +msgid "The submitted file is empty." +msgstr "Пребачени фајл је празан." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +"Име фајла не може имати више од %(max)d карактера (тренутно има %(length)d)." +msgstr[1] "" +"Име фајла не може имати више од %(max)d карактера (тренутно има %(length)d)." +msgstr[2] "" +"Име фајла не може имати више од %(max)d карактера (тренутно има %(length)d)." + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Може се само послати фајл или избрисати, не оба." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Пребаците исправан фајл. Фајл који је пребачен или није слика, или је " +"оштећен." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" +"%(value)s није међу понуђеним вредностима. Одаберите једну од понуђених." + +msgid "Enter a list of values." +msgstr "Унесите листу вредности." + +msgid "Enter a complete value." +msgstr "Унесите комплетну вредност." + +msgid "Enter a valid UUID." +msgstr "Унесите исправан UUID." + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "(Скривено поље %(name)s) %(error)s" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "ManagementForm недостаје или је измењена на погрешан начин." + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "Попуните и проследите највише %d форму." +msgstr[1] "Попуните и проследите највише %d форме." +msgstr[2] "Попуните и проследите највише %d форми." + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "Попуните и проследите најмање %d форму." +msgstr[1] "Попуните и проследите највише %d форме." +msgstr[2] "Попуните и проследите највише %d форми." + +msgid "Order" +msgstr "Редослед" + +msgid "Delete" +msgstr "Обриши" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Исправите вредност за поље %(field)s - оно мора бити јединствено." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Исправите вредности за поља %(field)s - њихова комбинација мора бити " +"јединствена." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Иправите вредност за поље %(field_name)s, оно мора бити јединствено за " +"%(lookup)s у %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Исправите дуплиране вредности доле." + +msgid "The inline value did not match the parent instance." +msgstr "Директно унета вредност не одговара инстанци родитеља." + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Одабрана вредност није међу понуђенима. Одаберите једну од понуђених." + +#, python-format +msgid "\"%(pk)s\" is not a valid value." +msgstr "\"%(pk)s\" није валидна вредност." + +#, python-format +msgid "" +"%(datetime)s couldn't be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s се не може се представити у временској зони " +"%(current_timezone)s - или је двосмислено или можда не постоји." + +msgid "Clear" +msgstr "Очисти" + +msgid "Currently" +msgstr "Тренутно" + +msgid "Change" +msgstr "Измени" + +msgid "Unknown" +msgstr "Непознато" + +msgid "Yes" +msgstr "Да" + +msgid "No" +msgstr "Не" + +msgid "yes,no,maybe" +msgstr "да,не,можда" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d бајт" +msgstr[1] "%(size)d бајта" +msgstr[2] "%(size)d бајтова" + +#, python-format +msgid "%s KB" +msgstr "%s KB" + +#, python-format +msgid "%s MB" +msgstr "%s MB" + +#, python-format +msgid "%s GB" +msgstr "%s GB" + +#, python-format +msgid "%s TB" +msgstr "%s TB" + +#, python-format +msgid "%s PB" +msgstr "%s PB" + +msgid "p.m." +msgstr "по п." + +msgid "a.m." +msgstr "пре п." + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "поноћ" + +msgid "noon" +msgstr "подне" + +msgid "Monday" +msgstr "понедељак" + +msgid "Tuesday" +msgstr "уторак" + +msgid "Wednesday" +msgstr "среда" + +msgid "Thursday" +msgstr "четвртак" + +msgid "Friday" +msgstr "петак" + +msgid "Saturday" +msgstr "субота" + +msgid "Sunday" +msgstr "недеља" + +msgid "Mon" +msgstr "пон." + +msgid "Tue" +msgstr "уто." + +msgid "Wed" +msgstr "сре." + +msgid "Thu" +msgstr "чет." + +msgid "Fri" +msgstr "пет." + +msgid "Sat" +msgstr "суб." + +msgid "Sun" +msgstr "нед." + +msgid "January" +msgstr "јануар" + +msgid "February" +msgstr "фебруар" + +msgid "March" +msgstr "март" + +msgid "April" +msgstr "април" + +msgid "May" +msgstr "мај" + +msgid "June" +msgstr "јун" + +msgid "July" +msgstr "јул" + +msgid "August" +msgstr "август" + +msgid "September" +msgstr "септембар" + +msgid "October" +msgstr "октобар" + +msgid "November" +msgstr "новембар" + +msgid "December" +msgstr "децембар" + +msgid "jan" +msgstr "јан." + +msgid "feb" +msgstr "феб." + +msgid "mar" +msgstr "мар." + +msgid "apr" +msgstr "апр." + +msgid "may" +msgstr "мај." + +msgid "jun" +msgstr "јун." + +msgid "jul" +msgstr "јул." + +msgid "aug" +msgstr "ауг." + +msgid "sep" +msgstr "сеп." + +msgid "oct" +msgstr "окт." + +msgid "nov" +msgstr "нов." + +msgid "dec" +msgstr "дец." + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Јан." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Феб." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Март" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Април" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Мај" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Јун" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Јул" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Авг." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Септ." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Окт." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Нов." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Дец." + +msgctxt "alt. month" +msgid "January" +msgstr "Јануар" + +msgctxt "alt. month" +msgid "February" +msgstr "Фебруар" + +msgctxt "alt. month" +msgid "March" +msgstr "Март" + +msgctxt "alt. month" +msgid "April" +msgstr "Април" + +msgctxt "alt. month" +msgid "May" +msgstr "Мај" + +msgctxt "alt. month" +msgid "June" +msgstr "Јун" + +msgctxt "alt. month" +msgid "July" +msgstr "Јул" + +msgctxt "alt. month" +msgid "August" +msgstr "Август" + +msgctxt "alt. month" +msgid "September" +msgstr "Септембар" + +msgctxt "alt. month" +msgid "October" +msgstr "Октобар" + +msgctxt "alt. month" +msgid "November" +msgstr "Новембар" + +msgctxt "alt. month" +msgid "December" +msgstr "Децембар" + +msgid "This is not a valid IPv6 address." +msgstr "Ово није валидна IPv6 адреса." + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s…" +msgstr "%(truncated_text)s..." + +msgid "or" +msgstr "или" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d година" +msgstr[1] "%d године" +msgstr[2] "%d година" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d месец" +msgstr[1] "%d месеца" +msgstr[2] "%d месеци" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d недеља" +msgstr[1] "%d недеље" +msgstr[2] "%d недеља" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d дан" +msgstr[1] "%d дана" +msgstr[2] "%d дана" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d час" +msgstr[1] "%d часа" +msgstr[2] "%d часова" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d минут" +msgstr[1] "%d минута" +msgstr[2] "%d минута" + +msgid "0 minutes" +msgstr "0 минута" + +msgid "Forbidden" +msgstr "Забрањено" + +msgid "CSRF verification failed. Request aborted." +msgstr "CSRF верификација није прошла. Захтев одбијен." + +msgid "" +"You are seeing this message because this HTTPS site requires a 'Referer " +"header' to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" +"Ова порука је приказана јер овај HTTPS сајт захтева да 'Referer header' буде " +"послат од стране вашег интернет претраживача, што тренутно није случај. " +"Поменуто заглавље је потребно ради безбедоносних разлога, да би се осигурало " +"да ваш претраживач није под контролом трећих лица." + +msgid "" +"If you have configured your browser to disable 'Referer' headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for 'same-" +"origin' requests." +msgstr "" +"Ако сте конфигурисали интернет претраживач са искљученим 'Referer' " +"заглављима, поново их укључите, барем за овај сајт, или за HTTPS конекције, " +"или за 'same-origin' захтеве." + +msgid "" +"If you are using the tag or " +"including the 'Referrer-Policy: no-referrer' header, please remove them. The " +"CSRF protection requires the 'Referer' header to do strict referer checking. " +"If you're concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" +"Ако користите таг или " +"'Referrer-Policy: no-referrer' заглавље, молимо да их уклоните. CSRF заштита " +"захтева 'Referer' заглавље да би се обавила стриктна 'referrer' провера. " +"Уколико вас брине приватност, користите алтерантиве као за линкове ка другим сајтовима." + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" +"Ова порука је приказана јер овај сајт захтева CSRF куки када се прослеђују " +"подаци из форми. Овај куки је потребан из сигурносних разлога, да би се " +"осигурало да ваш претраживач није под контролом трећих лица." + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for 'same-origin' requests." +msgstr "" +"Ако је ваш претраживач конфигурисан са искљученим кукијима, молимо да их " +"укључите, барем за овај сајт, или за 'same-origin' захтеве." + +msgid "More information is available with DEBUG=True." +msgstr "Више информација је доступно са DEBUG=True." + +msgid "No year specified" +msgstr "Година није назначена" + +msgid "Date out of range" +msgstr "Датум ван опсега" + +msgid "No month specified" +msgstr "Месец није назначен" + +msgid "No day specified" +msgstr "Дан није назначен" + +msgid "No week specified" +msgstr "Недеља није назначена" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Недоступни објекти %(verbose_name_plural)s" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"Опција „future“ није доступна за „%(verbose_name_plural)s“ јер " +"%(class_name)s.allow_future има вредност False." + +#, python-format +msgid "Invalid date string '%(datestr)s' given format '%(format)s'" +msgstr "Неисправан датум „%(datestr)s“ дат формату „%(format)s“" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Ниједан објекат класе %(verbose_name)s није нађен датим упитом." + +msgid "Page is not 'last', nor can it be converted to an int." +msgstr "Страница није последња, нити може бити конвертована у тип 'int'." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Неисправна страна (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and '%(class_name)s.allow_empty' is False." +msgstr "Празна листа и „%(class_name)s.allow_empty“ има вредност False." + +msgid "Directory indexes are not allowed here." +msgstr "Индекси директоријума нису дозвољени овде." + +#, python-format +msgid "\"%(path)s\" does not exist" +msgstr "„%(path)s“ не постоји" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Индекс директоријума %(directory)s" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "Ђанго: веб окружење за перфекционисте са строгим роковима." + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" +"Погледајте напомене уз издање за Ђанго " +"%(version)s" + +msgid "The install worked successfully! Congratulations!" +msgstr "Инсталација је прошла успешно. Честитке!" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" +"Ова страна је приказана јер је DEBUG=True у вашим подешавањима и нисте конфигурисали ниједан URL." + +msgid "Django Documentation" +msgstr "Ђанго документација" + +msgid "Topics, references, & how-to's" +msgstr "Теме, референце, & како-да" + +msgid "Tutorial: A Polling App" +msgstr "Упутство: апликација за гласање" + +msgid "Get started with Django" +msgstr "Почните са Ђангом" + +msgid "Django Community" +msgstr "Ђанго заједница" + +msgid "Connect, get help, or contribute" +msgstr "Повежите се, потражите помоћ или дајте допринос" diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/sr/__init__.py b/venv/lib/python3.7/site-packages/django/conf/locale/sr/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/sv/formats.py b/venv/lib/python3.7/site-packages/django/conf/locale/sv/formats.py new file mode 100644 index 0000000..4dd2f63 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/sv/formats.py @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = 'j F Y' +TIME_FORMAT = 'H:i' +DATETIME_FORMAT = 'j F Y H:i' +YEAR_MONTH_FORMAT = 'F Y' +MONTH_DAY_FORMAT = 'j F' +SHORT_DATE_FORMAT = 'Y-m-d' +SHORT_DATETIME_FORMAT = 'Y-m-d H:i' +FIRST_DAY_OF_WEEK = 1 + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +# Kept ISO formats as they are in first position +DATE_INPUT_FORMATS = [ + '%Y-%m-%d', # '2006-10-25' + '%m/%d/%Y', # '10/25/2006' + '%m/%d/%y', # '10/25/06' +] +DATETIME_INPUT_FORMATS = [ + '%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59' + '%Y-%m-%d %H:%M:%S.%f', # '2006-10-25 14:30:59.000200' + '%Y-%m-%d %H:%M', # '2006-10-25 14:30' + '%Y-%m-%d', # '2006-10-25' + '%m/%d/%Y %H:%M:%S', # '10/25/2006 14:30:59' + '%m/%d/%Y %H:%M:%S.%f', # '10/25/2006 14:30:59.000200' + '%m/%d/%Y %H:%M', # '10/25/2006 14:30' + '%m/%d/%Y', # '10/25/2006' + '%m/%d/%y %H:%M:%S', # '10/25/06 14:30:59' + '%m/%d/%y %H:%M:%S.%f', # '10/25/06 14:30:59.000200' + '%m/%d/%y %H:%M', # '10/25/06 14:30' + '%m/%d/%y', # '10/25/06' +] +DECIMAL_SEPARATOR = ',' +THOUSAND_SEPARATOR = '\xa0' # non-breaking space +NUMBER_GROUPING = 3 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/sw/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/conf/locale/sw/LC_MESSAGES/django.po new file mode 100644 index 0000000..23802e6 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/sw/LC_MESSAGES/django.po @@ -0,0 +1,1194 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Machaku , 2015 +# Machaku , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-11-15 16:15+0100\n" +"PO-Revision-Date: 2017-11-16 01:13+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Swahili (http://www.transifex.com/django/django/language/" +"sw/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sw\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Afrikaans" +msgstr "Kiafrikaani" + +msgid "Arabic" +msgstr "Kiarabu" + +msgid "Asturian" +msgstr "" + +msgid "Azerbaijani" +msgstr "Kiazerbaijani" + +msgid "Bulgarian" +msgstr "Kibulgaria" + +msgid "Belarusian" +msgstr "Kibelarusi" + +msgid "Bengali" +msgstr "Kibengali" + +msgid "Breton" +msgstr "Kibretoni" + +msgid "Bosnian" +msgstr "Kibosnia" + +msgid "Catalan" +msgstr "Kikatalani" + +msgid "Czech" +msgstr "Kicheki" + +msgid "Welsh" +msgstr "Kiweli" + +msgid "Danish" +msgstr "Kideni" + +msgid "German" +msgstr "Kijerumani" + +msgid "Lower Sorbian" +msgstr "" + +msgid "Greek" +msgstr "Kigiriki" + +msgid "English" +msgstr "Kiingereza" + +msgid "Australian English" +msgstr "Kiingereza cha Kiaustalia" + +msgid "British English" +msgstr "Kiingereza cha Uingereza" + +msgid "Esperanto" +msgstr "Kiesperanto" + +msgid "Spanish" +msgstr "Kihispania" + +msgid "Argentinian Spanish" +msgstr "Kihispania cha Argentina" + +msgid "Colombian Spanish" +msgstr "" + +msgid "Mexican Spanish" +msgstr "Kihispania cha Mexico" + +msgid "Nicaraguan Spanish" +msgstr "Kihispania cha Nikaragua" + +msgid "Venezuelan Spanish" +msgstr "Kihispania cha Kivenezuela" + +msgid "Estonian" +msgstr "Kiestonia" + +msgid "Basque" +msgstr "Kibaskyue" + +msgid "Persian" +msgstr "Kipershia" + +msgid "Finnish" +msgstr "Kifini" + +msgid "French" +msgstr "Kifaransa" + +msgid "Frisian" +msgstr "Kifrisi" + +msgid "Irish" +msgstr "Kiairishi" + +msgid "Scottish Gaelic" +msgstr "" + +msgid "Galician" +msgstr "Kigalatia" + +msgid "Hebrew" +msgstr "Kiyahudi" + +msgid "Hindi" +msgstr "Kihindi" + +msgid "Croatian" +msgstr "Kikroeshia" + +msgid "Upper Sorbian" +msgstr "" + +msgid "Hungarian" +msgstr "Kihangaria" + +msgid "Interlingua" +msgstr "" + +msgid "Indonesian" +msgstr "Kiindonesia" + +msgid "Ido" +msgstr "" + +msgid "Icelandic" +msgstr "Kiaiselandi" + +msgid "Italian" +msgstr "Kiitaliano" + +msgid "Japanese" +msgstr "Kijapani" + +msgid "Georgian" +msgstr "Kijiojia" + +msgid "Kazakh" +msgstr "Kizakhi" + +msgid "Khmer" +msgstr "Kihema" + +msgid "Kannada" +msgstr "Kikanada" + +msgid "Korean" +msgstr "Kikorea" + +msgid "Luxembourgish" +msgstr "" + +msgid "Lithuanian" +msgstr "Kilithuania" + +msgid "Latvian" +msgstr "Kilatvia" + +msgid "Macedonian" +msgstr "Kimacedonia" + +msgid "Malayalam" +msgstr "Kimalayalam" + +msgid "Mongolian" +msgstr "Kimongolia" + +msgid "Marathi" +msgstr "" + +msgid "Burmese" +msgstr "" + +msgid "Norwegian Bokmål" +msgstr "" + +msgid "Nepali" +msgstr "Kinepali" + +msgid "Dutch" +msgstr "Kidachi" + +msgid "Norwegian Nynorsk" +msgstr "Kinynorki cha Kinorwei" + +msgid "Ossetic" +msgstr "" + +msgid "Punjabi" +msgstr "Kipanjabi" + +msgid "Polish" +msgstr "Kipolishi" + +msgid "Portuguese" +msgstr "Kireno" + +msgid "Brazilian Portuguese" +msgstr "Kireno cha Kibrazili" + +msgid "Romanian" +msgstr "Kiromania" + +msgid "Russian" +msgstr "Kirusi" + +msgid "Slovak" +msgstr "Kislovakia" + +msgid "Slovenian" +msgstr "Kislovenia" + +msgid "Albanian" +msgstr "Kialbania" + +msgid "Serbian" +msgstr "Kiserbia" + +msgid "Serbian Latin" +msgstr "Kilatini cha Kiserbia" + +msgid "Swedish" +msgstr "Kiswidi" + +msgid "Swahili" +msgstr "Kiswahili" + +msgid "Tamil" +msgstr "Kitamili" + +msgid "Telugu" +msgstr "kitegulu" + +msgid "Thai" +msgstr "Kithai" + +msgid "Turkish" +msgstr "Kituruki" + +msgid "Tatar" +msgstr "Kitatari" + +msgid "Udmurt" +msgstr "" + +msgid "Ukrainian" +msgstr "Kiukreni" + +msgid "Urdu" +msgstr "Kiurdu" + +msgid "Vietnamese" +msgstr "Kivietinamu" + +msgid "Simplified Chinese" +msgstr "Kichina Kilichorahisishwa" + +msgid "Traditional Chinese" +msgstr "Kichina Asilia" + +msgid "Messages" +msgstr "" + +msgid "Site Maps" +msgstr "" + +msgid "Static Files" +msgstr "" + +msgid "Syndication" +msgstr "" + +msgid "That page number is not an integer" +msgstr "" + +msgid "That page number is less than 1" +msgstr "" + +msgid "That page contains no results" +msgstr "" + +msgid "Enter a valid value." +msgstr "Ingiza thamani halali" + +msgid "Enter a valid URL." +msgstr "Ingiza URL halali." + +msgid "Enter a valid integer." +msgstr "Ingiza namba halali" + +msgid "Enter a valid email address." +msgstr "Ingiza anuani halali ya barua pepe" + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens." +msgstr "Ingiza slagi halali yenye herufi, namba, \"_\" au \"-\"" + +msgid "" +"Enter a valid 'slug' consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "Ingiza anuani halali ya IPV4" + +msgid "Enter a valid IPv6 address." +msgstr "Ingiza anuani halali ya IPV6" + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Ingiza anuani halali za IPV4 au IPV6" + +msgid "Enter only digits separated by commas." +msgstr "Ingiza tarakimu zilizotenganishwa kwa koma tu." + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "Hakikisha thamani hii ni %(limit_value)s (ni %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Hakikisha thamani hii ni ndogo kuliko au sawa na %(limit_value)s." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Hakikisha thamani hii ni kubwa kuliko au sawa na %(limit_value)s." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"File extension '%(extension)s' is not allowed. Allowed extensions are: " +"'%(allowed_extensions)s'." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "na" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "" + +msgid "This field cannot be null." +msgstr "Uga huu hauwezi kuwa hauna kitu." + +msgid "This field cannot be blank." +msgstr "Uga huu hauwezi kuwa mtupu" + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "Tayari kuna %(field_label)s kwa %(model_name)s nyingine." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "Uga wa aina %(field_type)s" + +msgid "Integer" +msgstr "Inteja" + +#, python-format +msgid "'%(value)s' value must be an integer." +msgstr "Thamani ya '%(value)s ni lazima iwe inteja." + +msgid "Big (8 byte) integer" +msgstr "Inteja kubwa (baiti 8)" + +#, python-format +msgid "'%(value)s' value must be either True or False." +msgstr "Thamani ya '%(value)s' ni lazma iwe Kweli au Si kweli" + +msgid "Boolean (Either True or False)" +msgstr "Buleani (Aidha Kweli au Si kweli)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Tungo (hadi %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Inteja zilizotengwa kwa koma" + +#, python-format +msgid "" +"'%(value)s' value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "Tarehe (bila ya muda)" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "Tarehe (pamoja na muda)" + +#, python-format +msgid "'%(value)s' value must be a decimal number." +msgstr "Thamani ya '%(value)s' ni lazima iwe namba ya desimali." + +msgid "Decimal number" +msgstr "Namba ya desimali" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in [DD] [HH:[MM:]]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "" + +msgid "Email address" +msgstr "Anuani ya baruapepe" + +msgid "File path" +msgstr "Njia ya faili" + +#, python-format +msgid "'%(value)s' value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "Namba ya `floating point`" + +msgid "IPv4 address" +msgstr "anuani ya IPV4" + +msgid "IP address" +msgstr "anuani ya IP" + +#, python-format +msgid "'%(value)s' value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "Buleani (Aidha kweli, Si kweli au Hukuna)" + +msgid "Positive integer" +msgstr "Inteja chanya" + +msgid "Positive small integer" +msgstr "Inteja chanya ndogo" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Slagi (hadi %(max_length)s)" + +msgid "Small integer" +msgstr "Inteja ndogo" + +msgid "Text" +msgstr "Maandishi" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"'%(value)s' value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "Muda" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "" + +#, python-format +msgid "'%(value)s' is not a valid UUID." +msgstr "" + +msgid "File" +msgstr "Faili" + +msgid "Image" +msgstr "Picha" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +msgid "Foreign Key (type determined by related field)" +msgstr "'Foreign Key' (aina inapatikana kwa uga unaohusiana)" + +msgid "One-to-one relationship" +msgstr "Uhusiano wa moja-kwa-moja" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "Uhusiano wa vingi-kwa-vingi" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr ":?.!" + +msgid "This field is required." +msgstr "Sehemu hii inahitajika" + +msgid "Enter a whole number." +msgstr "Ingiza namba kamili" + +msgid "Enter a number." +msgstr "Ingiza namba" + +msgid "Enter a valid date." +msgstr "Ingiza tarehe halali" + +msgid "Enter a valid time." +msgstr "Ingiza muda halali" + +msgid "Enter a valid date/time." +msgstr "Ingiza tarehe/muda halali" + +msgid "Enter a valid duration." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Hakuna faili lililokusanywa. Angalia aina ya msimbo kwenye fomu." + +msgid "No file was submitted." +msgstr "Hakuna faili lililokusanywa." + +msgid "The submitted file is empty." +msgstr "Faili lililokusanywa ni tupu." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" +msgstr[1] "" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "Tafadhali aidha kusanya faili au tiki kisanduku kilicho wazi, si yote." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Pakia picha halali. Faili ulilopakia lilikua aidha si picha au ni picha " +"iliyopotoshwa." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Chagua chaguo halali. %(value)s si moja kati ya machaguo yaliyopo." + +msgid "Enter a list of values." +msgstr "Ingiza orodha ya thamani" + +msgid "Enter a complete value." +msgstr "" + +msgid "Enter a valid UUID." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr ":" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "" +msgstr[1] "" + +msgid "Order" +msgstr "Panga" + +msgid "Delete" +msgstr "Futa" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Tafadhali rekebisha data zilizojirudia kwa %(field)s." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Tafadhali rekebisha data zilizojirudia kwa %(field)s, zinazotakiwa kuwa za " +"kipekee." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Tafadhali sahihisha data zilizojirudia kwa %(field_name)s ,uga huu ni lazima " +"kuwa wa pekee kwa %(lookup)s katika %(date_field)s." + +msgid "Please correct the duplicate values below." +msgstr "Tafadhali sahihisha thamani zilizojirudia hapo chini." + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Chagua chaguo halali. Chaguo hilo si moja kati ya chaguzi halali" + +#, python-format +msgid "\"%(pk)s\" is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn't be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"Imeshindikana kufasiri %(datetime)s katika majira ya %(current_timezone)s;" +"Inawezekana kuwa kuna utata au kiti hichi hakipo." + +msgid "Clear" +msgstr "Safisha" + +msgid "Currently" +msgstr "Kwa sasa" + +msgid "Change" +msgstr "Badili" + +msgid "Unknown" +msgstr "Haijulikani" + +msgid "Yes" +msgstr "Ndiyo" + +msgid "No" +msgstr "Hapana" + +msgid "yes,no,maybe" +msgstr "ndiyo,hapana,labda" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "baiti %(size)d" +msgstr[1] "baiti %(size)d" + +#, python-format +msgid "%s KB" +msgstr "KB %s" + +#, python-format +msgid "%s MB" +msgstr "MB %s" + +#, python-format +msgid "%s GB" +msgstr "GB %s" + +#, python-format +msgid "%s TB" +msgstr "TB %s" + +#, python-format +msgid "%s PB" +msgstr "PB %s" + +msgid "p.m." +msgstr "p.m" + +msgid "a.m." +msgstr "a.m" + +msgid "PM" +msgstr "PM" + +msgid "AM" +msgstr "AM" + +msgid "midnight" +msgstr "usiku wa manane" + +msgid "noon" +msgstr "mchana" + +msgid "Monday" +msgstr "Jumatatu" + +msgid "Tuesday" +msgstr "Jumanne" + +msgid "Wednesday" +msgstr "Jumatano" + +msgid "Thursday" +msgstr "Alhamisi" + +msgid "Friday" +msgstr "Ijumaa" + +msgid "Saturday" +msgstr "Jumamosi" + +msgid "Sunday" +msgstr "Jumapili" + +msgid "Mon" +msgstr "Jtatu" + +msgid "Tue" +msgstr "Jnne" + +msgid "Wed" +msgstr "jtano" + +msgid "Thu" +msgstr "Alh" + +msgid "Fri" +msgstr "Ijmaa" + +msgid "Sat" +msgstr "Jmosi" + +msgid "Sun" +msgstr "Jpili" + +msgid "January" +msgstr "Januari" + +msgid "February" +msgstr "Februari" + +msgid "March" +msgstr "Machi" + +msgid "April" +msgstr "Aprili" + +msgid "May" +msgstr "Mei" + +msgid "June" +msgstr "Juni" + +msgid "July" +msgstr "Julai" + +msgid "August" +msgstr "Agosti" + +msgid "September" +msgstr "Septemba" + +msgid "October" +msgstr "Oktoba" + +msgid "November" +msgstr "Novemba" + +msgid "December" +msgstr "Disemba" + +msgid "jan" +msgstr "jan" + +msgid "feb" +msgstr "feb" + +msgid "mar" +msgstr "machi" + +msgid "apr" +msgstr "apr" + +msgid "may" +msgstr "mei" + +msgid "jun" +msgstr "Juni" + +msgid "jul" +msgstr "jul" + +msgid "aug" +msgstr "ago" + +msgid "sep" +msgstr "sep" + +msgid "oct" +msgstr "okt" + +msgid "nov" +msgstr "nov" + +msgid "dec" +msgstr "dis" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Jan." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Feb." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Machi" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Aprili" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Mei" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Juni" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Julai" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Ago." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Sep." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Okt." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Nov." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Dis." + +msgctxt "alt. month" +msgid "January" +msgstr "Januari" + +msgctxt "alt. month" +msgid "February" +msgstr "Februari" + +msgctxt "alt. month" +msgid "March" +msgstr "Machi" + +msgctxt "alt. month" +msgid "April" +msgstr "Aprili" + +msgctxt "alt. month" +msgid "May" +msgstr "Mei" + +msgctxt "alt. month" +msgid "June" +msgstr "Juni" + +msgctxt "alt. month" +msgid "July" +msgstr "Julai" + +msgctxt "alt. month" +msgid "August" +msgstr "Agosti" + +msgctxt "alt. month" +msgid "September" +msgstr "Septemba" + +msgctxt "alt. month" +msgid "October" +msgstr "Oktoba" + +msgctxt "alt. month" +msgid "November" +msgstr "Novemba" + +msgctxt "alt. month" +msgid "December" +msgstr "Disemba" + +msgid "This is not a valid IPv6 address." +msgstr "" + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s..." +msgstr "%(truncated_text)s..." + +msgid "or" +msgstr "au" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr ", " + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "mwaka %d" +msgstr[1] "miaka %d" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "mwezi %d" +msgstr[1] "miezi %d" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "wiki %d" +msgstr[1] "wiki %d" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "siku %d" +msgstr[1] "siku %d" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "saa %d" +msgstr[1] "saa %d" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "dakika %d" +msgstr[1] "dakika %d" + +msgid "0 minutes" +msgstr "dakika 0" + +msgid "Forbidden" +msgstr "Marufuku" + +msgid "CSRF verification failed. Request aborted." +msgstr "" + +msgid "" +"You are seeing this message because this HTTPS site requires a 'Referer " +"header' to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable 'Referer' headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for 'same-" +"origin' requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the 'Referrer-Policy: no-referrer' header, please remove them. The " +"CSRF protection requires the 'Referer' header to do strict referer checking. " +"If you're concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for 'same-origin' requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "Maelezo zaidi yanapatikana ikiwa DEBUG=True" + +msgid "No year specified" +msgstr "Hakuna mwaka maalum uliotajwa" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "Hakuna mwezi maalum uliotajwa" + +msgid "No day specified" +msgstr "Hakuna siku maalum iliyitajwa" + +msgid "No week specified" +msgstr "Hakuna wiki maalum iliyotajwa" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Hakujapatikana %(verbose_name_plural)s" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"%(verbose_name_plural)s kutoka wakati ujao haiwezekani kwani `" +"%(class_name)s.allow_future` ni `False`." + +#, python-format +msgid "Invalid date string '%(datestr)s' given format '%(format)s'" +msgstr "Tungo batili ya tarehe '%(datestr)s' muundo ni '%(format)s'" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "hakuna %(verbose_name)s kulingana na ulizo" + +msgid "Page is not 'last', nor can it be converted to an int." +msgstr "Ukurasa huu si 'mwisho', na wala hauwezi kubadilishwa kuwa int." + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "Ukurasa batili (%(page_number)s): %(message)s" + +#, python-format +msgid "Empty list and '%(class_name)s.allow_empty' is False." +msgstr "Orodha tupu na '%(class_name)s.allow_empty'.ni 'False'." + +msgid "Directory indexes are not allowed here." +msgstr "Sahirisi za saraka haziruhusiwi hapa." + +#, python-format +msgid "\"%(path)s\" does not exist" +msgstr "\"%(path)s\" haipo" + +#, python-format +msgid "Index of %(directory)s" +msgstr "Sahirisi ya %(directory)s" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to's" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/ta/__init__.py b/venv/lib/python3.7/site-packages/django/conf/locale/ta/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/te/formats.py b/venv/lib/python3.7/site-packages/django/conf/locale/te/formats.py new file mode 100644 index 0000000..8fb98cf --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/te/formats.py @@ -0,0 +1,21 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = 'j F Y' +TIME_FORMAT = 'g:i A' +# DATETIME_FORMAT = +# YEAR_MONTH_FORMAT = +MONTH_DAY_FORMAT = 'j F' +SHORT_DATE_FORMAT = 'j M Y' +# SHORT_DATETIME_FORMAT = +# FIRST_DAY_OF_WEEK = + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +# DATE_INPUT_FORMATS = +# TIME_INPUT_FORMATS = +# DATETIME_INPUT_FORMATS = +# DECIMAL_SEPARATOR = +# THOUSAND_SEPARATOR = +# NUMBER_GROUPING = diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/th/__init__.py b/venv/lib/python3.7/site-packages/django/conf/locale/th/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/th/formats.py b/venv/lib/python3.7/site-packages/django/conf/locale/th/formats.py new file mode 100644 index 0000000..d7394eb --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/th/formats.py @@ -0,0 +1,33 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = 'j F Y' +TIME_FORMAT = 'G:i' +DATETIME_FORMAT = 'j F Y, G:i' +YEAR_MONTH_FORMAT = 'F Y' +MONTH_DAY_FORMAT = 'j F' +SHORT_DATE_FORMAT = 'j M Y' +SHORT_DATETIME_FORMAT = 'j M Y, G:i' +FIRST_DAY_OF_WEEK = 0 # Sunday + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +DATE_INPUT_FORMATS = [ + '%d/%m/%Y', # 25/10/2006 + '%d %b %Y', # 25 ต.ค. 2006 + '%d %B %Y', # 25 ตุลาคม 2006 +] +TIME_INPUT_FORMATS = [ + '%H:%M:%S', # 14:30:59 + '%H:%M:%S.%f', # 14:30:59.000200 + '%H:%M', # 14:30 +] +DATETIME_INPUT_FORMATS = [ + '%d/%m/%Y %H:%M:%S', # 25/10/2006 14:30:59 + '%d/%m/%Y %H:%M:%S.%f', # 25/10/2006 14:30:59.000200 + '%d/%m/%Y %H:%M', # 25/10/2006 14:30 +] +DECIMAL_SEPARATOR = '.' +THOUSAND_SEPARATOR = ',' +NUMBER_GROUPING = 3 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/tr/formats.py b/venv/lib/python3.7/site-packages/django/conf/locale/tr/formats.py new file mode 100644 index 0000000..23012db --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/tr/formats.py @@ -0,0 +1,29 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = 'd F Y' +TIME_FORMAT = 'H:i' +DATETIME_FORMAT = 'd F Y H:i' +YEAR_MONTH_FORMAT = 'F Y' +MONTH_DAY_FORMAT = 'd F' +SHORT_DATE_FORMAT = 'd M Y' +SHORT_DATETIME_FORMAT = 'd M Y H:i' +FIRST_DAY_OF_WEEK = 1 # Pazartesi + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +DATE_INPUT_FORMATS = [ + '%d/%m/%Y', '%d/%m/%y', # '25/10/2006', '25/10/06' + '%y-%m-%d', # '06-10-25' + # '%d %B %Y', '%d %b. %Y', # '25 Ekim 2006', '25 Eki. 2006' +] +DATETIME_INPUT_FORMATS = [ + '%d/%m/%Y %H:%M:%S', # '25/10/2006 14:30:59' + '%d/%m/%Y %H:%M:%S.%f', # '25/10/2006 14:30:59.000200' + '%d/%m/%Y %H:%M', # '25/10/2006 14:30' + '%d/%m/%Y', # '25/10/2006' +] +DECIMAL_SEPARATOR = ',' +THOUSAND_SEPARATOR = '.' +NUMBER_GROUPING = 3 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/tt/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/conf/locale/tt/LC_MESSAGES/django.po new file mode 100644 index 0000000..fe28eee --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/tt/LC_MESSAGES/django.po @@ -0,0 +1,1184 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Azat Khasanshin , 2011 +# v_ildar , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-11-15 16:15+0100\n" +"PO-Revision-Date: 2017-11-16 01:13+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Tatar (http://www.transifex.com/django/django/language/tt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tt\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Afrikaans" +msgstr "" + +msgid "Arabic" +msgstr "Гарәп теле" + +msgid "Asturian" +msgstr "" + +msgid "Azerbaijani" +msgstr "Азәрбайҗан" + +msgid "Bulgarian" +msgstr "Болгар теле" + +msgid "Belarusian" +msgstr "" + +msgid "Bengali" +msgstr "Бенгалия теле" + +msgid "Breton" +msgstr "" + +msgid "Bosnian" +msgstr "Босния теле" + +msgid "Catalan" +msgstr "Каталан теле" + +msgid "Czech" +msgstr "Чех теле" + +msgid "Welsh" +msgstr "Уэльс теле" + +msgid "Danish" +msgstr "Дания теле" + +msgid "German" +msgstr "Алман теле" + +msgid "Lower Sorbian" +msgstr "" + +msgid "Greek" +msgstr "Грек теле" + +msgid "English" +msgstr "Инглиз теле" + +msgid "Australian English" +msgstr "" + +msgid "British English" +msgstr "Британ инглиз теле" + +msgid "Esperanto" +msgstr "Эсперанто теле" + +msgid "Spanish" +msgstr "Испан теле" + +msgid "Argentinian Spanish" +msgstr "Аргентина испан теле" + +msgid "Colombian Spanish" +msgstr "" + +msgid "Mexican Spanish" +msgstr "Мексикалы испан" + +msgid "Nicaraguan Spanish" +msgstr "Никарагуалы испан" + +msgid "Venezuelan Spanish" +msgstr "" + +msgid "Estonian" +msgstr "Эстон теле" + +msgid "Basque" +msgstr "Баск теле" + +msgid "Persian" +msgstr "Фарсы теле" + +msgid "Finnish" +msgstr "Финн теле" + +msgid "French" +msgstr "Француз теле" + +msgid "Frisian" +msgstr "Фриз теле" + +msgid "Irish" +msgstr "Ирланд теле" + +msgid "Scottish Gaelic" +msgstr "" + +msgid "Galician" +msgstr "Галлий теле" + +msgid "Hebrew" +msgstr "Яһүд теле" + +msgid "Hindi" +msgstr "Хинд теле" + +msgid "Croatian" +msgstr "Хорват теле" + +msgid "Upper Sorbian" +msgstr "" + +msgid "Hungarian" +msgstr "Венгр теле" + +msgid "Interlingua" +msgstr "" + +msgid "Indonesian" +msgstr "Индонезия теле" + +msgid "Ido" +msgstr "" + +msgid "Icelandic" +msgstr "Исланд теле" + +msgid "Italian" +msgstr "Итальян теле" + +msgid "Japanese" +msgstr "Япон теле" + +msgid "Georgian" +msgstr "Грузин теле" + +msgid "Kazakh" +msgstr "Казах теле" + +msgid "Khmer" +msgstr "Кхмер теле" + +msgid "Kannada" +msgstr "Каннада теле" + +msgid "Korean" +msgstr "Корея теле" + +msgid "Luxembourgish" +msgstr "Люксембург теле" + +msgid "Lithuanian" +msgstr "Литвалылар теле" + +msgid "Latvian" +msgstr "Латвия теле" + +msgid "Macedonian" +msgstr "Македон теле" + +msgid "Malayalam" +msgstr "Малаялам теле" + +msgid "Mongolian" +msgstr "Монгол теле" + +msgid "Marathi" +msgstr "" + +msgid "Burmese" +msgstr "" + +msgid "Norwegian Bokmål" +msgstr "" + +msgid "Nepali" +msgstr "" + +msgid "Dutch" +msgstr "Голланд теле" + +msgid "Norwegian Nynorsk" +msgstr "Норвегиялеләр (Нюнорск) теле" + +msgid "Ossetic" +msgstr "" + +msgid "Punjabi" +msgstr "Паджаби теле" + +msgid "Polish" +msgstr "Поляк теле" + +msgid "Portuguese" +msgstr "Португал теле" + +msgid "Brazilian Portuguese" +msgstr "Бразилия португал теле" + +msgid "Romanian" +msgstr "Румын теле" + +msgid "Russian" +msgstr "Рус теле" + +msgid "Slovak" +msgstr "Словак теле" + +msgid "Slovenian" +msgstr "Словен теле" + +msgid "Albanian" +msgstr "Албан теле" + +msgid "Serbian" +msgstr "Серб теле" + +msgid "Serbian Latin" +msgstr "Серб теле (латин алфавиты)" + +msgid "Swedish" +msgstr "Швед теле" + +msgid "Swahili" +msgstr "" + +msgid "Tamil" +msgstr "Тамиль теле" + +msgid "Telugu" +msgstr "Телугу теле" + +msgid "Thai" +msgstr "Тай теле" + +msgid "Turkish" +msgstr "Төрек теле" + +msgid "Tatar" +msgstr "Татар теле" + +msgid "Udmurt" +msgstr "" + +msgid "Ukrainian" +msgstr "Украин теле" + +msgid "Urdu" +msgstr "Урду" + +msgid "Vietnamese" +msgstr "Вьетнам теле" + +msgid "Simplified Chinese" +msgstr "Гадиләштерелгән кытай теле" + +msgid "Traditional Chinese" +msgstr "Традицион кытай теле" + +msgid "Messages" +msgstr "" + +msgid "Site Maps" +msgstr "" + +msgid "Static Files" +msgstr "" + +msgid "Syndication" +msgstr "" + +msgid "That page number is not an integer" +msgstr "" + +msgid "That page number is less than 1" +msgstr "" + +msgid "That page contains no results" +msgstr "" + +msgid "Enter a valid value." +msgstr "Дөрес кыйммәтне кертегез." + +msgid "Enter a valid URL." +msgstr "Рөхсәт ителгән URLны кертегез." + +msgid "Enter a valid integer." +msgstr "" + +msgid "Enter a valid email address." +msgstr "Дөрес эл. почта адресны кертегез." + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Кыйммәт хәрефләрдән, сан билгеләреннән, астына сызу билгесеннән яки дефистан " +"торырга тиеш." + +msgid "" +"Enter a valid 'slug' consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "Рөхсәт ителгән IPv4 адресын кертегез." + +msgid "Enter a valid IPv6 address." +msgstr "" + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "" + +msgid "Enter only digits separated by commas." +msgstr "Өтерләр белән бүленгән сан билгеләрен кертегез" + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "" +"Бу кыйммәтнең %(limit_value)s булуын тикшерегез (хәзер ул - %(show_value)s)." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "" +"Бу кыйммәтнең %(limit_value)s карата кечерәк яки тигез булуын тикшерегез." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "" +"Бу кыйммәтнең %(limit_value)s карата зуррак яки тигез булуын тикшерегез." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "" + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" + +#, python-format +msgid "" +"File extension '%(extension)s' is not allowed. Allowed extensions are: " +"'%(allowed_extensions)s'." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "һәм" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "" + +msgid "This field cannot be null." +msgstr "Бу кырның кыйммәте NULL булырга тиеш түгел." + +msgid "This field cannot be blank." +msgstr "Бу кыр буш булырга тиеш түгел." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "Мондый %(field_label)s белән булган %(model_name)s инде бар." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "%(field_type)s типтагы кыр" + +msgid "Integer" +msgstr "Бөтен сан" + +#, python-format +msgid "'%(value)s' value must be an integer." +msgstr "" + +msgid "Big (8 byte) integer" +msgstr "Зур бөтен (8 байт)" + +#, python-format +msgid "'%(value)s' value must be either True or False." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "Логик (True яисә False)" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Юл (күп дигәндә %(max_length)s)" + +msgid "Comma-separated integers" +msgstr "Өтерләр белән бүленгән бөтен саннар" + +#, python-format +msgid "" +"'%(value)s' value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "Дата (вакыт күрсәтмәсе булмаган)" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "Дата (вакыт күрсәтмәсе белән)" + +#, python-format +msgid "'%(value)s' value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "Унарлы вакланма" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in [DD] [HH:[MM:]]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "" + +msgid "Email address" +msgstr "Эл. почта" + +msgid "File path" +msgstr "Файл юлы" + +#, python-format +msgid "'%(value)s' value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "Күчерелүчән өтер белән булган сан" + +msgid "IPv4 address" +msgstr "" + +msgid "IP address" +msgstr "IP-адрес" + +#, python-format +msgid "'%(value)s' value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "Логик (True, False я None)" + +msgid "Positive integer" +msgstr "" + +msgid "Positive small integer" +msgstr "" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "" + +msgid "Small integer" +msgstr "" + +msgid "Text" +msgstr "Текст" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"'%(value)s' value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "Вакыт" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "" + +#, python-format +msgid "'%(value)s' is not a valid UUID." +msgstr "" + +msgid "File" +msgstr "" + +msgid "Image" +msgstr "" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +msgid "Foreign Key (type determined by related field)" +msgstr "Тыш ачкыч (тип бәйле кыр буенча билгеләнгән)" + +msgid "One-to-one relationship" +msgstr "\"Бергә бер\" элемтәсе" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "\"Күпкә куп\" элемтәсе" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr "" + +msgid "This field is required." +msgstr "Мәҗбүри кыр." + +msgid "Enter a whole number." +msgstr "Бөтен сан кертегез." + +msgid "Enter a number." +msgstr "Сан кертегез." + +msgid "Enter a valid date." +msgstr "Рөхсәт ителгән датаны кертегез." + +msgid "Enter a valid time." +msgstr "Рөхсәт ителгән вакытны кертегез." + +msgid "Enter a valid date/time." +msgstr "Рөхсәт ителгән дата һәм вакытны кертегез." + +msgid "Enter a valid duration." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Һишбер файл җибәрелмәгән. Форма кодлавын тикшерегез." + +msgid "No file was submitted." +msgstr "Һишбер файл җибәрелмәгән." + +msgid "The submitted file is empty." +msgstr "Җибәрелгән файл буш." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"Зинһар, җибәрегез файлны яисә бушайту байракчасын билгеләгез, икесен бергә " +"түгел." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Рөхсәт ителгән рәсемне йөкләгез. Сез йөкләгән файл рәсем түгел яисә бозылган." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "" +"Дөрес тәкъдимне сайлагыз. Рөхсәт ителгән кыйммәтләр арасында %(value)s юк. " + +msgid "Enter a list of values." +msgstr "Кыйммәтләр исемлеген кертегез." + +msgid "Enter a complete value." +msgstr "" + +msgid "Enter a valid UUID." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr "" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "" + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "" + +msgid "Order" +msgstr "Тәртип" + +msgid "Delete" +msgstr "Бетерергә" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "Зинһар, %(field)s кырындагы кабатлана торган кыйммәтне төзәтегез." + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" +"Зинһар, %(field)s кырындагы кыйммәтне төзәтегез, ул уникаль булырга тиеш." + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" +"Зинһар, %(field_name)s кырындагы кыйммәтне төзәтегез, ул %(date_field)s " +"кырындагы %(lookup)s өчен уникаль булырга тиеш." + +msgid "Please correct the duplicate values below." +msgstr "Зинһар, астагы кабатлана торган кыйммәтләрне төзәтегез." + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" +"Дөрес тәкъдимне сайлагыз. Рөхсәт ителгән кыйммәтләр арасында сезнең вариант " +"юк." + +#, python-format +msgid "\"%(pk)s\" is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn't be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" + +msgid "Clear" +msgstr "Бушайтырга" + +msgid "Currently" +msgstr "Хәзерге вакытта" + +msgid "Change" +msgstr "Үзгәртергә" + +msgid "Unknown" +msgstr "Билгесез" + +msgid "Yes" +msgstr "Әйе" + +msgid "No" +msgstr "Юк" + +msgid "yes,no,maybe" +msgstr "әйе,юк,бәлки" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d байт" + +#, python-format +msgid "%s KB" +msgstr "%s КБ" + +#, python-format +msgid "%s MB" +msgstr "%s МБ" + +#, python-format +msgid "%s GB" +msgstr "%s ГБ" + +#, python-format +msgid "%s TB" +msgstr "%s ТБ" + +#, python-format +msgid "%s PB" +msgstr "%s ПБ" + +msgid "p.m." +msgstr "т.с." + +msgid "a.m." +msgstr "т.к." + +msgid "PM" +msgstr "ТС" + +msgid "AM" +msgstr "ТК" + +msgid "midnight" +msgstr "төн уртасы" + +msgid "noon" +msgstr "көн уртасы" + +msgid "Monday" +msgstr "Дүшәмбе" + +msgid "Tuesday" +msgstr "Сишәмбе" + +msgid "Wednesday" +msgstr "Чәршәмбе" + +msgid "Thursday" +msgstr "Пәнҗешәмбе" + +msgid "Friday" +msgstr "Җомга" + +msgid "Saturday" +msgstr "Шимбә" + +msgid "Sunday" +msgstr "Якшәмбе" + +msgid "Mon" +msgstr "Дүш" + +msgid "Tue" +msgstr "Сиш" + +msgid "Wed" +msgstr "Чәр" + +msgid "Thu" +msgstr "Пнҗ" + +msgid "Fri" +msgstr "Җом" + +msgid "Sat" +msgstr "Шим" + +msgid "Sun" +msgstr "Якш" + +msgid "January" +msgstr "Гыйнвар" + +msgid "February" +msgstr "Февраль" + +msgid "March" +msgstr "Март" + +msgid "April" +msgstr "Апрель" + +msgid "May" +msgstr "Май" + +msgid "June" +msgstr "Июнь" + +msgid "July" +msgstr "Июль" + +msgid "August" +msgstr "Август" + +msgid "September" +msgstr "Сентябрь" + +msgid "October" +msgstr "Октябрь" + +msgid "November" +msgstr "Ноябрь" + +msgid "December" +msgstr "Декабрь" + +msgid "jan" +msgstr "гый" + +msgid "feb" +msgstr "фев" + +msgid "mar" +msgstr "мар" + +msgid "apr" +msgstr "апр" + +msgid "may" +msgstr "май" + +msgid "jun" +msgstr "июн" + +msgid "jul" +msgstr "июл" + +msgid "aug" +msgstr "авг" + +msgid "sep" +msgstr "сен" + +msgid "oct" +msgstr "окт" + +msgid "nov" +msgstr "ноя" + +msgid "dec" +msgstr "дек" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "Гый." + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "Фев." + +msgctxt "abbrev. month" +msgid "March" +msgstr "Март" + +msgctxt "abbrev. month" +msgid "April" +msgstr "Апрель" + +msgctxt "abbrev. month" +msgid "May" +msgstr "Май" + +msgctxt "abbrev. month" +msgid "June" +msgstr "Июнь" + +msgctxt "abbrev. month" +msgid "July" +msgstr "Июль" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "Авг." + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "Сен." + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "Окт." + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "Ноя." + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "Дек." + +msgctxt "alt. month" +msgid "January" +msgstr "гыйнвар" + +msgctxt "alt. month" +msgid "February" +msgstr "февраль" + +msgctxt "alt. month" +msgid "March" +msgstr "март" + +msgctxt "alt. month" +msgid "April" +msgstr "апрель" + +msgctxt "alt. month" +msgid "May" +msgstr "май" + +msgctxt "alt. month" +msgid "June" +msgstr "июнь" + +msgctxt "alt. month" +msgid "July" +msgstr "июль" + +msgctxt "alt. month" +msgid "August" +msgstr "август" + +msgctxt "alt. month" +msgid "September" +msgstr "сентябрь" + +msgctxt "alt. month" +msgid "October" +msgstr "октябрь" + +msgctxt "alt. month" +msgid "November" +msgstr "ноябрь" + +msgctxt "alt. month" +msgid "December" +msgstr "декабрь" + +msgid "This is not a valid IPv6 address." +msgstr "" + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s..." +msgstr "" + +msgid "or" +msgstr "я" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr "," + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" + +msgid "0 minutes" +msgstr "" + +msgid "Forbidden" +msgstr "" + +msgid "CSRF verification failed. Request aborted." +msgstr "" + +msgid "" +"You are seeing this message because this HTTPS site requires a 'Referer " +"header' to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable 'Referer' headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for 'same-" +"origin' requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the 'Referrer-Policy: no-referrer' header, please remove them. The " +"CSRF protection requires the 'Referer' header to do strict referer checking. " +"If you're concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for 'same-origin' requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "" + +msgid "No year specified" +msgstr "Ел билгеләнмәгән" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "Ай билгеләнмәгән" + +msgid "No day specified" +msgstr "Көн билгеләнмәгән" + +msgid "No week specified" +msgstr "Атна билгеләнмәгән" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "Файдалана алырлык %(verbose_name_plural)s юк" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" +"%(class_name)s.allow_future False булуы сәбәпле, киләсе " +"%(verbose_name_plural)s файдалана алырлык түгел" + +#, python-format +msgid "Invalid date string '%(datestr)s' given format '%(format)s'" +msgstr "Дөрес булмаган дата '%(datestr)s', бирелгән формат '%(format)s'" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "Таләпкә туры килгән %(verbose_name)s табылмаган" + +msgid "Page is not 'last', nor can it be converted to an int." +msgstr "Сәхифә ни соңгы түгел, ни аны бөтен санга әверелдереп булмый" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "" + +#, python-format +msgid "Empty list and '%(class_name)s.allow_empty' is False." +msgstr "Буш исемлек һәм '%(class_name)s.allow_empty' - False" + +msgid "Directory indexes are not allowed here." +msgstr "" + +#, python-format +msgid "\"%(path)s\" does not exist" +msgstr "" + +#, python-format +msgid "Index of %(directory)s" +msgstr "" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to's" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/udm/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/conf/locale/udm/LC_MESSAGES/django.po new file mode 100644 index 0000000..67b600d --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/udm/LC_MESSAGES/django.po @@ -0,0 +1,1171 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-11-15 16:15+0100\n" +"PO-Revision-Date: 2017-11-16 01:13+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Udmurt (http://www.transifex.com/django/django/language/" +"udm/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: udm\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Afrikaans" +msgstr "Африкаанс" + +msgid "Arabic" +msgstr "Араб" + +msgid "Asturian" +msgstr "" + +msgid "Azerbaijani" +msgstr "Азербайджан" + +msgid "Bulgarian" +msgstr "Болгар" + +msgid "Belarusian" +msgstr "Беларус" + +msgid "Bengali" +msgstr "Бенгал" + +msgid "Breton" +msgstr "Бретон" + +msgid "Bosnian" +msgstr "Босниец" + +msgid "Catalan" +msgstr "Каталан" + +msgid "Czech" +msgstr "Чех" + +msgid "Welsh" +msgstr "Уэльс" + +msgid "Danish" +msgstr "Датчан" + +msgid "German" +msgstr "Немец" + +msgid "Lower Sorbian" +msgstr "" + +msgid "Greek" +msgstr "Грек" + +msgid "English" +msgstr "Англи" + +msgid "Australian English" +msgstr "" + +msgid "British English" +msgstr "Британиысь англи" + +msgid "Esperanto" +msgstr "Эсперанто" + +msgid "Spanish" +msgstr "Испан" + +msgid "Argentinian Spanish" +msgstr "Аргентинаысь испан" + +msgid "Colombian Spanish" +msgstr "" + +msgid "Mexican Spanish" +msgstr "Мексикаысь испан" + +msgid "Nicaraguan Spanish" +msgstr "Никарагуаысь испан" + +msgid "Venezuelan Spanish" +msgstr "Венесуэлаысь испан" + +msgid "Estonian" +msgstr "Эстон" + +msgid "Basque" +msgstr "Баск" + +msgid "Persian" +msgstr "Перс" + +msgid "Finnish" +msgstr "Финн" + +msgid "French" +msgstr "Француз" + +msgid "Frisian" +msgstr "Фриз" + +msgid "Irish" +msgstr "Ирланд" + +msgid "Scottish Gaelic" +msgstr "" + +msgid "Galician" +msgstr "Галисий" + +msgid "Hebrew" +msgstr "Иврит" + +msgid "Hindi" +msgstr "Хинди" + +msgid "Croatian" +msgstr "Хорват" + +msgid "Upper Sorbian" +msgstr "" + +msgid "Hungarian" +msgstr "Венгер" + +msgid "Interlingua" +msgstr "Интерлингва" + +msgid "Indonesian" +msgstr "Индонези" + +msgid "Ido" +msgstr "" + +msgid "Icelandic" +msgstr "Исланд" + +msgid "Italian" +msgstr "Итальян" + +msgid "Japanese" +msgstr "Япон" + +msgid "Georgian" +msgstr "Грузин" + +msgid "Kazakh" +msgstr "Казах" + +msgid "Khmer" +msgstr "Кхмер" + +msgid "Kannada" +msgstr "Каннада" + +msgid "Korean" +msgstr "Корей" + +msgid "Luxembourgish" +msgstr "Люксембург" + +msgid "Lithuanian" +msgstr "Литва" + +msgid "Latvian" +msgstr "Латвий" + +msgid "Macedonian" +msgstr "Македон" + +msgid "Malayalam" +msgstr "Малаялам" + +msgid "Mongolian" +msgstr "Монгол" + +msgid "Marathi" +msgstr "" + +msgid "Burmese" +msgstr "" + +msgid "Norwegian Bokmål" +msgstr "" + +msgid "Nepali" +msgstr "Непал" + +msgid "Dutch" +msgstr "Голланд" + +msgid "Norwegian Nynorsk" +msgstr "Норвег (нюнорск)" + +msgid "Ossetic" +msgstr "" + +msgid "Punjabi" +msgstr "Панджаби" + +msgid "Polish" +msgstr "Поляк" + +msgid "Portuguese" +msgstr "Португал" + +msgid "Brazilian Portuguese" +msgstr "Бразилиысь португал" + +msgid "Romanian" +msgstr "Румын" + +msgid "Russian" +msgstr "Ӟуч" + +msgid "Slovak" +msgstr "Словак" + +msgid "Slovenian" +msgstr "Словен" + +msgid "Albanian" +msgstr "Албан" + +msgid "Serbian" +msgstr "Серб" + +msgid "Serbian Latin" +msgstr "Серб (латиницаен)" + +msgid "Swedish" +msgstr "Швед" + +msgid "Swahili" +msgstr "Суахили" + +msgid "Tamil" +msgstr "Тамиль" + +msgid "Telugu" +msgstr "Телугу" + +msgid "Thai" +msgstr "Тай" + +msgid "Turkish" +msgstr "Турок" + +msgid "Tatar" +msgstr "Бигер" + +msgid "Udmurt" +msgstr "Удмурт" + +msgid "Ukrainian" +msgstr "Украин" + +msgid "Urdu" +msgstr "Урду" + +msgid "Vietnamese" +msgstr "Вьетнам" + +msgid "Simplified Chinese" +msgstr "Китай (капчиятэм)" + +msgid "Traditional Chinese" +msgstr "Китай (традици)" + +msgid "Messages" +msgstr "" + +msgid "Site Maps" +msgstr "" + +msgid "Static Files" +msgstr "" + +msgid "Syndication" +msgstr "" + +msgid "That page number is not an integer" +msgstr "" + +msgid "That page number is less than 1" +msgstr "" + +msgid "That page contains no results" +msgstr "" + +msgid "Enter a valid value." +msgstr "Тазэ шонер гожтэ." + +msgid "Enter a valid URL." +msgstr "Шонер URL гожтэ." + +msgid "Enter a valid integer." +msgstr "" + +msgid "Enter a valid email address." +msgstr "Электорн почта адресэз шонер гожтэ" + +#. Translators: "letters" means latin letters: a-z and A-Z. +msgid "" +"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens." +msgstr "" +"Татчын букваос, лыдпусъёс, улӥ гож пусъёс но дефисъёс гинэ гожтыны яра." + +msgid "" +"Enter a valid 'slug' consisting of Unicode letters, numbers, underscores, or " +"hyphens." +msgstr "" + +msgid "Enter a valid IPv4 address." +msgstr "Шонер IPv4-адрес гожтэ." + +msgid "Enter a valid IPv6 address." +msgstr "Шонер IPv6-адрес гожтэ." + +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Шонер IPv4 яке IPv6 адрес гожтэ." + +msgid "Enter only digits separated by commas." +msgstr "Запятойёсын висъям лыдпусъёсты гожтэ" + +#, python-format +msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." +msgstr "Эскере, та %(limit_value)s шуыса. Али татын %(show_value)s." + +#, python-format +msgid "Ensure this value is less than or equal to %(limit_value)s." +msgstr "Талы %(limit_value)s-лэсь бадӟымгес луыны уг яра." + +#, python-format +msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "Талы %(limit_value)s-лэсь ӧжытгес луыны уг яра." + +#, python-format +msgid "" +"Ensure this value has at least %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at least %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" + +#, python-format +msgid "" +"Ensure this value has at most %(limit_value)d character (it has " +"%(show_value)d)." +msgid_plural "" +"Ensure this value has at most %(limit_value)d characters (it has " +"%(show_value)d)." +msgstr[0] "" + +#, python-format +msgid "Ensure that there are no more than %(max)s digit in total." +msgid_plural "Ensure that there are no more than %(max)s digits in total." +msgstr[0] "" + +#, python-format +msgid "Ensure that there are no more than %(max)s decimal place." +msgid_plural "Ensure that there are no more than %(max)s decimal places." +msgstr[0] "" + +#, python-format +msgid "" +"Ensure that there are no more than %(max)s digit before the decimal point." +msgid_plural "" +"Ensure that there are no more than %(max)s digits before the decimal point." +msgstr[0] "" + +#, python-format +msgid "" +"File extension '%(extension)s' is not allowed. Allowed extensions are: " +"'%(allowed_extensions)s'." +msgstr "" + +msgid "Null characters are not allowed." +msgstr "" + +msgid "and" +msgstr "но" + +#, python-format +msgid "%(model_name)s with this %(field_labels)s already exists." +msgstr "" + +#, python-format +msgid "Value %(value)r is not a valid choice." +msgstr "" + +msgid "This field cannot be null." +msgstr "Та NULL луыны уг яра." + +msgid "This field cannot be blank." +msgstr "Та буш луыны уг яра." + +#, python-format +msgid "%(model_name)s with this %(field_label)s already exists." +msgstr "Таӵе %(field_label)s-ен %(model_name)s вань ини." + +#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. +#. Eg: "Title must be unique for pub_date year" +#, python-format +msgid "" +"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "%(field_type)s типъем бусы" + +msgid "Integer" +msgstr "целой" + +#, python-format +msgid "'%(value)s' value must be an integer." +msgstr "" + +msgid "Big (8 byte) integer" +msgstr "Бадӟым (8 байтъем) целой лыд" + +#, python-format +msgid "'%(value)s' value must be either True or False." +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "True яке False" + +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "Чур (%(max_length)s пусозь кузьда)" + +msgid "Comma-separated integers" +msgstr "Запятоен висъям быдэс лыдъёс" + +#, python-format +msgid "" +"'%(value)s' value has an invalid date format. It must be in YYYY-MM-DD " +"format." +msgstr "" + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD) but it is an invalid " +"date." +msgstr "" + +msgid "Date (without time)" +msgstr "Дата (час-минут пусйытэк)" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." +"uuuuuu]][TZ] format." +msgstr "" + +#, python-format +msgid "" +"'%(value)s' value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ]) but it is an invalid date/time." +msgstr "" + +msgid "Date (with time)" +msgstr "Дата но час-минут" + +#, python-format +msgid "'%(value)s' value must be a decimal number." +msgstr "" + +msgid "Decimal number" +msgstr "Десятичной лыд." + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in [DD] [HH:[MM:]]ss[." +"uuuuuu] format." +msgstr "" + +msgid "Duration" +msgstr "" + +msgid "Email address" +msgstr "Электрон почта адрес" + +msgid "File path" +msgstr "Файллэн нимыз" + +#, python-format +msgid "'%(value)s' value must be a float." +msgstr "" + +msgid "Floating point number" +msgstr "Вещественной лыд" + +msgid "IPv4 address" +msgstr "IPv4 адрес" + +msgid "IP address" +msgstr "IP адрес" + +#, python-format +msgid "'%(value)s' value must be either None, True or False." +msgstr "" + +msgid "Boolean (Either True, False or None)" +msgstr "True, False яке None" + +msgid "Positive integer" +msgstr "Целой, нольлэсь бадӟым лыд" + +msgid "Positive small integer" +msgstr "Нольлэсь бадӟым пичи целой лыд" + +#, python-format +msgid "Slug (up to %(max_length)s)" +msgstr "Компьютерной ним (%(max_length)s пусозь кузьда)" + +msgid "Small integer" +msgstr "Пичи целой лыд" + +msgid "Text" +msgstr "Текст" + +#, python-format +msgid "" +"'%(value)s' value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " +"format." +msgstr "" + +#, python-format +msgid "" +"'%(value)s' value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " +"invalid time." +msgstr "" + +msgid "Time" +msgstr "Час-минут" + +msgid "URL" +msgstr "URL" + +msgid "Raw binary data" +msgstr "" + +#, python-format +msgid "'%(value)s' is not a valid UUID." +msgstr "" + +msgid "File" +msgstr "Файл" + +msgid "Image" +msgstr "Суред" + +#, python-format +msgid "%(model)s instance with %(field)s %(value)r does not exist." +msgstr "" + +msgid "Foreign Key (type determined by related field)" +msgstr "Мукет моделен герӟет (тип герӟано бусыя валамын)." + +msgid "One-to-one relationship" +msgstr "Одӥг-одӥг герӟет" + +#, python-format +msgid "%(from)s-%(to)s relationship" +msgstr "" + +#, python-format +msgid "%(from)s-%(to)s relationships" +msgstr "" + +msgid "Many-to-many relationship" +msgstr "Трос-трос герӟет" + +#. Translators: If found as last label character, these punctuation +#. characters will prevent the default label_suffix to be appended to the +#. label +msgid ":?.!" +msgstr "" + +msgid "This field is required." +msgstr "Та клуэ." + +msgid "Enter a whole number." +msgstr "Целой лыд гожтэ." + +msgid "Enter a number." +msgstr "Лыд гожтэ." + +msgid "Enter a valid date." +msgstr "Шонер дата гожтэ." + +msgid "Enter a valid time." +msgstr "Шонер час-минут гожтэ." + +msgid "Enter a valid date/time." +msgstr "Шонер дата но час-минут гожтэ." + +msgid "Enter a valid duration." +msgstr "" + +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Одӥг файл но лэзьымтэ. Формалэсь код." + +msgid "No file was submitted." +msgstr "Файл лэземын ӧвӧл." + +msgid "The submitted file is empty." +msgstr "Лэзем файл буш." + +#, python-format +msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." +msgid_plural "" +"Ensure this filename has at most %(max)d characters (it has %(length)d)." +msgstr[0] "" + +msgid "Please either submit a file or check the clear checkbox, not both." +msgstr "" +"Файл лэзе яке файл ӵушоно шуыса пусъе, огдыръя соиз но, таиз но уг яра." + +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "Суред лэзе. Тӥляд файлды лэзьымтэ яке со суред ӧвӧл." + +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Шонер вариант быръе. %(value)s вариантъёс пӧлын ӧвӧл." + +msgid "Enter a list of values." +msgstr "Список лэзе." + +msgid "Enter a complete value." +msgstr "" + +msgid "Enter a valid UUID." +msgstr "" + +#. Translators: This is the default suffix added to form field labels +msgid ":" +msgstr "" + +#, python-format +msgid "(Hidden field %(name)s) %(error)s" +msgstr "" + +msgid "ManagementForm data is missing or has been tampered with" +msgstr "" + +#, python-format +msgid "Please submit %d or fewer forms." +msgid_plural "Please submit %d or fewer forms." +msgstr[0] "" + +#, python-format +msgid "Please submit %d or more forms." +msgid_plural "Please submit %d or more forms." +msgstr[0] "" + +msgid "Order" +msgstr "Рад" + +msgid "Delete" +msgstr "Ӵушоно" + +#, python-format +msgid "Please correct the duplicate data for %(field)s." +msgstr "" + +#, python-format +msgid "Please correct the duplicate data for %(field)s, which must be unique." +msgstr "" + +#, python-format +msgid "" +"Please correct the duplicate data for %(field_name)s which must be unique " +"for the %(lookup)s in %(date_field)s." +msgstr "" + +msgid "Please correct the duplicate values below." +msgstr "" + +msgid "The inline value did not match the parent instance." +msgstr "" + +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" + +#, python-format +msgid "\"%(pk)s\" is not a valid value." +msgstr "" + +#, python-format +msgid "" +"%(datetime)s couldn't be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." +msgstr "" +"%(datetime)s couldn't be interpreted in time zone %(current_timezone)s; it " +"may be ambiguous or it may not exist." + +msgid "Clear" +msgstr "Буш кароно" + +msgid "Currently" +msgstr "Али" + +msgid "Change" +msgstr "Тупатъяно" + +msgid "Unknown" +msgstr "Тодымтэ" + +msgid "Yes" +msgstr "Бен" + +msgid "No" +msgstr "Ӧвӧл" + +msgid "yes,no,maybe" +msgstr "бен,ӧвӧл,уг тодӥськы" + +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d байт" + +#, python-format +msgid "%s KB" +msgstr "%s КБ" + +#, python-format +msgid "%s MB" +msgstr "%s МБ" + +#, python-format +msgid "%s GB" +msgstr "%s МБ" + +#, python-format +msgid "%s TB" +msgstr "%s ТБ" + +#, python-format +msgid "%s PB" +msgstr "%s ПБ" + +msgid "p.m." +msgstr "лымшор бере" + +msgid "a.m." +msgstr "лымшор азе" + +msgid "PM" +msgstr "лымшор бере" + +msgid "AM" +msgstr "лымшор азе" + +msgid "midnight" +msgstr "уйшор" + +msgid "noon" +msgstr "лымшор" + +msgid "Monday" +msgstr "Вордӥськон" + +msgid "Tuesday" +msgstr "Пуксён" + +msgid "Wednesday" +msgstr "Вирнунал" + +msgid "Thursday" +msgstr "Покчиарня" + +msgid "Friday" +msgstr "Удмуртарня" + +msgid "Saturday" +msgstr "Кӧснунал" + +msgid "Sunday" +msgstr "Арнянунал" + +msgid "Mon" +msgstr "врд" + +msgid "Tue" +msgstr "пкс" + +msgid "Wed" +msgstr "врн" + +msgid "Thu" +msgstr "пкч" + +msgid "Fri" +msgstr "удм" + +msgid "Sat" +msgstr "ксн" + +msgid "Sun" +msgstr "арн" + +msgid "January" +msgstr "толшор" + +msgid "February" +msgstr "тулыспал" + +msgid "March" +msgstr "южтолэзь" + +msgid "April" +msgstr "оштолэзь" + +msgid "May" +msgstr "куартолэзь" + +msgid "June" +msgstr "инвожо" + +msgid "July" +msgstr "пӧсьтолэзь" + +msgid "August" +msgstr "гудырикошкон" + +msgid "September" +msgstr "куарусён" + +msgid "October" +msgstr "коньывуон" + +msgid "November" +msgstr "шуркынмон" + +msgid "December" +msgstr "толсур" + +msgid "jan" +msgstr "тшт" + +msgid "feb" +msgstr "тпт" + +msgid "mar" +msgstr "южт" + +msgid "apr" +msgstr "ошт" + +msgid "may" +msgstr "крт" + +msgid "jun" +msgstr "ивт" + +msgid "jul" +msgstr "пст" + +msgid "aug" +msgstr "гкт" + +msgid "sep" +msgstr "кут" + +msgid "oct" +msgstr "квт" + +msgid "nov" +msgstr "шкт" + +msgid "dec" +msgstr "тст" + +msgctxt "abbrev. month" +msgid "Jan." +msgstr "тшт" + +msgctxt "abbrev. month" +msgid "Feb." +msgstr "тпт" + +msgctxt "abbrev. month" +msgid "March" +msgstr "южт" + +msgctxt "abbrev. month" +msgid "April" +msgstr "ошт" + +msgctxt "abbrev. month" +msgid "May" +msgstr "крт" + +msgctxt "abbrev. month" +msgid "June" +msgstr "ивт" + +msgctxt "abbrev. month" +msgid "July" +msgstr "пст" + +msgctxt "abbrev. month" +msgid "Aug." +msgstr "гкт" + +msgctxt "abbrev. month" +msgid "Sept." +msgstr "кут" + +msgctxt "abbrev. month" +msgid "Oct." +msgstr "квт" + +msgctxt "abbrev. month" +msgid "Nov." +msgstr "шкт" + +msgctxt "abbrev. month" +msgid "Dec." +msgstr "тст" + +msgctxt "alt. month" +msgid "January" +msgstr "толшоре" + +msgctxt "alt. month" +msgid "February" +msgstr "тулыспалэ" + +msgctxt "alt. month" +msgid "March" +msgstr "южтолэзе" + +msgctxt "alt. month" +msgid "April" +msgstr "оштолэзе" + +msgctxt "alt. month" +msgid "May" +msgstr "куартолэзе" + +msgctxt "alt. month" +msgid "June" +msgstr "инвожое" + +msgctxt "alt. month" +msgid "July" +msgstr "пӧсьтолэзе" + +msgctxt "alt. month" +msgid "August" +msgstr "гудырикошконэ" + +msgctxt "alt. month" +msgid "September" +msgstr "куарусёнэ" + +msgctxt "alt. month" +msgid "October" +msgstr "коньывуонэ" + +msgctxt "alt. month" +msgid "November" +msgstr "шуркынмонэ" + +msgctxt "alt. month" +msgid "December" +msgstr "толсуре" + +msgid "This is not a valid IPv6 address." +msgstr "" + +#, python-format +msgctxt "String to return when truncating text" +msgid "%(truncated_text)s..." +msgstr "%(truncated_text)s..." + +msgid "or" +msgstr "яке" + +#. Translators: This string is used as a separator between list elements +msgid ", " +msgstr "," + +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" + +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" + +#, python-format +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" + +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" + +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" + +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" + +msgid "0 minutes" +msgstr "" + +msgid "Forbidden" +msgstr "" + +msgid "CSRF verification failed. Request aborted." +msgstr "" + +msgid "" +"You are seeing this message because this HTTPS site requires a 'Referer " +"header' to be sent by your Web browser, but none was sent. This header is " +"required for security reasons, to ensure that your browser is not being " +"hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable 'Referer' headers, please re-" +"enable them, at least for this site, or for HTTPS connections, or for 'same-" +"origin' requests." +msgstr "" + +msgid "" +"If you are using the tag or " +"including the 'Referrer-Policy: no-referrer' header, please remove them. The " +"CSRF protection requires the 'Referer' header to do strict referer checking. " +"If you're concerned about privacy, use alternatives like for links to third-party sites." +msgstr "" + +msgid "" +"You are seeing this message because this site requires a CSRF cookie when " +"submitting forms. This cookie is required for security reasons, to ensure " +"that your browser is not being hijacked by third parties." +msgstr "" + +msgid "" +"If you have configured your browser to disable cookies, please re-enable " +"them, at least for this site, or for 'same-origin' requests." +msgstr "" + +msgid "More information is available with DEBUG=True." +msgstr "" + +msgid "No year specified" +msgstr "" + +msgid "Date out of range" +msgstr "" + +msgid "No month specified" +msgstr "" + +msgid "No day specified" +msgstr "" + +msgid "No week specified" +msgstr "" + +#, python-format +msgid "No %(verbose_name_plural)s available" +msgstr "" + +#, python-format +msgid "" +"Future %(verbose_name_plural)s not available because %(class_name)s." +"allow_future is False." +msgstr "" + +#, python-format +msgid "Invalid date string '%(datestr)s' given format '%(format)s'" +msgstr "" + +#, python-format +msgid "No %(verbose_name)s found matching the query" +msgstr "" + +msgid "Page is not 'last', nor can it be converted to an int." +msgstr "" + +#, python-format +msgid "Invalid page (%(page_number)s): %(message)s" +msgstr "" + +#, python-format +msgid "Empty list and '%(class_name)s.allow_empty' is False." +msgstr "" + +msgid "Directory indexes are not allowed here." +msgstr "Папкаослэсь пуштроссэс татын учкыны уг яра." + +#, python-format +msgid "\"%(path)s\" does not exist" +msgstr "\"%(path)s\" ӧвӧл" + +#, python-format +msgid "Index of %(directory)s" +msgstr "%(directory)s папкалэн пушторсэз" + +msgid "Django: the Web framework for perfectionists with deadlines." +msgstr "" + +#, python-format +msgid "" +"View release notes for Django %(version)s" +msgstr "" + +msgid "The install worked successfully! Congratulations!" +msgstr "" + +#, python-format +msgid "" +"You are seeing this page because DEBUG=True is in your settings file and you have not configured any " +"URLs." +msgstr "" + +msgid "Django Documentation" +msgstr "" + +msgid "Topics, references, & how-to's" +msgstr "" + +msgid "Tutorial: A Polling App" +msgstr "" + +msgid "Get started with Django" +msgstr "" + +msgid "Django Community" +msgstr "" + +msgid "Connect, get help, or contribute" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/uk/__init__.py b/venv/lib/python3.7/site-packages/django/conf/locale/uk/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/vi/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/conf/locale/vi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..def7a4d4eba1b30f74d859bc132d5b18824ad167 GIT binary patch literal 19452 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/conf/locale/vi/formats.py b/venv/lib/python3.7/site-packages/django/conf/locale/vi/formats.py new file mode 100644 index 0000000..495b6f7 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/locale/vi/formats.py @@ -0,0 +1,21 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date +DATE_FORMAT = r'\N\gà\y d \t\há\n\g n \nă\m Y' +TIME_FORMAT = 'H:i' +DATETIME_FORMAT = r'H:i \N\gà\y d \t\há\n\g n \nă\m Y' +YEAR_MONTH_FORMAT = 'F Y' +MONTH_DAY_FORMAT = 'j F' +SHORT_DATE_FORMAT = 'd-m-Y' +SHORT_DATETIME_FORMAT = 'H:i d-m-Y' +# FIRST_DAY_OF_WEEK = + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +# DATE_INPUT_FORMATS = +# TIME_INPUT_FORMATS = +# DATETIME_INPUT_FORMATS = +DECIMAL_SEPARATOR = ',' +THOUSAND_SEPARATOR = '.' +# NUMBER_GROUPING = diff --git a/venv/lib/python3.7/site-packages/django/conf/project_template/manage.py-tpl b/venv/lib/python3.7/site-packages/django/conf/project_template/manage.py-tpl new file mode 100755 index 0000000..9525fd7 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/project_template/manage.py-tpl @@ -0,0 +1,21 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + os.environ.setdefault('DJANGO_SETTINGS_MODULE', '{{ project_name }}.settings') + try: + from django.core.management import execute_from_command_line + except ImportError as exc: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) from exc + execute_from_command_line(sys.argv) + + +if __name__ == '__main__': + main() diff --git a/venv/lib/python3.7/site-packages/django/conf/urls/__init__.py b/venv/lib/python3.7/site-packages/django/conf/urls/__init__.py new file mode 100644 index 0000000..7bda345 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/conf/urls/__init__.py @@ -0,0 +1,13 @@ +from django.urls import include, re_path +from django.views import defaults + +__all__ = ['handler400', 'handler403', 'handler404', 'handler500', 'include', 'url'] + +handler400 = defaults.bad_request +handler403 = defaults.permission_denied +handler404 = defaults.page_not_found +handler500 = defaults.server_error + + +def url(regex, view, kwargs=None, name=None): + return re_path(regex, view, kwargs, name) diff --git a/venv/lib/python3.7/site-packages/django/contrib/__init__.py b/venv/lib/python3.7/site-packages/django/contrib/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/actions.py b/venv/lib/python3.7/site-packages/django/contrib/admin/actions.py new file mode 100644 index 0000000..1e1c3bd --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/actions.py @@ -0,0 +1,79 @@ +""" +Built-in, globally-available admin actions. +""" + +from django.contrib import messages +from django.contrib.admin import helpers +from django.contrib.admin.utils import model_ngettext +from django.core.exceptions import PermissionDenied +from django.template.response import TemplateResponse +from django.utils.translation import gettext as _, gettext_lazy + + +def delete_selected(modeladmin, request, queryset): + """ + Default action which deletes the selected objects. + + This action first displays a confirmation page which shows all the + deletable objects, or, if the user has no permission one of the related + childs (foreignkeys), a "permission denied" message. + + Next, it deletes all selected objects and redirects back to the change list. + """ + opts = modeladmin.model._meta + app_label = opts.app_label + + # Populate deletable_objects, a data structure of all related objects that + # will also be deleted. + deletable_objects, model_count, perms_needed, protected = modeladmin.get_deleted_objects(queryset, request) + + # The user has already confirmed the deletion. + # Do the deletion and return None to display the change list view again. + if request.POST.get('post') and not protected: + if perms_needed: + raise PermissionDenied + n = queryset.count() + if n: + for obj in queryset: + obj_display = str(obj) + modeladmin.log_deletion(request, obj, obj_display) + modeladmin.delete_queryset(request, queryset) + modeladmin.message_user(request, _("Successfully deleted %(count)d %(items)s.") % { + "count": n, "items": model_ngettext(modeladmin.opts, n) + }, messages.SUCCESS) + # Return None to display the change list page again. + return None + + objects_name = model_ngettext(queryset) + + if perms_needed or protected: + title = _("Cannot delete %(name)s") % {"name": objects_name} + else: + title = _("Are you sure?") + + context = { + **modeladmin.admin_site.each_context(request), + 'title': title, + 'objects_name': str(objects_name), + 'deletable_objects': [deletable_objects], + 'model_count': dict(model_count).items(), + 'queryset': queryset, + 'perms_lacking': perms_needed, + 'protected': protected, + 'opts': opts, + 'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME, + 'media': modeladmin.media, + } + + request.current_app = modeladmin.admin_site.name + + # Display the confirmation page + return TemplateResponse(request, modeladmin.delete_selected_confirmation_template or [ + "admin/%s/%s/delete_selected_confirmation.html" % (app_label, opts.model_name), + "admin/%s/delete_selected_confirmation.html" % app_label, + "admin/delete_selected_confirmation.html" + ], context) + + +delete_selected.allowed_permissions = ('delete',) +delete_selected.short_description = gettext_lazy("Delete selected %(verbose_name_plural)s") diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/checks.py b/venv/lib/python3.7/site-packages/django/contrib/admin/checks.py new file mode 100644 index 0000000..aa54994 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/checks.py @@ -0,0 +1,1134 @@ +import warnings +from itertools import chain + +from django.apps import apps +from django.conf import settings +from django.contrib.admin.utils import ( + NotRelationField, flatten, get_fields_from_path, +) +from django.core import checks +from django.core.exceptions import FieldDoesNotExist +from django.db import models +from django.db.models.constants import LOOKUP_SEP +from django.db.models.expressions import Combinable, F, OrderBy +from django.forms.models import ( + BaseModelForm, BaseModelFormSet, _get_foreign_key, +) +from django.template import engines +from django.template.backends.django import DjangoTemplates +from django.utils.deprecation import RemovedInDjango30Warning +from django.utils.inspect import get_func_args +from django.utils.module_loading import import_string + + +def _issubclass(cls, classinfo): + """ + issubclass() variant that doesn't raise an exception if cls isn't a + class. + """ + try: + return issubclass(cls, classinfo) + except TypeError: + return False + + +def _contains_subclass(class_path, candidate_paths): + """ + Return whether or not a dotted class path (or a subclass of that class) is + found in a list of candidate paths. + """ + cls = import_string(class_path) + for path in candidate_paths: + try: + candidate_cls = import_string(path) + except ImportError: + # ImportErrors are raised elsewhere. + continue + if _issubclass(candidate_cls, cls): + return True + return False + + +def check_admin_app(app_configs, **kwargs): + from django.contrib.admin.sites import all_sites + errors = [] + for site in all_sites: + errors.extend(site.check(app_configs)) + return errors + + +def check_dependencies(**kwargs): + """ + Check that the admin's dependencies are correctly installed. + """ + if not apps.is_installed('django.contrib.admin'): + return [] + errors = [] + app_dependencies = ( + ('django.contrib.contenttypes', 401), + ('django.contrib.auth', 405), + ('django.contrib.messages', 406), + ) + for app_name, error_code in app_dependencies: + if not apps.is_installed(app_name): + errors.append(checks.Error( + "'%s' must be in INSTALLED_APPS in order to use the admin " + "application." % app_name, + id='admin.E%d' % error_code, + )) + for engine in engines.all(): + if isinstance(engine, DjangoTemplates): + django_templates_instance = engine.engine + break + else: + django_templates_instance = None + if not django_templates_instance: + errors.append(checks.Error( + "A 'django.template.backends.django.DjangoTemplates' instance " + "must be configured in TEMPLATES in order to use the admin " + "application.", + id='admin.E403', + )) + else: + if ('django.contrib.auth.context_processors.auth' + not in django_templates_instance.context_processors and + _contains_subclass('django.contrib.auth.backends.ModelBackend', settings.AUTHENTICATION_BACKENDS)): + errors.append(checks.Error( + "'django.contrib.auth.context_processors.auth' must be " + "enabled in DjangoTemplates (TEMPLATES) if using the default " + "auth backend in order to use the admin application.", + id='admin.E402', + )) + if ('django.contrib.messages.context_processors.messages' + not in django_templates_instance.context_processors): + errors.append(checks.Error( + "'django.contrib.messages.context_processors.messages' must " + "be enabled in DjangoTemplates (TEMPLATES) in order to use " + "the admin application.", + id='admin.E404', + )) + + if not _contains_subclass('django.contrib.auth.middleware.AuthenticationMiddleware', settings.MIDDLEWARE): + errors.append(checks.Error( + "'django.contrib.auth.middleware.AuthenticationMiddleware' must " + "be in MIDDLEWARE in order to use the admin application.", + id='admin.E408', + )) + if not _contains_subclass('django.contrib.messages.middleware.MessageMiddleware', settings.MIDDLEWARE): + errors.append(checks.Error( + "'django.contrib.messages.middleware.MessageMiddleware' must " + "be in MIDDLEWARE in order to use the admin application.", + id='admin.E409', + )) + if not _contains_subclass('django.contrib.sessions.middleware.SessionMiddleware', settings.MIDDLEWARE): + errors.append(checks.Error( + "'django.contrib.sessions.middleware.SessionMiddleware' must " + "be in MIDDLEWARE in order to use the admin application.", + id='admin.E410', + )) + return errors + + +class BaseModelAdminChecks: + + def check(self, admin_obj, **kwargs): + return [ + *self._check_autocomplete_fields(admin_obj), + *self._check_raw_id_fields(admin_obj), + *self._check_fields(admin_obj), + *self._check_fieldsets(admin_obj), + *self._check_exclude(admin_obj), + *self._check_form(admin_obj), + *self._check_filter_vertical(admin_obj), + *self._check_filter_horizontal(admin_obj), + *self._check_radio_fields(admin_obj), + *self._check_prepopulated_fields(admin_obj), + *self._check_view_on_site_url(admin_obj), + *self._check_ordering(admin_obj), + *self._check_readonly_fields(admin_obj), + ] + + def _check_autocomplete_fields(self, obj): + """ + Check that `autocomplete_fields` is a list or tuple of model fields. + """ + if not isinstance(obj.autocomplete_fields, (list, tuple)): + return must_be('a list or tuple', option='autocomplete_fields', obj=obj, id='admin.E036') + else: + return list(chain.from_iterable([ + self._check_autocomplete_fields_item(obj, field_name, 'autocomplete_fields[%d]' % index) + for index, field_name in enumerate(obj.autocomplete_fields) + ])) + + def _check_autocomplete_fields_item(self, obj, field_name, label): + """ + Check that an item in `autocomplete_fields` is a ForeignKey or a + ManyToManyField and that the item has a related ModelAdmin with + search_fields defined. + """ + try: + field = obj.model._meta.get_field(field_name) + except FieldDoesNotExist: + return refer_to_missing_field(field=field_name, option=label, obj=obj, id='admin.E037') + else: + if not field.many_to_many and not isinstance(field, models.ForeignKey): + return must_be( + 'a foreign key or a many-to-many field', + option=label, obj=obj, id='admin.E038' + ) + related_admin = obj.admin_site._registry.get(field.remote_field.model) + if related_admin is None: + return [ + checks.Error( + 'An admin for model "%s" has to be registered ' + 'to be referenced by %s.autocomplete_fields.' % ( + field.remote_field.model.__name__, + type(obj).__name__, + ), + obj=obj.__class__, + id='admin.E039', + ) + ] + elif not related_admin.search_fields: + return [ + checks.Error( + '%s must define "search_fields", because it\'s ' + 'referenced by %s.autocomplete_fields.' % ( + related_admin.__class__.__name__, + type(obj).__name__, + ), + obj=obj.__class__, + id='admin.E040', + ) + ] + return [] + + def _check_raw_id_fields(self, obj): + """ Check that `raw_id_fields` only contains field names that are listed + on the model. """ + + if not isinstance(obj.raw_id_fields, (list, tuple)): + return must_be('a list or tuple', option='raw_id_fields', obj=obj, id='admin.E001') + else: + return list(chain.from_iterable( + self._check_raw_id_fields_item(obj, field_name, 'raw_id_fields[%d]' % index) + for index, field_name in enumerate(obj.raw_id_fields) + )) + + def _check_raw_id_fields_item(self, obj, field_name, label): + """ Check an item of `raw_id_fields`, i.e. check that field named + `field_name` exists in model `model` and is a ForeignKey or a + ManyToManyField. """ + + try: + field = obj.model._meta.get_field(field_name) + except FieldDoesNotExist: + return refer_to_missing_field(field=field_name, option=label, obj=obj, id='admin.E002') + else: + if not field.many_to_many and not isinstance(field, models.ForeignKey): + return must_be('a foreign key or a many-to-many field', option=label, obj=obj, id='admin.E003') + else: + return [] + + def _check_fields(self, obj): + """ Check that `fields` only refer to existing fields, doesn't contain + duplicates. Check if at most one of `fields` and `fieldsets` is defined. + """ + + if obj.fields is None: + return [] + elif not isinstance(obj.fields, (list, tuple)): + return must_be('a list or tuple', option='fields', obj=obj, id='admin.E004') + elif obj.fieldsets: + return [ + checks.Error( + "Both 'fieldsets' and 'fields' are specified.", + obj=obj.__class__, + id='admin.E005', + ) + ] + fields = flatten(obj.fields) + if len(fields) != len(set(fields)): + return [ + checks.Error( + "The value of 'fields' contains duplicate field(s).", + obj=obj.__class__, + id='admin.E006', + ) + ] + + return list(chain.from_iterable( + self._check_field_spec(obj, field_name, 'fields') + for field_name in obj.fields + )) + + def _check_fieldsets(self, obj): + """ Check that fieldsets is properly formatted and doesn't contain + duplicates. """ + + if obj.fieldsets is None: + return [] + elif not isinstance(obj.fieldsets, (list, tuple)): + return must_be('a list or tuple', option='fieldsets', obj=obj, id='admin.E007') + else: + seen_fields = [] + return list(chain.from_iterable( + self._check_fieldsets_item(obj, fieldset, 'fieldsets[%d]' % index, seen_fields) + for index, fieldset in enumerate(obj.fieldsets) + )) + + def _check_fieldsets_item(self, obj, fieldset, label, seen_fields): + """ Check an item of `fieldsets`, i.e. check that this is a pair of a + set name and a dictionary containing "fields" key. """ + + if not isinstance(fieldset, (list, tuple)): + return must_be('a list or tuple', option=label, obj=obj, id='admin.E008') + elif len(fieldset) != 2: + return must_be('of length 2', option=label, obj=obj, id='admin.E009') + elif not isinstance(fieldset[1], dict): + return must_be('a dictionary', option='%s[1]' % label, obj=obj, id='admin.E010') + elif 'fields' not in fieldset[1]: + return [ + checks.Error( + "The value of '%s[1]' must contain the key 'fields'." % label, + obj=obj.__class__, + id='admin.E011', + ) + ] + elif not isinstance(fieldset[1]['fields'], (list, tuple)): + return must_be('a list or tuple', option="%s[1]['fields']" % label, obj=obj, id='admin.E008') + + seen_fields.extend(flatten(fieldset[1]['fields'])) + if len(seen_fields) != len(set(seen_fields)): + return [ + checks.Error( + "There are duplicate field(s) in '%s[1]'." % label, + obj=obj.__class__, + id='admin.E012', + ) + ] + return list(chain.from_iterable( + self._check_field_spec(obj, fieldset_fields, '%s[1]["fields"]' % label) + for fieldset_fields in fieldset[1]['fields'] + )) + + def _check_field_spec(self, obj, fields, label): + """ `fields` should be an item of `fields` or an item of + fieldset[1]['fields'] for any `fieldset` in `fieldsets`. It should be a + field name or a tuple of field names. """ + + if isinstance(fields, tuple): + return list(chain.from_iterable( + self._check_field_spec_item(obj, field_name, "%s[%d]" % (label, index)) + for index, field_name in enumerate(fields) + )) + else: + return self._check_field_spec_item(obj, fields, label) + + def _check_field_spec_item(self, obj, field_name, label): + if field_name in obj.readonly_fields: + # Stuff can be put in fields that isn't actually a model field if + # it's in readonly_fields, readonly_fields will handle the + # validation of such things. + return [] + else: + try: + field = obj.model._meta.get_field(field_name) + except FieldDoesNotExist: + # If we can't find a field on the model that matches, it could + # be an extra field on the form. + return [] + else: + if (isinstance(field, models.ManyToManyField) and + not field.remote_field.through._meta.auto_created): + return [ + checks.Error( + "The value of '%s' cannot include the ManyToManyField '%s', " + "because that field manually specifies a relationship model." + % (label, field_name), + obj=obj.__class__, + id='admin.E013', + ) + ] + else: + return [] + + def _check_exclude(self, obj): + """ Check that exclude is a sequence without duplicates. """ + + if obj.exclude is None: # default value is None + return [] + elif not isinstance(obj.exclude, (list, tuple)): + return must_be('a list or tuple', option='exclude', obj=obj, id='admin.E014') + elif len(obj.exclude) > len(set(obj.exclude)): + return [ + checks.Error( + "The value of 'exclude' contains duplicate field(s).", + obj=obj.__class__, + id='admin.E015', + ) + ] + else: + return [] + + def _check_form(self, obj): + """ Check that form subclasses BaseModelForm. """ + if not _issubclass(obj.form, BaseModelForm): + return must_inherit_from(parent='BaseModelForm', option='form', + obj=obj, id='admin.E016') + else: + return [] + + def _check_filter_vertical(self, obj): + """ Check that filter_vertical is a sequence of field names. """ + if not isinstance(obj.filter_vertical, (list, tuple)): + return must_be('a list or tuple', option='filter_vertical', obj=obj, id='admin.E017') + else: + return list(chain.from_iterable( + self._check_filter_item(obj, field_name, "filter_vertical[%d]" % index) + for index, field_name in enumerate(obj.filter_vertical) + )) + + def _check_filter_horizontal(self, obj): + """ Check that filter_horizontal is a sequence of field names. """ + if not isinstance(obj.filter_horizontal, (list, tuple)): + return must_be('a list or tuple', option='filter_horizontal', obj=obj, id='admin.E018') + else: + return list(chain.from_iterable( + self._check_filter_item(obj, field_name, "filter_horizontal[%d]" % index) + for index, field_name in enumerate(obj.filter_horizontal) + )) + + def _check_filter_item(self, obj, field_name, label): + """ Check one item of `filter_vertical` or `filter_horizontal`, i.e. + check that given field exists and is a ManyToManyField. """ + + try: + field = obj.model._meta.get_field(field_name) + except FieldDoesNotExist: + return refer_to_missing_field(field=field_name, option=label, obj=obj, id='admin.E019') + else: + if not field.many_to_many: + return must_be('a many-to-many field', option=label, obj=obj, id='admin.E020') + else: + return [] + + def _check_radio_fields(self, obj): + """ Check that `radio_fields` is a dictionary. """ + if not isinstance(obj.radio_fields, dict): + return must_be('a dictionary', option='radio_fields', obj=obj, id='admin.E021') + else: + return list(chain.from_iterable( + self._check_radio_fields_key(obj, field_name, 'radio_fields') + + self._check_radio_fields_value(obj, val, 'radio_fields["%s"]' % field_name) + for field_name, val in obj.radio_fields.items() + )) + + def _check_radio_fields_key(self, obj, field_name, label): + """ Check that a key of `radio_fields` dictionary is name of existing + field and that the field is a ForeignKey or has `choices` defined. """ + + try: + field = obj.model._meta.get_field(field_name) + except FieldDoesNotExist: + return refer_to_missing_field(field=field_name, option=label, obj=obj, id='admin.E022') + else: + if not (isinstance(field, models.ForeignKey) or field.choices): + return [ + checks.Error( + "The value of '%s' refers to '%s', which is not an " + "instance of ForeignKey, and does not have a 'choices' definition." % ( + label, field_name + ), + obj=obj.__class__, + id='admin.E023', + ) + ] + else: + return [] + + def _check_radio_fields_value(self, obj, val, label): + """ Check type of a value of `radio_fields` dictionary. """ + + from django.contrib.admin.options import HORIZONTAL, VERTICAL + + if val not in (HORIZONTAL, VERTICAL): + return [ + checks.Error( + "The value of '%s' must be either admin.HORIZONTAL or admin.VERTICAL." % label, + obj=obj.__class__, + id='admin.E024', + ) + ] + else: + return [] + + def _check_view_on_site_url(self, obj): + if not callable(obj.view_on_site) and not isinstance(obj.view_on_site, bool): + return [ + checks.Error( + "The value of 'view_on_site' must be a callable or a boolean value.", + obj=obj.__class__, + id='admin.E025', + ) + ] + else: + return [] + + def _check_prepopulated_fields(self, obj): + """ Check that `prepopulated_fields` is a dictionary containing allowed + field types. """ + if not isinstance(obj.prepopulated_fields, dict): + return must_be('a dictionary', option='prepopulated_fields', obj=obj, id='admin.E026') + else: + return list(chain.from_iterable( + self._check_prepopulated_fields_key(obj, field_name, 'prepopulated_fields') + + self._check_prepopulated_fields_value(obj, val, 'prepopulated_fields["%s"]' % field_name) + for field_name, val in obj.prepopulated_fields.items() + )) + + def _check_prepopulated_fields_key(self, obj, field_name, label): + """ Check a key of `prepopulated_fields` dictionary, i.e. check that it + is a name of existing field and the field is one of the allowed types. + """ + + try: + field = obj.model._meta.get_field(field_name) + except FieldDoesNotExist: + return refer_to_missing_field(field=field_name, option=label, obj=obj, id='admin.E027') + else: + if isinstance(field, (models.DateTimeField, models.ForeignKey, models.ManyToManyField)): + return [ + checks.Error( + "The value of '%s' refers to '%s', which must not be a DateTimeField, " + "a ForeignKey, a OneToOneField, or a ManyToManyField." % (label, field_name), + obj=obj.__class__, + id='admin.E028', + ) + ] + else: + return [] + + def _check_prepopulated_fields_value(self, obj, val, label): + """ Check a value of `prepopulated_fields` dictionary, i.e. it's an + iterable of existing fields. """ + + if not isinstance(val, (list, tuple)): + return must_be('a list or tuple', option=label, obj=obj, id='admin.E029') + else: + return list(chain.from_iterable( + self._check_prepopulated_fields_value_item(obj, subfield_name, "%s[%r]" % (label, index)) + for index, subfield_name in enumerate(val) + )) + + def _check_prepopulated_fields_value_item(self, obj, field_name, label): + """ For `prepopulated_fields` equal to {"slug": ("title",)}, + `field_name` is "title". """ + + try: + obj.model._meta.get_field(field_name) + except FieldDoesNotExist: + return refer_to_missing_field(field=field_name, option=label, obj=obj, id='admin.E030') + else: + return [] + + def _check_ordering(self, obj): + """ Check that ordering refers to existing fields or is random. """ + + # ordering = None + if obj.ordering is None: # The default value is None + return [] + elif not isinstance(obj.ordering, (list, tuple)): + return must_be('a list or tuple', option='ordering', obj=obj, id='admin.E031') + else: + return list(chain.from_iterable( + self._check_ordering_item(obj, field_name, 'ordering[%d]' % index) + for index, field_name in enumerate(obj.ordering) + )) + + def _check_ordering_item(self, obj, field_name, label): + """ Check that `ordering` refers to existing fields. """ + if isinstance(field_name, (Combinable, OrderBy)): + if not isinstance(field_name, OrderBy): + field_name = field_name.asc() + if isinstance(field_name.expression, F): + field_name = field_name.expression.name + else: + return [] + if field_name == '?' and len(obj.ordering) != 1: + return [ + checks.Error( + "The value of 'ordering' has the random ordering marker '?', " + "but contains other fields as well.", + hint='Either remove the "?", or remove the other fields.', + obj=obj.__class__, + id='admin.E032', + ) + ] + elif field_name == '?': + return [] + elif LOOKUP_SEP in field_name: + # Skip ordering in the format field1__field2 (FIXME: checking + # this format would be nice, but it's a little fiddly). + return [] + else: + if field_name.startswith('-'): + field_name = field_name[1:] + if field_name == 'pk': + return [] + try: + obj.model._meta.get_field(field_name) + except FieldDoesNotExist: + return refer_to_missing_field(field=field_name, option=label, obj=obj, id='admin.E033') + else: + return [] + + def _check_readonly_fields(self, obj): + """ Check that readonly_fields refers to proper attribute or field. """ + + if obj.readonly_fields == (): + return [] + elif not isinstance(obj.readonly_fields, (list, tuple)): + return must_be('a list or tuple', option='readonly_fields', obj=obj, id='admin.E034') + else: + return list(chain.from_iterable( + self._check_readonly_fields_item(obj, field_name, "readonly_fields[%d]" % index) + for index, field_name in enumerate(obj.readonly_fields) + )) + + def _check_readonly_fields_item(self, obj, field_name, label): + if callable(field_name): + return [] + elif hasattr(obj, field_name): + return [] + elif hasattr(obj.model, field_name): + return [] + else: + try: + obj.model._meta.get_field(field_name) + except FieldDoesNotExist: + return [ + checks.Error( + "The value of '%s' is not a callable, an attribute of '%s', or an attribute of '%s.%s'." % ( + label, obj.__class__.__name__, obj.model._meta.app_label, obj.model._meta.object_name + ), + obj=obj.__class__, + id='admin.E035', + ) + ] + else: + return [] + + +class ModelAdminChecks(BaseModelAdminChecks): + + def check(self, admin_obj, **kwargs): + return [ + *super().check(admin_obj), + *self._check_save_as(admin_obj), + *self._check_save_on_top(admin_obj), + *self._check_inlines(admin_obj), + *self._check_list_display(admin_obj), + *self._check_list_display_links(admin_obj), + *self._check_list_filter(admin_obj), + *self._check_list_select_related(admin_obj), + *self._check_list_per_page(admin_obj), + *self._check_list_max_show_all(admin_obj), + *self._check_list_editable(admin_obj), + *self._check_search_fields(admin_obj), + *self._check_date_hierarchy(admin_obj), + *self._check_action_permission_methods(admin_obj), + *self._check_actions_uniqueness(admin_obj), + ] + + def _check_save_as(self, obj): + """ Check save_as is a boolean. """ + + if not isinstance(obj.save_as, bool): + return must_be('a boolean', option='save_as', + obj=obj, id='admin.E101') + else: + return [] + + def _check_save_on_top(self, obj): + """ Check save_on_top is a boolean. """ + + if not isinstance(obj.save_on_top, bool): + return must_be('a boolean', option='save_on_top', + obj=obj, id='admin.E102') + else: + return [] + + def _check_inlines(self, obj): + """ Check all inline model admin classes. """ + + if not isinstance(obj.inlines, (list, tuple)): + return must_be('a list or tuple', option='inlines', obj=obj, id='admin.E103') + else: + return list(chain.from_iterable( + self._check_inlines_item(obj, item, "inlines[%d]" % index) + for index, item in enumerate(obj.inlines) + )) + + def _check_inlines_item(self, obj, inline, label): + """ Check one inline model admin. """ + try: + inline_label = inline.__module__ + '.' + inline.__name__ + except AttributeError: + return [ + checks.Error( + "'%s' must inherit from 'InlineModelAdmin'." % obj, + obj=obj.__class__, + id='admin.E104', + ) + ] + + from django.contrib.admin.options import InlineModelAdmin + + if not _issubclass(inline, InlineModelAdmin): + return [ + checks.Error( + "'%s' must inherit from 'InlineModelAdmin'." % inline_label, + obj=obj.__class__, + id='admin.E104', + ) + ] + elif not inline.model: + return [ + checks.Error( + "'%s' must have a 'model' attribute." % inline_label, + obj=obj.__class__, + id='admin.E105', + ) + ] + elif not _issubclass(inline.model, models.Model): + return must_be('a Model', option='%s.model' % inline_label, obj=obj, id='admin.E106') + else: + return inline(obj.model, obj.admin_site).check() + + def _check_list_display(self, obj): + """ Check that list_display only contains fields or usable attributes. + """ + + if not isinstance(obj.list_display, (list, tuple)): + return must_be('a list or tuple', option='list_display', obj=obj, id='admin.E107') + else: + return list(chain.from_iterable( + self._check_list_display_item(obj, item, "list_display[%d]" % index) + for index, item in enumerate(obj.list_display) + )) + + def _check_list_display_item(self, obj, item, label): + if callable(item): + return [] + elif hasattr(obj, item): + return [] + elif hasattr(obj.model, item): + try: + field = obj.model._meta.get_field(item) + except FieldDoesNotExist: + return [] + else: + if isinstance(field, models.ManyToManyField): + return [ + checks.Error( + "The value of '%s' must not be a ManyToManyField." % label, + obj=obj.__class__, + id='admin.E109', + ) + ] + return [] + else: + return [ + checks.Error( + "The value of '%s' refers to '%s', which is not a callable, " + "an attribute of '%s', or an attribute or method on '%s.%s'." % ( + label, item, obj.__class__.__name__, + obj.model._meta.app_label, obj.model._meta.object_name, + ), + obj=obj.__class__, + id='admin.E108', + ) + ] + + def _check_list_display_links(self, obj): + """ Check that list_display_links is a unique subset of list_display. + """ + from django.contrib.admin.options import ModelAdmin + + if obj.list_display_links is None: + return [] + elif not isinstance(obj.list_display_links, (list, tuple)): + return must_be('a list, a tuple, or None', option='list_display_links', obj=obj, id='admin.E110') + # Check only if ModelAdmin.get_list_display() isn't overridden. + elif obj.get_list_display.__func__ is ModelAdmin.get_list_display: + return list(chain.from_iterable( + self._check_list_display_links_item(obj, field_name, "list_display_links[%d]" % index) + for index, field_name in enumerate(obj.list_display_links) + )) + return [] + + def _check_list_display_links_item(self, obj, field_name, label): + if field_name not in obj.list_display: + return [ + checks.Error( + "The value of '%s' refers to '%s', which is not defined in 'list_display'." % ( + label, field_name + ), + obj=obj.__class__, + id='admin.E111', + ) + ] + else: + return [] + + def _check_list_filter(self, obj): + if not isinstance(obj.list_filter, (list, tuple)): + return must_be('a list or tuple', option='list_filter', obj=obj, id='admin.E112') + else: + return list(chain.from_iterable( + self._check_list_filter_item(obj, item, "list_filter[%d]" % index) + for index, item in enumerate(obj.list_filter) + )) + + def _check_list_filter_item(self, obj, item, label): + """ + Check one item of `list_filter`, i.e. check if it is one of three options: + 1. 'field' -- a basic field filter, possibly w/ relationships (e.g. + 'field__rel') + 2. ('field', SomeFieldListFilter) - a field-based list filter class + 3. SomeListFilter - a non-field list filter class + """ + + from django.contrib.admin import ListFilter, FieldListFilter + + if callable(item) and not isinstance(item, models.Field): + # If item is option 3, it should be a ListFilter... + if not _issubclass(item, ListFilter): + return must_inherit_from(parent='ListFilter', option=label, + obj=obj, id='admin.E113') + # ... but not a FieldListFilter. + elif issubclass(item, FieldListFilter): + return [ + checks.Error( + "The value of '%s' must not inherit from 'FieldListFilter'." % label, + obj=obj.__class__, + id='admin.E114', + ) + ] + else: + return [] + elif isinstance(item, (tuple, list)): + # item is option #2 + field, list_filter_class = item + if not _issubclass(list_filter_class, FieldListFilter): + return must_inherit_from(parent='FieldListFilter', option='%s[1]' % label, obj=obj, id='admin.E115') + else: + return [] + else: + # item is option #1 + field = item + + # Validate the field string + try: + get_fields_from_path(obj.model, field) + except (NotRelationField, FieldDoesNotExist): + return [ + checks.Error( + "The value of '%s' refers to '%s', which does not refer to a Field." % (label, field), + obj=obj.__class__, + id='admin.E116', + ) + ] + else: + return [] + + def _check_list_select_related(self, obj): + """ Check that list_select_related is a boolean, a list or a tuple. """ + + if not isinstance(obj.list_select_related, (bool, list, tuple)): + return must_be('a boolean, tuple or list', option='list_select_related', obj=obj, id='admin.E117') + else: + return [] + + def _check_list_per_page(self, obj): + """ Check that list_per_page is an integer. """ + + if not isinstance(obj.list_per_page, int): + return must_be('an integer', option='list_per_page', obj=obj, id='admin.E118') + else: + return [] + + def _check_list_max_show_all(self, obj): + """ Check that list_max_show_all is an integer. """ + + if not isinstance(obj.list_max_show_all, int): + return must_be('an integer', option='list_max_show_all', obj=obj, id='admin.E119') + else: + return [] + + def _check_list_editable(self, obj): + """ Check that list_editable is a sequence of editable fields from + list_display without first element. """ + + if not isinstance(obj.list_editable, (list, tuple)): + return must_be('a list or tuple', option='list_editable', obj=obj, id='admin.E120') + else: + return list(chain.from_iterable( + self._check_list_editable_item(obj, item, "list_editable[%d]" % index) + for index, item in enumerate(obj.list_editable) + )) + + def _check_list_editable_item(self, obj, field_name, label): + try: + field = obj.model._meta.get_field(field_name) + except FieldDoesNotExist: + return refer_to_missing_field(field=field_name, option=label, obj=obj, id='admin.E121') + else: + if field_name not in obj.list_display: + return [ + checks.Error( + "The value of '%s' refers to '%s', which is not " + "contained in 'list_display'." % (label, field_name), + obj=obj.__class__, + id='admin.E122', + ) + ] + elif obj.list_display_links and field_name in obj.list_display_links: + return [ + checks.Error( + "The value of '%s' cannot be in both 'list_editable' and 'list_display_links'." % field_name, + obj=obj.__class__, + id='admin.E123', + ) + ] + # If list_display[0] is in list_editable, check that + # list_display_links is set. See #22792 and #26229 for use cases. + elif (obj.list_display[0] == field_name and not obj.list_display_links and + obj.list_display_links is not None): + return [ + checks.Error( + "The value of '%s' refers to the first field in 'list_display' ('%s'), " + "which cannot be used unless 'list_display_links' is set." % ( + label, obj.list_display[0] + ), + obj=obj.__class__, + id='admin.E124', + ) + ] + elif not field.editable: + return [ + checks.Error( + "The value of '%s' refers to '%s', which is not editable through the admin." % ( + label, field_name + ), + obj=obj.__class__, + id='admin.E125', + ) + ] + else: + return [] + + def _check_search_fields(self, obj): + """ Check search_fields is a sequence. """ + + if not isinstance(obj.search_fields, (list, tuple)): + return must_be('a list or tuple', option='search_fields', obj=obj, id='admin.E126') + else: + return [] + + def _check_date_hierarchy(self, obj): + """ Check that date_hierarchy refers to DateField or DateTimeField. """ + + if obj.date_hierarchy is None: + return [] + else: + try: + field = get_fields_from_path(obj.model, obj.date_hierarchy)[-1] + except (NotRelationField, FieldDoesNotExist): + return [ + checks.Error( + "The value of 'date_hierarchy' refers to '%s', which " + "does not refer to a Field." % obj.date_hierarchy, + obj=obj.__class__, + id='admin.E127', + ) + ] + else: + if not isinstance(field, (models.DateField, models.DateTimeField)): + return must_be('a DateField or DateTimeField', option='date_hierarchy', obj=obj, id='admin.E128') + else: + return [] + + def _check_action_permission_methods(self, obj): + """ + Actions with an allowed_permission attribute require the ModelAdmin to + implement a has__permission() method for each permission. + """ + actions = obj._get_base_actions() + errors = [] + for func, name, _ in actions: + if not hasattr(func, 'allowed_permissions'): + continue + for permission in func.allowed_permissions: + method_name = 'has_%s_permission' % permission + if not hasattr(obj, method_name): + errors.append( + checks.Error( + '%s must define a %s() method for the %s action.' % ( + obj.__class__.__name__, + method_name, + func.__name__, + ), + obj=obj.__class__, + id='admin.E129', + ) + ) + return errors + + def _check_actions_uniqueness(self, obj): + """Check that every action has a unique __name__.""" + names = [name for _, name, _ in obj._get_base_actions()] + if len(names) != len(set(names)): + return [checks.Error( + '__name__ attributes of actions defined in %s must be ' + 'unique.' % obj.__class__, + obj=obj.__class__, + id='admin.E130', + )] + return [] + + +class InlineModelAdminChecks(BaseModelAdminChecks): + + def check(self, inline_obj, **kwargs): + self._check_has_add_permission(inline_obj) + parent_model = inline_obj.parent_model + return [ + *super().check(inline_obj), + *self._check_relation(inline_obj, parent_model), + *self._check_exclude_of_parent_model(inline_obj, parent_model), + *self._check_extra(inline_obj), + *self._check_max_num(inline_obj), + *self._check_min_num(inline_obj), + *self._check_formset(inline_obj), + ] + + def _check_exclude_of_parent_model(self, obj, parent_model): + # Do not perform more specific checks if the base checks result in an + # error. + errors = super()._check_exclude(obj) + if errors: + return [] + + # Skip if `fk_name` is invalid. + if self._check_relation(obj, parent_model): + return [] + + if obj.exclude is None: + return [] + + fk = _get_foreign_key(parent_model, obj.model, fk_name=obj.fk_name) + if fk.name in obj.exclude: + return [ + checks.Error( + "Cannot exclude the field '%s', because it is the foreign key " + "to the parent model '%s.%s'." % ( + fk.name, parent_model._meta.app_label, parent_model._meta.object_name + ), + obj=obj.__class__, + id='admin.E201', + ) + ] + else: + return [] + + def _check_relation(self, obj, parent_model): + try: + _get_foreign_key(parent_model, obj.model, fk_name=obj.fk_name) + except ValueError as e: + return [checks.Error(e.args[0], obj=obj.__class__, id='admin.E202')] + else: + return [] + + def _check_extra(self, obj): + """ Check that extra is an integer. """ + + if not isinstance(obj.extra, int): + return must_be('an integer', option='extra', obj=obj, id='admin.E203') + else: + return [] + + def _check_max_num(self, obj): + """ Check that max_num is an integer. """ + + if obj.max_num is None: + return [] + elif not isinstance(obj.max_num, int): + return must_be('an integer', option='max_num', obj=obj, id='admin.E204') + else: + return [] + + def _check_min_num(self, obj): + """ Check that min_num is an integer. """ + + if obj.min_num is None: + return [] + elif not isinstance(obj.min_num, int): + return must_be('an integer', option='min_num', obj=obj, id='admin.E205') + else: + return [] + + def _check_formset(self, obj): + """ Check formset is a subclass of BaseModelFormSet. """ + + if not _issubclass(obj.formset, BaseModelFormSet): + return must_inherit_from(parent='BaseModelFormSet', option='formset', obj=obj, id='admin.E206') + else: + return [] + + def _check_has_add_permission(self, obj): + cls = obj.__class__ + try: + func = cls.has_add_permission + except AttributeError: + pass + else: + args = get_func_args(func) + if 'obj' not in args: + warnings.warn( + "Update %s.has_add_permission() to accept a positional " + "`obj` argument." % cls.__name__, RemovedInDjango30Warning + ) + + +def must_be(type, option, obj, id): + return [ + checks.Error( + "The value of '%s' must be %s." % (option, type), + obj=obj.__class__, + id=id, + ), + ] + + +def must_inherit_from(parent, option, obj, id): + return [ + checks.Error( + "The value of '%s' must inherit from '%s'." % (option, parent), + obj=obj.__class__, + id=id, + ), + ] + + +def refer_to_missing_field(field, option, obj, id): + return [ + checks.Error( + "The value of '%s' refers to '%s', which is not an attribute of '%s.%s'." % ( + option, field, obj.model._meta.app_label, obj.model._meta.object_name + ), + obj=obj.__class__, + id=id, + ), + ] diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/filters.py b/venv/lib/python3.7/site-packages/django/contrib/admin/filters.py new file mode 100644 index 0000000..d65e01d --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/filters.py @@ -0,0 +1,422 @@ +""" +This encapsulates the logic for displaying filters in the Django admin. +Filters are specified in models with the "list_filter" option. + +Each filter subclass knows how to display a filter for a field that passes a +certain test -- e.g. being a DateField or ForeignKey. +""" +import datetime + +from django.contrib.admin.options import IncorrectLookupParameters +from django.contrib.admin.utils import ( + get_model_from_relation, prepare_lookup_value, reverse_field_path, +) +from django.core.exceptions import ImproperlyConfigured, ValidationError +from django.db import models +from django.utils import timezone +from django.utils.translation import gettext_lazy as _ + + +class ListFilter: + title = None # Human-readable title to appear in the right sidebar. + template = 'admin/filter.html' + + def __init__(self, request, params, model, model_admin): + # This dictionary will eventually contain the request's query string + # parameters actually used by this filter. + self.used_parameters = {} + if self.title is None: + raise ImproperlyConfigured( + "The list filter '%s' does not specify a 'title'." + % self.__class__.__name__ + ) + + def has_output(self): + """ + Return True if some choices would be output for this filter. + """ + raise NotImplementedError('subclasses of ListFilter must provide a has_output() method') + + def choices(self, changelist): + """ + Return choices ready to be output in the template. + + `changelist` is the ChangeList to be displayed. + """ + raise NotImplementedError('subclasses of ListFilter must provide a choices() method') + + def queryset(self, request, queryset): + """ + Return the filtered queryset. + """ + raise NotImplementedError('subclasses of ListFilter must provide a queryset() method') + + def expected_parameters(self): + """ + Return the list of parameter names that are expected from the + request's query string and that will be used by this filter. + """ + raise NotImplementedError('subclasses of ListFilter must provide an expected_parameters() method') + + +class SimpleListFilter(ListFilter): + # The parameter that should be used in the query string for that filter. + parameter_name = None + + def __init__(self, request, params, model, model_admin): + super().__init__(request, params, model, model_admin) + if self.parameter_name is None: + raise ImproperlyConfigured( + "The list filter '%s' does not specify a 'parameter_name'." + % self.__class__.__name__ + ) + if self.parameter_name in params: + value = params.pop(self.parameter_name) + self.used_parameters[self.parameter_name] = value + lookup_choices = self.lookups(request, model_admin) + if lookup_choices is None: + lookup_choices = () + self.lookup_choices = list(lookup_choices) + + def has_output(self): + return len(self.lookup_choices) > 0 + + def value(self): + """ + Return the value (in string format) provided in the request's + query string for this filter, if any, or None if the value wasn't + provided. + """ + return self.used_parameters.get(self.parameter_name) + + def lookups(self, request, model_admin): + """ + Must be overridden to return a list of tuples (value, verbose value) + """ + raise NotImplementedError( + 'The SimpleListFilter.lookups() method must be overridden to ' + 'return a list of tuples (value, verbose value).' + ) + + def expected_parameters(self): + return [self.parameter_name] + + def choices(self, changelist): + yield { + 'selected': self.value() is None, + 'query_string': changelist.get_query_string(remove=[self.parameter_name]), + 'display': _('All'), + } + for lookup, title in self.lookup_choices: + yield { + 'selected': self.value() == str(lookup), + 'query_string': changelist.get_query_string({self.parameter_name: lookup}), + 'display': title, + } + + +class FieldListFilter(ListFilter): + _field_list_filters = [] + _take_priority_index = 0 + + def __init__(self, field, request, params, model, model_admin, field_path): + self.field = field + self.field_path = field_path + self.title = getattr(field, 'verbose_name', field_path) + super().__init__(request, params, model, model_admin) + for p in self.expected_parameters(): + if p in params: + value = params.pop(p) + self.used_parameters[p] = prepare_lookup_value(p, value) + + def has_output(self): + return True + + def queryset(self, request, queryset): + try: + return queryset.filter(**self.used_parameters) + except (ValueError, ValidationError) as e: + # Fields may raise a ValueError or ValidationError when converting + # the parameters to the correct type. + raise IncorrectLookupParameters(e) + + @classmethod + def register(cls, test, list_filter_class, take_priority=False): + if take_priority: + # This is to allow overriding the default filters for certain types + # of fields with some custom filters. The first found in the list + # is used in priority. + cls._field_list_filters.insert( + cls._take_priority_index, (test, list_filter_class)) + cls._take_priority_index += 1 + else: + cls._field_list_filters.append((test, list_filter_class)) + + @classmethod + def create(cls, field, request, params, model, model_admin, field_path): + for test, list_filter_class in cls._field_list_filters: + if test(field): + return list_filter_class(field, request, params, model, model_admin, field_path=field_path) + + +class RelatedFieldListFilter(FieldListFilter): + def __init__(self, field, request, params, model, model_admin, field_path): + other_model = get_model_from_relation(field) + self.lookup_kwarg = '%s__%s__exact' % (field_path, field.target_field.name) + self.lookup_kwarg_isnull = '%s__isnull' % field_path + self.lookup_val = params.get(self.lookup_kwarg) + self.lookup_val_isnull = params.get(self.lookup_kwarg_isnull) + super().__init__(field, request, params, model, model_admin, field_path) + self.lookup_choices = self.field_choices(field, request, model_admin) + if hasattr(field, 'verbose_name'): + self.lookup_title = field.verbose_name + else: + self.lookup_title = other_model._meta.verbose_name + self.title = self.lookup_title + self.empty_value_display = model_admin.get_empty_value_display() + + @property + def include_empty_choice(self): + """ + Return True if a "(None)" choice should be included, which filters + out everything except empty relationships. + """ + return self.field.null or (self.field.is_relation and self.field.many_to_many) + + def has_output(self): + if self.include_empty_choice: + extra = 1 + else: + extra = 0 + return len(self.lookup_choices) + extra > 1 + + def expected_parameters(self): + return [self.lookup_kwarg, self.lookup_kwarg_isnull] + + def field_choices(self, field, request, model_admin): + ordering = () + related_admin = model_admin.admin_site._registry.get(field.remote_field.model) + if related_admin is not None: + ordering = related_admin.get_ordering(request) + return field.get_choices(include_blank=False, ordering=ordering) + + def choices(self, changelist): + yield { + 'selected': self.lookup_val is None and not self.lookup_val_isnull, + 'query_string': changelist.get_query_string(remove=[self.lookup_kwarg, self.lookup_kwarg_isnull]), + 'display': _('All'), + } + for pk_val, val in self.lookup_choices: + yield { + 'selected': self.lookup_val == str(pk_val), + 'query_string': changelist.get_query_string({self.lookup_kwarg: pk_val}, [self.lookup_kwarg_isnull]), + 'display': val, + } + if self.include_empty_choice: + yield { + 'selected': bool(self.lookup_val_isnull), + 'query_string': changelist.get_query_string({self.lookup_kwarg_isnull: 'True'}, [self.lookup_kwarg]), + 'display': self.empty_value_display, + } + + +FieldListFilter.register(lambda f: f.remote_field, RelatedFieldListFilter) + + +class BooleanFieldListFilter(FieldListFilter): + def __init__(self, field, request, params, model, model_admin, field_path): + self.lookup_kwarg = '%s__exact' % field_path + self.lookup_kwarg2 = '%s__isnull' % field_path + self.lookup_val = params.get(self.lookup_kwarg) + self.lookup_val2 = params.get(self.lookup_kwarg2) + super().__init__(field, request, params, model, model_admin, field_path) + if (self.used_parameters and self.lookup_kwarg in self.used_parameters and + self.used_parameters[self.lookup_kwarg] in ('1', '0')): + self.used_parameters[self.lookup_kwarg] = bool(int(self.used_parameters[self.lookup_kwarg])) + + def expected_parameters(self): + return [self.lookup_kwarg, self.lookup_kwarg2] + + def choices(self, changelist): + for lookup, title in ( + (None, _('All')), + ('1', _('Yes')), + ('0', _('No'))): + yield { + 'selected': self.lookup_val == lookup and not self.lookup_val2, + 'query_string': changelist.get_query_string({self.lookup_kwarg: lookup}, [self.lookup_kwarg2]), + 'display': title, + } + if self.field.null: + yield { + 'selected': self.lookup_val2 == 'True', + 'query_string': changelist.get_query_string({self.lookup_kwarg2: 'True'}, [self.lookup_kwarg]), + 'display': _('Unknown'), + } + + +FieldListFilter.register(lambda f: isinstance(f, models.BooleanField), BooleanFieldListFilter) + + +class ChoicesFieldListFilter(FieldListFilter): + def __init__(self, field, request, params, model, model_admin, field_path): + self.lookup_kwarg = '%s__exact' % field_path + self.lookup_kwarg_isnull = '%s__isnull' % field_path + self.lookup_val = params.get(self.lookup_kwarg) + self.lookup_val_isnull = params.get(self.lookup_kwarg_isnull) + super().__init__(field, request, params, model, model_admin, field_path) + + def expected_parameters(self): + return [self.lookup_kwarg, self.lookup_kwarg_isnull] + + def choices(self, changelist): + yield { + 'selected': self.lookup_val is None, + 'query_string': changelist.get_query_string(remove=[self.lookup_kwarg, self.lookup_kwarg_isnull]), + 'display': _('All') + } + none_title = '' + for lookup, title in self.field.flatchoices: + if lookup is None: + none_title = title + continue + yield { + 'selected': str(lookup) == self.lookup_val, + 'query_string': changelist.get_query_string({self.lookup_kwarg: lookup}, [self.lookup_kwarg_isnull]), + 'display': title, + } + if none_title: + yield { + 'selected': bool(self.lookup_val_isnull), + 'query_string': changelist.get_query_string({self.lookup_kwarg_isnull: 'True'}, [self.lookup_kwarg]), + 'display': none_title, + } + + +FieldListFilter.register(lambda f: bool(f.choices), ChoicesFieldListFilter) + + +class DateFieldListFilter(FieldListFilter): + def __init__(self, field, request, params, model, model_admin, field_path): + self.field_generic = '%s__' % field_path + self.date_params = {k: v for k, v in params.items() if k.startswith(self.field_generic)} + + now = timezone.now() + # When time zone support is enabled, convert "now" to the user's time + # zone so Django's definition of "Today" matches what the user expects. + if timezone.is_aware(now): + now = timezone.localtime(now) + + if isinstance(field, models.DateTimeField): + today = now.replace(hour=0, minute=0, second=0, microsecond=0) + else: # field is a models.DateField + today = now.date() + tomorrow = today + datetime.timedelta(days=1) + if today.month == 12: + next_month = today.replace(year=today.year + 1, month=1, day=1) + else: + next_month = today.replace(month=today.month + 1, day=1) + next_year = today.replace(year=today.year + 1, month=1, day=1) + + self.lookup_kwarg_since = '%s__gte' % field_path + self.lookup_kwarg_until = '%s__lt' % field_path + self.links = ( + (_('Any date'), {}), + (_('Today'), { + self.lookup_kwarg_since: str(today), + self.lookup_kwarg_until: str(tomorrow), + }), + (_('Past 7 days'), { + self.lookup_kwarg_since: str(today - datetime.timedelta(days=7)), + self.lookup_kwarg_until: str(tomorrow), + }), + (_('This month'), { + self.lookup_kwarg_since: str(today.replace(day=1)), + self.lookup_kwarg_until: str(next_month), + }), + (_('This year'), { + self.lookup_kwarg_since: str(today.replace(month=1, day=1)), + self.lookup_kwarg_until: str(next_year), + }), + ) + if field.null: + self.lookup_kwarg_isnull = '%s__isnull' % field_path + self.links += ( + (_('No date'), {self.field_generic + 'isnull': 'True'}), + (_('Has date'), {self.field_generic + 'isnull': 'False'}), + ) + super().__init__(field, request, params, model, model_admin, field_path) + + def expected_parameters(self): + params = [self.lookup_kwarg_since, self.lookup_kwarg_until] + if self.field.null: + params.append(self.lookup_kwarg_isnull) + return params + + def choices(self, changelist): + for title, param_dict in self.links: + yield { + 'selected': self.date_params == param_dict, + 'query_string': changelist.get_query_string(param_dict, [self.field_generic]), + 'display': title, + } + + +FieldListFilter.register( + lambda f: isinstance(f, models.DateField), DateFieldListFilter) + + +# This should be registered last, because it's a last resort. For example, +# if a field is eligible to use the BooleanFieldListFilter, that'd be much +# more appropriate, and the AllValuesFieldListFilter won't get used for it. +class AllValuesFieldListFilter(FieldListFilter): + def __init__(self, field, request, params, model, model_admin, field_path): + self.lookup_kwarg = field_path + self.lookup_kwarg_isnull = '%s__isnull' % field_path + self.lookup_val = params.get(self.lookup_kwarg) + self.lookup_val_isnull = params.get(self.lookup_kwarg_isnull) + self.empty_value_display = model_admin.get_empty_value_display() + parent_model, reverse_path = reverse_field_path(model, field_path) + # Obey parent ModelAdmin queryset when deciding which options to show + if model == parent_model: + queryset = model_admin.get_queryset(request) + else: + queryset = parent_model._default_manager.all() + self.lookup_choices = queryset.distinct().order_by(field.name).values_list(field.name, flat=True) + super().__init__(field, request, params, model, model_admin, field_path) + + def expected_parameters(self): + return [self.lookup_kwarg, self.lookup_kwarg_isnull] + + def choices(self, changelist): + yield { + 'selected': self.lookup_val is None and self.lookup_val_isnull is None, + 'query_string': changelist.get_query_string(remove=[self.lookup_kwarg, self.lookup_kwarg_isnull]), + 'display': _('All'), + } + include_none = False + for val in self.lookup_choices: + if val is None: + include_none = True + continue + val = str(val) + yield { + 'selected': self.lookup_val == val, + 'query_string': changelist.get_query_string({self.lookup_kwarg: val}, [self.lookup_kwarg_isnull]), + 'display': val, + } + if include_none: + yield { + 'selected': bool(self.lookup_val_isnull), + 'query_string': changelist.get_query_string({self.lookup_kwarg_isnull: 'True'}, [self.lookup_kwarg]), + 'display': self.empty_value_display, + } + + +FieldListFilter.register(lambda f: True, AllValuesFieldListFilter) + + +class RelatedOnlyFieldListFilter(RelatedFieldListFilter): + def field_choices(self, field, request, model_admin): + pk_qs = model_admin.get_queryset(request).distinct().values_list('%s__pk' % self.field_path, flat=True) + return field.get_choices(include_blank=False, limit_choices_to={'pk__in': pk_qs}) diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/helpers.py b/venv/lib/python3.7/site-packages/django/contrib/admin/helpers.py new file mode 100644 index 0000000..0c0b3a4 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/helpers.py @@ -0,0 +1,402 @@ +import json + +from django import forms +from django.conf import settings +from django.contrib.admin.utils import ( + display_for_field, flatten_fieldsets, help_text_for_field, label_for_field, + lookup_field, +) +from django.core.exceptions import ObjectDoesNotExist +from django.db.models.fields.related import ManyToManyRel +from django.forms.utils import flatatt +from django.template.defaultfilters import capfirst, linebreaksbr +from django.utils.html import conditional_escape, format_html +from django.utils.safestring import mark_safe +from django.utils.translation import gettext, gettext_lazy as _ + +ACTION_CHECKBOX_NAME = '_selected_action' + + +class ActionForm(forms.Form): + action = forms.ChoiceField(label=_('Action:')) + select_across = forms.BooleanField( + label='', + required=False, + initial=0, + widget=forms.HiddenInput({'class': 'select-across'}), + ) + + +checkbox = forms.CheckboxInput({'class': 'action-select'}, lambda value: False) + + +class AdminForm: + def __init__(self, form, fieldsets, prepopulated_fields, readonly_fields=None, model_admin=None): + self.form, self.fieldsets = form, fieldsets + self.prepopulated_fields = [{ + 'field': form[field_name], + 'dependencies': [form[f] for f in dependencies] + } for field_name, dependencies in prepopulated_fields.items()] + self.model_admin = model_admin + if readonly_fields is None: + readonly_fields = () + self.readonly_fields = readonly_fields + + def __iter__(self): + for name, options in self.fieldsets: + yield Fieldset( + self.form, name, + readonly_fields=self.readonly_fields, + model_admin=self.model_admin, + **options + ) + + @property + def errors(self): + return self.form.errors + + @property + def non_field_errors(self): + return self.form.non_field_errors + + @property + def media(self): + media = self.form.media + for fs in self: + media = media + fs.media + return media + + +class Fieldset: + def __init__(self, form, name=None, readonly_fields=(), fields=(), classes=(), + description=None, model_admin=None): + self.form = form + self.name, self.fields = name, fields + self.classes = ' '.join(classes) + self.description = description + self.model_admin = model_admin + self.readonly_fields = readonly_fields + + @property + def media(self): + if 'collapse' in self.classes: + extra = '' if settings.DEBUG else '.min' + return forms.Media(js=['admin/js/collapse%s.js' % extra]) + return forms.Media() + + def __iter__(self): + for field in self.fields: + yield Fieldline(self.form, field, self.readonly_fields, model_admin=self.model_admin) + + +class Fieldline: + def __init__(self, form, field, readonly_fields=None, model_admin=None): + self.form = form # A django.forms.Form instance + if not hasattr(field, "__iter__") or isinstance(field, str): + self.fields = [field] + else: + self.fields = field + self.has_visible_field = not all( + field in self.form.fields and self.form.fields[field].widget.is_hidden + for field in self.fields + ) + self.model_admin = model_admin + if readonly_fields is None: + readonly_fields = () + self.readonly_fields = readonly_fields + + def __iter__(self): + for i, field in enumerate(self.fields): + if field in self.readonly_fields: + yield AdminReadonlyField(self.form, field, is_first=(i == 0), model_admin=self.model_admin) + else: + yield AdminField(self.form, field, is_first=(i == 0)) + + def errors(self): + return mark_safe( + '\n'.join( + self.form[f].errors.as_ul() for f in self.fields if f not in self.readonly_fields + ).strip('\n') + ) + + +class AdminField: + def __init__(self, form, field, is_first): + self.field = form[field] # A django.forms.BoundField instance + self.is_first = is_first # Whether this field is first on the line + self.is_checkbox = isinstance(self.field.field.widget, forms.CheckboxInput) + self.is_readonly = False + + def label_tag(self): + classes = [] + contents = conditional_escape(self.field.label) + if self.is_checkbox: + classes.append('vCheckboxLabel') + + if self.field.field.required: + classes.append('required') + if not self.is_first: + classes.append('inline') + attrs = {'class': ' '.join(classes)} if classes else {} + # checkboxes should not have a label suffix as the checkbox appears + # to the left of the label. + return self.field.label_tag( + contents=mark_safe(contents), attrs=attrs, + label_suffix='' if self.is_checkbox else None, + ) + + def errors(self): + return mark_safe(self.field.errors.as_ul()) + + +class AdminReadonlyField: + def __init__(self, form, field, is_first, model_admin=None): + # Make self.field look a little bit like a field. This means that + # {{ field.name }} must be a useful class name to identify the field. + # For convenience, store other field-related data here too. + if callable(field): + class_name = field.__name__ if field.__name__ != '' else '' + else: + class_name = field + + if form._meta.labels and class_name in form._meta.labels: + label = form._meta.labels[class_name] + else: + label = label_for_field(field, form._meta.model, model_admin, form=form) + + if form._meta.help_texts and class_name in form._meta.help_texts: + help_text = form._meta.help_texts[class_name] + else: + help_text = help_text_for_field(class_name, form._meta.model) + + self.field = { + 'name': class_name, + 'label': label, + 'help_text': help_text, + 'field': field, + } + self.form = form + self.model_admin = model_admin + self.is_first = is_first + self.is_checkbox = False + self.is_readonly = True + self.empty_value_display = model_admin.get_empty_value_display() + + def label_tag(self): + attrs = {} + if not self.is_first: + attrs["class"] = "inline" + label = self.field['label'] + return format_html('{}:', flatatt(attrs), capfirst(label)) + + def contents(self): + from django.contrib.admin.templatetags.admin_list import _boolean_icon + field, obj, model_admin = self.field['field'], self.form.instance, self.model_admin + try: + f, attr, value = lookup_field(field, obj, model_admin) + except (AttributeError, ValueError, ObjectDoesNotExist): + result_repr = self.empty_value_display + else: + if field in self.form.fields: + widget = self.form[field].field.widget + # This isn't elegant but suffices for contrib.auth's + # ReadOnlyPasswordHashWidget. + if getattr(widget, 'read_only', False): + return widget.render(field, value) + if f is None: + if getattr(attr, 'boolean', False): + result_repr = _boolean_icon(value) + else: + if hasattr(value, "__html__"): + result_repr = value + else: + result_repr = linebreaksbr(value) + else: + if isinstance(f.remote_field, ManyToManyRel) and value is not None: + result_repr = ", ".join(map(str, value.all())) + else: + result_repr = display_for_field(value, f, self.empty_value_display) + result_repr = linebreaksbr(result_repr) + return conditional_escape(result_repr) + + +class InlineAdminFormSet: + """ + A wrapper around an inline formset for use in the admin system. + """ + def __init__(self, inline, formset, fieldsets, prepopulated_fields=None, + readonly_fields=None, model_admin=None, has_add_permission=True, + has_change_permission=True, has_delete_permission=True, + has_view_permission=True): + self.opts = inline + self.formset = formset + self.fieldsets = fieldsets + self.model_admin = model_admin + if readonly_fields is None: + readonly_fields = () + self.readonly_fields = readonly_fields + if prepopulated_fields is None: + prepopulated_fields = {} + self.prepopulated_fields = prepopulated_fields + self.classes = ' '.join(inline.classes) if inline.classes else '' + self.has_add_permission = has_add_permission + self.has_change_permission = has_change_permission + self.has_delete_permission = has_delete_permission + self.has_view_permission = has_view_permission + + def __iter__(self): + if self.has_change_permission: + readonly_fields_for_editing = self.readonly_fields + else: + readonly_fields_for_editing = self.readonly_fields + flatten_fieldsets(self.fieldsets) + + for form, original in zip(self.formset.initial_forms, self.formset.get_queryset()): + view_on_site_url = self.opts.get_view_on_site_url(original) + yield InlineAdminForm( + self.formset, form, self.fieldsets, self.prepopulated_fields, + original, readonly_fields_for_editing, model_admin=self.opts, + view_on_site_url=view_on_site_url, + ) + for form in self.formset.extra_forms: + yield InlineAdminForm( + self.formset, form, self.fieldsets, self.prepopulated_fields, + None, self.readonly_fields, model_admin=self.opts, + ) + if self.has_add_permission: + yield InlineAdminForm( + self.formset, self.formset.empty_form, + self.fieldsets, self.prepopulated_fields, None, + self.readonly_fields, model_admin=self.opts, + ) + + def fields(self): + fk = getattr(self.formset, "fk", None) + empty_form = self.formset.empty_form + meta_labels = empty_form._meta.labels or {} + meta_help_texts = empty_form._meta.help_texts or {} + for i, field_name in enumerate(flatten_fieldsets(self.fieldsets)): + if fk and fk.name == field_name: + continue + if not self.has_change_permission or field_name in self.readonly_fields: + yield { + 'name': field_name, + 'label': meta_labels.get(field_name) or label_for_field(field_name, self.opts.model, self.opts), + 'widget': {'is_hidden': False}, + 'required': False, + 'help_text': meta_help_texts.get(field_name) or help_text_for_field(field_name, self.opts.model), + } + else: + form_field = empty_form.fields[field_name] + label = form_field.label + if label is None: + label = label_for_field(field_name, self.opts.model, self.opts) + yield { + 'name': field_name, + 'label': label, + 'widget': form_field.widget, + 'required': form_field.required, + 'help_text': form_field.help_text, + } + + def inline_formset_data(self): + verbose_name = self.opts.verbose_name + return json.dumps({ + 'name': '#%s' % self.formset.prefix, + 'options': { + 'prefix': self.formset.prefix, + 'addText': gettext('Add another %(verbose_name)s') % { + 'verbose_name': capfirst(verbose_name), + }, + 'deleteText': gettext('Remove'), + } + }) + + @property + def forms(self): + return self.formset.forms + + @property + def non_form_errors(self): + return self.formset.non_form_errors + + @property + def media(self): + media = self.opts.media + self.formset.media + for fs in self: + media = media + fs.media + return media + + +class InlineAdminForm(AdminForm): + """ + A wrapper around an inline form for use in the admin system. + """ + def __init__(self, formset, form, fieldsets, prepopulated_fields, original, + readonly_fields=None, model_admin=None, view_on_site_url=None): + self.formset = formset + self.model_admin = model_admin + self.original = original + self.show_url = original and view_on_site_url is not None + self.absolute_url = view_on_site_url + super().__init__(form, fieldsets, prepopulated_fields, readonly_fields, model_admin) + + def __iter__(self): + for name, options in self.fieldsets: + yield InlineFieldset( + self.formset, self.form, name, self.readonly_fields, + model_admin=self.model_admin, **options + ) + + def needs_explicit_pk_field(self): + return ( + # Auto fields are editable, so check for auto or non-editable pk. + self.form._meta.model._meta.auto_field or not self.form._meta.model._meta.pk.editable or + # Also search any parents for an auto field. (The pk info is + # propagated to child models so that does not need to be checked + # in parents.) + any(parent._meta.auto_field or not parent._meta.model._meta.pk.editable + for parent in self.form._meta.model._meta.get_parent_list()) + ) + + def pk_field(self): + return AdminField(self.form, self.formset._pk_field.name, False) + + def fk_field(self): + fk = getattr(self.formset, "fk", None) + if fk: + return AdminField(self.form, fk.name, False) + else: + return "" + + def deletion_field(self): + from django.forms.formsets import DELETION_FIELD_NAME + return AdminField(self.form, DELETION_FIELD_NAME, False) + + def ordering_field(self): + from django.forms.formsets import ORDERING_FIELD_NAME + return AdminField(self.form, ORDERING_FIELD_NAME, False) + + +class InlineFieldset(Fieldset): + def __init__(self, formset, *args, **kwargs): + self.formset = formset + super().__init__(*args, **kwargs) + + def __iter__(self): + fk = getattr(self.formset, "fk", None) + for field in self.fields: + if not fk or fk.name != field: + yield Fieldline(self.form, field, self.readonly_fields, model_admin=self.model_admin) + + +class AdminErrorList(forms.utils.ErrorList): + """Store errors for the form/formsets in an add/change view.""" + def __init__(self, form, inline_formsets): + super().__init__() + + if form.is_bound: + self.extend(form.errors.values()) + for inline_formset in inline_formsets: + self.extend(inline_formset.non_form_errors()) + for errors_in_inline_form in inline_formset.errors: + self.extend(errors_in_inline_form.values()) diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/af/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/af/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0e5afe06b21e95e6c927503cbcf0a5902e0d9c2a GIT binary patch literal 16245 zcmc(ldypJQea9PY#~_St{NfE`#j;NJ-AeM?XIVlI%R1ST6+JBj7IV9Od!v2KdS>>{ zYoS<}hZP<+0Rsk%ftVN)z)lDu|Weo*x9S1fK-;{n=+5^IPD>;OXEPcnWwWcm{ZFc)uA` z`)#1;se|W&N5GeX4}j|D^WY1>FM^O@o&eR~x4;*Ie;?jI2_EM8hv3`5_$9`?82mA) z`TQJI`xl*K41ebQfFmHJo9n=rgExVq+k#8M4!9hAFGv^W%b?o-Ew~zd5`>lJ42akJ zbHF9wMWEJ*_&V?(z}JAUf*8?t9k>VF0A2(> z2)4l|z~_UPusG^}3>2MLft$d!;HltS!9(Cta36RolT*KM0JZ*gP~Y`H@$t^^{wOGZ z-w%p^UjRk#6QIWZJCLcH?|}OLDG=71e+OA|^J`G!p9!-xzjHygTN<7(0X5#W;dug- zeBTO61q$%B;1MtaKLHltUxPcqt7v>LcrQ2(o`ukA+^wL-dp)Rm9t1__9iaIBb`aK? z4}qfZagZf5Uj!l9d=u0>e+Y_>{|431uR+Ppsjv3^oe8SHrQjvt6`<%p0E(}NK=I=! zsP*|MC^|j`J`R2vTn0|F*ek&MK=J3x;9BsjAX7EJ0at;qfEkE}xe4rplc2`^K6o>D zN@UE9;0|yUd=T6Yehr)e&%2PhgSUfP&mV!ef(V^Dm^e%srNL!kJ4H+T>D9`JJT?2Ekp*#sWs zIR>u>zXggPOJLdvxD3?#Y!7%FcnZ%`py)mbik?Au{|-=ey)WQHq5e_uRO-I~rq4sa zL5;I~x!2bXpp#2*7xe{rDfkT#)|;P$o5AxSO6&A`Q1bL{@HFs~pycP%;OXFFpyc#R zpw{8*pvLi1XS{qqo3^>=!}*MKawxe`>n+d%On1`#211Uv#h0uI27 zAnp_3!{9Wyu4c^p!Ows%0@pya=C=hD-`@zH0d_&XKLlV{ep~@c9yWlI*R7!X z-4AM>w}a~cE#dvUK*{$Pl6YNM=?%_xOp5@yC=a3@JFEftzF~wc`tYY&-a1{!G}Ra z&AjkhWA=hqgFC_dKt$5~3%Cb7bKIEU0UO}`;FrJ`gPX7OanWv2^nMrAJpUP#y#EM1 z8~hJYeEi?=eA*gM=LMkn7lr4GLG`-|lpL-FWiPjae+V80#lISr&j+spwNBT9IXD4A znt1}$y8jZK1Yf-tT?dbVF9-h;)cn2&ieF}(r*8?Ue$NH9E*F53%S%A5!^et1s6-4w~GuHUCztQGSmiJN84<7+PNLfi~QndEEV#*)5J0JH-<}VM=f7*{{g04?d9&>k2WX-$7{RVI!MY8&#Q1?1eGJ2453PpN_Iyim%1b83i^AueV zQqFL9UVlE${ZYzx%I%blauuaTc?IQaiuCak%Bv}>DY`yOIh}HtBD_CweZM!0m%(9WV*W)H`bdqk87g<~+X_xAHJI?b1-MFJ>%SMuJ zUc}ux4|R99X+_7s(y1`)Olmpx7*QiU#^PMDc;r{W9B}oJ9e&jFmBd2=%vx1ohQ;i z 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/ar/LC_MESSAGES/djangojs.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/ar/LC_MESSAGES/djangojs.po new file mode 100644 index 0000000..577951f --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/ar/LC_MESSAGES/djangojs.po @@ -0,0 +1,227 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Bashar Al-Abdulhadi, 2015 +# Bashar Al-Abdulhadi, 2014 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-17 23:12+0200\n" +"PO-Revision-Date: 2017-09-19 16:41+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Arabic (http://www.transifex.com/django/django/language/ar/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ar\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +#, javascript-format +msgid "Available %s" +msgstr "%s المتوفرة" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"هذه قائمة %s المتوفرة. يمكنك اختيار بعضها بانتقائها في الصندوق أدناه ثم " +"الضغط على سهم الـ\"اختيار\" بين الصندوقين." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "اكتب في هذا الصندوق لتصفية قائمة %s المتوفرة." + +msgid "Filter" +msgstr "انتقاء" + +msgid "Choose all" +msgstr "اختر الكل" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "اضغط لاختيار جميع %s جملة واحدة." + +msgid "Choose" +msgstr "اختيار" + +msgid "Remove" +msgstr "احذف" + +#, javascript-format +msgid "Chosen %s" +msgstr "%s المُختارة" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"هذه قائمة %s المحددة. يمكنك إزالة بعضها باختيارها في الصندوق أدناه ثم اضغط " +"على سهم الـ\"إزالة\" بين الصندوقين." + +msgid "Remove all" +msgstr "إزالة الكل" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "اضغط لإزالة جميع %s المحددة جملة واحدة." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "لا شي محدد" +msgstr[1] "%(sel)s من %(cnt)s محدد" +msgstr[2] "%(sel)s من %(cnt)s محدد" +msgstr[3] "%(sel)s من %(cnt)s محددة" +msgstr[4] "%(sel)s من %(cnt)s محدد" +msgstr[5] "%(sel)s من %(cnt)s محدد" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"لديك تعديلات غير محفوظة على بعض الحقول القابلة للتعديل. إن نفذت أي إجراء " +"فسوف تخسر تعديلاتك." + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"اخترت إجراءً لكن دون أن تحفظ تغييرات التي قمت بها. رجاء اضغط زر الموافقة " +"لتحفظ تعديلاتك. ستحتاج إلى إعادة تنفيذ الإجراء." + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "اخترت إجراءً دون تغيير أي حقل. لعلك تريد زر التنفيذ بدلاً من زر الحفظ." + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "ملاحظة: أنت متقدم بـ %s ساعة من وقت الخادم." +msgstr[1] "ملاحظة: أنت متقدم بـ %s ساعة من وقت الخادم." +msgstr[2] "ملاحظة: أنت متقدم بـ %s ساعة من وقت الخادم." +msgstr[3] "ملاحظة: أنت متقدم بـ %s ساعة من وقت الخادم." +msgstr[4] "ملاحظة: أنت متقدم بـ %s ساعة من وقت الخادم." +msgstr[5] "ملاحظة: أنت متقدم بـ %s ساعة من وقت الخادم." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "ملاحظة: أنت متأخر بـ %s ساعة من وقت الخادم." +msgstr[1] "ملاحظة: أنت متأخر بـ %s ساعة من وقت الخادم." +msgstr[2] "ملاحظة: أنت متأخر بـ %s ساعة من وقت الخادم." +msgstr[3] "ملاحظة: أنت متأخر بـ %s ساعة من وقت الخادم." +msgstr[4] "ملاحظة: أنت متأخر بـ %s ساعة من وقت الخادم." +msgstr[5] "ملاحظة: أنت متأخر بـ %s ساعة من وقت الخادم." + +msgid "Now" +msgstr "الآن" + +msgid "Choose a Time" +msgstr "إختر وقت" + +msgid "Choose a time" +msgstr "اختر وقتاً" + +msgid "Midnight" +msgstr "منتصف الليل" + +msgid "6 a.m." +msgstr "6 ص." + +msgid "Noon" +msgstr "الظهر" + +msgid "6 p.m." +msgstr "6 مساءً" + +msgid "Cancel" +msgstr "ألغ" + +msgid "Today" +msgstr "اليوم" + +msgid "Choose a Date" +msgstr "إختر تاريخ " + +msgid "Yesterday" +msgstr "أمس" + +msgid "Tomorrow" +msgstr "غداً" + +msgid "January" +msgstr "" + +msgid "February" +msgstr "" + +msgid "March" +msgstr "" + +msgid "April" +msgstr "" + +msgid "May" +msgstr "" + +msgid "June" +msgstr "" + +msgid "July" +msgstr "" + +msgid "August" +msgstr "" + +msgid "September" +msgstr "" + +msgid "October" +msgstr "" + +msgid "November" +msgstr "" + +msgid "December" +msgstr "" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "" + +msgctxt "one letter Monday" +msgid "M" +msgstr "" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "" + +msgctxt "one letter Friday" +msgid "F" +msgstr "" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "" + +msgid "Show" +msgstr "أظهر" + +msgid "Hide" +msgstr "اخف" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/ast/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/ast/LC_MESSAGES/django.po new file mode 100644 index 0000000..437b080 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/ast/LC_MESSAGES/django.po @@ -0,0 +1,636 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ḷḷumex03 , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-23 19:51+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Asturian (http://www.transifex.com/django/django/language/" +"ast/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ast\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "desanciáu con ésitu %(count)d %(items)s." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Nun pue desaniciase %(name)s" + +msgid "Are you sure?" +msgstr "¿De xuru?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "" + +msgid "Administration" +msgstr "" + +msgid "All" +msgstr "Too" + +msgid "Yes" +msgstr "Sí" + +msgid "No" +msgstr "Non" + +msgid "Unknown" +msgstr "Desconocíu" + +msgid "Any date" +msgstr "Cualaquier data" + +msgid "Today" +msgstr "Güei" + +msgid "Past 7 days" +msgstr "" + +msgid "This month" +msgstr "Esti mes" + +msgid "This year" +msgstr "Esi añu" + +msgid "No date" +msgstr "" + +msgid "Has date" +msgstr "" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" + +msgid "Action:" +msgstr "Aición:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "" + +msgid "Remove" +msgstr "" + +msgid "action time" +msgstr "" + +msgid "user" +msgstr "" + +msgid "content type" +msgstr "" + +msgid "object id" +msgstr "" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/3/library/functions.html#repr) +msgid "object repr" +msgstr "" + +msgid "action flag" +msgstr "" + +msgid "change message" +msgstr "" + +msgid "log entry" +msgstr "" + +msgid "log entries" +msgstr "" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "Amestáu \"%(object)s\"." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "" + +msgid "LogEntry Object" +msgstr "" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "" + +msgid "Added." +msgstr "" + +msgid "and" +msgstr "y" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "" + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "" + +msgid "No fields changed." +msgstr "" + +msgid "None" +msgstr "" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Los oxetos tienen d'usase pa faer aiciones con ellos. Nun se camudó dengún " +"oxetu." + +msgid "No action selected." +msgstr "Nun s'esbilló denguna aición." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "" + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "Amestar %s" + +#, python-format +msgid "Change %s" +msgstr "" + +msgid "Database error" +msgstr "" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "Esbillaos 0 de %(cnt)s" + +#, python-format +msgid "Change history: %s" +msgstr "" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" + +msgid "Django site admin" +msgstr "" + +msgid "Django administration" +msgstr "" + +msgid "Site administration" +msgstr "" + +msgid "Log in" +msgstr "Aniciar sesión" + +#, python-format +msgid "%(app)s administration" +msgstr "" + +msgid "Page not found" +msgstr "Nun s'alcontró la páxina" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Sentímoslo, pero nun s'alcuentra la páxina solicitada." + +msgid "Home" +msgstr "" + +msgid "Server error" +msgstr "" + +msgid "Server error (500)" +msgstr "" + +msgid "Server Error (500)" +msgstr "" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Hebo un erru. Repotóse al sitiu d'alministradores per corréu y debería " +"d'iguase en pocu tiempu. Gracies pola to paciencia." + +msgid "Run the selected action" +msgstr "Executar l'aición esbillada" + +msgid "Go" +msgstr "Dir" + +msgid "Click here to select the objects across all pages" +msgstr "" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Esbillar too %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Llimpiar esbilla" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" + +msgid "Enter a username and password." +msgstr "" + +msgid "Change password" +msgstr "" + +msgid "Please correct the error below." +msgstr "" + +msgid "Please correct the errors below." +msgstr "" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" + +msgid "Welcome," +msgstr "Bienllegáu/ada," + +msgid "View site" +msgstr "" + +msgid "Documentation" +msgstr "Documentación" + +msgid "Log out" +msgstr "" + +#, python-format +msgid "Add %(name)s" +msgstr "" + +msgid "History" +msgstr "" + +msgid "View on site" +msgstr "" + +msgid "Filter" +msgstr "" + +msgid "Remove from sorting" +msgstr "" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "" + +msgid "Toggle sorting" +msgstr "" + +msgid "Delete" +msgstr "" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" + +msgid "Objects" +msgstr "" + +msgid "Yes, I'm sure" +msgstr "" + +msgid "No, take me back" +msgstr "" + +msgid "Delete multiple objects" +msgstr "" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" + +msgid "Change" +msgstr "" + +msgid "Delete?" +msgstr "" + +#, python-format +msgid " By %(filter_title)s " +msgstr "" + +msgid "Summary" +msgstr "" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "" + +msgid "Add" +msgstr "" + +msgid "You don't have permission to edit anything." +msgstr "" + +msgid "Recent actions" +msgstr "" + +msgid "My actions" +msgstr "" + +msgid "None available" +msgstr "" + +msgid "Unknown content" +msgstr "" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "" + +msgid "Date/time" +msgstr "" + +msgid "User" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" + +msgid "Show all" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Popup closing..." +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "" + +msgid "Search" +msgstr "" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "" + +msgid "Save as new" +msgstr "" + +msgid "Save and add another" +msgstr "" + +msgid "Save and continue editing" +msgstr "" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "" + +msgid "Log in again" +msgstr "" + +msgid "Password change" +msgstr "" + +msgid "Your password was changed." +msgstr "" + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" + +msgid "Change my password" +msgstr "" + +msgid "Password reset" +msgstr "" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "" + +msgid "Password reset confirmation" +msgstr "" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" + +msgid "New password:" +msgstr "" + +msgid "Confirm password:" +msgstr "" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" + +msgid "Please go to the following page and choose a new password:" +msgstr "" + +msgid "Your username, in case you've forgotten:" +msgstr "" + +msgid "Thanks for using our site!" +msgstr "" + +#, python-format +msgid "The %(site_name)s team" +msgstr "" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" + +msgid "Email address:" +msgstr "" + +msgid "Reset my password" +msgstr "" + +msgid "All dates" +msgstr "" + +#, python-format +msgid "Select %s" +msgstr "" + +#, python-format +msgid "Select %s to change" +msgstr "" + +msgid "Date:" +msgstr "Data:" + +msgid "Time:" +msgstr "Hora:" + +msgid "Lookup" +msgstr "" + +msgid "Currently:" +msgstr "Anguaño:" + +msgid "Change:" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/ast/LC_MESSAGES/djangojs.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/ast/LC_MESSAGES/djangojs.po new file mode 100644 index 0000000..53705c7 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/ast/LC_MESSAGES/djangojs.po @@ -0,0 +1,211 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ḷḷumex03 , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-17 23:12+0200\n" +"PO-Revision-Date: 2017-09-20 02:41+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Asturian (http://www.transifex.com/django/django/language/" +"ast/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ast\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Disponible %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "" + +msgid "Filter" +msgstr "Filtrar" + +msgid "Choose all" +msgstr "Escoyer too" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Primi pa escoyer too %s d'una vegada" + +msgid "Choose" +msgstr "Escoyer" + +msgid "Remove" +msgstr "Desaniciar" + +#, javascript-format +msgid "Chosen %s" +msgstr "Escoyíu %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" + +msgid "Remove all" +msgstr "Desaniciar too" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Primi pa desaniciar tolo escoyío %s d'una vegada" + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s de %(cnt)s esbilláu" +msgstr[1] "%(sel)s de %(cnt)s esbillaos" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"Esbillesti una aición, pero entá nun guardesti les tos camudancies nos " +"campos individuales. Por favor, primi Aceutar pa guardar. Necesitarás " +"executar de nueves la aición" + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Esbillesti una aición, y nun fixesti camudancia dala nos campos " +"individuales. Quiciabes teas guetando'l botón Dir en cuantes del botón " +"Guardar." + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "" +msgstr[1] "" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" +msgstr[1] "" + +msgid "Now" +msgstr "Agora" + +msgid "Choose a Time" +msgstr "" + +msgid "Choose a time" +msgstr "Escueyi una hora" + +msgid "Midnight" +msgstr "Media nueche" + +msgid "6 a.m." +msgstr "" + +msgid "Noon" +msgstr "Meudía" + +msgid "6 p.m." +msgstr "" + +msgid "Cancel" +msgstr "Encaboxar" + +msgid "Today" +msgstr "Güei" + +msgid "Choose a Date" +msgstr "" + +msgid "Yesterday" +msgstr "Ayeri" + +msgid "Tomorrow" +msgstr "Mañana" + +msgid "January" +msgstr "" + +msgid "February" +msgstr "" + +msgid "March" +msgstr "" + +msgid "April" +msgstr "" + +msgid "May" +msgstr "" + +msgid "June" +msgstr "" + +msgid "July" +msgstr "" + +msgid "August" +msgstr "" + +msgid "September" +msgstr "" + +msgid "October" +msgstr "" + +msgid "November" +msgstr "" + +msgid "December" +msgstr "" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "" + +msgctxt "one letter Monday" +msgid "M" +msgstr "" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "" + +msgctxt "one letter Friday" +msgid "F" +msgstr "" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "" + +msgid "Show" +msgstr "Amosar" + +msgid "Hide" +msgstr "Anubrir" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/az/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/az/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..13228817dee217082fee8f41b1969534484a9f8f GIT binary patch literal 16875 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/az/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/az/LC_MESSAGES/django.po new file mode 100644 index 0000000..1bedd48 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/az/LC_MESSAGES/django.po @@ -0,0 +1,716 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Emin Mastizada , 2018 +# Emin Mastizada , 2016 +# Konul Allahverdiyeva , 2016 +# Zulfugar Ismayilzadeh , 2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-21 14:16-0300\n" +"PO-Revision-Date: 2018-09-09 12:44+0000\n" +"Last-Translator: Emin Mastizada \n" +"Language-Team: Azerbaijani (http://www.transifex.com/django/django/language/" +"az/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: az\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(count)d %(items)s uğurla silindi." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "%(name)s silinmir" + +msgid "Are you sure?" +msgstr "Əminsiniz?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Seçilmiş %(verbose_name_plural)s-ləri sil" + +msgid "Administration" +msgstr "Administrasiya" + +msgid "All" +msgstr "Hamısı" + +msgid "Yes" +msgstr "Hə" + +msgid "No" +msgstr "Yox" + +msgid "Unknown" +msgstr "Bilinmir" + +msgid "Any date" +msgstr "İstənilən tarix" + +msgid "Today" +msgstr "Bu gün" + +msgid "Past 7 days" +msgstr "Son 7 gündə" + +msgid "This month" +msgstr "Bu ay" + +msgid "This year" +msgstr "Bu il" + +msgid "No date" +msgstr "Tarixi yoxdur" + +msgid "Has date" +msgstr "Tarixi mövcuddur" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Lütfən, istifadəçi hesabı üçün doğru %(username)s və parol daxil olun. " +"Nəzərə alın ki, hər iki sahə böyük/kiçik hərflərə həssasdırlar." + +msgid "Action:" +msgstr "Əməliyyat:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Daha bir %(verbose_name)s əlavə et" + +msgid "Remove" +msgstr "Yığışdır" + +msgid "Addition" +msgstr "Əlavə" + +msgid "Change" +msgstr "Dəyiş" + +msgid "Deletion" +msgstr "Silmə" + +msgid "action time" +msgstr "əməliyyat vaxtı" + +msgid "user" +msgstr "istifadəçi" + +msgid "content type" +msgstr "məzmun növü" + +msgid "object id" +msgstr "obyekt id" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/3/library/functions.html#repr) +msgid "object repr" +msgstr "obyekt repr" + +msgid "action flag" +msgstr "bayraq" + +msgid "change message" +msgstr "dəyişmə mesajı" + +msgid "log entry" +msgstr "loq yazısı" + +msgid "log entries" +msgstr "loq yazıları" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "\"%(object)s\" əlavə olundu." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "\"%(object)s\" - %(changes)s dəyişiklikləri qeydə alındı." + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "\"%(object)s\" silindi." + +msgid "LogEntry Object" +msgstr "LogEntry obyekti" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "{name} \"{object}\" əlavə edildi." + +msgid "Added." +msgstr "Əlavə edildi." + +msgid "and" +msgstr "və" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "{name} \"{object}\" üçün {fields} dəyişdirildi." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "{fields} dəyişdirildi." + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "{name} \"{object}\" silindi." + +msgid "No fields changed." +msgstr "Heç bir sahə dəyişmədi." + +msgid "None" +msgstr "Heç nə" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" +"Birdən çox seçmək üçün \"Control\" və ya Mac üçün \"Command\" düyməsini " +"basılı tutun." + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "{name} \"{obj}\" uğurla əlavə edildi." + +msgid "You may edit it again below." +msgstr "Bunu aşağıda təkrar redaktə edə bilərsiz." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" +"{name} \"{obj}\" uğurla əlavə edildi. Aşağıdan başqa bir {name} əlavə edə " +"bilərsiz." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" +"{name} \"{obj}\" uğurla dəyişdirildi. Təkrar aşağıdan dəyişdirə bilərsiz." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" +"{name} \"{obj}\" uğurla əlavə edildi. Bunu təkrar aşağıdan dəyişdirə " +"bilərsiz." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" +"{name} \"{obj}\" uğurla dəyişdirildi. Aşağıdan başqa bir {name} əlavə edə " +"bilərsiz." + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "{name} \"{obj}\" uğurla dəyişdirildi." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Biz elementlər üzərində nəsə əməliyyat aparmaq üçün siz onları seçməlisiniz. " +"Heç bir element dəyişmədi." + +msgid "No action selected." +msgstr "Heç bir əməliyyat seçilmədi." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "%(name)s \"%(obj)s\" uğurla silindi." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "\"%(key)s\" id nömrəli %(name)s mövcud deyil. Çox güman ki, silinib?" + +#, python-format +msgid "Add %s" +msgstr "%s əlavə et" + +#, python-format +msgid "Change %s" +msgstr "%s dəyiş" + +#, python-format +msgid "View %s" +msgstr "%s gör" + +msgid "Database error" +msgstr "Bazada xəta" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s uğurlu dəyişdirildi." +msgstr[1] "%(count)s %(name)s uğurlu dəyişdirildi." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s seçili" +msgstr[1] "Bütün %(total_count)s seçili" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "%(cnt)s-dan 0 seçilib" + +#, python-format +msgid "Change history: %s" +msgstr "Dəyişmə tarixi: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"%(class_name)s %(instance)s silmə əlaqəli qorunmalı obyektləri silməyi tələb " +"edir: %(related_objects)s" + +msgid "Django site admin" +msgstr "Django sayt administratoru" + +msgid "Django administration" +msgstr "Django administrasiya" + +msgid "Site administration" +msgstr "Sayt administrasiyası" + +msgid "Log in" +msgstr "Daxil ol" + +#, python-format +msgid "%(app)s administration" +msgstr "%(app)s administrasiyası" + +msgid "Page not found" +msgstr "Səhifə tapılmadı" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Üzrlər, amma soruşduğunuz sayt tapılmadı." + +msgid "Home" +msgstr "Ev" + +msgid "Server error" +msgstr "Serverdə xəta" + +msgid "Server error (500)" +msgstr "Serverdə xəta (500)" + +msgid "Server Error (500)" +msgstr "Serverdə xəta (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Xəta baş verdi. Sayt administratorlarına e-poçt göndərildi və onlar xəta ilə " +"tezliklə məşğul olacaqlar. Səbrli olun." + +msgid "Run the selected action" +msgstr "Seçdiyim əməliyyatı yerinə yetir" + +msgid "Go" +msgstr "Getdik" + +msgid "Click here to select the objects across all pages" +msgstr "Bütün səhifələr üzrə obyektləri seçmək üçün bura tıqlayın" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Bütün %(total_count)s sayda %(module_name)s seç" + +msgid "Clear selection" +msgstr "Seçimi təmizlə" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"Əvvəlcə istifadəçi adını və parolu daxil edin. Ondan sonra daha çox " +"istifadəçi imkanlarını redaktə edə biləcəksiniz." + +msgid "Enter a username and password." +msgstr "İstifadəçi adını və parolu daxil edin." + +msgid "Change password" +msgstr "Parolu dəyiş" + +msgid "Please correct the error below." +msgstr "Lütfən aşağıdakı xətanı düzəldin." + +msgid "Please correct the errors below." +msgstr "Lütfən aşağıdakı səhvləri düzəldin." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "%(username)s üçün yeni parol daxil edin." + +msgid "Welcome," +msgstr "Xoş gördük," + +msgid "View site" +msgstr "Saytı ziyarət et" + +msgid "Documentation" +msgstr "Sənədləşdirmə" + +msgid "Log out" +msgstr "Çıx" + +#, python-format +msgid "Add %(name)s" +msgstr "%(name)s əlavə et" + +msgid "History" +msgstr "Tarix" + +msgid "View on site" +msgstr "Saytda göstər" + +msgid "Filter" +msgstr "Süzgəc" + +msgid "Remove from sorting" +msgstr "Sıralamadan çıxar" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Sıralama prioriteti: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Sıralamanı çevir" + +msgid "Delete" +msgstr "Sil" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"%(object_name)s \"%(escaped_object)s\" obyektini sildikdə onun bağlı olduğu " +"obyektlər də silinməlidir. Ancaq sizin hesabın aşağıdakı tip obyektləri " +"silməyə səlahiyyəti çatmır:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"%(object_name)s \"%(escaped_object)s\" obyektini silmək üçün aşağıdakı " +"qorunan obyektlər də silinməlidir:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"%(object_name)s \"%(escaped_object)s\" obyektini silməkdə əminsiniz? Ona " +"bağlı olan aşağıdakı obyektlər də silinəcək:" + +msgid "Objects" +msgstr "Obyektlər" + +msgid "Yes, I'm sure" +msgstr "Hə, əminəm" + +msgid "No, take me back" +msgstr "Xeyr, məni geri götür" + +msgid "Delete multiple objects" +msgstr "Bir neçə obyekt sil" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"%(objects_name)s obyektini silmək üçün ona bağlı obyektlər də silinməlidir. " +"Ancaq sizin hesabınızın aşağıdakı tip obyektləri silmək səlahiyyətinə malik " +"deyil:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"%(objects_name)s obyektini silmək üçün aşağıdakı qorunan obyektlər də " +"silinməlidir:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Seçdiyiniz %(objects_name)s obyektini silməkdə əminsiniz? Aşağıdakı bütün " +"obyektlər və ona bağlı digər obyektlər də silinəcək:" + +msgid "View" +msgstr "Gör" + +msgid "Delete?" +msgstr "Silək?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " %(filter_title)s görə " + +msgid "Summary" +msgstr "İcmal" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "%(name)s proqramındakı modellər" + +msgid "Add" +msgstr "Əlavə et" + +msgid "You don't have permission to view or edit anything." +msgstr "Heç nəyi görmə və ya redaktə etmə icazəniz yoxdur." + +msgid "Recent actions" +msgstr "Son əməliyyatlar" + +msgid "My actions" +msgstr "Mənim əməliyyatlarım" + +msgid "None available" +msgstr "Heç nə yoxdur" + +msgid "Unknown content" +msgstr "Naməlum" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Bazanın qurulması ilə nəsə problem var. Lazımi cədvəllərin bazada " +"yaradıldığını və uyğun istifadəçinin bazadan oxuya bildiyini yoxlayın." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"%(username)s olaraq daxil olmusunuz, amma bu səhifəyə icazəniz yoxdur. Başqa " +"bir hesaba daxil olmaq istərdiniz?" + +msgid "Forgotten your password or username?" +msgstr "Parol və ya istifadəçi adını unutmusan?" + +msgid "Date/time" +msgstr "Tarix/vaxt" + +msgid "User" +msgstr "İstifadəçi" + +msgid "Action" +msgstr "Əməliyyat" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Bu obyektin dəyişməsinə aid tarix mövcud deyil. Yəqin ki, o, bu admin saytı " +"vasitəsilə yaradılmayıb." + +msgid "Show all" +msgstr "Hamısını göstər" + +msgid "Save" +msgstr "Yadda saxla" + +msgid "Popup closing..." +msgstr "Qəfl pəncərə qapatılır..." + +#, python-format +msgid "Change selected %(model)s" +msgstr "Seçilmiş %(model)s dəyişdir" + +#, python-format +msgid "View selected %(model)s" +msgstr "Seçilən %(model)s gör" + +#, python-format +msgid "Add another %(model)s" +msgstr "Başqa %(model)s əlavə et" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Seçilmiş %(model)s sil" + +msgid "Search" +msgstr "Axtar" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s nəticə" +msgstr[1] "%(counter)s nəticə" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "Hamısı birlikdə %(full_result_count)s" + +msgid "Save as new" +msgstr "Yenisi kimi yadda saxla" + +msgid "Save and add another" +msgstr "Yadda saxla və yenisini əlavə et" + +msgid "Save and continue editing" +msgstr "Yadda saxla və redaktəyə davam et" + +msgid "Save and view" +msgstr "Saxla və gör" + +msgid "Close" +msgstr "Qapat" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Sayt ilə səmərəli vaxt keçirdiyiniz üçün təşəkkür." + +msgid "Log in again" +msgstr "Yenidən daxil ol" + +msgid "Password change" +msgstr "Parol dəyişmək" + +msgid "Your password was changed." +msgstr "Sizin parolunuz dəyişdi." + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Yoxlama üçün köhnə parolunuzu daxil edin. Sonra isə yeni parolu iki dəfə " +"daxil edin ki, səhv etmədiyinizə əmin olaq." + +msgid "Change my password" +msgstr "Mənim parolumu dəyiş" + +msgid "Password reset" +msgstr "Parolun sıfırlanması" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Yeni parol artıq qüvvədədir. Yenidən daxil ola bilərsiniz." + +msgid "Password reset confirmation" +msgstr "Parolun sıfırlanması üçün təsdiq" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "Yeni parolu iki dəfə daxil edin ki, səhv etmədiyinizə əmin olaq." + +msgid "New password:" +msgstr "Yeni parol:" + +msgid "Confirm password:" +msgstr "Yeni parol (bir daha):" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Parolun sıfırlanması üçün olan keçid, yəqin ki, artıq istifadə olunub. " +"Parolu sıfırlamaq üçün yenə müraciət edin." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Əgər daxil etdiyiniz e-poçt ünvanıyla hesab mövcuddursa, parolu qurmağınız " +"üçün sizə e-poçt göndərdik. Qısa zamanda alacaqsınız." + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Əgər e-poçt gəlmədiysə lütfən, qeyd olduğunuz ünvanla istədiyinizə əmin olun " +"və spam qutunuzu yoxlayın." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"%(site_name)s saytında parolu yeniləmək istədiyinizə görə bu məktubu " +"göndərdik." + +msgid "Please go to the following page and choose a new password:" +msgstr "Növbəti səhifəyə keçid alın və yeni parolu seçin:" + +msgid "Your username, in case you've forgotten:" +msgstr "Sizin istifadəçi adınız:" + +msgid "Thanks for using our site!" +msgstr "Bizim saytdan istifadə etdiyiniz üçün təşəkkür edirik!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s komandası" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" +"Parolu unutmusunuz? Aşağıda e-poçt ünvanınızı təqdim edin, biz isə yeni " +"parol seçmək təlimatlarını sizə göndərək." + +msgid "Email address:" +msgstr "E-poçt:" + +msgid "Reset my password" +msgstr "Parolumu sıfırla" + +msgid "All dates" +msgstr "Bütün tarixlərdə" + +#, python-format +msgid "Select %s" +msgstr "%s seç" + +#, python-format +msgid "Select %s to change" +msgstr "%s dəyişmək üçün seç" + +#, python-format +msgid "Select %s to view" +msgstr "Görmək üçün %s seçin" + +msgid "Date:" +msgstr "Tarix:" + +msgid "Time:" +msgstr "Vaxt:" + +msgid "Lookup" +msgstr "Sorğu" + +msgid "Currently:" +msgstr "Hazırda:" + +msgid "Change:" +msgstr "Dəyişdir:" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/az/LC_MESSAGES/djangojs.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/az/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..32272d65ba40dddc972af126934b1112a61d9c05 GIT binary patch literal 4621 zcmcJS&u=706~_y9LxL9)5=aP;9~HxTce9?h$NMW8vjqRnF7bM`9uh3zP%~YgsZ4j( zxVn1mo=a{)fgrEd)vH&pUcIWCdH<24Z!)B_$WI_|eT1?%D>Ia z+u$cq{zG2=Q_eqwpG5s%bN)T&5p*6x{lnnL!6(3{!4Yr-oChBO!<;RU#(xcj3idj9 zKlr`8{DYitfq2+Y@uDgG93(wALF#u4{08`Iunay3rPN*pNj?BcZxh7BHt-@lUjxa` z?}DV~I(QxIfZqo_bb?CuJCO9<1}DKkg4FLADt`<<3R1sYU=y4}Yit_t; z`EPmo0T}Ta)ISA22A%JI>{t1ZmtU zko-LlJ_ue0ss9Qn!3rqA--D$8SqPDyB1rl#fM{YbfDeI-Aoc%t&Q!uC@EC-s z-!DMY^Gk3J{8e865AYq7Y0_QbXW$P(`7mQ}Gy7-Ge}NxGnLU!#AIW(iNcH#U9Lnn- zCt0M44C$NvObISz9`a|AN06UEru4ZCsh?=gDUr=5kTE=a3OTg_JdI3=d_<{`A&pu3 zd={DJ{UjBTXiX`RuV5lOi9CvY2Kfufa2Gp;%#q;|Rz#+A;W#p-apW%|pG6)qIIPhrbMw#`koJwFPL&0! z+ThOcYO0QlAV4)2jvI{Pv6-EAD?`(gX*)!--g{!RvMR%hv}|5hY%FZT=2hTOeo^_7 zT^2g6yBr4zyBurD7KN?W@lM#H^0lhf9lK(T#>>ePUokNkmL|*VCbnGErSQq0k+dyo zIZekqTo$I^yD+cFy3+nVsXbh@mCgE!S!YXCXUGHBQb*+=f3aoRbeY_89fIY$iZ~uu zmpo7rJiW@rzyf>e{6mrKtVv`-$ty`7MM~GGYsi&ORaDFd<`I~6E-)3eXkMj7%jNiR z7AV8;sD)5Px^)Q|8r`iMj_xw@4mE0bo%bxtqu_tED09(&vdH)dkFp63+0DvHQ)0@9 zR7d`!S>t;(jWX_=^=w9m`jf552(d`&D6;ATalEr5;WRF)P8mI#`Y*`^^a;m9;UnNR zt%J}ti5;zBfv;N1k41p7W#C7tZ%!aso7PmYMH3zvlRAIZAX4Gw1voi&4xOz)nJO_T zwJeh*S(|rv(;&nLO^eXery9F!9K3PBIG#x7@vDIpk<6lkFMW;tM*TC(vEQ|XE>v1s zuyJNt=8^%UVx0|nxGSWuTzWk1_~g=RYA&f8aBynxotoAaOsHThn8K>J zVablp57sRjO?8Wdb<4uVw75r?_tnO!D$iu83>{R+Ek&8s-R z3zz)D%hE=Ol@j+~MM#*TYqDvqD=bDe6?9|ZWrNz0u=@-56p&6r{)G!M>v&5a;aAVCtC_PCb zX(Q<_e!VJX+=5$R zu#X*&n>!Nt5ut3q6DYsmiIi4t@Bh@LCUI1Jm@)QuxMC7=P45=YcDB@TX=$am*}Ku( z+`i%WHt{oNzn8HjIul#yz8krI$Fk{ol!trqGq6mgz~f6g5IChYuPBQXw|g_Qm#+!C zjd3Vue9=JIYzQq9!4WY6&f{w)3B?+3;ZrqK+KQW8?8y&PP!6j+VjvrcG#b-LFc{QJ zZA$}mClK%1Isq%l4galaD!9|KJVbX4<26JRTNV{jhnYK*PeePL$l)HP-9, 2011-2012 +# Emin Mastizada , 2016 +# Emin Mastizada , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-17 23:12+0200\n" +"PO-Revision-Date: 2017-09-19 16:41+0000\n" +"Last-Translator: Emin Mastizada \n" +"Language-Team: Azerbaijani (http://www.transifex.com/django/django/language/" +"az/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: az\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Mümkün %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Bu, mümkün %s siyahısıdır. Onlardan bir neçəsini qarşısındakı xanaya işarə " +"qoymaq və iki xana arasındakı \"Seç\"i tıqlamaqla seçmək olar." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Bu xanaya yazmaqla mümkün %s siyahısını filtrləyə bilərsiniz." + +msgid "Filter" +msgstr "Süzgəc" + +msgid "Choose all" +msgstr "Hamısını seç" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Bütün %s siyahısını seçmək üçün tıqlayın." + +msgid "Choose" +msgstr "Seç" + +msgid "Remove" +msgstr "Yığışdır" + +#, javascript-format +msgid "Chosen %s" +msgstr "Seçilmiş %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Bu, seçilmiş %s siyahısıdır. Onlardan bir neçəsini aşağıdakı xanaya işarə " +"qoymaq və iki xana arasındakı \"Sil\"i tıqlamaqla silmək olar." + +msgid "Remove all" +msgstr "Hamısını sil" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Seçilmiş %s siyahısının hamısını silmək üçün tıqlayın." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s / %(cnt)s seçilib" +msgstr[1] "%(sel)s / %(cnt)s seçilib" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Bəzi sahələrdə etdiyiniz dəyişiklikləri hələ yadda saxlamamışıq. Əgər " +"əməliyyatı işə salsanız, dəyişikliklər əldən gedəcək." + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"Əməliyyatı seçmisiniz, amma bəzi sahələrdəki dəyişiklikləri hələ yadda " +"saxlamamışıq. Bunun üçün OK seçməlisiniz. Ondan sonra əməliyyatı yenidən işə " +"salmağa cəhd edin." + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Siz əməliyyatı seçmisiniz və heç bir sahəyə dəyişiklik etməmisiniz. Siz " +"yəqin ki, Yadda saxla düyməsini deyil, Getdik düyməsini axtarırsınız." + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Diqqət: Server vaxtından %s saat irəlidəsiniz." +msgstr[1] "Diqqət: Server vaxtından %s saat irəlidəsiniz." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Diqqət: Server vaxtından %s saat geridəsiniz." +msgstr[1] "Diqqət: Server vaxtından %s saat geridəsiniz." + +msgid "Now" +msgstr "İndi" + +msgid "Choose a Time" +msgstr "Vaxt Seçin" + +msgid "Choose a time" +msgstr "Vaxtı seçin" + +msgid "Midnight" +msgstr "Gecə yarısı" + +msgid "6 a.m." +msgstr "6 a.m." + +msgid "Noon" +msgstr "Günorta" + +msgid "6 p.m." +msgstr "6 p.m." + +msgid "Cancel" +msgstr "Ləğv et" + +msgid "Today" +msgstr "Bu gün" + +msgid "Choose a Date" +msgstr "Tarix Seçin" + +msgid "Yesterday" +msgstr "Dünən" + +msgid "Tomorrow" +msgstr "Sabah" + +msgid "January" +msgstr "Yanvar" + +msgid "February" +msgstr "Fevral" + +msgid "March" +msgstr "Mart" + +msgid "April" +msgstr "Aprel" + +msgid "May" +msgstr "May" + +msgid "June" +msgstr "İyun" + +msgid "July" +msgstr "İyul" + +msgid "August" +msgstr "Avqust" + +msgid "September" +msgstr "Sentyabr" + +msgid "October" +msgstr "Oktyabr" + +msgid "November" +msgstr "Noyabr" + +msgid "December" +msgstr "Dekabr" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "B" + +msgctxt "one letter Monday" +msgid "M" +msgstr "B" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "Ç" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "Ç" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "C" + +msgctxt "one letter Friday" +msgid "F" +msgstr "C" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "Ş" + +msgid "Show" +msgstr "Göstər" + +msgid "Hide" +msgstr "Gizlət" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/be/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/be/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8610030da8e815ed39d2cea940039d5f9e1224f2 GIT binary patch literal 20007 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/bg/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/bg/LC_MESSAGES/django.po new file mode 100644 index 0000000..73bce75 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/bg/LC_MESSAGES/django.po @@ -0,0 +1,689 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Boris Chervenkov , 2012 +# Claude Paroz , 2014 +# Jannis Leidel , 2011 +# Lyuboslav Petrov , 2014 +# Todor Lubenov , 2014-2015 +# Venelin Stoykov , 2015-2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-11-17 08:33+0000\n" +"Last-Translator: Venelin Stoykov \n" +"Language-Team: Bulgarian (http://www.transifex.com/django/django/language/" +"bg/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Успешно изтрити %(count)d %(items)s ." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Не можете да изтриете %(name)s" + +msgid "Are you sure?" +msgstr "Сигурни ли сте?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Изтриване на избраните %(verbose_name_plural)s" + +msgid "Administration" +msgstr "Администрация" + +msgid "All" +msgstr "Всички" + +msgid "Yes" +msgstr "Да" + +msgid "No" +msgstr "Не" + +msgid "Unknown" +msgstr "Неизвестно" + +msgid "Any date" +msgstr "Коя-да-е дата" + +msgid "Today" +msgstr "Днес" + +msgid "Past 7 days" +msgstr "Последните 7 дни" + +msgid "This month" +msgstr "Този месец" + +msgid "This year" +msgstr "Тази година" + +msgid "No date" +msgstr "Няма дата" + +msgid "Has date" +msgstr "Има дата" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Моля въведете правилния %(username)s и парола за администраторски акаунт. " +"Моля забележете, че и двете полета са с главни и малки букви." + +msgid "Action:" +msgstr "Действие:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Добави друг %(verbose_name)s" + +msgid "Remove" +msgstr "Премахване" + +msgid "action time" +msgstr "време на действие" + +msgid "user" +msgstr "потребител" + +msgid "content type" +msgstr "тип на съдържанието" + +msgid "object id" +msgstr "id на обекта" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/3/library/functions.html#repr) +msgid "object repr" +msgstr "repr на обекта" + +msgid "action flag" +msgstr "флаг за действие" + +msgid "change message" +msgstr "промени съобщение" + +msgid "log entry" +msgstr "записка" + +msgid "log entries" +msgstr "записки" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "Добавен \"%(object)s\"." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "Променени \"%(object)s\" - %(changes)s" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "Изтрит \"%(object)s.\"" + +msgid "LogEntry Object" +msgstr "LogEntry обект" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "Добавено {name} \"{object}\"." + +msgid "Added." +msgstr "Добавено." + +msgid "and" +msgstr "и" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "Променени {fields} за {name} \"{object}\"." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Променени {fields}." + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "Изтрит {name} \"{object}\"." + +msgid "No fields changed." +msgstr "Няма променени полета." + +msgid "None" +msgstr "Празно" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" +"Задръжте \"Control\", или \"Command\" на Mac, за да изберете повече от един." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" +"Обектът {name} \"{obj}\" бе успешно добавен. Може да го редактирате по-" +"долу. " + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" +"Обектът {name} \"{obj}\" бе успешно добавен. Можете да добавите още един " +"обект {name} по-долу." + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "Обектът {name} \"{obj}\" бе успешно добавен. " + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" +"Обектът {name} \"{obj}\" бе успешно променен. Може да го редактирате по-" +"долу. " + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" +"Обектът {name} \"{obj}\" бе успешно променен. Можете да добавите още един " +"обект {name} по-долу." + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "Обектът {name} \"{obj}\" бе успешно променен." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Елементите трябва да бъдат избрани, за да се извършат действия по тях. Няма " +"променени елементи." + +msgid "No action selected." +msgstr "Няма избрани действия." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "Обектът %(name)s \"%(obj)s\" бе успешно изтрит. " + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "%(name)s с ИД \"%(key)s\" несъществува. Може би е изтрито?" + +#, python-format +msgid "Add %s" +msgstr "Добави %s" + +#, python-format +msgid "Change %s" +msgstr "Промени %s" + +msgid "Database error" +msgstr "Грешка в базата данни" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s беше променено успешно." +msgstr[1] "%(count)s %(name)s бяха променени успешно." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s е избран" +msgstr[1] "Всички %(total_count)s са избрани" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 от %(cnt)s са избрани" + +#, python-format +msgid "Change history: %s" +msgstr "История на промените: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Изтриването на избраните %(class_name)s %(instance)s ще наложи изтриването " +"на следните защитени и свързани обекти: %(related_objects)s" + +msgid "Django site admin" +msgstr "Административен панел" + +msgid "Django administration" +msgstr "Административен панел" + +msgid "Site administration" +msgstr "Администрация на сайта" + +msgid "Log in" +msgstr "Вход" + +#, python-format +msgid "%(app)s administration" +msgstr "%(app)s администрация" + +msgid "Page not found" +msgstr "Страница не е намерена" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Съжалявам, но исканата страница не е намерена." + +msgid "Home" +msgstr "Начало" + +msgid "Server error" +msgstr "Сървърна грешка" + +msgid "Server error (500)" +msgstr "Сървърна грешка (500)" + +msgid "Server Error (500)" +msgstr "Сървърна грешка (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Станала е грешка. Съобщава се на администраторите на сайта по електронна " +"поща и трябва да бъде поправено скоро. Благодарим ви за търпението." + +msgid "Run the selected action" +msgstr "Стартирай избраните действия" + +msgid "Go" +msgstr "Напред" + +msgid "Click here to select the objects across all pages" +msgstr "Щракнете тук, за да изберете обектите във всички страници" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Избери всички %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Изтрий избраното" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"Първо въведете потребител и парола. След това ще можете да редактирате " +"повече детайли. " + +msgid "Enter a username and password." +msgstr "Въведете потребителско име и парола." + +msgid "Change password" +msgstr "Промени парола" + +msgid "Please correct the error below." +msgstr "Моля, поправете грешките по-долу." + +msgid "Please correct the errors below." +msgstr "Моля поправете грешките по-долу." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Въведете нова парола за потребител %(username)s." + +msgid "Welcome," +msgstr "Добре дошли," + +msgid "View site" +msgstr "Виж сайта" + +msgid "Documentation" +msgstr "Документация" + +msgid "Log out" +msgstr "Изход" + +#, python-format +msgid "Add %(name)s" +msgstr "Добави %(name)s" + +msgid "History" +msgstr "История" + +msgid "View on site" +msgstr "Разгледай в сайта" + +msgid "Filter" +msgstr "Филтър" + +msgid "Remove from sorting" +msgstr "Премахни от подреждането" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Ред на подреждане: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Обърни подреждането" + +msgid "Delete" +msgstr "Изтрий" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Изтриването на обекта %(object_name)s '%(escaped_object)s' не може да бъде " +"извършено без да се изтрият и някои свързани обекти, върху които обаче " +"нямате права: " + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Изтриването на %(object_name)s '%(escaped_object)s' ще доведе до " +"заличаването на следните защитени свързани обекти:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Наистина ли искате да изтриете обектите %(object_name)s \"%(escaped_object)s" +"\"? Следните свързани елементи също ще бъдат изтрити:" + +msgid "Objects" +msgstr "Обекти" + +msgid "Yes, I'm sure" +msgstr "Да, сигурен съм" + +msgid "No, take me back" +msgstr "Не, върни ме обратно" + +msgid "Delete multiple objects" +msgstr "Изтриване на множество обекти" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Изтриването на избраните %(objects_name)s ще доведе до изтриване на свързани " +"обекти. Вашият профил няма права за изтриване на следните типове обекти:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Изтриването на избраните %(objects_name)s ще доведе до заличаването на " +"следните защитени свързани обекти:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Наистина ли искате да изтриете избраните %(objects_name)s? Всички изброени " +"обекти и свързаните с тях ще бъдат изтрити:" + +msgid "Change" +msgstr "Промени" + +msgid "Delete?" +msgstr "Изтриване?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " По %(filter_title)s " + +msgid "Summary" +msgstr "Резюме" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Моделите в %(name)s приложение" + +msgid "Add" +msgstr "Добави" + +msgid "You don't have permission to edit anything." +msgstr "Нямате права да редактирате каквото и да е." + +msgid "Recent actions" +msgstr "Последни действия" + +msgid "My actions" +msgstr "Моите действия" + +msgid "None available" +msgstr "Няма налични" + +msgid "Unknown content" +msgstr "Неизвестно съдържание" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Проблем с базата данни. Проверете дали необходимите таблици са създадени и " +"дали съответния потребител има необходимите права за достъп. " + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Вие сте се автентикиран като %(username)s, но не сте оторизиран да достъпите " +"тази страница. Бихте ли желали да влезе с друг профил." + +msgid "Forgotten your password or username?" +msgstr "Забравена парола или потребителско име?" + +msgid "Date/time" +msgstr "Дата/час" + +msgid "User" +msgstr "Потребител" + +msgid "Action" +msgstr "Действие" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Този обект няма исторя на промените. Вероятно не е добавен чрез " +"административния панел. " + +msgid "Show all" +msgstr "Покажи всички" + +msgid "Save" +msgstr "Запис" + +msgid "Popup closing..." +msgstr "Затваряне на изкачащ прозорец..." + +#, python-format +msgid "Change selected %(model)s" +msgstr "Променете избрания %(model)s" + +#, python-format +msgid "Add another %(model)s" +msgstr "Добавяне на друг %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Изтриване на избрания %(model)s" + +msgid "Search" +msgstr "Търсене" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s резултат" +msgstr[1] "%(counter)s резултати" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s общо" + +msgid "Save as new" +msgstr "Запис като нов" + +msgid "Save and add another" +msgstr "Запис и нов" + +msgid "Save and continue editing" +msgstr "Запис и продължение" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Благодарим Ви, че използвахте този сайт днес." + +msgid "Log in again" +msgstr "Влез пак" + +msgid "Password change" +msgstr "Промяна на парола" + +msgid "Your password was changed." +msgstr "Паролата ви е променена." + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Въведете старата си парола /за сигурност/. След това въведете желаната нова " +"парола два пъти от съображения за сигурност" + +msgid "Change my password" +msgstr "Промяна на парола" + +msgid "Password reset" +msgstr "Нова парола" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Паролата е променена. Вече можете да се впишете" + +msgid "Password reset confirmation" +msgstr "Парола за потвърждение" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Моля, въведете новата парола два пъти, за да може да се потвърди, че сте я " +"написали правилно." + +msgid "New password:" +msgstr "Нова парола:" + +msgid "Confirm password:" +msgstr "Потвърдете паролата:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Връзката за възстановяване на паролата е невалидна, може би защото вече е " +"използвана. Моля, поискайте нова промяна на паролата." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Ние ви пратихме мейл с инструкции за настройка на вашата парола, ако " +"съществува профил с имейла, който сте въвели. Вие трябва да ги получат скоро." + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Ако не получите имейл, моля подсигурете се, че сте въвели правилно адреса с " +"който сте се регистрирал/a и/или проверете спам папката във вашата поща." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Вие сте получили този имейл, защото сте поискали да промените паролата за " +"вашия потребителски акаунт в %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "Моля, отидете на следната страница и изберете нова парола:" + +msgid "Your username, in case you've forgotten:" +msgstr "Вашето потребителско име, в случай, че сте го забравили:" + +msgid "Thanks for using our site!" +msgstr "Благодарим, че ползвате сайта ни!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "Екипът на %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" +"Забравили сте си паролата? Въведете своя имейл адрес по-долу, а ние ще ви " +"изпратим инструкции за създаване на нова." + +msgid "Email address:" +msgstr "E-mail адреси:" + +msgid "Reset my password" +msgstr "Нова парола" + +msgid "All dates" +msgstr "Всички дати" + +#, python-format +msgid "Select %s" +msgstr "Изберете %s" + +#, python-format +msgid "Select %s to change" +msgstr "Изберете %s за промяна" + +msgid "Date:" +msgstr "Дата:" + +msgid "Time:" +msgstr "Час:" + +msgid "Lookup" +msgstr "Търсене" + +msgid "Currently:" +msgstr "Сега:" + +msgid "Change:" +msgstr "Промени" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/bg/LC_MESSAGES/djangojs.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/bg/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..4940bb9f4e717d1ffce8e341d7a5f5dc0effc4b1 GIT binary patch literal 5565 zcmcJRU2Ggz6~`|$(BeY+0ik@9a2v=M>8|ZGB<+S&Bxzg{a1zB!OA$gE?_RH`nVnh9 z%-Y$fHc1PleMp-IsT9&GEmDyX!Ab4JwPU9*AOV$_dEfzrD&V0=yzoMWR36}W?u>WW zjgzJzuJ+D==`o;GtbwBv6>v+%(EmLX>*aANYp3QL@ z`~c%i`S=&$hZ(<~kAI)zpTLhW|JNMf%JDij_b`78_#yCi@U!3=a1A&B-T>Bf90TS2 zM?h4l?||2XPv+xia(ou#r%v$@7hVEI&�fn*hH7PJv}`IZ9={0*br`irxmuPaWbR zc0K}%olk(G=OlO%`~mnhSY#6_)oY;W`z5#){4FT^Ze;Q~a0Mv)Ccp-`i^Y$E=X3lu zxPtK;`S>6C_y&yl81pN^kAruCKO|Orz(K}u-k90Di6Dr+tsqNkA1HD8CXZXdT0Y+b zmot70{3Q4c_-XKG;BDZq^7%i5qVHeeUhpP@>44t`Zw6n>F$ED(e*xv(zvtt(K`2t! zbC}?AQ21Gqk5_{H)M_4xs!iZUa0fUC{u|_{=5EUNy$;H`zsvDWa1G;sg13SzSrj|^ z!JFadUhp<>AI{6UHG~8kU;}J{V(;I;KY(w6Z-WU={}KERq`x2h2|*G3X^v-dJe%WW zju&#A0XbHEf-Y@i2KGs)Y!f?+bm3ckxPvZD;vr4)Okyrga%(MJVz`nnwn*EMf#p_S z3;9@llJ*5UDX2ap0~&PLCLG|ZT1UT=eivQhFI=yuYdVywe!A3!)pTin^v}^Z(O1!> zeJTUh3zDw(9^t-ik~?y*rG1_*xhrv2tJg)wTOa9QM6X^~@nc?@FqPO;ue!EbJH>iY zZPpEe?Tyg&)b?hr8O3V*nB#iRuxIq@NbPj|it*IW(IALS4%*T8IdRvh?AE(Rarelx zdn4mpWu99(sN+CatUB#@9@E;1b-*b_wR2%TH1%N2*mXp+-5s&}OvTiPO{fOUaM*Oh zmKt!qnDJNKs!@9!-_Gr6dM&l5=^HiZgq2aAEj8#?eYZ9mtGz+s^N3AJKNK{z6N4?AW%GCa+EuzDhJ_9 z4Vgxq$qkJnSRQpF%`YA`+H)hA9??!$fQ#1uy3<;SNfgwL9&Y7X(hmVz(-{8U~li)L8fvuX!J_S*EMOc;?ZPe5!{`L@tUt$*fU_JYKkwkfxnV z><0dwmcLdm;IEB!-KmoBzQn=tYla)`V?os&bE{3q<80$qBg@TNlC=>A!(7pp_JY8Y zKN66suzWuxH{+Pip~F}vIaF4L#FA{Scy-ed(%q&-?5xU6*ftI}E;CNIOkC9aJ>x_s z%L={ktHPV?&n)M@`vzT1hNciUGs`kcx{PZ2*^x_AVXAIy%hLiUyGN|KqOOZzYwtTX zjk}mI%vA`YxTpf3Hxm;sJrKHtY}r8f++g6#++g?IkP|m0xXXqX%{Hy%qPg;DGmJ#C z+$~vdn#(62G*v&Feo*ZXgNG^Kh27P{115~fm6EPLOiBbj2TUUf65-^?c2V;zBue{K#|SAS~$zjBh+Dz)&2t4hCcTOJfJ4?DfmFIv@goRyx zC8$!OO8V|$H*OnR(!;f${a!P4yuv^b)}xa48+I6N+qhL{uiMu7`i^b7fBn{;_6IeY zOD5W%+hj^7)5(S8Z2D+2k<2YElpbbBw^%aGw>SR;vpAbfC6hXtN6YbKQYB9%mrysI z%*yMzN699{SS^UXgq9JW+d>8mk}gwlN+7#bp;zwhc}bKP8L(a3fG3x@4a6^*$yG^2+LvCm zNDdb@SvAl0&gEX>YRyqjW)Pd^26CEsqw$TaZA;doTc|mh{Im*@Vo=};+KfeLxO_=1ASgI@zAZNw{Q+Y(%kKMA0Wh$>UDC+V2`UaKc(P zpB~364uc6PfOt1;-Q>?PA6Ut<`DCtRMQ0AX+I3@*FS!0JG-qic9_2^y2cymX5}}ZzB*wFB$-={{oIs$(WVXon zoNzLi{X;=F20w+PShtj6xN?+QHE-!%u!G8o77jrV{x4!xr^jUOEH}db)ydTI-w8r& V-r(E|_IH|pQYv|wFjJe=e*pSlQ#}9x literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/bg/LC_MESSAGES/djangojs.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/bg/LC_MESSAGES/djangojs.po new file mode 100644 index 0000000..ded64ac --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/bg/LC_MESSAGES/djangojs.po @@ -0,0 +1,218 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Venelin Stoykov , 2015-2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-17 23:12+0200\n" +"PO-Revision-Date: 2017-09-19 16:41+0000\n" +"Last-Translator: Venelin Stoykov \n" +"Language-Team: Bulgarian (http://www.transifex.com/django/django/language/" +"bg/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Налични %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Това е списък на наличните %s . Можете да изберете някои, като ги изберете в " +"полето по-долу и след това кликнете върху \"Избор\" стрелка между двете " +"кутии." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Въведете в това поле, за да филтрирате списъка на наличните %s." + +msgid "Filter" +msgstr "Филтър" + +msgid "Choose all" +msgstr "Избери всички" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Кликнете, за да изберете всички %s наведнъж." + +msgid "Choose" +msgstr "Избирам" + +msgid "Remove" +msgstr "Премахни" + +#, javascript-format +msgid "Chosen %s" +msgstr "Избрахме %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Това е списък на избрания %s. Можете да премахнете някои, като ги изберете в " +"полето по-долу и след това щракнете върху \"Премахни\" стрелка между двете " +"кутии." + +msgid "Remove all" +msgstr "Премахване на всички" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Кликнете, за да премахнете всички избрани %s наведнъж." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s на %(cnt)s е избран" +msgstr[1] "%(sel)s на %(cnt)s са избрани" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Имате незапазени промени по отделни полета за редактиране. Ако започнете " +"друго, незаписаните промени ще бъдат загубени." + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"Вие сте избрали действие, но не сте записали промените по полета. Моля, " +"кликнете ОК, за да се запишат. Трябва отново да започнете действие." + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Вие сте избрали дадена дейност, а не сте направили някакви промени по " +"полетата. Вероятно търсите Go бутон, а не бутона Save." + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Бележка: Вие сте %s час напред от времето на сървъра." +msgstr[1] "Бележка: Вие сте %s часа напред от времето на сървъра" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Внимание: Вие сте %s час назад от времето на сървъра." +msgstr[1] "Внимание: Вие сте %s часа назад от времето на сървъра." + +msgid "Now" +msgstr "Сега" + +msgid "Choose a Time" +msgstr "Изберете време" + +msgid "Choose a time" +msgstr "Избери време" + +msgid "Midnight" +msgstr "Полунощ" + +msgid "6 a.m." +msgstr "6 a.m." + +msgid "Noon" +msgstr "По обяд" + +msgid "6 p.m." +msgstr "6 след обяд" + +msgid "Cancel" +msgstr "Отказ" + +msgid "Today" +msgstr "Днес" + +msgid "Choose a Date" +msgstr "Изберете дата" + +msgid "Yesterday" +msgstr "Вчера" + +msgid "Tomorrow" +msgstr "Утре" + +msgid "January" +msgstr "Януари" + +msgid "February" +msgstr "Февруари" + +msgid "March" +msgstr "Март" + +msgid "April" +msgstr "Април" + +msgid "May" +msgstr "Май" + +msgid "June" +msgstr "Юни" + +msgid "July" +msgstr "Юли" + +msgid "August" +msgstr "Август" + +msgid "September" +msgstr "Септември" + +msgid "October" +msgstr "Октомври" + +msgid "November" +msgstr "Ноември" + +msgid "December" +msgstr "Декември" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "Н" + +msgctxt "one letter Monday" +msgid "M" +msgstr "П" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "В" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "С" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "Ч" + +msgctxt "one letter Friday" +msgid "F" +msgstr "П" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "С" + +msgid "Show" +msgstr "Покажи" + +msgid "Hide" +msgstr "Скрий" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/bn/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/bn/LC_MESSAGES/django.po new file mode 100644 index 0000000..e36fb61 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/bn/LC_MESSAGES/django.po @@ -0,0 +1,652 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Anubhab Baksi, 2013 +# Jannis Leidel , 2011 +# Tahmid Rafi , 2012-2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:41+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Bengali (http://www.transifex.com/django/django/language/" +"bn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(count)d টি %(items)s সফলভাবে মুছে ফেলা হয়েছে" + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "%(name)s ডিলিট করা সম্ভব নয়" + +msgid "Are you sure?" +msgstr "আপনি কি নিশ্চিত?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "চিহ্নিত অংশটি %(verbose_name_plural)s মুছে ফেলুন" + +msgid "Administration" +msgstr "" + +msgid "All" +msgstr "সকল" + +msgid "Yes" +msgstr "হ্যাঁ" + +msgid "No" +msgstr "না" + +msgid "Unknown" +msgstr "অজানা" + +msgid "Any date" +msgstr "যে কোন তারিখ" + +msgid "Today" +msgstr "‍আজ" + +msgid "Past 7 days" +msgstr "শেষ ৭ দিন" + +msgid "This month" +msgstr "এ মাসে" + +msgid "This year" +msgstr "এ বছরে" + +msgid "No date" +msgstr "" + +msgid "Has date" +msgstr "" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" + +msgid "Action:" +msgstr "কাজ:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "আরো একটি %(verbose_name)s যোগ করুন" + +msgid "Remove" +msgstr "মুছে ফেলুন" + +msgid "action time" +msgstr "কার্য সময়" + +msgid "user" +msgstr "" + +msgid "content type" +msgstr "" + +msgid "object id" +msgstr "অবজেক্ট আইডি" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/3/library/functions.html#repr) +msgid "object repr" +msgstr "অবজেক্ট উপস্থাপক" + +msgid "action flag" +msgstr "কার্যচিহ্ন" + +msgid "change message" +msgstr "বার্তা পরিবর্তন করুন" + +msgid "log entry" +msgstr "লগ এন্ট্রি" + +msgid "log entries" +msgstr "লগ এন্ট্রিসমূহ" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "%(object)s অ্যাড করা হয়েছে" + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "\"%(object)s\" ডিলিট করা হয়েছে" + +msgid "LogEntry Object" +msgstr "লগ-এন্ট্রি দ্রব্য" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "" + +msgid "Added." +msgstr "" + +msgid "and" +msgstr "এবং" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "" + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "" + +msgid "No fields changed." +msgstr "কোন ফিল্ড পরিবর্তন হয়নি।" + +msgid "None" +msgstr "কিছু না" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "কাজ করার আগে বস্তুগুলিকে অবশ্যই চিহ্নিত করতে হবে। কোনো বস্তু পরিবর্তিত হয়নি।" + +msgid "No action selected." +msgstr "কোনো কাজ " + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "%(name)s \"%(obj)s\" সফলতার সাথে মুছে ফেলা হয়েছে।" + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "%s যোগ করুন" + +#, python-format +msgid "Change %s" +msgstr "%s পরিবর্তন করুন" + +msgid "Database error" +msgstr "ডাটাবেস সমস্যা" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "%(cnt)s টি থেকে ০ টি সিলেক্ট করা হয়েছে" + +#, python-format +msgid "Change history: %s" +msgstr "ইতিহাস পরিবর্তনঃ %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" + +msgid "Django site admin" +msgstr "জ্যাঙ্গো সাইট প্রশাসক" + +msgid "Django administration" +msgstr "জ্যাঙ্গো প্রশাসন" + +msgid "Site administration" +msgstr "সাইট প্রশাসন" + +msgid "Log in" +msgstr "প্রবেশ করুন" + +#, python-format +msgid "%(app)s administration" +msgstr "" + +msgid "Page not found" +msgstr "পৃষ্ঠা পাওয়া যায়নি" + +msgid "We're sorry, but the requested page could not be found." +msgstr "দুঃখিত, অনুরোধকৃত পাতাটি পাওয়া যায়নি।" + +msgid "Home" +msgstr "নীড়পাতা" + +msgid "Server error" +msgstr "সার্ভার সমস্যা" + +msgid "Server error (500)" +msgstr "সার্ভার সমস্যা (৫০০)" + +msgid "Server Error (500)" +msgstr "সার্ভার সমস্যা (৫০০)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Run the selected action" +msgstr "চিহ্নিত কাজটি শুরু করুন" + +msgid "Go" +msgstr "যান" + +msgid "Click here to select the objects across all pages" +msgstr "সকল পৃষ্ঠার দ্রব্য পছন্দ করতে এখানে ক্লিক করুন" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "%(total_count)s টি %(module_name)s এর সবগুলোই সিলেক্ট করুন" + +msgid "Clear selection" +msgstr "চিহ্নিত অংশের চিহ্ন মুছে ফেলুন" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"প্রথমে একটি সদস্যনাম ও পাসওয়ার্ড প্রবেশ করান। তারপরে আপনি ‍আরও সদস্য-অপশন যুক্ত করতে " +"পারবেন।" + +msgid "Enter a username and password." +msgstr "ইউজার নেইম এবং পাসওয়ার্ড টাইপ করুন।" + +msgid "Change password" +msgstr "পাসওয়ার্ড বদলান" + +msgid "Please correct the error below." +msgstr "অনুগ্রহ করে নিচের ভুলগুলো সংশোধন করুন।" + +msgid "Please correct the errors below." +msgstr "" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "%(username)s সদস্যের জন্য নতুন পাসওয়ার্ড দিন।" + +msgid "Welcome," +msgstr "স্বাগতম," + +msgid "View site" +msgstr "" + +msgid "Documentation" +msgstr "সহায়িকা" + +msgid "Log out" +msgstr "প্রস্থান" + +#, python-format +msgid "Add %(name)s" +msgstr "%(name)s যোগ করুন" + +msgid "History" +msgstr "ইতিহাস" + +msgid "View on site" +msgstr "সাইটে দেখুন" + +msgid "Filter" +msgstr "ফিল্টার" + +msgid "Remove from sorting" +msgstr "ক্রমানুসারে সাজানো থেকে বিরত হোন" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "সাজানোর ক্রম: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "ক্রমানুসারে সাজানো চালু করুন/ বন্ধ করুন" + +msgid "Delete" +msgstr "মুছুন" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"%(object_name)s '%(escaped_object)s' মুছে ফেললে এর সম্পর্কিত অবজেক্টগুলোও মুছে " +"যাবে, কিন্তু আপনার নিম্নবর্ণিত অবজেক্টগুলো মোছার অধিকার নেইঃ" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"আপনি কি %(object_name)s \"%(escaped_object)s\" মুছে ফেলার ব্যাপারে নিশ্চিত? " +"নিম্নে বর্ণিত সকল আইটেম মুছে যাবেঃ" + +msgid "Objects" +msgstr "" + +msgid "Yes, I'm sure" +msgstr "হ্যা়ঁ, আমি নিশ্চিত" + +msgid "No, take me back" +msgstr "" + +msgid "Delete multiple objects" +msgstr "একাধিক জিনিস মুছে ফেলুন" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" + +msgid "Change" +msgstr "পরিবর্তন" + +msgid "Delete?" +msgstr "মুছে ফেলুন?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " %(filter_title)s অনুযায়ী " + +msgid "Summary" +msgstr "" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "%(name)s এপ্লিকেশন এর মডেল গুলো" + +msgid "Add" +msgstr "যোগ করুন" + +msgid "You don't have permission to edit anything." +msgstr "কোন কিছু পরিবর্তনে আপনার অধিকার নেই।" + +msgid "Recent actions" +msgstr "" + +msgid "My actions" +msgstr "" + +msgid "None available" +msgstr "কিছুই পাওয়া যায়নি" + +msgid "Unknown content" +msgstr "অজানা বিষয়" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"আপনার ডাটাবেস ইনস্টলে সমস্যা হয়েছে। নিশ্চিত করুন যে, ডাটাবেস টেবিলগুলো সঠিকভাবে " +"তৈরী হয়েছে, এবং যথাযথ সদস্যের ডাটাবেস পড়ার অধিকার রয়েছে।" + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "ইউজার নেইম অথবা পাসওয়ার্ড ভুলে গেছেন?" + +msgid "Date/time" +msgstr "তারিখ/সময়" + +msgid "User" +msgstr "সদস্য" + +msgid "Action" +msgstr "কার্য" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "এই অবজেক্টের কোন ইতিহাস নেই। সম্ভবত এটি প্রশাসন সাইট দিয়ে তৈরী করা হয়নি।" + +msgid "Show all" +msgstr "সব দেখান" + +msgid "Save" +msgstr "সংরক্ষণ করুন" + +msgid "Popup closing..." +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "" + +msgid "Search" +msgstr "সার্চ" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "মোট %(full_result_count)s" + +msgid "Save as new" +msgstr "নতুনভাবে সংরক্ষণ করুন" + +msgid "Save and add another" +msgstr "সংরক্ষণ করুন এবং আরেকটি যোগ করুন" + +msgid "Save and continue editing" +msgstr "সংরক্ষণ করুন এবং সম্পাদনা চালিয়ে যান" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "ওয়েবসাইটে কিছু সময় কাটানোর জন্য আপনাকে আন্তরিক ধন্যবাদ।" + +msgid "Log in again" +msgstr "পুনরায় প্রবেশ করুন" + +msgid "Password change" +msgstr "পাসওয়ার্ড বদলান" + +msgid "Your password was changed." +msgstr "আপনার পাসওয়ার্ড বদলানো হয়েছে।" + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"অনুগ্রহ করে আপনার পুরনো পাসওয়ার্ড প্রবেশ করান, নিরাপত্তার কাতিরে, এবং পরপর দু’বার " +"নতুন পাসওয়ার্ড প্রবেশ করান, যাচাই করার জন্য।" + +msgid "Change my password" +msgstr "আমার পাসওয়ার্ড পরিবর্তন করুন" + +msgid "Password reset" +msgstr "পাসওয়ার্ড রিসেট করুন" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "আপনার পাসওয়ার্ড দেয়া হয়েছে। আপনি এখন প্রবেশ (লগইন) করতে পারেন।" + +msgid "Password reset confirmation" +msgstr "পাসওয়ার্ড রিসেট নিশ্চিত করুন" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"অনুগ্রহ করে আপনার পাসওয়ার্ড দুবার প্রবেশ করান, যাতে আমরা যাচাই করতে পারি আপনি " +"সঠিকভাবে টাইপ করেছেন।" + +msgid "New password:" +msgstr "নতুন পাসওয়ার্ডঃ" + +msgid "Confirm password:" +msgstr "পাসওয়ার্ড নিশ্চিতকরণঃ" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"পাসওয়ার্ড রিসেট লিঙ্কটি ঠিক নয়, হয়তো এটা ইতোমধ্যে ব্যবহৃত হয়েছে। পাসওয়ার্ড " +"রিসেটের জন্য অনুগ্রহ করে নতুনভাবে আবেদন করুন।" + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"আপনি এই ই-মেইলটি পেয়েছেন কারন আপনি %(site_name)s এ আপনার ইউজার একাউন্টের " +"পাসওয়ার্ড রিসেট এর জন্য অনুরোধ করেছেন।" + +msgid "Please go to the following page and choose a new password:" +msgstr "অনুগ্রহ করে নিচের পাতাটিতে যান এবং নতুন পাসওয়ার্ড বাছাই করুনঃ" + +msgid "Your username, in case you've forgotten:" +msgstr "আপনার সদস্যনাম, যদি ভুলে গিয়ে থাকেনঃ" + +msgid "Thanks for using our site!" +msgstr "আমাদের সাইট ব্যবহারের জন্য ধন্যবাদ!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s দল" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" +"পাসওয়ার্ড ভুলে গেছেন? নিচে আপনার ইমেইল এড্রেস দিন, এবং আমরা নতুন পাসওয়ার্ড সেট " +"করার নিয়ম-কানুন আপনাকে ই-মেইল করব।" + +msgid "Email address:" +msgstr "ইমেইল ঠিকানা:" + +msgid "Reset my password" +msgstr "আমার পাসওয়ার্ড রিসেট করুন" + +msgid "All dates" +msgstr "সকল তারিখ" + +#, python-format +msgid "Select %s" +msgstr "%s বাছাই করুন" + +#, python-format +msgid "Select %s to change" +msgstr "%s পরিবর্তনের জন্য বাছাই করুন" + +msgid "Date:" +msgstr "তারিখঃ" + +msgid "Time:" +msgstr "সময়ঃ" + +msgid "Lookup" +msgstr "খুঁজুন" + +msgid "Currently:" +msgstr "বর্তমান অবস্থা:" + +msgid "Change:" +msgstr "পরিবর্তন:" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/bn/LC_MESSAGES/djangojs.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/bn/LC_MESSAGES/djangojs.po new file mode 100644 index 0000000..139d81c --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/bn/LC_MESSAGES/djangojs.po @@ -0,0 +1,207 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Tahmid Rafi , 2013 +# Tahmid Rafi , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-17 23:12+0200\n" +"PO-Revision-Date: 2017-09-19 16:41+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Bengali (http://www.transifex.com/django/django/language/" +"bn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "%s বিদ্যমান" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "" + +msgid "Filter" +msgstr "ফিল্টার" + +msgid "Choose all" +msgstr "সব বাছাই করুন" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "সব %s একবারে বাছাই করার জন্য ক্লিক করুন।" + +msgid "Choose" +msgstr "বাছাই করুন" + +msgid "Remove" +msgstr "মুছে ফেলুন" + +#, javascript-format +msgid "Chosen %s" +msgstr "%s বাছাই করা হয়েছে" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" + +msgid "Remove all" +msgstr "সব মুছে ফেলুন" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "" + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "" +msgstr[1] "" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "নোট: আপনি সার্ভার সময়ের চেয়ে %s ঘন্টা সামনে আছেন।" +msgstr[1] "নোট: আপনি সার্ভার সময়ের চেয়ে %s ঘন্টা সামনে আছেন।" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "নোট: আপনি সার্ভার সময়ের চেয়ে %s ঘন্টা পেছনে আছেন।" +msgstr[1] "নোট: আপনি সার্ভার সময়ের চেয়ে %s ঘন্টা পেছনে আছেন।" + +msgid "Now" +msgstr "এখন" + +msgid "Choose a Time" +msgstr "" + +msgid "Choose a time" +msgstr "সময় নির্বাচন করুন" + +msgid "Midnight" +msgstr "মধ্যরাত" + +msgid "6 a.m." +msgstr "৬ পূর্বাহ্ন" + +msgid "Noon" +msgstr "দুপুর" + +msgid "6 p.m." +msgstr "" + +msgid "Cancel" +msgstr "বাতিল" + +msgid "Today" +msgstr "আজ" + +msgid "Choose a Date" +msgstr "" + +msgid "Yesterday" +msgstr "গতকাল" + +msgid "Tomorrow" +msgstr "আগামীকাল" + +msgid "January" +msgstr "" + +msgid "February" +msgstr "" + +msgid "March" +msgstr "" + +msgid "April" +msgstr "" + +msgid "May" +msgstr "" + +msgid "June" +msgstr "" + +msgid "July" +msgstr "" + +msgid "August" +msgstr "" + +msgid "September" +msgstr "" + +msgid "October" +msgstr "" + +msgid "November" +msgstr "" + +msgid "December" +msgstr "" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "" + +msgctxt "one letter Monday" +msgid "M" +msgstr "" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "" + +msgctxt "one letter Friday" +msgid "F" +msgstr "" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "" + +msgid "Show" +msgstr "দেখান" + +msgid "Hide" +msgstr "লুকান" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/br/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/br/LC_MESSAGES/django.po new file mode 100644 index 0000000..cbdc359 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/br/LC_MESSAGES/django.po @@ -0,0 +1,671 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Fulup , 2012 +# Irriep Nala Novram , 2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-01-18 00:36+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Breton (http://www.transifex.com/django/django/language/br/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: br\n" +"Plural-Forms: nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !" +"=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n" +"%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > " +"19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 " +"&& n % 1000000 == 0) ? 3 : 4);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "" + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "" + +msgid "Are you sure?" +msgstr "Ha sur oc'h?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Dilemel %(verbose_name_plural)s diuzet" + +msgid "Administration" +msgstr "Melestradurezh" + +msgid "All" +msgstr "An holl" + +msgid "Yes" +msgstr "Ya" + +msgid "No" +msgstr "Ket" + +msgid "Unknown" +msgstr "Dianav" + +msgid "Any date" +msgstr "Forzh pegoulz" + +msgid "Today" +msgstr "Hiziv" + +msgid "Past 7 days" +msgstr "Er 7 devezh diwezhañ" + +msgid "This month" +msgstr "Ar miz-mañ" + +msgid "This year" +msgstr "Ar bloaz-mañ" + +msgid "No date" +msgstr "Deiziad ebet" + +msgid "Has date" +msgstr "D'an deiziad" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" + +msgid "Action:" +msgstr "Ober:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Ouzhpennañ %(verbose_name)s all" + +msgid "Remove" +msgstr "Lemel kuit" + +msgid "Addition" +msgstr "Sammañ" + +msgid "Change" +msgstr "Cheñch" + +msgid "Deletion" +msgstr "Diverkadur" + +msgid "action time" +msgstr "eur an ober" + +msgid "user" +msgstr "implijer" + +msgid "content type" +msgstr "doare endalc'had" + +msgid "object id" +msgstr "id an objed" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "" + +msgid "action flag" +msgstr "ober banniel" + +msgid "change message" +msgstr "Kemennadenn cheñchamant" + +msgid "log entry" +msgstr "" + +msgid "log entries" +msgstr "" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "Ouzhpennet \"%(object)s\"." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "Cheñchet \"%(object)s\" - %(changes)s" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "Dilamet \"%(object)s.\"" + +msgid "LogEntry Object" +msgstr "" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "Ouzhpennet {name} \"{object}\"." + +msgid "Added." +msgstr "Ouzhpennet." + +msgid "and" +msgstr "ha" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "Cheñchet {fields} evit {name} \"{object}\"." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Cheñchet {fields}." + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "Dilamet {name} \"{object}\"." + +msgid "No fields changed." +msgstr "Maezienn ebet cheñchet." + +msgid "None" +msgstr "Hini ebet" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "" + +msgid "You may edit it again below." +msgstr "Rankout a rit ec'h aozañ adarre dindan." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" + +msgid "No action selected." +msgstr "Ober ebet diuzet." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "" + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "Ouzhpennañ %s" + +#, python-format +msgid "Change %s" +msgstr "Cheñch %s" + +#, python-format +msgid "View %s" +msgstr "Gwelet %s" + +msgid "Database error" +msgstr "Fazi diaz-roadennoù" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s a zo bet cheñchet mat." +msgstr[1] "%(count)s %(name)s a zo bet cheñchet mat. " +msgstr[2] "%(count)s %(name)s a zo bet cheñchet mat. " +msgstr[3] "%(count)s %(name)s a zo bet cheñchet mat." +msgstr[4] "%(count)s %(name)s a zo bet cheñchet mat." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s diuzet" +msgstr[1] "%(total_count)s diuzet" +msgstr[2] "%(total_count)s diuzet" +msgstr[3] "%(total_count)s diuzet" +msgstr[4] "Pep %(total_count)s diuzet" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 diwar %(cnt)s diuzet" + +#, python-format +msgid "Change history: %s" +msgstr "Istor ar cheñchadurioù: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" + +msgid "Django site admin" +msgstr "Lec'hienn verañ Django" + +msgid "Django administration" +msgstr "Merañ Django" + +msgid "Site administration" +msgstr "Merañ al lec'hienn" + +msgid "Log in" +msgstr "Kevreañ" + +#, python-format +msgid "%(app)s administration" +msgstr "" + +msgid "Page not found" +msgstr "N'eo ket bet kavet ar bajenn" + +msgid "We're sorry, but the requested page could not be found." +msgstr "" + +msgid "Home" +msgstr "Degemer" + +msgid "Server error" +msgstr "Fazi servijer" + +msgid "Server error (500)" +msgstr "Fazi servijer (500)" + +msgid "Server Error (500)" +msgstr "Fazi servijer (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Run the selected action" +msgstr "" + +msgid "Go" +msgstr "Mont" + +msgid "Click here to select the objects across all pages" +msgstr "" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "" + +msgid "Clear selection" +msgstr "Riñsañ an diuzadenn" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" + +msgid "Enter a username and password." +msgstr "Merkit un anv implijer hag ur ger-tremen." + +msgid "Change password" +msgstr "Cheñch ger-tremen" + +msgid "Please correct the error below." +msgstr "" + +msgid "Please correct the errors below." +msgstr "" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" + +msgid "Welcome," +msgstr "Degemer mat," + +msgid "View site" +msgstr "" + +msgid "Documentation" +msgstr "Teulioù" + +msgid "Log out" +msgstr "Digevreañ" + +#, python-format +msgid "Add %(name)s" +msgstr "Ouzhpennañ %(name)s" + +msgid "History" +msgstr "Istor" + +msgid "View on site" +msgstr "Gwelet war al lec'hienn" + +msgid "Filter" +msgstr "Sil" + +msgid "Remove from sorting" +msgstr "" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "" + +msgid "Toggle sorting" +msgstr "Eilpennañ an diuzadenn" + +msgid "Delete" +msgstr "Diverkañ" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" + +msgid "Objects" +msgstr "" + +msgid "Yes, I'm sure" +msgstr "Ya, sur on" + +msgid "No, take me back" +msgstr "" + +msgid "Delete multiple objects" +msgstr "" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" + +msgid "View" +msgstr "" + +msgid "Delete?" +msgstr "Diverkañ ?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " dre %(filter_title)s " + +msgid "Summary" +msgstr "" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "" + +msgid "Add" +msgstr "Ouzhpennañ" + +msgid "You don't have permission to view or edit anything." +msgstr "" + +msgid "Recent actions" +msgstr "" + +msgid "My actions" +msgstr "" + +msgid "None available" +msgstr "" + +msgid "Unknown content" +msgstr "Endalc'had dianav" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "Disoñjet ho ker-tremen pe hoc'h anv implijer ganeoc'h ?" + +msgid "Date/time" +msgstr "Deiziad/eur" + +msgid "User" +msgstr "Implijer" + +msgid "Action" +msgstr "Ober" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" + +msgid "Show all" +msgstr "Diskouez pep tra" + +msgid "Save" +msgstr "Enrollañ" + +msgid "Popup closing…" +msgstr "" + +msgid "Search" +msgstr "Klask" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "" + +msgid "Save as new" +msgstr "Enrollañ evel nevez" + +msgid "Save and add another" +msgstr "Enrollañ hag ouzhpennañ unan all" + +msgid "Save and continue editing" +msgstr "Enrollañ ha derc'hel da gemmañ" + +msgid "Save and view" +msgstr "" + +msgid "Close" +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "" + +msgid "Log in again" +msgstr "Kevreañ en-dro" + +msgid "Password change" +msgstr "Cheñch ho ker-tremen" + +msgid "Your password was changed." +msgstr "Cheñchet eo bet ho ker-tremen." + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" + +msgid "Change my password" +msgstr "Cheñch ma ger-tremen" + +msgid "Password reset" +msgstr "Adderaouekaat ar ger-tremen" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "" + +msgid "Password reset confirmation" +msgstr "Kadarnaat eo bet cheñchet ar ger-tremen" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" + +msgid "New password:" +msgstr "Ger-tremen nevez :" + +msgid "Confirm password:" +msgstr "Kadarnaat ar ger-tremen :" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" + +msgid "Please go to the following page and choose a new password:" +msgstr "" + +msgid "Your username, in case you've forgotten:" +msgstr "" + +msgid "Thanks for using our site!" +msgstr "Ho trugarekaat da ober gant hol lec'hienn !" + +#, python-format +msgid "The %(site_name)s team" +msgstr "" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" + +msgid "Email address:" +msgstr "" + +msgid "Reset my password" +msgstr "" + +msgid "All dates" +msgstr "An holl zeiziadoù" + +#, python-format +msgid "Select %s" +msgstr "Diuzañ %s" + +#, python-format +msgid "Select %s to change" +msgstr "" + +#, python-format +msgid "Select %s to view" +msgstr "" + +msgid "Date:" +msgstr "Deiziad :" + +msgid "Time:" +msgstr "Eur :" + +msgid "Lookup" +msgstr "Klask" + +msgid "Currently:" +msgstr "" + +msgid "Change:" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/br/LC_MESSAGES/djangojs.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/br/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..58664d0728fe6a5f19c156c0cf1cdb38ac2d07c1 GIT binary patch literal 1658 zcmZ9LzjGT!6vr152#B8vq+litk0QnN=9XyT#1KmnmOB=6tHG3;7 z)}(@hA{ER~LP14AlL}@i;qPEb$3H-qg6}(@BS$;)_Oox_d*6F|cl-CH^FIiT%dji3 zzhLje%yXD9{sCVEAA_%g{}%p#1)qSgVgKCoLX^OZ;LG3@@I7z_oB=mM*6D-i!2rGl z9vA-C;5qo;f}HmdWWDc;_>bTV@P7um?iY}s^9cMM_6IE2MH25HgBQSWK(2d;iTnQ! zPgzBHbHr@r8`RO>Wt|+fCPz$C&%hd$?b! z3>v((=iNQk4$-Yn^ttkxb~dHXJ!!kHw66xvhiEtJ>P~cH*v+D*OR2Q?Su<*QB?EG! z4H;BQ^Kr5g#Y<6Ar6ft0;%o7I93wH>S4WyPCwbK6q4XvRYxF4C^Eo*z=uA|0whq9}prjq@XZg>@(rP*ExgS1i^jYj3b zg8D$+FSlL4a&n|on4-GU@|C&L?ycRMlfx(FxYTeqD2t|!2RL0&_d{i1q_(U0bkb)k z)bBPoqm@Y>KkGpG=%#JEj<(&DR$4kd?J}j7FYTG3mnPbDzMrLJ2f3TomsaUyS)ZM? zSCg3PbxP)FW`=S%ruX4bZB(cH8vJ#NDSfIiKdmseQJwN@@YgAsC@j!}2gLo<>x+|R z?X2t?q1!wQim%`n^z9FNPL6wGLt!QU2P-6dssI20 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/bs/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/bs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f920c9bbcaae13a4185937772d1e831d41236c16 GIT binary patch literal 8845 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 E0AsPq=>Px# literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/bs/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/bs/LC_MESSAGES/django.po new file mode 100644 index 0000000..1d7eb6e --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/bs/LC_MESSAGES/django.po @@ -0,0 +1,657 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Filip Dupanović , 2011 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:41+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Bosnian (http://www.transifex.com/django/django/language/" +"bs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bs\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Uspješno izbrisano %(count)d %(items)s." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "" + +msgid "Are you sure?" +msgstr "Da li ste sigurni?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Izbriši odabrane %(verbose_name_plural)s" + +msgid "Administration" +msgstr "" + +msgid "All" +msgstr "Svi" + +msgid "Yes" +msgstr "Da" + +msgid "No" +msgstr "Ne" + +msgid "Unknown" +msgstr "Nepoznato" + +msgid "Any date" +msgstr "Svi datumi" + +msgid "Today" +msgstr "Danas" + +msgid "Past 7 days" +msgstr "Poslednjih 7 dana" + +msgid "This month" +msgstr "Ovaj mesec" + +msgid "This year" +msgstr "Ova godina" + +msgid "No date" +msgstr "" + +msgid "Has date" +msgstr "" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" + +msgid "Action:" +msgstr "Radnja:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Dodaj još jedan %(verbose_name)s" + +msgid "Remove" +msgstr "Obriši" + +msgid "action time" +msgstr "vrijeme radnje" + +msgid "user" +msgstr "" + +msgid "content type" +msgstr "" + +msgid "object id" +msgstr "id objekta" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/3/library/functions.html#repr) +msgid "object repr" +msgstr "repr objekta" + +msgid "action flag" +msgstr "oznaka radnje" + +msgid "change message" +msgstr "opis izmjene" + +msgid "log entry" +msgstr "zapis u logovima" + +msgid "log entries" +msgstr "zapisi u logovima" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "" + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "" + +msgid "LogEntry Object" +msgstr "" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "" + +msgid "Added." +msgstr "" + +msgid "and" +msgstr "i" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "" + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "" + +msgid "No fields changed." +msgstr "Nije bilo izmjena polja." + +msgid "None" +msgstr "Nijedan" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Predmeti moraju biti izabrani da bi se mogla obaviti akcija nad njima. " +"Nijedan predmet nije bio izmjenjen." + +msgid "No action selected." +msgstr "Nijedna akcija nije izabrana." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "Objekat „%(obj)s“ klase %(name)s obrisan je uspješno." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "Dodaj objekat klase %s" + +#, python-format +msgid "Change %s" +msgstr "Izmjeni objekat klase %s" + +msgid "Database error" +msgstr "Greška u bazi podataka" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 od %(cnt)s izabrani" + +#, python-format +msgid "Change history: %s" +msgstr "Historijat izmjena: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" + +msgid "Django site admin" +msgstr "Django administracija sajta" + +msgid "Django administration" +msgstr "Django administracija" + +msgid "Site administration" +msgstr "Administracija sistema" + +msgid "Log in" +msgstr "Prijava" + +#, python-format +msgid "%(app)s administration" +msgstr "" + +msgid "Page not found" +msgstr "Stranica nije pronađena" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Žao nam je, tražena stranica nije pronađena." + +msgid "Home" +msgstr "Početna" + +msgid "Server error" +msgstr "Greška na serveru" + +msgid "Server error (500)" +msgstr "Greška na serveru (500)" + +msgid "Server Error (500)" +msgstr "Greška na serveru (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Run the selected action" +msgstr "Pokreni odabranu radnju" + +msgid "Go" +msgstr "Počni" + +msgid "Click here to select the objects across all pages" +msgstr "Kliknite ovdje da izaberete objekte preko svih stranica" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Izaberite svih %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Izbrišite izbor" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"Prvo unesite korisničko ime i lozinku. Potom ćete moći da mijenjate još " +"korisničkih podešavanja." + +msgid "Enter a username and password." +msgstr "" + +msgid "Change password" +msgstr "Promjena lozinke" + +msgid "Please correct the error below." +msgstr "" + +msgid "Please correct the errors below." +msgstr "" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Unesite novu lozinku za korisnika %(username)s." + +msgid "Welcome," +msgstr "Dobrodošli," + +msgid "View site" +msgstr "" + +msgid "Documentation" +msgstr "Dokumentacija" + +msgid "Log out" +msgstr "Odjava" + +#, python-format +msgid "Add %(name)s" +msgstr "Dodaj objekat klase %(name)s" + +msgid "History" +msgstr "Historijat" + +msgid "View on site" +msgstr "Pregled na sajtu" + +msgid "Filter" +msgstr "Filter" + +msgid "Remove from sorting" +msgstr "" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "" + +msgid "Toggle sorting" +msgstr "" + +msgid "Delete" +msgstr "Obriši" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Uklanjanje %(object_name)s „%(escaped_object)s“ povlači uklanjanje svih " +"objekata koji su povezani sa ovim objektom, ali vaš nalog nema dozvole za " +"brisanje slijedećih tipova objekata:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Da li ste sigurni da želite da obrišete %(object_name)s " +"„%(escaped_object)s“? Slijedeći objekti koji su u vezi sa ovim objektom će " +"također biti obrisani:" + +msgid "Objects" +msgstr "" + +msgid "Yes, I'm sure" +msgstr "Da, siguran sam" + +msgid "No, take me back" +msgstr "" + +msgid "Delete multiple objects" +msgstr "Brisanje više objekata" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" + +msgid "Change" +msgstr "Izmjeni" + +msgid "Delete?" +msgstr "Brisanje?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " %(filter_title)s " + +msgid "Summary" +msgstr "" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "" + +msgid "Add" +msgstr "Dodaj" + +msgid "You don't have permission to edit anything." +msgstr "Nemate dozvole da unosite bilo kakve izmjene." + +msgid "Recent actions" +msgstr "" + +msgid "My actions" +msgstr "" + +msgid "None available" +msgstr "Nema podataka" + +msgid "Unknown content" +msgstr "Nepoznat sadržaj" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Nešto nije uredu sa vašom bazom podataka. Provjerite da li postoje " +"odgovarajuće tabele i da li odgovarajući korisnik ima pristup bazi." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "" + +msgid "Date/time" +msgstr "Datum/vrijeme" + +msgid "User" +msgstr "Korisnik" + +msgid "Action" +msgstr "Radnja" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Ovaj objekat nema zabilježen historijat izmjena. Vjerovatno nije dodan kroz " +"ovaj sajt za administraciju." + +msgid "Show all" +msgstr "Prikaži sve" + +msgid "Save" +msgstr "Sačuvaj" + +msgid "Popup closing..." +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "" + +msgid "Search" +msgstr "Pretraga" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "ukupno %(full_result_count)s" + +msgid "Save as new" +msgstr "Sačuvaj kao novi" + +msgid "Save and add another" +msgstr "Sačuvaj i dodaj slijedeći" + +msgid "Save and continue editing" +msgstr "Sačuvaj i nastavi sa izmjenama" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Hvala što ste danas proveli vrijeme na ovom sajtu." + +msgid "Log in again" +msgstr "Ponovna prijava" + +msgid "Password change" +msgstr "Izmjena lozinke" + +msgid "Your password was changed." +msgstr "Vaša lozinka je izmjenjena." + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Iz bezbjednosnih razloga prvo unesite svoju staru lozinku, a novu zatim " +"unesite dva puta da bismo mogli da provjerimo da li ste je pravilno unijeli." + +msgid "Change my password" +msgstr "Izmijeni moju lozinku" + +msgid "Password reset" +msgstr "Resetovanje lozinke" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Vaša lozinka je postavljena. Možete se prijaviti." + +msgid "Password reset confirmation" +msgstr "Potvrda resetovanja lozinke" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Unesite novu lozinku dva puta kako bismo mogli da provjerimo da li ste je " +"pravilno unijeli." + +msgid "New password:" +msgstr "Nova lozinka:" + +msgid "Confirm password:" +msgstr "Potvrda lozinke:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Link za resetovanje lozinke nije važeći, vjerovatno zato što je već " +"iskorišćen. Ponovo zatražite resetovanje lozinke." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" + +msgid "Please go to the following page and choose a new password:" +msgstr "Idite na slijedeću stranicu i postavite novu lozinku." + +msgid "Your username, in case you've forgotten:" +msgstr "Ukoliko ste zaboravili, vaše korisničko ime:" + +msgid "Thanks for using our site!" +msgstr "Hvala što koristite naš sajt!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "Uredništvo sajta %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" + +msgid "Email address:" +msgstr "" + +msgid "Reset my password" +msgstr "Resetuj moju lozinku" + +msgid "All dates" +msgstr "Svi datumi" + +#, python-format +msgid "Select %s" +msgstr "Odaberi objekat klase %s" + +#, python-format +msgid "Select %s to change" +msgstr "Odaberi objekat klase %s za izmjenu" + +msgid "Date:" +msgstr "Datum:" + +msgid "Time:" +msgstr "Vrijeme:" + +msgid "Lookup" +msgstr "Pretraži" + +msgid "Currently:" +msgstr "" + +msgid "Change:" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/ca/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/ca/LC_MESSAGES/django.po new file mode 100644 index 0000000..4c33f36 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/ca/LC_MESSAGES/django.po @@ -0,0 +1,720 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Antoni Aloy , 2014-2015,2017 +# Carles Barrobés , 2011-2012,2014 +# duub qnnp, 2015 +# GerardoGa , 2018 +# Gil Obradors Via , 2019 +# Jannis Leidel , 2011 +# Roger Pons , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-01-28 20:40+0000\n" +"Last-Translator: Gil Obradors Via \n" +"Language-Team: Catalan (http://www.transifex.com/django/django/language/" +"ca/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ca\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Eliminat/s %(count)d %(items)s satisfactòriament." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "No es pot esborrar %(name)s" + +msgid "Are you sure?" +msgstr "N'esteu segur?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Eliminar els %(verbose_name_plural)s seleccionats" + +msgid "Administration" +msgstr "Administració" + +msgid "All" +msgstr "Tots" + +msgid "Yes" +msgstr "Sí" + +msgid "No" +msgstr "No" + +msgid "Unknown" +msgstr "Desconegut" + +msgid "Any date" +msgstr "Qualsevol data" + +msgid "Today" +msgstr "Avui" + +msgid "Past 7 days" +msgstr "Últims 7 dies" + +msgid "This month" +msgstr "Aquest mes" + +msgid "This year" +msgstr "Aquest any" + +msgid "No date" +msgstr "Sense data" + +msgid "Has date" +msgstr "Té data" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Si us plau, introduïu un %(username)s i contrasenya correcta per un compte " +"de personal. Observeu que ambdós camps són sensibles a majúscules." + +msgid "Action:" +msgstr "Acció:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Afegir un/a altre/a %(verbose_name)s." + +msgid "Remove" +msgstr "Eliminar" + +msgid "Addition" +msgstr "Afegeix" + +msgid "Change" +msgstr "Modificar" + +msgid "Deletion" +msgstr "Supressió" + +msgid "action time" +msgstr "moment de l'acció" + +msgid "user" +msgstr "usuari" + +msgid "content type" +msgstr "tipus de contingut" + +msgid "object id" +msgstr "id de l'objecte" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "'repr' de l'objecte" + +msgid "action flag" +msgstr "indicador de l'acció" + +msgid "change message" +msgstr "missatge del canvi" + +msgid "log entry" +msgstr "entrada del registre" + +msgid "log entries" +msgstr "entrades del registre" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "Afegit \"%(object)s\"." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "Modificat \"%(object)s\" - %(changes)s" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "Eliminat \"%(object)s.\"" + +msgid "LogEntry Object" +msgstr "Objecte entrada del registre" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "Afegit {name} \"{object}\"." + +msgid "Added." +msgstr "Afegit." + +msgid "and" +msgstr "i" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "Canviat {fields} a {name} \"{object}\"." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Canviats {fields}." + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "Eliminat {name} \"{object}\"." + +msgid "No fields changed." +msgstr "Cap camp modificat." + +msgid "None" +msgstr "cap" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "Premi \"Control\" o \"Command\" a un Mac per seleccionar-ne més d'un." + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "El {name} \"{obj}\" fou afegit amb èxit." + +msgid "You may edit it again below." +msgstr "Hauria d'editar de nou a sota." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" +"El {name} \"{obj}\" s'ha afegit amb èxit. Pots afegir un altre {name} a " +"sota." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" +"El {name} \"{obj}\" fou canviat amb èxit. Pots editar-ho un altra vegada a " +"sota." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" +"El {name} \"{obj}\" s'ha afegit amb èxit. Pots editar-lo altra vegada a " +"sota." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" +"El {name} \"{obj}\" fou canviat amb èxit. Pots afegir un altre {name} a " +"sota." + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "El {name} \"{obj}\" fou canviat amb èxit." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Heu de seleccionar els elements per poder realitzar-hi accions. No heu " +"seleccionat cap element." + +msgid "No action selected." +msgstr "No heu seleccionat cap acció." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "El/la %(name)s \"%(obj)s\" s'ha eliminat amb èxit." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "%(name)s amb ID \"%(key)s\" no existeix. Potser va ser eliminat?" + +#, python-format +msgid "Add %s" +msgstr "Afegir %s" + +#, python-format +msgid "Change %s" +msgstr "Modificar %s" + +#, python-format +msgid "View %s" +msgstr "Visualitza %s" + +msgid "Database error" +msgstr "Error de base de dades" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s s'ha modificat amb èxit." +msgstr[1] "%(count)s %(name)s s'han modificat amb èxit." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s seleccionat(s)" +msgstr[1] "Tots %(total_count)s seleccionat(s)" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 de %(cnt)s seleccionats" + +#, python-format +msgid "Change history: %s" +msgstr "Modificar històric: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Esborrar %(class_name)s %(instance)s requeriria esborrar els següents " +"objectes relacionats protegits: %(related_objects)s" + +msgid "Django site admin" +msgstr "Lloc administratiu de Django" + +msgid "Django administration" +msgstr "Administració de Django" + +msgid "Site administration" +msgstr "Administració del lloc" + +msgid "Log in" +msgstr "Iniciar sessió" + +#, python-format +msgid "%(app)s administration" +msgstr "Administració de %(app)s" + +msgid "Page not found" +msgstr "No s'ha pogut trobar la pàgina" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Ho sentim, però no s'ha pogut trobar la pàgina sol·licitada" + +msgid "Home" +msgstr "Inici" + +msgid "Server error" +msgstr "Error del servidor" + +msgid "Server error (500)" +msgstr "Error del servidor (500)" + +msgid "Server Error (500)" +msgstr "Error del servidor (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"S'ha produït un error. Se n'ha informat els administradors del lloc per " +"correu electrònic, i hauria d'arreglar-se en breu. Gràcies per la vostra " +"paciència." + +msgid "Run the selected action" +msgstr "Executar l'acció seleccionada" + +msgid "Go" +msgstr "Anar" + +msgid "Click here to select the objects across all pages" +msgstr "Feu clic aquí per seleccionar els objectes a totes les pàgines" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Seleccioneu tots %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Netejar la selecció" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"Primer, entreu un nom d'usuari i una contrasenya. Després podreu editar més " +"opcions de l'usuari." + +msgid "Enter a username and password." +msgstr "Introduïu un nom d'usuari i contrasenya." + +msgid "Change password" +msgstr "Canviar contrasenya" + +msgid "Please correct the error below." +msgstr "Si us plau, corregeix l'error de sota" + +msgid "Please correct the errors below." +msgstr "Si us plau, corregiu els errors mostrats a sota." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Introduïu una contrasenya per l'usuari %(username)s" + +msgid "Welcome," +msgstr "Benvingut/da," + +msgid "View site" +msgstr "Veure lloc" + +msgid "Documentation" +msgstr "Documentació" + +msgid "Log out" +msgstr "Finalitzar sessió" + +#, python-format +msgid "Add %(name)s" +msgstr "Afegir %(name)s" + +msgid "History" +msgstr "Històric" + +msgid "View on site" +msgstr "Veure al lloc" + +msgid "Filter" +msgstr "Filtre" + +msgid "Remove from sorting" +msgstr "Treure de la ordenació" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Prioritat d'ordenació: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Commutar ordenació" + +msgid "Delete" +msgstr "Eliminar" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Eliminar el/la %(object_name)s '%(escaped_object)s' provocaria l'eliminació " +"d'objectes relacionats, però el vostre compte no te permisos per esborrar " +"els tipus d'objecte següents:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Esborrar %(object_name)s '%(escaped_object)s' requeriria esborrar els " +"següents objectes relacionats protegits:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Esteu segurs de voler esborrar els/les %(object_name)s \"%(escaped_object)s" +"\"? S'esborraran els següents elements relacionats:" + +msgid "Objects" +msgstr "Objectes" + +msgid "Yes, I'm sure" +msgstr "Sí, n'estic segur" + +msgid "No, take me back" +msgstr "No, torna endarrere" + +msgid "Delete multiple objects" +msgstr "Eliminar múltiples objectes" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Esborrar els %(objects_name)s seleccionats faria que s'esborréssin objectes " +"relacionats, però el vostre compte no té permisos per esborrar els següents " +"tipus d'objectes:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Esborrar els %(objects_name)s seleccionats requeriria esborrar els següents " +"objectes relacionats protegits:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"N'esteu segur de voler esborrar els %(objects_name)s seleccionats? " +"S'esborraran tots els objects següents i els seus elements relacionats:" + +msgid "View" +msgstr "Visualitza" + +msgid "Delete?" +msgstr "Eliminar?" + +#, python-format +msgid " By %(filter_title)s " +msgstr "Per %(filter_title)s " + +msgid "Summary" +msgstr "Resum" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Models en l'aplicació %(name)s" + +msgid "Add" +msgstr "Afegir" + +msgid "You don't have permission to view or edit anything." +msgstr "No teniu permisos per veure o editar" + +msgid "Recent actions" +msgstr "Accions recents" + +msgid "My actions" +msgstr "Les meves accions" + +msgid "None available" +msgstr "Cap disponible" + +msgid "Unknown content" +msgstr "Contingut desconegut" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Hi ha algun problema a la instal·lació de la vostra base de dades. Assegureu-" +"vos que s'han creat les taules adients, i que la base de dades és llegible " +"per l'usuari apropiat." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Esteu identificats com a %(username)s, però no esteu autoritzats a accedir a " +"aquesta pàgina. Voleu identificar-vos amb un compte d'usuari diferent?" + +msgid "Forgotten your password or username?" +msgstr "Heu oblidat la vostra contrasenya o nom d'usuari?" + +msgid "Date/time" +msgstr "Data/hora" + +msgid "User" +msgstr "Usuari" + +msgid "Action" +msgstr "Acció" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Aquest objecte no té historial de canvis. Probablement no es va afegir " +"utilitzant aquest lloc administratiu." + +msgid "Show all" +msgstr "Mostrar tots" + +msgid "Save" +msgstr "Desar" + +msgid "Popup closing…" +msgstr "Tancant finestra emergent..." + +msgid "Search" +msgstr "Cerca" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s resultat" +msgstr[1] "%(counter)s resultats" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s en total" + +msgid "Save as new" +msgstr "Desar com a nou" + +msgid "Save and add another" +msgstr "Desar i afegir-ne un de nou" + +msgid "Save and continue editing" +msgstr "Desar i continuar editant" + +msgid "Save and view" +msgstr "Desa i visualitza" + +msgid "Close" +msgstr "Tanca" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Canviea el %(model)s seleccionat" + +#, python-format +msgid "Add another %(model)s" +msgstr "Afegeix un altre %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Esborra el %(model)s seleccionat" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Gràcies per passar una estona de qualitat al web durant el dia d'avui." + +msgid "Log in again" +msgstr "Iniciar sessió de nou" + +msgid "Password change" +msgstr "Canvi de contrasenya" + +msgid "Your password was changed." +msgstr "La seva contrasenya ha estat canviada." + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Si us plau, introduïu la vostra contrasenya antiga, per seguretat, i tot " +"seguit introduïu la vostra contrasenya nova dues vegades per verificar que " +"l'heu escrita correctament." + +msgid "Change my password" +msgstr "Canviar la meva contrasenya:" + +msgid "Password reset" +msgstr "Restablir contrasenya" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "" +"S'ha canviat la vostra contrasenya. Ara podeu continuar i iniciar sessió." + +msgid "Password reset confirmation" +msgstr "Confirmació de restabliment de contrasenya" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Si us plau, introduïu la vostra nova contrasenya dues vegades, per verificar " +"que l'heu escrita correctament." + +msgid "New password:" +msgstr "Contrasenya nova:" + +msgid "Confirm password:" +msgstr "Confirmar contrasenya:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"L'enllaç de restabliment de contrasenya era invàlid, potser perquè ja s'ha " +"utilitzat. Si us plau, sol·liciteu un nou reestabliment de contrasenya." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Li hem enviat instruccions per establir la seva contrasenya, donat que hi " +"hagi un compte associat al correu introduït. L'hauríeu de rebre en breu." + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Si no rebeu un correu, assegureu-vos que heu introduït l'adreça amb la que " +"us vau registrar, i comproveu la vostra carpeta de \"spam\"." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Heu rebut aquest correu perquè vau sol·licitar restablir la contrasenya per " +"al vostre compte d'usuari a %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "Si us plau, aneu a la pàgina següent i escolliu una nova contrasenya:" + +msgid "Your username, in case you've forgotten:" +msgstr "El vostre nom d'usuari, en cas que l'hagueu oblidat:" + +msgid "Thanks for using our site!" +msgstr "Gràcies per fer ús del nostre lloc!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "L'equip de %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" +"Heu oblidat la vostra contrasenya? Introduïu la vostra adreça de correu " +"electrònic a sota, i us enviarem instruccions per canviar-la." + +msgid "Email address:" +msgstr "Adreça de correu electrònic:" + +msgid "Reset my password" +msgstr "Restablir la meva contrasenya" + +msgid "All dates" +msgstr "Totes les dates" + +#, python-format +msgid "Select %s" +msgstr "Seleccioneu %s" + +#, python-format +msgid "Select %s to change" +msgstr "Seleccioneu %s per modificar" + +#, python-format +msgid "Select %s to view" +msgstr "Selecciona %sper a veure" + +msgid "Date:" +msgstr "Data:" + +msgid "Time:" +msgstr "Hora:" + +msgid "Lookup" +msgstr "Cercar" + +msgid "Currently:" +msgstr "Actualment:" + +msgid "Change:" +msgstr "Canviar:" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/cy/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/cy/LC_MESSAGES/django.po new file mode 100644 index 0000000..82e82f7 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/cy/LC_MESSAGES/django.po @@ -0,0 +1,675 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Maredudd ap Gwyndaf , 2014 +# pjrobertson, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Welsh (http://www.transifex.com/django/django/language/cy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cy\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != " +"11) ? 2 : 3;\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Dilëwyd %(count)d %(items)s yn llwyddiannus." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Ni ellir dileu %(name)s" + +msgid "Are you sure?" +msgstr "Ydych yn sicr?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Dileu y %(verbose_name_plural)s â ddewiswyd" + +msgid "Administration" +msgstr "Gweinyddu" + +msgid "All" +msgstr "Pob un" + +msgid "Yes" +msgstr "Ie" + +msgid "No" +msgstr "Na" + +msgid "Unknown" +msgstr "Anhysybys" + +msgid "Any date" +msgstr "Unrhyw ddyddiad" + +msgid "Today" +msgstr "Heddiw" + +msgid "Past 7 days" +msgstr "7 diwrnod diwethaf" + +msgid "This month" +msgstr "Mis yma" + +msgid "This year" +msgstr "Eleni" + +msgid "No date" +msgstr "" + +msgid "Has date" +msgstr "" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Teipiwch yr %(username)s a chyfrinair cywir ar gyfer cyfrif staff. Noder y " +"gall y ddau faes fod yn sensitif i lythrennau bach a llythrennau bras." + +msgid "Action:" +msgstr "Gweithred:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Ychwanegu %(verbose_name)s arall" + +msgid "Remove" +msgstr "Gwaredu" + +msgid "action time" +msgstr "amser y weithred" + +msgid "user" +msgstr "" + +msgid "content type" +msgstr "" + +msgid "object id" +msgstr "id gwrthrych" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/3/library/functions.html#repr) +msgid "object repr" +msgstr "repr gwrthrych" + +msgid "action flag" +msgstr "fflag gweithred" + +msgid "change message" +msgstr "neges y newid" + +msgid "log entry" +msgstr "cofnod" + +msgid "log entries" +msgstr "cofnodion" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "Ychwanegwyd \"%(object)s\"." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "Newidwyd \"%(object)s\" - %(changes)s" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "Dilëwyd \"%(object)s.\"" + +msgid "LogEntry Object" +msgstr "Gwrthrych LogEntry" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "" + +msgid "Added." +msgstr "" + +msgid "and" +msgstr "a" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "" + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "" + +msgid "No fields changed." +msgstr "Ni newidwyd unrhwy feysydd." + +msgid "None" +msgstr "Dim" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Rhaid dewis eitemau er mwyn gweithredu arnynt. Ni ddewiswyd unrhyw eitemau." + +msgid "No action selected." +msgstr "Ni ddewiswyd gweithred." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "Dilëwyd %(name)s \"%(obj)s\" yn llwyddiannus." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "Ychwanegu %s" + +#, python-format +msgid "Change %s" +msgstr "Newid %s" + +msgid "Database error" +msgstr "Gwall cronfa ddata" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "Newidwyd %(count)s %(name)s yn llwyddiannus" +msgstr[1] "Newidwyd %(count)s %(name)s yn llwyddiannus" +msgstr[2] "Newidwyd %(count)s %(name)s yn llwyddiannus" +msgstr[3] "Newidwyd %(count)s %(name)s yn llwyddiannus" + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "Dewiswyd %(total_count)s" +msgstr[1] "Dewiswyd %(total_count)s" +msgstr[2] "Dewiswyd %(total_count)s" +msgstr[3] "Dewiswyd %(total_count)s" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "Dewiswyd 0 o %(cnt)s" + +#, python-format +msgid "Change history: %s" +msgstr "Hanes newid: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Byddai dileu %(class_name)s %(instance)s yn golygu dileu'r gwrthrychau " +"gwarchodedig canlynol sy'n perthyn: %(related_objects)s" + +msgid "Django site admin" +msgstr "Adran weinyddol safle Django" + +msgid "Django administration" +msgstr "Gweinyddu Django" + +msgid "Site administration" +msgstr "Gweinyddu'r safle" + +msgid "Log in" +msgstr "Mewngofnodi" + +#, python-format +msgid "%(app)s administration" +msgstr "Gweinyddu %(app)s" + +msgid "Page not found" +msgstr "Ni ddarganfyddwyd y dudalen" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Mae'n ddrwg gennym, ond ni ddarganfuwyd y dudalen" + +msgid "Home" +msgstr "Hafan" + +msgid "Server error" +msgstr "Gwall gweinydd" + +msgid "Server error (500)" +msgstr "Gwall gweinydd (500)" + +msgid "Server Error (500)" +msgstr "Gwall Gweinydd (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Mae gwall ac gyrrwyd adroddiad ohono i weinyddwyr y wefan drwy ebost a dylai " +"gael ei drwsio yn fuan. Diolch am fod yn amyneddgar." + +msgid "Run the selected action" +msgstr "Rhedeg y weithred a ddewiswyd" + +msgid "Go" +msgstr "Ffwrdd â ni" + +msgid "Click here to select the objects across all pages" +msgstr "" +"Cliciwch fan hyn i ddewis yr holl wrthrychau ar draws yr holl dudalennau" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Dewis y %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Clirio'r dewis" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"Yn gyntaf, rhowch enw defnyddiwr a chyfrinair. Yna byddwch yn gallu golygu " +"mwy o ddewisiadau." + +msgid "Enter a username and password." +msgstr "Rhowch enw defnyddiwr a chyfrinair." + +msgid "Change password" +msgstr "Newid cyfrinair" + +msgid "Please correct the error below." +msgstr "Cywirwch y gwall isod." + +msgid "Please correct the errors below." +msgstr "Cywirwch y gwallau isod." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Rhowch gyfrinair newydd i'r defnyddiwr %(username)s." + +msgid "Welcome," +msgstr "Croeso," + +msgid "View site" +msgstr "" + +msgid "Documentation" +msgstr "Dogfennaeth" + +msgid "Log out" +msgstr "Allgofnodi" + +#, python-format +msgid "Add %(name)s" +msgstr "Ychwanegu %(name)s" + +msgid "History" +msgstr "Hanes" + +msgid "View on site" +msgstr "Gweld ar y safle" + +msgid "Filter" +msgstr "Hidl" + +msgid "Remove from sorting" +msgstr "Gwaredu o'r didoli" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Blaenoriaeth didoli: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Toglio didoli" + +msgid "Delete" +msgstr "Dileu" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Byddai dileu %(object_name)s '%(escaped_object)s' yn golygu dileu'r " +"gwrthrychau sy'n perthyn, ond nid oes ganddoch ganiatâd i ddileu y mathau " +"canlynol o wrthrychau:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Byddai dileu %(object_name)s '%(escaped_object)s' yn golygu dileu'r " +"gwrthrychau gwarchodedig canlynol sy'n perthyn:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" + +msgid "Objects" +msgstr "" + +msgid "Yes, I'm sure" +msgstr "Ydw, rwy'n sicr" + +msgid "No, take me back" +msgstr "" + +msgid "Delete multiple objects" +msgstr "" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Byddai dileu %(objects_name)s yn golygu dileu'r gwrthrychau gwarchodedig " +"canlynol sy'n perthyn:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Ydych yn sicr eich bod am ddileu'r %(objects_name)s a ddewiswyd? Dilëir yr " +"holl wrthrychau canlynol a'u heitemau perthnasol:" + +msgid "Change" +msgstr "Newid" + +msgid "Delete?" +msgstr "Dileu?" + +#, python-format +msgid " By %(filter_title)s " +msgstr "Wrth %(filter_title)s" + +msgid "Summary" +msgstr "" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Modelau yn y rhaglen %(name)s " + +msgid "Add" +msgstr "Ychwanegu" + +msgid "You don't have permission to edit anything." +msgstr "Does gennych ddim hawl i olygu unrhywbeth." + +msgid "Recent actions" +msgstr "" + +msgid "My actions" +msgstr "" + +msgid "None available" +msgstr "Dim ar gael" + +msgid "Unknown content" +msgstr "Cynnwys anhysbys" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Mae rhywbeth o'i le ar osodiad y gronfa ddata. Sicrhewch fod y tablau " +"cronfa ddata priodol wedi eu creu, a sicrhewch fod y gronfa ddata yn " +"ddarllenadwy gan y defnyddiwr priodol." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "Anghofioch eich cyfrinair neu enw defnyddiwr?" + +msgid "Date/time" +msgstr "Dyddiad/amser" + +msgid "User" +msgstr "Defnyddiwr" + +msgid "Action" +msgstr "Gweithred" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Does dim hanes newid gan y gwrthrych yma. Mae'n debyg nad ei ychwanegwyd " +"drwy'r safle gweinydd yma." + +msgid "Show all" +msgstr "Dangos pob canlyniad" + +msgid "Save" +msgstr "Cadw" + +msgid "Popup closing..." +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "" + +msgid "Search" +msgstr "Chwilio" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s canlyniad" +msgstr[1] "%(counter)s canlyniad" +msgstr[2] "%(counter)s canlyniad" +msgstr[3] "%(counter)s canlyniad" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "Cyfanswm o %(full_result_count)s" + +msgid "Save as new" +msgstr "Cadw fel newydd" + +msgid "Save and add another" +msgstr "Cadw ac ychwanegu un arall" + +msgid "Save and continue editing" +msgstr "Cadw a pharhau i olygu" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Diolch am dreulio amser o ansawdd gyda'r safle we yma heddiw." + +msgid "Log in again" +msgstr "Mewngofnodi eto" + +msgid "Password change" +msgstr "Newid cyfrinair" + +msgid "Your password was changed." +msgstr "Newidwyd eich cyfrinair." + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Rhowch eich hen gyfrinair, er mwyn diogelwch, ac yna rhowch eich cyfrinair " +"newydd ddwywaith er mwyn gwirio y'i teipiwyd yn gywir." + +msgid "Change my password" +msgstr "Newid fy nghyfrinair" + +msgid "Password reset" +msgstr "Ailosod cyfrinair" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Mae'ch cyfrinair wedi ei osod. Gallwch fewngofnodi nawr." + +msgid "Password reset confirmation" +msgstr "Cadarnhad ailosod cyfrinair" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Rhowch eich cyfrinair newydd ddwywaith er mwyn gwirio y'i teipiwyd yn gywir." + +msgid "New password:" +msgstr "Cyfrinair newydd:" + +msgid "Confirm password:" +msgstr "Cadarnhewch y cyfrinair:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Roedd y ddolen i ailosod y cyfrinair yn annilys, o bosib oherwydd ei fod " +"wedi ei ddefnyddio'n barod. Gofynnwch i ailosod y cyfrinair eto." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Os na dderbyniwch ebost, sicrhewych y rhoddwyd y cyfeiriad sydd wedi ei " +"gofrestru gyda ni, ac edrychwch yn eich ffolder sbam." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Derbyniwch yr ebost hwn oherwydd i chi ofyn i ailosod y cyfrinair i'ch " +"cyfrif yn %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "Ewch i'r dudalen olynol a dewsiwch gyfrinair newydd:" + +msgid "Your username, in case you've forgotten:" +msgstr "Eich enw defnyddiwr, rhag ofn eich bod wedi anghofio:" + +msgid "Thanks for using our site!" +msgstr "Diolch am ddefnyddio ein safle!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "Tîm %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" +"Anghofioch eich cyfrinair? Rhowch eich cyfeiriad ebost isod ac fe ebostiwn " +"gyfarwyddiadau ar osod un newydd." + +msgid "Email address:" +msgstr "Cyfeiriad ebost:" + +msgid "Reset my password" +msgstr "Ailosod fy nghyfrinair" + +msgid "All dates" +msgstr "Holl ddyddiadau" + +#, python-format +msgid "Select %s" +msgstr "Dewis %s" + +#, python-format +msgid "Select %s to change" +msgstr "Dewis %s i newid" + +msgid "Date:" +msgstr "Dyddiad:" + +msgid "Time:" +msgstr "Amser:" + +msgid "Lookup" +msgstr "Archwilio" + +msgid "Currently:" +msgstr "Cyfredol:" + +msgid "Change:" +msgstr "Newid:" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/da/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/da/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..48aae7b1aac7975a37c4a04bd758e483396d33f9 GIT binary patch literal 16367 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 W4IYhO?2K)j2zR7K90PeK%>M#tH1, 2016-2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-02-19 10:13+0000\n" +"Last-Translator: Michael Wolf \n" +"Language-Team: Lower Sorbian (http://www.transifex.com/django/django/" +"language/dsb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: dsb\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(count)d %(items)s su se wulašowali." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "%(name)s njedajo se lašowaś" + +msgid "Are you sure?" +msgstr "Sćo se wěsty?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Wubrane %(verbose_name_plural)s lašowaś" + +msgid "Administration" +msgstr "Administracija" + +msgid "All" +msgstr "Wšykne" + +msgid "Yes" +msgstr "Jo" + +msgid "No" +msgstr "Ně" + +msgid "Unknown" +msgstr "Njeznaty" + +msgid "Any date" +msgstr "Někaki datum" + +msgid "Today" +msgstr "Źinsa" + +msgid "Past 7 days" +msgstr "Zachadne 7 dnjow" + +msgid "This month" +msgstr "Toś ten mjasec" + +msgid "This year" +msgstr "W tom lěśe" + +msgid "No date" +msgstr "Žeden datum" + +msgid "Has date" +msgstr "Ma datum" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Pšosym zapódajśo korektne %(username)s a gronidło za personalne konto. " +"Źiwajśo na to, až wobej póli móžotej mjazy wjeliko- a małopisanim rozeznawaś." + +msgid "Action:" +msgstr "Akcija:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Dalšne %(verbose_name)s pśidaś" + +msgid "Remove" +msgstr "Wótpóraś" + +msgid "Addition" +msgstr "Pśidanje" + +msgid "Change" +msgstr "Změniś" + +msgid "Deletion" +msgstr "Wulašowanje" + +msgid "action time" +msgstr "akciski cas" + +msgid "user" +msgstr "wužywaŕ" + +msgid "content type" +msgstr "wopśimjeśowy typ" + +msgid "object id" +msgstr "objektowy id" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "objektowa reprezentacija" + +msgid "action flag" +msgstr "akciske markěrowanje" + +msgid "change message" +msgstr "změnowa powěźeńka" + +msgid "log entry" +msgstr "protokolowy zapisk" + +msgid "log entries" +msgstr "protokolowe zapiski" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "„%(object)s“ pśidane." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "„%(object)s“ změnjone - %(changes)s" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "„%(object)s“ wulašowane." + +msgid "LogEntry Object" +msgstr "Objekt LogEntry" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "{name} „{object} pśidany." + +msgid "Added." +msgstr "Pśidany." + +msgid "and" +msgstr "a" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "{fields} za {name} „{object} změnjone." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "{fields} změnjone." + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "Deleted {name} „{object} wulašowane." + +msgid "No fields changed." +msgstr "Žedne póla změnjone." + +msgid "None" +msgstr "Žeden" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "´Źaržćo „ctrl“ abo „cmd“ na Mac tłocony, aby wusej jadnogo wubrał." + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "{name} \"{obj}\" jo se wuspěšnje pśidał." + +msgid "You may edit it again below." +msgstr "Móźośo dołojce znowego wobźěłaś." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" +"{name} \"{obj}\" jo se wuspěšnje pśidał. Móžośo dołojce dalšne {name} pśidaś." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" +"{name} \"{obj}\" jo se wuspěšnje změnił. Móžośo jen dołojce znowego " +"wobźěłowaś." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" +"{name} \"{obj}\" jo se wuspěšnje pśidał. Móžośo jen dołojce znowego " +"wobźěłowaś." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" +"{name} \"{obj}\" jo se wuspěšnje změnił. Móžośo dołojce dalšne {name} pśidaś." + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "{name} \"{obj}\" jo se wuspěšnje změnił." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Zapiski muse se wubraś, aby akcije na nje nałožowało. Zapiski njejsu se " +"změnili." + +msgid "No action selected." +msgstr "Žedna akcija wubrana." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "%(name)s \"%(obj)s\" jo se wuspěšnje wulašował." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "%(name)s z ID \" %(key)s\" njeeksistěrujo. Jo se snaź wulašowało?" + +#, python-format +msgid "Add %s" +msgstr "%s pśidaś" + +#, python-format +msgid "Change %s" +msgstr "%s změniś" + +#, python-format +msgid "View %s" +msgstr "%s pokazaś" + +msgid "Database error" +msgstr "Zmólka datoweje banki" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s jo se wuspěšnje změnił." +msgstr[1] "%(count)s %(name)s stej se wuspěšnje změniłej." +msgstr[2] "%(count)s %(name)s su se wuspěšnje změnili." +msgstr[3] "%(count)s %(name)s jo se wuspěšnje změniło." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s wubrany" +msgstr[1] "Wšykne %(total_count)s wubranej" +msgstr[2] "Wšykne %(total_count)s wubrane" +msgstr[3] "Wšykne %(total_count)s wubranych" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 z %(cnt)s wubranych" + +#, python-format +msgid "Change history: %s" +msgstr "Změnowa historija: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Aby se %(class_name)s %(instance)s lašowało, muse se slědujuce šćitane " +"objekty lašowaś: %(related_objects)s" + +msgid "Django site admin" +msgstr "Administrator sedła Django" + +msgid "Django administration" +msgstr "Administracija Django" + +msgid "Site administration" +msgstr "Sedłowa administracija" + +msgid "Log in" +msgstr "Pśizjawiś" + +#, python-format +msgid "%(app)s administration" +msgstr "Administracija %(app)s" + +msgid "Page not found" +msgstr "Bok njejo se namakał" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Jo nam luto, ale pominany bok njedajo se namakaś." + +msgid "Home" +msgstr "Startowy bok" + +msgid "Server error" +msgstr "Serwerowa zmólka" + +msgid "Server error (500)" +msgstr "Serwerowa zmólka (500)" + +msgid "Server Error (500)" +msgstr "Serwerowa zmólka (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Zmólka jo nastała. Jo se sedłowym administratoram pśez e-mail k wěsći dała a " +"by dejała se skóro wótpóraś. Źěkujomse za wašu sćerpmosć." + +msgid "Run the selected action" +msgstr "Wubranu akciju wuwjasć" + +msgid "Go" +msgstr "Start" + +msgid "Click here to select the objects across all pages" +msgstr "Klikniśo how, aby objekty wšych bokow wubrał" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Wubjeŕśo wšykne %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Wuběrk lašowaś" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"Zapódajśo nejpjerwjej wužywarske mě a gronidło. Pótom móžośo dalšne " +"wužywarske nastajenja wobźěłowaś." + +msgid "Enter a username and password." +msgstr "Zapódajśo wužywarske mě a gronidło." + +msgid "Change password" +msgstr "Gronidło změniś" + +msgid "Please correct the error below." +msgstr "Pšosym korigěrujśo slědujucu zmólku." + +msgid "Please correct the errors below." +msgstr "Pšosym skorigěrujśo slědujuce zmólki." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Zapódajśo nowe gronidło za wužywarja %(username)s." + +msgid "Welcome," +msgstr "Witajśo," + +msgid "View site" +msgstr "Sedło pokazaś" + +msgid "Documentation" +msgstr "Dokumentacija" + +msgid "Log out" +msgstr "Wótzjawiś" + +#, python-format +msgid "Add %(name)s" +msgstr "%(name)s pśidaś" + +msgid "History" +msgstr "Historija" + +msgid "View on site" +msgstr "Na sedle pokazaś" + +msgid "Filter" +msgstr "Filtrowaś" + +msgid "Remove from sorting" +msgstr "Ze sortěrowanja wótpóraś" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Sortěrowański rěd: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Sortěrowanje pśešaltowaś" + +msgid "Delete" +msgstr "Lašowaś" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Gaž se %(object_name)s '%(escaped_object)s' lašujo, se pśisłušne objekty " +"wulašuju, ale wašo konto njama pšawo slědujuce typy objektow lašowaś: " + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Aby se %(object_name)s '%(escaped_object)s' lašujo, muse se slědujuce " +"šćitane pśisłušne objekty lašowaś:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Cośo napšawdu %(object_name)s „%(escaped_object)s“ lašowaś? Wšykne slědujuce " +"pśisłušne zapiski se wulašuju: " + +msgid "Objects" +msgstr "Objekty" + +msgid "Yes, I'm sure" +msgstr "Jo, som se wěsty" + +msgid "No, take me back" +msgstr "Ně, pšosym slědk" + +msgid "Delete multiple objects" +msgstr "Někotare objekty lašowaś" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Gaž lašujośo wubrany %(objects_name)s, se pśisłušne objekty wulašuju, ale " +"wašo konto njama pšawo slědujuce typy objektow lašowaś: " + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Aby wubrany %(objects_name)s lašowało, muse se slědujuce šćitane pśisłušne " +"objekty lašowaś:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Cośo napšawdu wubrany %(objects_name)s lašowaś? Wšykne slědujuce objekty a " +"jich pśisłušne zapiski se wulašuju:" + +msgid "View" +msgstr "Pokazaś" + +msgid "Delete?" +msgstr "Lašowaś?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " Pó %(filter_title)s " + +msgid "Summary" +msgstr "Zespominanje" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Modele w nałoženju %(name)s" + +msgid "Add" +msgstr "Pśidaś" + +msgid "You don't have permission to view or edit anything." +msgstr "Njamaśo pšawo něco pokazaś abo wobźěłaś" + +msgid "Recent actions" +msgstr "Nejnowše akcije" + +msgid "My actions" +msgstr "Móje akcije" + +msgid "None available" +msgstr "Žeden k dispoziciji" + +msgid "Unknown content" +msgstr "Njeznate wopśimjeśe" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Něco jo z wašeju instalaciju datoweje banki kśiwje šło. Pśeznańśo se, až " +"wótpowědne tabele datoweje banki su se napórali a pótom, až datowa banka " +"dajo se wót wótpówědnego wužywarja cytaś." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Sćo ako %(username)s awtentificěrowany, ale njamaśo pśistup na toś ten bok. " +"Cośo se pla drugego konta pśizjawiś?" + +msgid "Forgotten your password or username?" +msgstr "Sćo swójo gronidło abo wužywarske mě zabył?" + +msgid "Date/time" +msgstr "Datum/cas" + +msgid "User" +msgstr "Wužywaŕ" + +msgid "Action" +msgstr "Akcija" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Toś ten objekt njama změnowu historiju. Jo se nejskerjej pśez toś to " +"administratorowe sedło pśidał." + +msgid "Show all" +msgstr "Wšykne pokazaś" + +msgid "Save" +msgstr "Składowaś" + +msgid "Popup closing…" +msgstr "Wuskokujuce wokno se zacynja…" + +msgid "Search" +msgstr "Pytaś" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s wuslědk" +msgstr[1] "%(counter)s wuslědka" +msgstr[2] "%(counter)s wuslědki" +msgstr[3] "%(counter)s wuslědkow" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s dogromady" + +msgid "Save as new" +msgstr "Ako nowy składowaś" + +msgid "Save and add another" +msgstr "Składowaś a dalšny pśidaś" + +msgid "Save and continue editing" +msgstr "Składowaś a dalej wobźěłowaś" + +msgid "Save and view" +msgstr "Składowaś a pokazaś" + +msgid "Close" +msgstr "Zacyniś" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Wubrane %(model)s změniś" + +#, python-format +msgid "Add another %(model)s" +msgstr "Dalšny %(model)s pśidaś" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Wubrane %(model)s lašowaś" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Źěkujomy se, až sćo źinsa wěsty cas na websedle pśebywał." + +msgid "Log in again" +msgstr "Hyšći raz pśizjawiś" + +msgid "Password change" +msgstr "Gronidło změniś" + +msgid "Your password was changed." +msgstr "Wašo gronidło jo se změniło." + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Pšosym zapódajśo k swójej wěstośe swójo stare gronidło a pótom swójo nowe " +"gronidło dwójcy, aby my mógli pśeglědowaś, lěc sćo jo korektnje zapisał." + +msgid "Change my password" +msgstr "Mójo gronidło změniś" + +msgid "Password reset" +msgstr "Gronidło jo se slědk stajiło" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Wašo gronidło jo se póstajiło. Móžośo pókšacowaś a se něnto pśizjawiś." + +msgid "Password reset confirmation" +msgstr "Wobkšuśenje slědkstajenja gronidła" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Pšosym zapódajśo swójo nowe gronidło dwójcy, aby my mógli pśeglědowaś, lěc " +"sći jo korektnje zapisał." + +msgid "New password:" +msgstr "Nowe gronidło:" + +msgid "Confirm password:" +msgstr "Gronidło wobkšuśiś:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Wótkaz za slědkstajenje gronidła jo njepłaśiwy był, snaź dokulaž jo se južo " +"wužył. Pšosym pšosćo wó nowe slědkstajenje gronidła." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Smy wam instrukcije za nastajenje wašogo gronidła pśez e-mail pósłali, jolic " +"konto ze zapódaneju e-mailoweju adresu eksistěrujo. Wy by dejał ju skóro " +"dostaś." + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Jolic mejlku njedostawaśo, pśeznańśo se, až sćo adresu zapódał, z kótarejuž " +"sćo zregistrěrował, a pśeglědajśo swój spamowy zarědnik." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Dostawaśo toś tu mejlku, dokulaž sćo za swójo wužywarske konto na " +"%(site_name)s wó slědkstajenje gronidła pšosył." + +msgid "Please go to the following page and choose a new password:" +msgstr "Pšosym źiśo k slědujucemu bokoju a wubjeŕśo nowe gronidło:" + +msgid "Your username, in case you've forgotten:" +msgstr "Wašo wužywarske mě, jolic sćo jo zabył:" + +msgid "Thanks for using our site!" +msgstr "Wjeliki źěk za wužywanje našogo sedła!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "Team %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" +"Sćo swójo gronidło zabył? Zapódajśo dołojce swóju e-mailowu adresu a " +"pósćelomy wam instrukcije za nastajenje nowego gronidła pśez e-mail." + +msgid "Email address:" +msgstr "E-mailowa adresa:" + +msgid "Reset my password" +msgstr "Mójo gronidło slědk stajiś" + +msgid "All dates" +msgstr "Wšykne daty" + +#, python-format +msgid "Select %s" +msgstr "%s wubraś" + +#, python-format +msgid "Select %s to change" +msgstr "%s wubraś, aby se změniło" + +#, python-format +msgid "Select %s to view" +msgstr "%s wubraś, kótaryž ma se pokazaś" + +msgid "Date:" +msgstr "Datum:" + +msgid "Time:" +msgstr "Cas:" + +msgid "Lookup" +msgstr "Pytanje" + +msgid "Currently:" +msgstr "Tuchylu:" + +msgid "Change:" +msgstr "Změniś:" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/dsb/LC_MESSAGES/djangojs.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/dsb/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..185749c4a91325ecef9e0593eaaf0759e114a9a2 GIT binary patch literal 5016 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 BVW0p2 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/en/LC_MESSAGES/djangojs.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/en/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..08a7b68596a8a494a33644935e4ca6d40be6447f GIT binary patch literal 356 zcmYL^T}#6-6ow~yl}oR^$c0zxnQ2R<#t+1;!eGTQs`s%yW*IdZNha=x`1kxRo+7R< zJcL6Ya^CzLAAOG~2gC_+N*odwM4y5ZWM(uUoJsz&^Zmzz!*d&8TR@&V)BOZ^1J;Pp-3(L-q)*BYxOFWyXKqhBsF BVW0p2 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/en_GB/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/en_GB/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b20f7bd18c6a2d364ec554baa8332a1464055d2f GIT binary patch literal 11159 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

MRTUnUNmm zc$Vt@uy(jryEn|V?QGbV+c}M$2>Z;s+R?ldwQ9EyI(cm&ZP>Bn$7(0S6w_L-@%qlb?kTpj85`s~>LGO}t5*so!W@S$R+AG1f, 2019 +# jon_atkinson , 2011-2012 +# Ross Poulton , 2011-2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-04-05 10:37+0000\n" +"Last-Translator: Adam Forster \n" +"Language-Team: English (United Kingdom) (http://www.transifex.com/django/" +"django/language/en_GB/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: en_GB\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Successfully deleted %(count)d %(items)s." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Cannot delete %(name)s" + +msgid "Are you sure?" +msgstr "Are you sure?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Delete selected %(verbose_name_plural)s" + +msgid "Administration" +msgstr "Administration" + +msgid "All" +msgstr "All" + +msgid "Yes" +msgstr "Yes" + +msgid "No" +msgstr "No" + +msgid "Unknown" +msgstr "Unknown" + +msgid "Any date" +msgstr "Any date" + +msgid "Today" +msgstr "Today" + +msgid "Past 7 days" +msgstr "Past 7 days" + +msgid "This month" +msgstr "This month" + +msgid "This year" +msgstr "This year" + +msgid "No date" +msgstr "No date" + +msgid "Has date" +msgstr "Has date" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." + +msgid "Action:" +msgstr "Action:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Add another %(verbose_name)s" + +msgid "Remove" +msgstr "Remove" + +msgid "Addition" +msgstr "Addition" + +msgid "Change" +msgstr "Change" + +msgid "Deletion" +msgstr "Deletion" + +msgid "action time" +msgstr "action time" + +msgid "user" +msgstr "user" + +msgid "content type" +msgstr "content type" + +msgid "object id" +msgstr "object id" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "object repr" + +msgid "action flag" +msgstr "action flag" + +msgid "change message" +msgstr "change message" + +msgid "log entry" +msgstr "log entry" + +msgid "log entries" +msgstr "log entries" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "Added \"%(object)s\"." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "Changed \"%(object)s\" - %(changes)s" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "Deleted \"%(object)s.\"" + +msgid "LogEntry Object" +msgstr "LogEntry Object" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "Added {name} \"{object}\"." + +msgid "Added." +msgstr "Added." + +msgid "and" +msgstr "and" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "" + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "" + +msgid "No fields changed." +msgstr "No fields changed." + +msgid "None" +msgstr "None" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "" + +msgid "You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." + +msgid "No action selected." +msgstr "No action selected." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "The %(name)s \"%(obj)s\" was deleted successfully." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "Add %s" + +#, python-format +msgid "Change %s" +msgstr "Change %s" + +#, python-format +msgid "View %s" +msgstr "" + +msgid "Database error" +msgstr "Database error" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s was changed successfully." +msgstr[1] "%(count)s %(name)s were changed successfully." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s selected" +msgstr[1] "All %(total_count)s selected" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 of %(cnt)s selected" + +#, python-format +msgid "Change history: %s" +msgstr "Change history: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" + +msgid "Django site admin" +msgstr "Django site admin" + +msgid "Django administration" +msgstr "Django administration" + +msgid "Site administration" +msgstr "Site administration" + +msgid "Log in" +msgstr "Log in" + +#, python-format +msgid "%(app)s administration" +msgstr "" + +msgid "Page not found" +msgstr "Page not found" + +msgid "We're sorry, but the requested page could not be found." +msgstr "We're sorry, but the requested page could not be found." + +msgid "Home" +msgstr "Home" + +msgid "Server error" +msgstr "Server error" + +msgid "Server error (500)" +msgstr "Server error (500)" + +msgid "Server Error (500)" +msgstr "Server Error (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Run the selected action" +msgstr "Run the selected action" + +msgid "Go" +msgstr "Go" + +msgid "Click here to select the objects across all pages" +msgstr "Click here to select the objects across all pages" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Select all %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Clear selection" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." + +msgid "Enter a username and password." +msgstr "Enter a username and password." + +msgid "Change password" +msgstr "Change password" + +msgid "Please correct the error below." +msgstr "" + +msgid "Please correct the errors below." +msgstr "" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Enter a new password for the user %(username)s." + +msgid "Welcome," +msgstr "Welcome," + +msgid "View site" +msgstr "" + +msgid "Documentation" +msgstr "Documentation" + +msgid "Log out" +msgstr "Log out" + +#, python-format +msgid "Add %(name)s" +msgstr "Add %(name)s" + +msgid "History" +msgstr "History" + +msgid "View on site" +msgstr "View on site" + +msgid "Filter" +msgstr "Filter" + +msgid "Remove from sorting" +msgstr "Remove from sorting" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Sorting priority: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Toggle sorting" + +msgid "Delete" +msgstr "Delete" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" + +msgid "Objects" +msgstr "" + +msgid "Yes, I'm sure" +msgstr "Yes, I'm sure" + +msgid "No, take me back" +msgstr "" + +msgid "Delete multiple objects" +msgstr "Delete multiple objects" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" + +msgid "View" +msgstr "" + +msgid "Delete?" +msgstr "Delete?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " By %(filter_title)s " + +msgid "Summary" +msgstr "" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "" + +msgid "Add" +msgstr "Add" + +msgid "You don't have permission to view or edit anything." +msgstr "" + +msgid "Recent actions" +msgstr "" + +msgid "My actions" +msgstr "" + +msgid "None available" +msgstr "None available" + +msgid "Unknown content" +msgstr "Unknown content" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "Forgotten your password or username?" + +msgid "Date/time" +msgstr "Date/time" + +msgid "User" +msgstr "User" + +msgid "Action" +msgstr "Action" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." + +msgid "Show all" +msgstr "Show all" + +msgid "Save" +msgstr "Save" + +msgid "Popup closing…" +msgstr "" + +msgid "Search" +msgstr "Search" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s result" +msgstr[1] "%(counter)s results" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s total" + +msgid "Save as new" +msgstr "Save as new" + +msgid "Save and add another" +msgstr "Save and add another" + +msgid "Save and continue editing" +msgstr "Save and continue editing" + +msgid "Save and view" +msgstr "" + +msgid "Close" +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Thanks for spending some quality time with the Web site today." + +msgid "Log in again" +msgstr "Log in again" + +msgid "Password change" +msgstr "Password change" + +msgid "Your password was changed." +msgstr "Your password was changed." + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." + +msgid "Change my password" +msgstr "Change my password" + +msgid "Password reset" +msgstr "Password reset" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Your password has been set. You may go ahead and log in now." + +msgid "Password reset confirmation" +msgstr "Password reset confirmation" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." + +msgid "New password:" +msgstr "New password:" + +msgid "Confirm password:" +msgstr "Confirm password:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" + +msgid "Please go to the following page and choose a new password:" +msgstr "Please go to the following page and choose a new password:" + +msgid "Your username, in case you've forgotten:" +msgstr "Your username, in case you've forgotten:" + +msgid "Thanks for using our site!" +msgstr "Thanks for using our site!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "The %(site_name)s team" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" + +msgid "Email address:" +msgstr "" + +msgid "Reset my password" +msgstr "Reset my password" + +msgid "All dates" +msgstr "All dates" + +#, python-format +msgid "Select %s" +msgstr "Select %s" + +#, python-format +msgid "Select %s to change" +msgstr "Select %s to change" + +#, python-format +msgid "Select %s to view" +msgstr "" + +msgid "Date:" +msgstr "Date:" + +msgid "Time:" +msgstr "Time:" + +msgid "Lookup" +msgstr "Lookup" + +msgid "Currently:" +msgstr "" + +msgid "Change:" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/en_GB/LC_MESSAGES/djangojs.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/en_GB/LC_MESSAGES/djangojs.po new file mode 100644 index 0000000..03cf679 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/en_GB/LC_MESSAGES/djangojs.po @@ -0,0 +1,218 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# jon_atkinson , 2012 +# Ross Poulton , 2011-2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-17 23:12+0200\n" +"PO-Revision-Date: 2017-09-19 16:41+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: English (United Kingdom) (http://www.transifex.com/django/" +"django/language/en_GB/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: en_GB\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Available %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Type into this box to filter down the list of available %s." + +msgid "Filter" +msgstr "Filter" + +msgid "Choose all" +msgstr "Choose all" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Click to choose all %s at once." + +msgid "Choose" +msgstr "Choose" + +msgid "Remove" +msgstr "Remove" + +#, javascript-format +msgid "Chosen %s" +msgstr "Chosen %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." + +msgid "Remove all" +msgstr "Remove all" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Click to remove all chosen %s at once." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s of %(cnt)s selected" +msgstr[1] "%(sel)s of %(cnt)s selected" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "" +msgstr[1] "" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" +msgstr[1] "" + +msgid "Now" +msgstr "Now" + +msgid "Choose a Time" +msgstr "" + +msgid "Choose a time" +msgstr "Choose a time" + +msgid "Midnight" +msgstr "Midnight" + +msgid "6 a.m." +msgstr "6 a.m." + +msgid "Noon" +msgstr "Noon" + +msgid "6 p.m." +msgstr "" + +msgid "Cancel" +msgstr "Cancel" + +msgid "Today" +msgstr "Today" + +msgid "Choose a Date" +msgstr "" + +msgid "Yesterday" +msgstr "Yesterday" + +msgid "Tomorrow" +msgstr "Tomorrow" + +msgid "January" +msgstr "" + +msgid "February" +msgstr "" + +msgid "March" +msgstr "" + +msgid "April" +msgstr "" + +msgid "May" +msgstr "" + +msgid "June" +msgstr "" + +msgid "July" +msgstr "" + +msgid "August" +msgstr "" + +msgid "September" +msgstr "" + +msgid "October" +msgstr "" + +msgid "November" +msgstr "" + +msgid "December" +msgstr "" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "" + +msgctxt "one letter Monday" +msgid "M" +msgstr "" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "" + +msgctxt "one letter Friday" +msgid "F" +msgstr "" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "" + +msgid "Show" +msgstr "Show" + +msgid "Hide" +msgstr "Hide" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/es_AR/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/es_AR/LC_MESSAGES/django.po new file mode 100644 index 0000000..1a2d926 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/es_AR/LC_MESSAGES/django.po @@ -0,0 +1,721 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Leonardo José Guzmán , 2013 +# Ramiro Morales, 2013-2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-03-20 14:06+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Spanish (Argentina) (http://www.transifex.com/django/django/" +"language/es_AR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_AR\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Se eliminaron con éxito %(count)d %(items)s." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "No se puede eliminar %(name)s" + +msgid "Are you sure?" +msgstr "¿Está seguro?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Eliminar %(verbose_name_plural)s seleccionados/as" + +msgid "Administration" +msgstr "Administración" + +msgid "All" +msgstr "Todos/as" + +msgid "Yes" +msgstr "Sí" + +msgid "No" +msgstr "No" + +msgid "Unknown" +msgstr "Desconocido" + +msgid "Any date" +msgstr "Cualquier fecha" + +msgid "Today" +msgstr "Hoy" + +msgid "Past 7 days" +msgstr "Últimos 7 días" + +msgid "This month" +msgstr "Este mes" + +msgid "This year" +msgstr "Este año" + +msgid "No date" +msgstr "Sin fecha" + +msgid "Has date" +msgstr "Tiene fecha" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Por favor introduza %(username)s y contraseña correctos de una cuenta de " +"staff. Note que puede que ambos campos sean estrictos en relación a " +"diferencias entre mayúsculas y minúsculas." + +msgid "Action:" +msgstr "Acción:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Agregar otro/a %(verbose_name)s" + +msgid "Remove" +msgstr "Eliminar" + +msgid "Addition" +msgstr "Agregado" + +msgid "Change" +msgstr "Modificar" + +msgid "Deletion" +msgstr "Borrado" + +msgid "action time" +msgstr "hora de la acción" + +msgid "user" +msgstr "usuario" + +msgid "content type" +msgstr "tipo de contenido" + +msgid "object id" +msgstr "id de objeto" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "repr de objeto" + +msgid "action flag" +msgstr "marca de acción" + +msgid "change message" +msgstr "mensaje de cambio" + +msgid "log entry" +msgstr "entrada de registro" + +msgid "log entries" +msgstr "entradas de registro" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "Se agrega \"%(object)s\"." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "Se modifica \"%(object)s\" - %(changes)s" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "Se elimina \"%(object)s.\"" + +msgid "LogEntry Object" +msgstr "Objeto LogEntry" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "Se agrega {name} \"{object}\"." + +msgid "Added." +msgstr "Agregado." + +msgid "and" +msgstr "y" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "Se modifican {fields} en {name} \"{object}\"." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Modificación de {fields}." + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "Se elimina {name} \"{object}\"." + +msgid "No fields changed." +msgstr "No ha modificado ningún campo." + +msgid "None" +msgstr "Ninguno" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" +"Mantenga presionada \"Control\" (\"Command\" en una Mac) para seleccionar " +"más de uno." + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "Se agregó con éxito {name} \"{obj}\"." + +msgid "You may edit it again below." +msgstr "Puede modificarlo/a nuevamente mas abajo." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" +"Se agregó con éxito {name} \"{obj}\". Puede agregar otro/a {name} abajo." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" +"Se modificó con éxito {name} \"{obj}\". Puede modificarlo/a nuevamente abajo." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "Se agregó con éxito {name} \"{obj}\". Puede modificarlo/a abajo." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" +"Se modificó con éxito {name} \"{obj}\". Puede agregar otro {name} abajo." + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "Se modificó con éxito {name} \"{obj}\"." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Deben existir ítems seleccionados para poder realizar acciones sobre los " +"mismos. No se modificó ningún ítem." + +msgid "No action selected." +msgstr "No se ha seleccionado ninguna acción." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "Se eliminó con éxito %(name)s \"%(obj)s\"." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "No existe %(name)s con ID \"%(key)s\". ¿Quizá fue eliminado/a?" + +#, python-format +msgid "Add %s" +msgstr "Agregar %s" + +#, python-format +msgid "Change %s" +msgstr "Modificar %s" + +#, python-format +msgid "View %s" +msgstr "Ver %s" + +msgid "Database error" +msgstr "Error de base de datos" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "Se ha modificado con éxito %(count)s %(name)s." +msgstr[1] "Se han modificado con éxito %(count)s %(name)s." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s seleccionados/as" +msgstr[1] "Todos/as (%(total_count)s en total) han sido seleccionados/as" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 de %(cnt)s seleccionados/as" + +#, python-format +msgid "Change history: %s" +msgstr "Historia de modificaciones: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"La eliminación de %(class_name)s %(instance)s provocaría la eliminación de " +"los siguientes objetos relacionados protegidos: %(related_objects)s" + +msgid "Django site admin" +msgstr "Administración de sitio Django" + +msgid "Django administration" +msgstr "Administración de Django" + +msgid "Site administration" +msgstr "Administración de sitio" + +msgid "Log in" +msgstr "Identificarse" + +#, python-format +msgid "%(app)s administration" +msgstr "Administración de %(app)s" + +msgid "Page not found" +msgstr "Página no encontrada" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Lo sentimos, pero no se encuentra la página solicitada." + +msgid "Home" +msgstr "Inicio" + +msgid "Server error" +msgstr "Error del servidor" + +msgid "Server error (500)" +msgstr "Error del servidor (500)" + +msgid "Server Error (500)" +msgstr "Error de servidor (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Ha ocurrido un error. Se ha reportado el mismo a los administradores del " +"sitio vía email y debería ser solucionado en breve. Le agradecemos por su " +"paciencia." + +msgid "Run the selected action" +msgstr "Ejecutar la acción seleccionada" + +msgid "Go" +msgstr "Ejecutar" + +msgid "Click here to select the objects across all pages" +msgstr "Haga click aquí para seleccionar los objetos de todas las páginas" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Seleccionar lo(s)/a(s) %(total_count)s %(module_name)s existentes" + +msgid "Clear selection" +msgstr "Borrar selección" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"Primero introduzca un nombre de usuario y una contraseña. Luego podrá " +"configurar opciones adicionales acerca del usuario." + +msgid "Enter a username and password." +msgstr "Introduzca un nombre de usuario y una contraseña." + +msgid "Change password" +msgstr "Cambiar contraseña" + +msgid "Please correct the error below." +msgstr "Por favor, corrija el error detallado mas abajo." + +msgid "Please correct the errors below." +msgstr "Por favor corrija los errores detallados abajo." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" +"Introduzca una nueva contraseña para el usuario %(username)s." + +msgid "Welcome," +msgstr "Bienvenido/a," + +msgid "View site" +msgstr "Ver sitio" + +msgid "Documentation" +msgstr "Documentación" + +msgid "Log out" +msgstr "Cerrar sesión" + +#, python-format +msgid "Add %(name)s" +msgstr "Agregar %(name)s" + +msgid "History" +msgstr "Historia" + +msgid "View on site" +msgstr "Ver en el sitio" + +msgid "Filter" +msgstr "Filtrar" + +msgid "Remove from sorting" +msgstr "Remover de ordenamiento" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Prioridad de ordenamiento: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "(des)activar ordenamiento" + +msgid "Delete" +msgstr "Eliminar" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Eliminar el %(object_name)s '%(escaped_object)s' provocaría la eliminación " +"de objetos relacionados, pero su cuenta no tiene permiso para eliminar los " +"siguientes tipos de objetos:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Eliminar los %(object_name)s '%(escaped_object)s' requeriría eliminar " +"también los siguientes objetos relacionados protegidos:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"¿Está seguro de que desea eliminar los %(object_name)s \"%(escaped_object)s" +"\"? Se eliminarán los siguientes objetos relacionados:" + +msgid "Objects" +msgstr "Objectos" + +msgid "Yes, I'm sure" +msgstr "Sí, estoy seguro" + +msgid "No, take me back" +msgstr "No, volver" + +msgid "Delete multiple objects" +msgstr "Eliminar múltiples objetos" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Eliminar el/los objetos %(objects_name)s seleccionados provocaría la " +"eliminación de objetos relacionados a los mismos, pero su cuenta de usuario " +"no tiene los permisos necesarios para eliminar los siguientes tipos de " +"objetos:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Eliminar el/los objetos %(objects_name)s seleccionados requeriría eliminar " +"también los siguientes objetos relacionados protegidos:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"¿Está seguro de que desea eliminar el/los objetos %(objects_name)s?. Todos " +"los siguientes objetos e ítems relacionados a los mismos también serán " +"eliminados:" + +msgid "View" +msgstr "Ver" + +msgid "Delete?" +msgstr "¿Eliminar?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " Por %(filter_title)s " + +msgid "Summary" +msgstr "Resumen" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Modelos en la aplicación %(name)s" + +msgid "Add" +msgstr "Agregar" + +msgid "You don't have permission to view or edit anything." +msgstr "No tiene permiso para ver o modificar nada." + +msgid "Recent actions" +msgstr "Acciones recientes" + +msgid "My actions" +msgstr "Mis acciones" + +msgid "None available" +msgstr "Ninguna disponible" + +msgid "Unknown content" +msgstr "Contenido desconocido" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Hay algún problema con su instalación de base de datos. Asegúrese de que las " +"tablas de la misma hayan sido creadas, y asegúrese de que el usuario " +"apropiado tenga permisos de lectura en la base de datos." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Ud. se halla autenticado como %(username)s, pero no está autorizado a " +"acceder a esta página ¿Desea autenticarse con una cuenta diferente?" + +msgid "Forgotten your password or username?" +msgstr "¿Olvidó su contraseña o nombre de usuario?" + +msgid "Date/time" +msgstr "Fecha/hora" + +msgid "User" +msgstr "Usuario" + +msgid "Action" +msgstr "Acción" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Este objeto no tiene historia de modificaciones. Probablemente no fue " +"añadido usando este sitio de administración." + +msgid "Show all" +msgstr "Mostrar todos/as" + +msgid "Save" +msgstr "Guardar" + +msgid "Popup closing…" +msgstr "Cerrando ventana amergente…" + +msgid "Search" +msgstr "Buscar" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s resultado" +msgstr[1] "%(counter)s resultados" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "total: %(full_result_count)s" + +msgid "Save as new" +msgstr "Guardar como nuevo" + +msgid "Save and add another" +msgstr "Guardar y agregar otro" + +msgid "Save and continue editing" +msgstr "Guardar y continuar editando" + +msgid "Save and view" +msgstr "Guardar y ver" + +msgid "Close" +msgstr "Cerrar" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Modificar %(model)s seleccionados/as" + +#, python-format +msgid "Add another %(model)s" +msgstr "Agregar otro/a %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Eliminar %(model)s seleccionados/as" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Gracias por el tiempo que ha dedicado al sitio web hoy." + +msgid "Log in again" +msgstr "Identificarse de nuevo" + +msgid "Password change" +msgstr "Cambio de contraseña" + +msgid "Your password was changed." +msgstr "Su contraseña ha sido cambiada." + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Por favor, por razones de seguridad, introduzca primero su contraseña " +"antigua y luego introduzca la nueva contraseña dos veces para verificar que " +"la ha escrito correctamente." + +msgid "Change my password" +msgstr "Cambiar mi contraseña" + +msgid "Password reset" +msgstr "Recuperar contraseña" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Su contraseña ha sido cambiada. Ahora puede continuar e ingresar." + +msgid "Password reset confirmation" +msgstr "Confirmación de reincialización de contraseña" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Por favor introduzca su nueva contraseña dos veces de manera que podamos " +"verificar que la ha escrito correctamente." + +msgid "New password:" +msgstr "Contraseña nueva:" + +msgid "Confirm password:" +msgstr "Confirme contraseña:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"El enlace de reinicialización de contraseña es inválido, posiblemente debido " +"a que ya ha sido usado. Por favor solicite una nueva reinicialización de " +"contraseña." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Se le han enviado instrucciones sobre cómo establecer su contraseña. Si la " +"dirección de email que proveyó existe, debería recibir las mismas pronto." + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Si no ha recibido un email, por favor asegúrese de que ha introducido la " +"dirección de correo con la que se había registrado y verifique su carpeta de " +"Correo no deseado." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Le enviamos este email porque Ud. ha solicitado que se reestablezca la " +"contraseña para su cuenta de usuario en %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "" +"Por favor visite la página que se muestra a continuación y elija una nueva " +"contraseña:" + +msgid "Your username, in case you've forgotten:" +msgstr "Su nombre de usuario, en caso de haberlo olvidado:" + +msgid "Thanks for using our site!" +msgstr "¡Gracias por usar nuestro sitio!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "El equipo de %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" +"¿Olvidó su contraseña? Introduzca su dirección de email abajo y le " +"enviaremos instrucciones para establecer una nueva." + +msgid "Email address:" +msgstr "Dirección de email:" + +msgid "Reset my password" +msgstr "Recuperar mi contraseña" + +msgid "All dates" +msgstr "Todas las fechas" + +#, python-format +msgid "Select %s" +msgstr "Seleccione %s" + +#, python-format +msgid "Select %s to change" +msgstr "Seleccione %s a modificar" + +#, python-format +msgid "Select %s to view" +msgstr "Seleccione %s que desea ver" + +msgid "Date:" +msgstr "Fecha:" + +msgid "Time:" +msgstr "Hora:" + +msgid "Lookup" +msgstr "Buscar" + +msgid "Currently:" +msgstr "Actualmente:" + +msgid "Change:" +msgstr "Cambiar:" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/es_CO/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/es_CO/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f806074309e28c3c5941ca8f446be4a56f18652e GIT binary patch literal 15156 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, 2014 +# Axel Díaz , 2015 +# Claude Paroz , 2014 +# Ernesto Avilés Vázquez , 2015 +# franchukelly , 2011 +# guillem , 2012 +# Igor Támara , 2013 +# Jannis Leidel , 2011 +# Josue Naaman Nistal Guerra , 2014 +# Marc Garcia , 2011 +# Pablo, 2015 +# Veronicabh , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 19:11+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Spanish (Colombia) (http://www.transifex.com/django/django/" +"language/es_CO/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_CO\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Eliminado/s %(count)d %(items)s satisfactoriamente." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "No se puede eliminar %(name)s" + +msgid "Are you sure?" +msgstr "¿Está seguro?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Eliminar %(verbose_name_plural)s seleccionado/s" + +msgid "Administration" +msgstr "Administración" + +msgid "All" +msgstr "Todo" + +msgid "Yes" +msgstr "Sí" + +msgid "No" +msgstr "No" + +msgid "Unknown" +msgstr "Desconocido" + +msgid "Any date" +msgstr "Cualquier fecha" + +msgid "Today" +msgstr "Hoy" + +msgid "Past 7 days" +msgstr "Últimos 7 días" + +msgid "This month" +msgstr "Este mes" + +msgid "This year" +msgstr "Este año" + +msgid "No date" +msgstr "" + +msgid "Has date" +msgstr "" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Por favor ingrese el %(username)s y la clave correctos para obtener cuenta " +"de personal. Observe que ambos campos pueden ser sensibles a mayúsculas." + +msgid "Action:" +msgstr "Acción:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Agregar %(verbose_name)s adicional." + +msgid "Remove" +msgstr "Eliminar" + +msgid "action time" +msgstr "hora de la acción" + +msgid "user" +msgstr "usuario" + +msgid "content type" +msgstr "tipo de contenido" + +msgid "object id" +msgstr "id del objeto" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/3/library/functions.html#repr) +msgid "object repr" +msgstr "repr del objeto" + +msgid "action flag" +msgstr "marca de acción" + +msgid "change message" +msgstr "mensaje de cambio" + +msgid "log entry" +msgstr "entrada de registro" + +msgid "log entries" +msgstr "entradas de registro" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "Añadidos \"%(object)s\"." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "Cambiados \"%(object)s\" - %(changes)s" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "Eliminado/a \"%(object)s.\"" + +msgid "LogEntry Object" +msgstr "Objeto de registro de Log" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "" + +msgid "Added." +msgstr "Añadido." + +msgid "and" +msgstr "y" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "" + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "" + +msgid "No fields changed." +msgstr "No ha cambiado ningún campo." + +msgid "None" +msgstr "Ninguno" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" +"Mantenga presionado \"Control\" o \"Command\" en un Mac, para seleccionar " +"más de una opción." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Se deben seleccionar elementos para poder realizar acciones sobre estos. No " +"se han modificado elementos." + +msgid "No action selected." +msgstr "No se seleccionó ninguna acción." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "Se eliminó con éxito el %(name)s \"%(obj)s\"." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "Añadir %s" + +#, python-format +msgid "Change %s" +msgstr "Modificar %s" + +msgid "Database error" +msgstr "Error en la base de datos" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s fué modificado con éxito." +msgstr[1] "%(count)s %(name)s fueron modificados con éxito." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s seleccionado" +msgstr[1] "%(total_count)s seleccionados en total" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "seleccionados 0 de %(cnt)s" + +#, python-format +msgid "Change history: %s" +msgstr "Histórico de modificaciones: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"La eliminación de %(class_name)s %(instance)s requeriría eliminar los " +"siguientes objetos relacionados protegidos: %(related_objects)s" + +msgid "Django site admin" +msgstr "Sitio de administración de Django" + +msgid "Django administration" +msgstr "Administración de Django" + +msgid "Site administration" +msgstr "Sitio administrativo" + +msgid "Log in" +msgstr "Iniciar sesión" + +#, python-format +msgid "%(app)s administration" +msgstr "Administración de %(app)s " + +msgid "Page not found" +msgstr "Página no encontrada" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Lo sentimos, pero no se encuentra la página solicitada." + +msgid "Home" +msgstr "Inicio" + +msgid "Server error" +msgstr "Error del servidor" + +msgid "Server error (500)" +msgstr "Error del servidor (500)" + +msgid "Server Error (500)" +msgstr "Error de servidor (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Ha habido un error. Ha sido comunicado al administrador del sitio por correo " +"electrónico y debería solucionarse a la mayor brevedad. Gracias por su " +"paciencia y comprensión." + +msgid "Run the selected action" +msgstr "Ejecutar la acción seleccionada" + +msgid "Go" +msgstr "Ir" + +msgid "Click here to select the objects across all pages" +msgstr "Pulse aquí para seleccionar los objetos a través de todas las páginas" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Seleccionar todos los %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Limpiar selección" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"Primero introduzca un nombre de usuario y una contraseña. Luego podrá editar " +"el resto de opciones del usuario." + +msgid "Enter a username and password." +msgstr "Ingrese un nombre de usuario y contraseña" + +msgid "Change password" +msgstr "Cambiar contraseña" + +msgid "Please correct the error below." +msgstr "Por favor, corrija los siguientes errores." + +msgid "Please correct the errors below." +msgstr "Por favor, corrija los siguientes errores." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" +"Ingrese una nueva contraseña para el usuario %(username)s." + +msgid "Welcome," +msgstr "Bienvenido/a," + +msgid "View site" +msgstr "Ver el sitio" + +msgid "Documentation" +msgstr "Documentación" + +msgid "Log out" +msgstr "Terminar sesión" + +#, python-format +msgid "Add %(name)s" +msgstr "Añadir %(name)s" + +msgid "History" +msgstr "Histórico" + +msgid "View on site" +msgstr "Ver en el sitio" + +msgid "Filter" +msgstr "Filtro" + +msgid "Remove from sorting" +msgstr "Elimina de la ordenación" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Prioridad de la ordenación: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Activar la ordenación" + +msgid "Delete" +msgstr "Eliminar" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Eliminar el %(object_name)s '%(escaped_object)s' provocaría la eliminación " +"de objetos relacionados, pero su cuenta no tiene permiso para borrar los " +"siguientes tipos de objetos:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"La eliminación de %(object_name)s %(escaped_object)s requeriría eliminar los " +"siguientes objetos relacionados protegidos:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"¿Está seguro de que quiere borrar los %(object_name)s \"%(escaped_object)s" +"\"? Se borrarán los siguientes objetos relacionados:" + +msgid "Objects" +msgstr "Objetos" + +msgid "Yes, I'm sure" +msgstr "Sí, estoy seguro" + +msgid "No, take me back" +msgstr "No, llévame atrás" + +msgid "Delete multiple objects" +msgstr "Eliminar múltiples objetos." + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"La eliminación del %(objects_name)s seleccionado resultaría en el borrado de " +"objetos relacionados, pero su cuenta no tiene permisos para borrar los " +"siguientes tipos de objetos:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"La eliminación de %(objects_name)s seleccionado requeriría el borrado de los " +"siguientes objetos protegidos relacionados:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"¿Está usted seguro que quiere eliminar el %(objects_name)s seleccionado? " +"Todos los siguientes objetos y sus elementos relacionados serán borrados:" + +msgid "Change" +msgstr "Modificar" + +msgid "Delete?" +msgstr "¿Eliminar?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " Por %(filter_title)s " + +msgid "Summary" +msgstr "Resumen" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Modelos en la aplicación %(name)s" + +msgid "Add" +msgstr "Añadir" + +msgid "You don't have permission to edit anything." +msgstr "No tiene permiso para editar nada." + +msgid "Recent actions" +msgstr "" + +msgid "My actions" +msgstr "" + +msgid "None available" +msgstr "Ninguno disponible" + +msgid "Unknown content" +msgstr "Contenido desconocido" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Algo va mal con la instalación de la base de datos. Asegúrese de que las " +"tablas necesarias han sido creadas, y de que la base de datos puede ser " +"leída por el usuario apropiado." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Se ha autenticado como %(username)s, pero no está autorizado a acceder a " +"esta página. ¿Desea autenticarse con una cuenta diferente?" + +msgid "Forgotten your password or username?" +msgstr "¿Ha olvidado la contraseña o el nombre de usuario?" + +msgid "Date/time" +msgstr "Fecha/hora" + +msgid "User" +msgstr "Usuario" + +msgid "Action" +msgstr "Acción" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Este objeto no tiene histórico de cambios. Probablemente no fue añadido " +"usando este sitio de administración." + +msgid "Show all" +msgstr "Mostrar todo" + +msgid "Save" +msgstr "Grabar" + +msgid "Popup closing..." +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Cambiar %(model)s seleccionado" + +#, python-format +msgid "Add another %(model)s" +msgstr "Añadir otro %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Eliminar %(model)s seleccionada/o" + +msgid "Search" +msgstr "Buscar" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s resultado" +msgstr[1] "%(counter)s resultados" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s total" + +msgid "Save as new" +msgstr "Grabar como nuevo" + +msgid "Save and add another" +msgstr "Grabar y añadir otro" + +msgid "Save and continue editing" +msgstr "Grabar y continuar editando" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Gracias por el tiempo que ha dedicado hoy al sitio web." + +msgid "Log in again" +msgstr "Iniciar sesión de nuevo" + +msgid "Password change" +msgstr "Cambio de contraseña" + +msgid "Your password was changed." +msgstr "Su contraseña ha sido cambiada." + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Por favor, ingrese su contraseña antigua, por seguridad, y después " +"introduzca la nueva contraseña dos veces para verificar que la ha escrito " +"correctamente." + +msgid "Change my password" +msgstr "Cambiar mi contraseña" + +msgid "Password reset" +msgstr "Restablecer contraseña" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "" +"Su contraseña ha sido establecida. Ahora puede seguir adelante e iniciar " +"sesión." + +msgid "Password reset confirmation" +msgstr "Confirmación de restablecimiento de contraseña" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Por favor, ingrese su contraseña nueva dos veces para verificar que la ha " +"escrito correctamente." + +msgid "New password:" +msgstr "Contraseña nueva:" + +msgid "Confirm password:" +msgstr "Confirme contraseña:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"El enlace de restablecimiento de contraseña era inválido, seguramente porque " +"se haya usado antes. Por favor, solicite un nuevo restablecimiento de " +"contraseña." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Le hemos enviado por email las instrucciones para restablecer la contraseña, " +"si es que existe una cuenta con la dirección electrónica que indicó. Debería " +"recibirlas en breve." + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Si no recibe un correo, por favor asegúrese de que ha introducido la " +"dirección de correo con la que se registró y verifique su carpeta de spam." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Ha recibido este correo electrónico porque ha solicitado restablecer la " +"contraseña para su cuenta en %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "Por favor, vaya a la página siguiente y escoja una nueva contraseña." + +msgid "Your username, in case you've forgotten:" +msgstr "Su nombre de usuario, en caso de haberlo olvidado:" + +msgid "Thanks for using our site!" +msgstr "¡Gracias por usar nuestro sitio!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "El equipo de %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" +"¿Ha olvidado su clave? Ingrese su dirección de correo electrónico a " +"continuación y le enviaremos las instrucciones para establecer una nueva." + +msgid "Email address:" +msgstr "Correo electrónico:" + +msgid "Reset my password" +msgstr "Restablecer mi contraseña" + +msgid "All dates" +msgstr "Todas las fechas" + +#, python-format +msgid "Select %s" +msgstr "Escoja %s" + +#, python-format +msgid "Select %s to change" +msgstr "Escoja %s a modificar" + +msgid "Date:" +msgstr "Fecha:" + +msgid "Time:" +msgstr "Hora:" + +msgid "Lookup" +msgstr "Buscar" + +msgid "Currently:" +msgstr "Actualmente:" + +msgid "Change:" +msgstr "Cambiar:" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/es_MX/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/es_MX/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..43e182482730e08e4ef0ed78a38d65c9a2880d28 GIT binary patch literal 14127 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, 2017 +# Hotellook, 2014 +# Leonardo J. Caballero G. , 2016 +# Yoel Acevedo, 2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 19:11+0000\n" +"Last-Translator: Eduardo \n" +"Language-Team: Spanish (Venezuela) (http://www.transifex.com/django/django/" +"language/es_VE/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_VE\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Eliminado %(count)d %(items)s satisfactoriamente." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "No se puede eliminar %(name)s" + +msgid "Are you sure?" +msgstr "¿Está seguro?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Eliminar %(verbose_name_plural)s seleccionado" + +msgid "Administration" +msgstr "Administración" + +msgid "All" +msgstr "Todo" + +msgid "Yes" +msgstr "Sí" + +msgid "No" +msgstr "No" + +msgid "Unknown" +msgstr "Desconocido" + +msgid "Any date" +msgstr "Cualquier fecha" + +msgid "Today" +msgstr "Hoy" + +msgid "Past 7 days" +msgstr "Últimos 7 días" + +msgid "This month" +msgstr "Este mes" + +msgid "This year" +msgstr "Este año" + +msgid "No date" +msgstr "Sin fecha" + +msgid "Has date" +msgstr "Tiene fecha" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Por favor, ingrese el %(username)s y la clave correctos para obtener cuenta " +"de personal. Observe que ambos campos pueden ser sensibles a mayúsculas." + +msgid "Action:" +msgstr "Acción:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Añadir otro %(verbose_name)s." + +msgid "Remove" +msgstr "Eliminar" + +msgid "action time" +msgstr "hora de la acción" + +msgid "user" +msgstr "usuario" + +msgid "content type" +msgstr "tipo de contenido" + +msgid "object id" +msgstr "id del objeto" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/3/library/functions.html#repr) +msgid "object repr" +msgstr "repr del objeto" + +msgid "action flag" +msgstr "marca de acción" + +msgid "change message" +msgstr "mensaje de cambio" + +msgid "log entry" +msgstr "entrada de registro" + +msgid "log entries" +msgstr "entradas de registro" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "Añadidos \"%(object)s\"." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "Cambiados \"%(object)s\" - %(changes)s" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "Eliminado \"%(object)s.\"" + +msgid "LogEntry Object" +msgstr "Objeto LogEntry" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "Agregado {name} \"{object}\"." + +msgid "Added." +msgstr "Añadido." + +msgid "and" +msgstr "y" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "Modificado {fields} por {name} \"{object}\"." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Modificado {fields}." + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "Eliminado {name} \"{object}\"." + +msgid "No fields changed." +msgstr "No ha cambiado ningún campo." + +msgid "None" +msgstr "Ninguno" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" +"Mantenga presionado \"Control\" o \"Command\" en un Mac, para seleccionar " +"más de una opción." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" +"El {name} \"{obj}\" fue agregado satisfactoriamente. Puede editarlo " +"nuevamente a continuación. " + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" +"El {name} \"{obj}\" fue agregado satisfactoriamente. Puede agregar otro " +"{name} a continuación. " + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "El {name} \"{obj}\" fue cambiado satisfactoriamente." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" +"El {name} \"{obj}\" fue cambiado satisfactoriamente. Puede editarlo " +"nuevamente a continuación. " + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" +"El {name} \"{obj}\" fue cambiado satisfactoriamente. Puede agregar otro " +"{name} a continuación." + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "El {name} \"{obj}\" fue cambiado satisfactoriamente." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Se deben seleccionar elementos para poder realizar acciones sobre estos. No " +"se han modificado elementos." + +msgid "No action selected." +msgstr "No se seleccionó ninguna acción." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "Se eliminó con éxito el %(name)s \"%(obj)s\"." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "%(name)s con ID \"%(key)s\" no existe. ¿Tal vez fue eliminada?" + +#, python-format +msgid "Add %s" +msgstr "Añadir %s" + +#, python-format +msgid "Change %s" +msgstr "Modificar %s" + +msgid "Database error" +msgstr "Error en la base de datos" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s fué modificado con éxito." +msgstr[1] "%(count)s %(name)s fueron modificados con éxito." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s seleccionado" +msgstr[1] "%(total_count)s seleccionados en total" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 de %(cnt)s seleccionado" + +#, python-format +msgid "Change history: %s" +msgstr "Histórico de modificaciones: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"La eliminación de %(class_name)s %(instance)s requeriría eliminar los " +"siguientes objetos relacionados protegidos: %(related_objects)s" + +msgid "Django site admin" +msgstr "Sitio de administración de Django" + +msgid "Django administration" +msgstr "Administración de Django" + +msgid "Site administration" +msgstr "Sitio de administración" + +msgid "Log in" +msgstr "Iniciar sesión" + +#, python-format +msgid "%(app)s administration" +msgstr "Administración de %(app)s " + +msgid "Page not found" +msgstr "Página no encontrada" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Lo sentimos, pero no se encuentra la página solicitada." + +msgid "Home" +msgstr "Inicio" + +msgid "Server error" +msgstr "Error del servidor" + +msgid "Server error (500)" +msgstr "Error del servidor (500)" + +msgid "Server Error (500)" +msgstr "Error de servidor (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Ha habido un error. Ha sido comunicado al administrador del sitio por correo " +"electrónico y debería solucionarse a la mayor brevedad. Gracias por su " +"paciencia y comprensión." + +msgid "Run the selected action" +msgstr "Ejecutar la acción seleccionada" + +msgid "Go" +msgstr "Ir" + +msgid "Click here to select the objects across all pages" +msgstr "Pulse aquí para seleccionar los objetos a través de todas las páginas" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Seleccionar todos los %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Limpiar selección" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"Primero introduzca un nombre de usuario y una contraseña. Luego podrá editar " +"el resto de opciones del usuario." + +msgid "Enter a username and password." +msgstr "Ingrese un nombre de usuario y contraseña" + +msgid "Change password" +msgstr "Cambiar contraseña" + +msgid "Please correct the error below." +msgstr "Por favor, corrija el siguiente error." + +msgid "Please correct the errors below." +msgstr "Por favor, corrija los siguientes errores." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" +"Ingrese una nueva contraseña para el usuario %(username)s." + +msgid "Welcome," +msgstr "Bienvenido," + +msgid "View site" +msgstr "Ver el sitio" + +msgid "Documentation" +msgstr "Documentación" + +msgid "Log out" +msgstr "Terminar sesión" + +#, python-format +msgid "Add %(name)s" +msgstr "Añadir %(name)s" + +msgid "History" +msgstr "Histórico" + +msgid "View on site" +msgstr "Ver en el sitio" + +msgid "Filter" +msgstr "Filtro" + +msgid "Remove from sorting" +msgstr "Elimina de la ordenación" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Prioridad de la ordenación: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Activar la ordenación" + +msgid "Delete" +msgstr "Eliminar" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Eliminar el %(object_name)s '%(escaped_object)s' provocaría la eliminación " +"de objetos relacionados, pero su cuenta no tiene permiso para borrar los " +"siguientes tipos de objetos:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Eliminar el %(object_name)s %(escaped_object)s requeriría eliminar los " +"siguientes objetos relacionados protegidos:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"¿Está seguro de que quiere borrar los %(object_name)s \"%(escaped_object)s" +"\"? Se borrarán los siguientes objetos relacionados:" + +msgid "Objects" +msgstr "Objetos" + +msgid "Yes, I'm sure" +msgstr "Sí, Yo estoy seguro" + +msgid "No, take me back" +msgstr "No, llévame atrás" + +msgid "Delete multiple objects" +msgstr "Eliminar múltiples objetos" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Eliminar el %(objects_name)s seleccionado resultaría en el borrado de " +"objetos relacionados, pero su cuenta no tiene permisos para borrar los " +"siguientes tipos de objetos:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Eliminar el %(objects_name)s seleccionado requeriría el borrado de los " +"siguientes objetos protegidos relacionados:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"¿Está usted seguro que quiere eliminar el %(objects_name)s seleccionado? " +"Todos los siguientes objetos y sus elementos relacionados serán borrados:" + +msgid "Change" +msgstr "Modificar" + +msgid "Delete?" +msgstr "¿Eliminar?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " Por %(filter_title)s " + +msgid "Summary" +msgstr "Resumen" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Modelos en la aplicación %(name)s" + +msgid "Add" +msgstr "Añadir" + +msgid "You don't have permission to edit anything." +msgstr "No tiene permiso para editar nada." + +msgid "Recent actions" +msgstr "Acciones recientes" + +msgid "My actions" +msgstr "Mis acciones" + +msgid "None available" +msgstr "Ninguno disponible" + +msgid "Unknown content" +msgstr "Contenido desconocido" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Algo va mal con la instalación de la base de datos. Asegúrese de que las " +"tablas necesarias han sido creadas, y de que la base de datos puede ser " +"leída por el usuario apropiado." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Se ha autenticado como %(username)s, pero no está autorizado a acceder a " +"esta página. ¿Desea autenticarse con una cuenta diferente?" + +msgid "Forgotten your password or username?" +msgstr "¿Ha olvidado la contraseña o el nombre de usuario?" + +msgid "Date/time" +msgstr "Fecha/hora" + +msgid "User" +msgstr "Usuario" + +msgid "Action" +msgstr "Acción" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Este objeto no tiene histórico de cambios. Probablemente no fue añadido " +"usando este sitio de administración." + +msgid "Show all" +msgstr "Mostrar todo" + +msgid "Save" +msgstr "Guardar" + +msgid "Popup closing..." +msgstr "Ventana emergente cerrando..." + +#, python-format +msgid "Change selected %(model)s" +msgstr "Cambiar %(model)s seleccionado" + +#, python-format +msgid "Add another %(model)s" +msgstr "Añadir otro %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Eliminar %(model)s seleccionado" + +msgid "Search" +msgstr "Buscar" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s resultado" +msgstr[1] "%(counter)s resultados" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s total" + +msgid "Save as new" +msgstr "Guardar como nuevo" + +msgid "Save and add another" +msgstr "Guardar y añadir otro" + +msgid "Save and continue editing" +msgstr "Guardar y continuar editando" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Gracias por el tiempo que ha dedicado hoy al sitio web." + +msgid "Log in again" +msgstr "Iniciar sesión de nuevo" + +msgid "Password change" +msgstr "Cambio de contraseña" + +msgid "Your password was changed." +msgstr "Su contraseña ha sido cambiada." + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Por favor, ingrese su contraseña antigua, por seguridad, y después " +"introduzca la nueva contraseña dos veces para verificar que la ha escrito " +"correctamente." + +msgid "Change my password" +msgstr "Cambiar mi contraseña" + +msgid "Password reset" +msgstr "Restablecer contraseña" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "" +"Su contraseña ha sido establecida. Ahora puede seguir adelante e iniciar " +"sesión." + +msgid "Password reset confirmation" +msgstr "Confirmación de restablecimiento de contraseña" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Por favor, ingrese su contraseña nueva dos veces para verificar que la ha " +"escrito correctamente." + +msgid "New password:" +msgstr "Contraseña nueva:" + +msgid "Confirm password:" +msgstr "Confirme contraseña:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"El enlace de restablecimiento de contraseña era inválido, seguramente porque " +"se haya usado antes. Por favor, solicite un nuevo restablecimiento de " +"contraseña." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Le hemos enviado por correo electrónico las instrucciones para restablecer " +"la contraseña, si es que existe una cuenta con la dirección electrónica que " +"indicó. Debería recibirlas en breve." + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Si no recibe un correo, por favor, asegúrese de que ha introducido la " +"dirección de correo con la que se registró y verifique su carpeta de correo " +"no deseado o spam." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Ha recibido este correo electrónico porque ha solicitado restablecer la " +"contraseña para su cuenta en %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "Por favor, vaya a la página siguiente y escoja una nueva contraseña." + +msgid "Your username, in case you've forgotten:" +msgstr "Su nombre de usuario, en caso de haberlo olvidado:" + +msgid "Thanks for using our site!" +msgstr "¡Gracias por usar nuestro sitio!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "El equipo de %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" +"¿Ha olvidado su clave? Ingrese su dirección de correo electrónico a " +"continuación y le enviaremos las instrucciones para establecer una nueva." + +msgid "Email address:" +msgstr "Correo electrónico:" + +msgid "Reset my password" +msgstr "Restablecer mi contraseña" + +msgid "All dates" +msgstr "Todas las fechas" + +#, python-format +msgid "Select %s" +msgstr "Escoja %s" + +#, python-format +msgid "Select %s to change" +msgstr "Escoja %s a modificar" + +msgid "Date:" +msgstr "Fecha:" + +msgid "Time:" +msgstr "Hora:" + +msgid "Lookup" +msgstr "Buscar" + +msgid "Currently:" +msgstr "Actualmente:" + +msgid "Change:" +msgstr "Cambiar:" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/et/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/et/LC_MESSAGES/django.po new file mode 100644 index 0000000..a967416 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/et/LC_MESSAGES/django.po @@ -0,0 +1,709 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# eallik , 2011 +# Jannis Leidel , 2011 +# Janno Liivak , 2013-2015 +# Martin Pajuste , 2015 +# Martin Pajuste , 2016,2019 +# Marti Raudsepp , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-01-18 16:25+0000\n" +"Last-Translator: Martin Pajuste \n" +"Language-Team: Estonian (http://www.transifex.com/django/django/language/" +"et/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: et\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(count)d %(items)s kustutamine õnnestus." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Ei saa kustutada %(name)s" + +msgid "Are you sure?" +msgstr "Kas olete kindel?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Kustuta valitud %(verbose_name_plural)s" + +msgid "Administration" +msgstr "Administreerimine" + +msgid "All" +msgstr "Kõik" + +msgid "Yes" +msgstr "Jah" + +msgid "No" +msgstr "Ei" + +msgid "Unknown" +msgstr "Tundmatu" + +msgid "Any date" +msgstr "Suvaline kuupäev" + +msgid "Today" +msgstr "Täna" + +msgid "Past 7 days" +msgstr "Viimased 7 päeva" + +msgid "This month" +msgstr "Käesolev kuu" + +msgid "This year" +msgstr "Käesolev aasta" + +msgid "No date" +msgstr "Kuupäev puudub" + +msgid "Has date" +msgstr "Kuupäev olemas" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Palun sisestage personali kontole õige %(username)s ja parool. Teadke, et " +"mõlemad väljad võivad olla tõstutundlikud." + +msgid "Action:" +msgstr "Toiming:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Lisa veel üks %(verbose_name)s" + +msgid "Remove" +msgstr "Eemalda" + +msgid "Addition" +msgstr "" + +msgid "Change" +msgstr "Muuda" + +msgid "Deletion" +msgstr "" + +msgid "action time" +msgstr "toimingu aeg" + +msgid "user" +msgstr "kasutaja" + +msgid "content type" +msgstr "sisutüüp" + +msgid "object id" +msgstr "objekti id" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "objekti esitus" + +msgid "action flag" +msgstr "toimingu lipp" + +msgid "change message" +msgstr "muudatuse tekst" + +msgid "log entry" +msgstr "logisissekanne" + +msgid "log entries" +msgstr "logisissekanded" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "Lisatud \"%(object)s\"." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "Muudetud \"%(object)s\" - %(changes)s" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "Kustutatud \"%(object)s.\"" + +msgid "LogEntry Object" +msgstr "Objekt LogEntry" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "Lisatud {name} \"{object}\"." + +msgid "Added." +msgstr "Lisatud." + +msgid "and" +msgstr "ja" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "Muudetud {fields} objektil {name} \"{object}\"." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Muudetud {fields}." + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "Kustutatud {name} \"{object}\"." + +msgid "No fields changed." +msgstr "Ühtegi välja ei muudetud." + +msgid "None" +msgstr "Puudub" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "Et valida mitu, hoidke all \"Control\"-nuppu (Maci puhul \"Command\")." + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "{name} \"{obj}\" lisamine õnnestus." + +msgid "You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "{name} \"{obj}\" lisamine õnnestus. Allpool saate lisada uue {name}." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "{name} \"{obj}\" muutmine õnnestus. Allpool saate seda uuesti muuta." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "{name} \"{obj}\" lisamine õnnestus. Allpool saate seda uuesti muuta." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "{name} \"{obj}\" muutmine õnnestus. Allpool saate lisada uue {name}." + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "{name} \"{obj}\" muutmine õnnestus." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Palun märgistage elemendid, millega soovite toiminguid sooritada. Ühtegi " +"elementi ei muudetud." + +msgid "No action selected." +msgstr "Toiming valimata." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "%(name)s \"%(obj)s\" kustutati." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "Lisa %s" + +#, python-format +msgid "Change %s" +msgstr "Muuda %s" + +#, python-format +msgid "View %s" +msgstr "" + +msgid "Database error" +msgstr "Andmebaasi viga" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s muutmine õnnestus." +msgstr[1] "%(count)s %(name)s muutmine õnnestus." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s valitud" +msgstr[1] "Kõik %(total_count)s valitud" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "valitud 0/%(cnt)s" + +#, python-format +msgid "Change history: %s" +msgstr "Muudatuste ajalugu: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Et kustutada %(class_name)s %(instance)s, on vaja kustutada järgmised " +"kaitstud seotud objektid: %(related_objects)s" + +msgid "Django site admin" +msgstr "Django administreerimisliides" + +msgid "Django administration" +msgstr "Django administreerimisliides" + +msgid "Site administration" +msgstr "Saidi administreerimine" + +msgid "Log in" +msgstr "Sisene" + +#, python-format +msgid "%(app)s administration" +msgstr "%(app)s administreerimine" + +msgid "Page not found" +msgstr "Lehte ei leitud" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Vabandame, kuid soovitud lehte ei leitud." + +msgid "Home" +msgstr "Kodu" + +msgid "Server error" +msgstr "Serveri viga" + +msgid "Server error (500)" +msgstr "Serveri viga (500)" + +msgid "Server Error (500)" +msgstr "Serveri Viga (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Ilmnes viga. Sellest on e-posti teel teavitatud lehe administraatorit ja " +"viga parandatakse esimesel võimalusel. Täname kannatlikkuse eest." + +msgid "Run the selected action" +msgstr "Käivita valitud toiming" + +msgid "Go" +msgstr "Mine" + +msgid "Click here to select the objects across all pages" +msgstr "Kliki siin, et märgistada objektid üle kõigi lehekülgede" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Märgista kõik %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Tühjenda valik" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"Kõige pealt sisestage kasutajatunnus ja salasõna, seejärel on võimalik muuta " +"täiendavaid kasutajaandmeid." + +msgid "Enter a username and password." +msgstr "Sisestage kasutajanimi ja salasõna." + +msgid "Change password" +msgstr "Muuda salasõna" + +msgid "Please correct the error below." +msgstr "Palun parandage allolev viga." + +msgid "Please correct the errors below." +msgstr "Palun parandage allolevad vead." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Sisestage uus salasõna kasutajale %(username)s" + +msgid "Welcome," +msgstr "Tere tulemast," + +msgid "View site" +msgstr "Vaata saiti" + +msgid "Documentation" +msgstr "Dokumentatsioon" + +msgid "Log out" +msgstr "Logi välja" + +#, python-format +msgid "Add %(name)s" +msgstr "Lisa %(name)s" + +msgid "History" +msgstr "Ajalugu" + +msgid "View on site" +msgstr "Näita lehel" + +msgid "Filter" +msgstr "Filtreeri" + +msgid "Remove from sorting" +msgstr "Eemalda sorteerimisest" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Sorteerimisjärk: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Sorteerimine" + +msgid "Delete" +msgstr "Kustuta" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Selleks, et kustutada %(object_name)s '%(escaped_object)s', on vaja " +"kustutada lisaks ka kõik seotud objecktid, aga teil puudub õigus järgnevat " +"tüüpi objektide kustutamiseks:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Et kustutada %(object_name)s '%(escaped_object)s', on vaja kustutada " +"järgmised kaitstud seotud objektid:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Kas olete kindel, et soovite kustutada objekti %(object_name)s " +"\"%(escaped_object)s\"? Kõik järgnevad seotud objektid kustutatakse koos " +"sellega:" + +msgid "Objects" +msgstr "Objektid" + +msgid "Yes, I'm sure" +msgstr "Jah, olen kindel" + +msgid "No, take me back" +msgstr "Ei, mine tagasi" + +msgid "Delete multiple objects" +msgstr "Kustuta mitu objekti" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Kui kustutada valitud %(objects_name)s, peaks kustutama ka seotud objektid, " +"aga sinu kasutajakontol pole õigusi järgmiste objektitüüpide kustutamiseks:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Et kustutada valitud %(objects_name)s, on vaja kustutada ka järgmised " +"kaitstud seotud objektid:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Kas oled kindel, et soovid kustutada valitud %(objects_name)s? Kõik " +"järgnevad objektid ja seotud objektid kustutatakse:" + +msgid "View" +msgstr "" + +msgid "Delete?" +msgstr "Kustutan?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " %(filter_title)s " + +msgid "Summary" +msgstr "Kokkuvõte" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Rakenduse %(name)s moodulid" + +msgid "Add" +msgstr "Lisa" + +msgid "You don't have permission to view or edit anything." +msgstr "" + +msgid "Recent actions" +msgstr "Hiljutised toimingud" + +msgid "My actions" +msgstr "Minu toimingud" + +msgid "None available" +msgstr "Ei leitud ühtegi" + +msgid "Unknown content" +msgstr "Tundmatu sisu" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"On tekkinud viga seoses andmebaasiga. Veenduge, et kõik vajalikud " +"andmebaasitabelid on loodud ning et andmebaas on vastava kasutaja poolt " +"loetav." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Olete sisse logitud kasutajana %(username)s, kuid teil puudub ligipääs " +"lehele. Kas te soovite teise kontoga sisse logida?" + +msgid "Forgotten your password or username?" +msgstr "Unustasite oma parooli või kasutajanime?" + +msgid "Date/time" +msgstr "Kuupäev/kellaaeg" + +msgid "User" +msgstr "Kasutaja" + +msgid "Action" +msgstr "Toiming" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Sellel objektil puudub muudatuste ajalugu. Tõenäoliselt ei kasutatud selle " +"objekti lisamisel käesolevat administreerimislidest." + +msgid "Show all" +msgstr "Näita kõiki" + +msgid "Save" +msgstr "Salvesta" + +msgid "Popup closing…" +msgstr "" + +msgid "Search" +msgstr "Otsing" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s tulemus" +msgstr[1] "%(counter)s tulemust" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "Kokku %(full_result_count)s" + +msgid "Save as new" +msgstr "Salvesta uuena" + +msgid "Save and add another" +msgstr "Salvesta ja lisa uus" + +msgid "Save and continue editing" +msgstr "Salvesta ja jätka muutmist" + +msgid "Save and view" +msgstr "" + +msgid "Close" +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Muuda valitud %(model)s" + +#, python-format +msgid "Add another %(model)s" +msgstr "Lisa veel üks %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Kustuta valitud %(model)s" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Tänan, et veetsite aega meie lehel." + +msgid "Log in again" +msgstr "Logi uuesti sisse" + +msgid "Password change" +msgstr "Salasõna muutmine" + +msgid "Your password was changed." +msgstr "Teie salasõna on vahetatud." + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Turvalisuse tagamiseks palun sisestage oma praegune salasõna ning seejärel " +"uus salasõna.Veendumaks, et uue salasõna sisestamisel ei tekkinud vigu, " +"palun sisestage see kaks korda." + +msgid "Change my password" +msgstr "Muuda salasõna" + +msgid "Password reset" +msgstr "Uue parooli loomine" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Teie salasõna on määratud. Võite nüüd sisse logida." + +msgid "Password reset confirmation" +msgstr "Uue salasõna loomise kinnitamine" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Palun sisestage uus salasõna kaks korda, et saaksime veenduda, et " +"sisestamisel ei tekkinud vigu." + +msgid "New password:" +msgstr "Uus salasõna:" + +msgid "Confirm password:" +msgstr "Kinnita salasõna:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Uue salasõna loomise link ei olnud korrektne. Võimalik, et seda on varem " +"kasutatud. Esitage uue salasõna taotlus uuesti." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Saatsime teile parooli muutmise juhendi, kui teie poolt sisestatud e-posti " +"aadressiga konto on olemas. Peaksite selle lähiajal kätte saama." + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Kui te ei saa kirja siis kontrollige, et sisestasite e-posti aadressi " +"millega registreerisite ning kontrollige oma rämpsposti kausta." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Saite käesoleva kirja kuna soovisite muuta lehel %(site_name)s oma " +"kasutajakontoga seotud parooli." + +msgid "Please go to the following page and choose a new password:" +msgstr "Palun minge järmisele lehele ning sisestage uus salasõna" + +msgid "Your username, in case you've forgotten:" +msgstr "Teie kasutajatunnus juhul, kui olete unustanud:" + +msgid "Thanks for using our site!" +msgstr "Täname meie lehte külastamast!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s meeskond" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" +"Unustasite oma parooli? Sisestage allpool oma e-posti aadress ja me saadame " +"teile juhendi, kuidas parooli muuta." + +msgid "Email address:" +msgstr "E-posti aadress:" + +msgid "Reset my password" +msgstr "Reseti parool" + +msgid "All dates" +msgstr "Kõik kuupäevad" + +#, python-format +msgid "Select %s" +msgstr "Vali %s" + +#, python-format +msgid "Select %s to change" +msgstr "Vali %s mida muuta" + +#, python-format +msgid "Select %s to view" +msgstr "" + +msgid "Date:" +msgstr "Kuupäev:" + +msgid "Time:" +msgstr "Aeg:" + +msgid "Lookup" +msgstr "Otsi" + +msgid "Currently:" +msgstr "Hetkel:" + +msgid "Change:" +msgstr "Muuda:" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/eu/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/eu/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e3c840f916619441da7226fad0c18e027135621d GIT binary patch literal 16336 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, 2013,2016 +# Eneko Illarramendi , 2017-2019 +# Jannis Leidel , 2011 +# julen, 2012-2013 +# julen, 2013 +# Urtzi Odriozola , 2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-01-22 09:57+0000\n" +"Last-Translator: Eneko Illarramendi \n" +"Language-Team: Basque (http://www.transifex.com/django/django/language/eu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: eu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(count)d %(items)s elementu ezabatu dira." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Ezin da %(name)s ezabatu" + +msgid "Are you sure?" +msgstr "Ziur al zaude?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Ezabatu aukeratutako %(verbose_name_plural)s" + +msgid "Administration" +msgstr "Kudeaketa" + +msgid "All" +msgstr "Dena" + +msgid "Yes" +msgstr "Bai" + +msgid "No" +msgstr "Ez" + +msgid "Unknown" +msgstr "Ezezaguna" + +msgid "Any date" +msgstr "Edozein data" + +msgid "Today" +msgstr "Gaur" + +msgid "Past 7 days" +msgstr "Aurreko 7 egunak" + +msgid "This month" +msgstr "Hilabete hau" + +msgid "This year" +msgstr "Urte hau" + +msgid "No date" +msgstr "Datarik ez" + +msgid "Has date" +msgstr "Data dauka" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Idatzi kudeaketa gunerako %(username)s eta pasahitz zuzena. Kontuan izan " +"biek maiuskula/minuskulak desberdintzen dituztela." + +msgid "Action:" +msgstr "Ekintza:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Gehitu beste %(verbose_name)s bat" + +msgid "Remove" +msgstr "Kendu" + +msgid "Addition" +msgstr "Gehitzea" + +msgid "Change" +msgstr "Aldatu" + +msgid "Deletion" +msgstr "Ezabatzea" + +msgid "action time" +msgstr "Ekintza hordua" + +msgid "user" +msgstr "erabiltzailea" + +msgid "content type" +msgstr "eduki mota" + +msgid "object id" +msgstr "objetuaren id-a" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "objeturaren adierazpena" + +msgid "action flag" +msgstr "Ekintza botoia" + +msgid "change message" +msgstr "Mezua aldatu" + +msgid "log entry" +msgstr "Log sarrera" + +msgid "log entries" +msgstr "log sarrerak" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "\"%(object)s\" gehituta." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "\"%(object)s\" aldatuta - %(changes)s" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "\"%(object)s\" ezabatuta." + +msgid "LogEntry Object" +msgstr "LogEntry objetua" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "{name} \"{object}\" gehitu." + +msgid "Added." +msgstr "Gehituta" + +msgid "and" +msgstr "eta" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "{fields}-(e)tik {name} \"{object}\" aldatatuta." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "{fields} aldatuta." + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "{name} \"{object}\" ezabatuta." + +msgid "No fields changed." +msgstr "Ez da eremurik aldatu." + +msgid "None" +msgstr "Bat ere ez" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" +"Bat baino gehiago hautatzeko, sakatu \"Kontrol\" tekla edo \"Command\" Mac " +"batean." + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "{name} \"{obj}\" ondo gehitu da." + +msgid "You may edit it again below." +msgstr "Aldaketa gehiago egin ditzazkezu jarraian." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" +"{name} \"{obj}\" ondo gehitu da. Beste {name} bat gehitu dezakezu jarraian." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" +"{name} \"{obj}\" ondo aldatu da. Aldaketa gehiago egin ditzazkezu jarraian." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" +"{name} \"{obj}\" ondo gehitu da. Aldaketa gehiago egin ditzazkezu jarraian." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" +"{name} \"{obj}\" ondo aldatu da. Beste {name} bat gehitu dezakezu jarraian." + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "{name} \"{obj}\" ondo aldatu da." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Elementuak aukeratu behar dira beraien gain ekintzak burutzeko. Ez da " +"elementurik aldatu." + +msgid "No action selected." +msgstr "Ez dago ekintzarik aukeratuta." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "%(name)s \"%(obj)s\" ondo ezabatu da." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" +"\"%(key)s\" ID dun %(name)s ez dira existitzen. Agian ezabatua izan da?" + +#, python-format +msgid "Add %s" +msgstr "Gehitu %s" + +#, python-format +msgid "Change %s" +msgstr "Aldatu %s" + +#, python-format +msgid "View %s" +msgstr "%s ikusi" + +msgid "Database error" +msgstr "Errorea datu-basean" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(name)s %(count)s ondo aldatu da." +msgstr[1] "%(count)s %(name)s ondo aldatu dira." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "Guztira %(total_count)s aukeratuta" +msgstr[1] "Guztira %(total_count)s aukeratuta" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "Guztira %(cnt)s, 0 aukeratuta" + +#, python-format +msgid "Change history: %s" +msgstr "Aldaketen historia: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"%(class_name)s klaseko %(instance)s instantziak ezabatzeak erlazionatutako " +"objektu hauek ezabatzea eragingo du:\n" +"%(related_objects)s" + +msgid "Django site admin" +msgstr "Django kudeaketa gunea" + +msgid "Django administration" +msgstr "Django kudeaketa" + +msgid "Site administration" +msgstr "Webgunearen kudeaketa" + +msgid "Log in" +msgstr "Sartu" + +#, python-format +msgid "%(app)s administration" +msgstr "%(app)s kudeaketa" + +msgid "Page not found" +msgstr "Ez da orririk aurkitu" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Barkatu, eskatutako orria ezin daiteke aurkitu" + +msgid "Home" +msgstr "Hasiera" + +msgid "Server error" +msgstr "Zerbitzariaren errorea" + +msgid "Server error (500)" +msgstr "Zerbitzariaren errorea (500)" + +msgid "Server Error (500)" +msgstr "Zerbitzariaren errorea (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Errore bat gertatu da. Errorea guneko kudeatzaileari jakinarazi zaio email " +"bidez eta laster egon beharko luke konponduta. Barkatu eragozpenak." + +msgid "Run the selected action" +msgstr "Burutu aukeratutako ekintza" + +msgid "Go" +msgstr "Joan" + +msgid "Click here to select the objects across all pages" +msgstr "Egin klik hemen orri guztietako objektuak aukeratzeko" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Hautatu %(total_count)s %(module_name)s guztiak" + +msgid "Clear selection" +msgstr "Garbitu hautapena" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"Lehenik idatzi erabiltzaile-izena eta pasahitza. Gero erabiltzaile-aukera " +"gehiago aldatu ahal izango dituzu." + +msgid "Enter a username and password." +msgstr "Sartu erabiltzaile izen eta pasahitz bat." + +msgid "Change password" +msgstr "Aldatu pasahitza" + +msgid "Please correct the error below." +msgstr "Mesedez zuzendu erroreak behean." + +msgid "Please correct the errors below." +msgstr "Mesedez zuzendu erroreak behean." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" +"Idatzi pasahitz berria %(username)s erabiltzailearentzat." + +msgid "Welcome," +msgstr "Ongi etorri," + +msgid "View site" +msgstr "Webgunea ikusi" + +msgid "Documentation" +msgstr "Dokumentazioa" + +msgid "Log out" +msgstr "Irten" + +#, python-format +msgid "Add %(name)s" +msgstr "Gehitu %(name)s" + +msgid "History" +msgstr "Historia" + +msgid "View on site" +msgstr "Webgunean ikusi" + +msgid "Filter" +msgstr "Iragazkia" + +msgid "Remove from sorting" +msgstr "Kendu ordenaziotik" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Ordenatzeko lehentasuna: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Txandakatu ordenazioa" + +msgid "Delete" +msgstr "Ezabatu" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"%(object_name)s ezabatzean bere '%(escaped_object)s' ere ezabatzen dira, " +"baina zure kontuak ez dauka baimenik objetu mota hauek ezabatzeko:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"%(object_name)s '%(escaped_object)s' ezabatzeak erlazionatutako objektu " +"babestu hauek ezabatzea eskatzen du:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Ziur zaude %(object_name)s \"%(escaped_object)s\" ezabatu nahi dituzula? " +"Erlazionaturik dauden hurrengo elementuak ere ezabatuko dira:" + +msgid "Objects" +msgstr "Objetuak" + +msgid "Yes, I'm sure" +msgstr "Bai, ziur nago" + +msgid "No, take me back" +msgstr "Ez, itzuli atzera" + +msgid "Delete multiple objects" +msgstr "Ezabatu hainbat objektu" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Aukeratutako %(objects_name)s ezabatzeak erlazionatutako objektuak ezabatzea " +"eskatzen du baina zure kontuak ez dauka baimen nahikorik objektu mota hauek " +"ezabatzeko: " + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Aukeratutako %(objects_name)s ezabatzeak erlazionatutako objektu babestu " +"hauek ezabatzea eskatzen du:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Ziur zaude aukeratutako %(objects_name)s ezabatu nahi duzula? Objektu guzti " +"hauek eta erlazionatutako elementu guztiak ezabatuko dira:" + +msgid "View" +msgstr "Ikusi" + +msgid "Delete?" +msgstr "Ezabatu?" + +#, python-format +msgid " By %(filter_title)s " +msgstr "Irizpidea: %(filter_title)s" + +msgid "Summary" +msgstr "Laburpena" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "%(name)s aplikazioaren modeloak" + +msgid "Add" +msgstr "Gehitu" + +msgid "You don't have permission to view or edit anything." +msgstr "Ez duzu ezer ikusi edo ezabatzeko baimenik." + +msgid "Recent actions" +msgstr "Azken ekintzak" + +msgid "My actions" +msgstr "Nire ekintzak" + +msgid "None available" +msgstr "Ez dago ezer" + +msgid "Unknown content" +msgstr "Eduki ezezaguna" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Zerbait gaizki dago zure datu-basearen instalazioan. Ziurtatu datu-baseko " +"taulak sortu direla eta dagokion erabiltzaileak irakurtzeko baimena duela." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"%(username)s bezala autentikatu zara, baina ez daukazu orrialde honetara " +"sarbidea. Nahi al duzu kontu ezberdin batez sartu?" + +msgid "Forgotten your password or username?" +msgstr "Pasahitza edo erabiltzaile-izena ahaztu duzu?" + +msgid "Date/time" +msgstr "Data/ordua" + +msgid "User" +msgstr "Erabiltzailea" + +msgid "Action" +msgstr "Ekintza" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Objektu honek ez dauka aldaketen historiarik. Ziurrenik kudeaketa gunetik " +"kanpo gehituko zen." + +msgid "Show all" +msgstr "Erakutsi dena" + +msgid "Save" +msgstr "Gorde" + +msgid "Popup closing…" +msgstr "Popup leihoa ixten..." + +msgid "Search" +msgstr "Bilatu" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "Emaitza %(counter)s " +msgstr[1] "%(counter)s emaitza" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s guztira" + +msgid "Save as new" +msgstr "Gorde berri gisa" + +msgid "Save and add another" +msgstr "Gorde eta beste bat gehitu" + +msgid "Save and continue editing" +msgstr "Gorde eta editatzen jarraitu" + +msgid "Save and view" +msgstr "Gorde eta ikusi" + +msgid "Close" +msgstr "Itxi" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Aldatu aukeratutako %(model)s" + +#, python-format +msgid "Add another %(model)s" +msgstr "Gehitu beste %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Ezabatu aukeratutako %(model)s" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Eskerrik asko webguneari zure probetxuzko denbora eskaintzeagatik." + +msgid "Log in again" +msgstr "Hasi saioa berriro" + +msgid "Password change" +msgstr "Aldatu pasahitza" + +msgid "Your password was changed." +msgstr "Zure pasahitza aldatu egin da." + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Idatzi pasahitz zaharra segurtasun arrazoiengatik eta gero pasahitz berria " +"bi aldiz, akatsik egiten ez duzula ziurta dezagun." + +msgid "Change my password" +msgstr "Nire pasahitza aldatu" + +msgid "Password reset" +msgstr "Berrezarri pasahitza" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Zure pasahitza ezarri da. Orain aurrera egin eta sartu zaitezke." + +msgid "Password reset confirmation" +msgstr "Pasahitza berrezartzeko berrespena" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "Idatzi pasahitz berria birritan ondo idatzita dagoela ziurta dezagun." + +msgid "New password:" +msgstr "Pasahitz berria:" + +msgid "Confirm password:" +msgstr "Berretsi pasahitza:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Pasahitza berrezartzeko loturak baliogabea dirudi. Baliteke lotura aurretik " +"erabilita egotea. Eskatu berriro pasahitza berrezartzea." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Zure pasahitza ezartzeko jarraibideak bidali dizkizugu email bidez, sartu " +"duzun helbide elektronikoa kontu bati lotuta badago. Laster jaso beharko " +"zenituzke." + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Ez baduzu mezurik jasotzen, ziurtatu izena ematean erabilitako helbide " +"berdina idatzi duzula eta egiaztatu spam karpeta." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Mezu hau %(site_name)s webgunean pasahitza berrezartzea eskatu duzulako jaso " +"duzu." + +msgid "Please go to the following page and choose a new password:" +msgstr "Zoaz hurrengo orrira eta aukeratu pasahitz berria:" + +msgid "Your username, in case you've forgotten:" +msgstr "Zure erabiltzaile-izena (ahaztu baduzu):" + +msgid "Thanks for using our site!" +msgstr "Mila esker gure webgunea erabiltzeagatik!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s webguneko taldea" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" +"Pasahitza ahaztu duzu? Idatzi zure helbide elektronikoa eta berri bat " +"ezartzeko jarraibideak bidaliko dizkizugu." + +msgid "Email address:" +msgstr "Helbide elektronikoa:" + +msgid "Reset my password" +msgstr "Berrezarri pasahitza" + +msgid "All dates" +msgstr "Data guztiak" + +#, python-format +msgid "Select %s" +msgstr "Aukeratu %s" + +#, python-format +msgid "Select %s to change" +msgstr "Aukeratu %s aldatzeko" + +#, python-format +msgid "Select %s to view" +msgstr "Aukeratu %s ikusteko" + +msgid "Date:" +msgstr "Data:" + +msgid "Time:" +msgstr "Ordua:" + +msgid "Lookup" +msgstr "Lookup" + +msgid "Currently:" +msgstr "Oraingoa:" + +msgid "Change:" +msgstr "Aldatu:" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/eu/LC_MESSAGES/djangojs.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/eu/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..6b9adaa92c9b5488f4deee9e5814fdb6c7612da0 GIT binary patch literal 4522 zcmbuB&yO5O6~_x~z}Y~+fdGLJo=t48;4 z`_XB>L8wq)2j2&N zE3{tcBkkYoN$~7nJzD22O&%1doA#1x5co7!>Xgd=M192SAvv9u55`K(Xub&|V0<1d9Ax z;B(**Z3e#r{tc9QUxG2>-#D-vn1K*c9u&E+f}-ym;EUjkpv33U2kW@~1{6JSfKPyb z2>p9Lq|~?3-Uq$}z5-fs3eJI>)%OE`82F>W9|!(4@U_672YwuLrOef+{t>FGz=bM8 z{TS+D)B~te9;{L2nZ#U**n9*PYSqK2??#m(v5+Erm(r+F<*YnDiYoE>lr&JVt*VHR z?nj+OokBg1`bku{OC3ceRJcaXqRM;W5UP|J)X$)vKs|^md<7)>Cv3*Ivtv9XC9B};I`-FwqqwrNBu~hq=8_5;7qFKi%yYyHNT-v zs^gUDP_7nq*5*_#bgj)ffHa-geyr6p{jruGZ>81ToU=+<=nNJlX2T?fPO&zp zNnZKp2$FT+Y>Xp1q}1BV`Rf*$3NK%PlMC-L*=e+;6N}2onpjegMYlH%LNsn#j+u${ zxNYO$ja!VPA^V7~q^xtUvw~JHiQi;?Z8^?+#?XaM#|>B1menp9GpfkyC3klPC&pK= zr;$&V*DG^H-I#+bdvDgXX<$N(qhNC%DVyPmJ;Fsx&LCuam&W^6Y$kmx<9%z|7ZTjP zYd7>3mE;Y5t#09Rk!+1iwhF$r^Jz}9y8CH$#o6n4eK(eq#uwS;$dx7~*O3x-;wlfU z^Np3fW0Jv$D6Zr$7becW+2$O z${R*>?#P{L%zU;ncbsNVHy=B3YzAfGvd(>@<#d*(+FRG8#f*EFmeUlcTK5@QNsqJi zJpp%0U(~k!&tYEHDRhS$E!O=eozwZ33#Q4g_k-s2^ycPf2z%Twv|odV&Y0#IGr|@tn24Z$_7<4KRb7Z>c_K_867xFvq#TN;5x1D*9Lpj z!)06FySnHxPFmsh9mj9Jat-cWt>)vR^aW<;1Vyn)J8-B`^S(qAS8}a>`+*YeHN_g& zbQmJ*lHwhD&U2=FG_q0F7(MHrTI}GZ-b-aOIdx!#fh;s*-H}*{7)N7*quE{~AI4_& z5SUtaK1O%2nt_3rF-{E`9Utd2AGJS#|IdyoXJzOXB1De-t>ijBz-1(P=n3H|j}UAXh>l z;UsZ_e1wVj;I%|Y1QD(xS;B+b_#jMpzm~ekCBBQwf%tTyr?>EC?dmFogh_-&wxAC& zV~iy5Gg=2nIeCyeTpA2i>BUGiE~6Vwk|R?m(QORkQpfsMdt~vO?1{}gn6xM=e6hPl z$T6qR8RV5(#=$CUB^n=s88(@XpU5!}+W0#6aAtdCkYKv>)hWS=wQ3QUF`OsIXxm*$ zQ5I9^L6Q@fBu!kN7H@QXuqALb4g?ONcnJ$~UxJcFblE^JKAy0DJ%xMS;rk%A-Wq6U zISJzU`8rX, 2011 +# Eneko Illarramendi , 2017 +# Jannis Leidel , 2011 +# julen , 2012-2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-17 23:12+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Eneko Illarramendi \n" +"Language-Team: Basque (http://www.transifex.com/django/django/language/eu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: eu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "%s erabilgarri" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Hau da aukeran dauden %s zerrenda. Hauetako zenbait aukera ditzakezu " +"azpiko \n" +"kaxan hautatu eta kutxen artean dagoen \"Aukeratu\" gezian klik eginez." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Idatzi kutxa honetan erabilgarri dauden %s objektuak iragazteko." + +msgid "Filter" +msgstr "Filtroa" + +msgid "Choose all" +msgstr "Denak aukeratu" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Egin klik %s guztiak batera aukeratzeko." + +msgid "Choose" +msgstr "Aukeratu" + +msgid "Remove" +msgstr "Kendu" + +#, javascript-format +msgid "Chosen %s" +msgstr "%s aukeratuak" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Hau da aukeratutako %s zerrenda. Hauetako zenbait ezaba ditzakezu azpiko " +"kutxan hautatu eta bi kutxen artean dagoen \"Ezabatu\" gezian klik eginez." + +msgid "Remove all" +msgstr "Kendu guztiak" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Egin klik aukeratutako %s guztiak kentzeko." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(cnt)s-etik %(sel)s aukeratuta" +msgstr[1] "%(cnt)s-etik %(sel)s aukeratuta" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Gorde gabeko aldaketak dauzkazu eremuetan. Ekintza bat exekutatzen baduzu, " +"gorde gabeko aldaketak galduko dira." + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"Ekintza bat hautatu duzu, baina oraindik ez duzu eremuetako aldaketak gorde. " +"Mesedez, sakatu OK gordetzeko. Ekintza berriro exekutatu beharko duzu." + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Ekintza bat hautatu duzu, baina ez duzu inongo aldaketarik egin eremuetan. " +"Litekeena da, Gorde botoia beharrean Aurrera botoiaren bila aritzea." + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Oharra: zerbitzariaren denborarekiko ordu %s aurrerago zaude" +msgstr[1] "Oharra: zerbitzariaren denborarekiko %s ordu aurrerago zaude" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Oharra: zerbitzariaren denborarekiko ordu %s atzerago zaude. " +msgstr[1] "Oharra: zerbitzariaren denborarekiko %s ordu atzerago zaude. " + +msgid "Now" +msgstr "Orain" + +msgid "Choose a Time" +msgstr "Aukeratu ordu bat" + +msgid "Choose a time" +msgstr "Aukeratu ordu bat" + +msgid "Midnight" +msgstr "Gauerdia" + +msgid "6 a.m." +msgstr "6 a.m." + +msgid "Noon" +msgstr "Eguerdia" + +msgid "6 p.m." +msgstr "6 p.m." + +msgid "Cancel" +msgstr "Atzera" + +msgid "Today" +msgstr "Gaur" + +msgid "Choose a Date" +msgstr "Aukeratu data bat" + +msgid "Yesterday" +msgstr "Atzo" + +msgid "Tomorrow" +msgstr "Bihar" + +msgid "January" +msgstr "Urtarrila" + +msgid "February" +msgstr "Otsaila" + +msgid "March" +msgstr "Martxoa" + +msgid "April" +msgstr "Apirila" + +msgid "May" +msgstr "Maiatza" + +msgid "June" +msgstr "Ekaina" + +msgid "July" +msgstr "Uztaila" + +msgid "August" +msgstr "Abuztua" + +msgid "September" +msgstr "Iraila" + +msgid "October" +msgstr "Urria" + +msgid "November" +msgstr "Azaroa" + +msgid "December" +msgstr "Abendua" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "I" + +msgctxt "one letter Monday" +msgid "M" +msgstr "A" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "A" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "A" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "O" + +msgctxt "one letter Friday" +msgid "F" +msgstr "O" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "L" + +msgid "Show" +msgstr "Erakutsi" + +msgid "Hide" +msgstr "Izkutatu" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/fa/LC_MESSAGES/djangojs.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/fa/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..7c6fa113bca69db59948fe3edd106db159bdadb2 GIT binary patch literal 5267 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 VcRxKv{gF&Q*nEu?UzMv<>fgSnXw3is literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/fi/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/fi/LC_MESSAGES/django.po new file mode 100644 index 0000000..a2c0a38 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/fi/LC_MESSAGES/django.po @@ -0,0 +1,708 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Aarni Koskela, 2015,2017 +# Antti Kaihola , 2011 +# Jannis Leidel , 2011 +# Klaus Dahlén , 2012 +# Nikolay Korotkiy , 2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-01-18 00:36+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Finnish (http://www.transifex.com/django/django/language/" +"fi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(count)d \"%(items)s\"-kohdetta poistettu." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Ei voida poistaa: %(name)s" + +msgid "Are you sure?" +msgstr "Oletko varma?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Poista valitut \"%(verbose_name_plural)s\"-kohteet" + +msgid "Administration" +msgstr "Hallinta" + +msgid "All" +msgstr "Kaikki" + +msgid "Yes" +msgstr "Kyllä" + +msgid "No" +msgstr "Ei" + +msgid "Unknown" +msgstr "Tuntematon" + +msgid "Any date" +msgstr "Mikä tahansa päivä" + +msgid "Today" +msgstr "Tänään" + +msgid "Past 7 days" +msgstr "Viimeiset 7 päivää" + +msgid "This month" +msgstr "Tässä kuussa" + +msgid "This year" +msgstr "Tänä vuonna" + +msgid "No date" +msgstr "Ei päivämäärää" + +msgid "Has date" +msgstr "On päivämäärä" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Ole hyvä ja syötä henkilökuntatilin %(username)s ja salasana. Huomaa että " +"kummassakin kentässä isoilla ja pienillä kirjaimilla saattaa olla merkitystä." + +msgid "Action:" +msgstr "Toiminto:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Lisää toinen %(verbose_name)s" + +msgid "Remove" +msgstr "Poista" + +msgid "Addition" +msgstr "Lisäys" + +msgid "Change" +msgstr "Muokkaa" + +msgid "Deletion" +msgstr "Poisto" + +msgid "action time" +msgstr "tapahtumahetki" + +msgid "user" +msgstr "käyttäjä" + +msgid "content type" +msgstr "sisältötyyppi" + +msgid "object id" +msgstr "kohteen tunniste" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "kohteen tiedot" + +msgid "action flag" +msgstr "tapahtumatyyppi" + +msgid "change message" +msgstr "selitys" + +msgid "log entry" +msgstr "lokimerkintä" + +msgid "log entries" +msgstr "lokimerkinnät" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "Lisätty \"%(object)s\"." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "Muokattu \"%(object)s\" - %(changes)s" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "Poistettu \"%(object)s.\"" + +msgid "LogEntry Object" +msgstr "Lokimerkintätietue" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "Lisätty {name} \"{object}\"." + +msgid "Added." +msgstr "Lisätty." + +msgid "and" +msgstr "ja" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "Muutettu {fields} {name}-kohteelle \"{object}\"." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Muutettu {fields}." + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "Poistettu {name} \"{object}\"." + +msgid "No fields changed." +msgstr "Ei muutoksia kenttiin." + +msgid "None" +msgstr "Ei arvoa" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" +" Pidä \"Ctrl\" (tai Macin \"Command\") pohjassa valitaksesi useita " +"vaihtoehtoja." + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "{name} \"{obj}\" on lisätty." + +msgid "You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "{name} \"{obj}\" on lisätty. Voit lisätä toisen {name} alla." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "{name} \"{obj}\" on muokattu. Voit muokata sitä edelleen alla." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "{name} \"{obj}\" on lisätty. Voit muokata sitä uudelleen alla." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "{name} \"{obj}\" on muokattu. Voit lisätä toisen alla." + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "{name} \"{obj}\" on muokattu." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Kohteiden täytyy olla valittuna, jotta niihin voi kohdistaa toimintoja. " +"Kohteita ei ole muutettu." + +msgid "No action selected." +msgstr "Ei toimintoa valittuna." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "%(name)s \"%(obj)s\" on poistettu." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "%(name)s tunnisteella %(key)s puuttuu. Se on voitu poistaa." + +#, python-format +msgid "Add %s" +msgstr "Lisää %s" + +#, python-format +msgid "Change %s" +msgstr "Muokkaa %s" + +#, python-format +msgid "View %s" +msgstr "" + +msgid "Database error" +msgstr "Tietokantavirhe" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s on muokattu." +msgstr[1] "%(count)s \"%(name)s\"-kohdetta on muokattu." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s valittu" +msgstr[1] "Kaikki %(total_count)s valittu" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 valittuna %(cnt)s mahdollisesta" + +#, python-format +msgid "Change history: %s" +msgstr "Muokkaushistoria: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"%(class_name)s %(instance)s poistaminen vaatisi myös seuraavien suojattujen " +"liittyvien kohteiden poiston: %(related_objects)s" + +msgid "Django site admin" +msgstr "Django-sivuston ylläpito" + +msgid "Django administration" +msgstr "Djangon ylläpito" + +msgid "Site administration" +msgstr "Sivuston ylläpito" + +msgid "Log in" +msgstr "Kirjaudu sisään" + +#, python-format +msgid "%(app)s administration" +msgstr "%(app)s-ylläpito" + +msgid "Page not found" +msgstr "Sivua ei löydy" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Pahoittelemme, pyydettyä sivua ei löytynyt." + +msgid "Home" +msgstr "Etusivu" + +msgid "Server error" +msgstr "Palvelinvirhe" + +msgid "Server error (500)" +msgstr "Palvelinvirhe (500)" + +msgid "Server Error (500)" +msgstr "Palvelinvirhe (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Sattui virhe. Virheestä on huomautettu sivuston ylläpitäjille sähköpostitse " +"ja se korjautunee piakkoin. Kiitos kärsivällisyydestä." + +msgid "Run the selected action" +msgstr "Suorita valittu toiminto" + +msgid "Go" +msgstr "Suorita" + +msgid "Click here to select the objects across all pages" +msgstr "Klikkaa tästä valitaksesi kohteet kaikilta sivuilta" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Valitse kaikki %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Tyhjennä valinta" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"Syötä ensin käyttäjätunnus ja salasana. Sen jälkeen voit muokata muita " +"käyttäjän tietoja." + +msgid "Enter a username and password." +msgstr "Syötä käyttäjätunnus ja salasana." + +msgid "Change password" +msgstr "Vaihda salasana" + +msgid "Please correct the error below." +msgstr "" + +msgid "Please correct the errors below." +msgstr "Korjaa allaolevat virheet." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Syötä käyttäjän %(username)s uusi salasana." + +msgid "Welcome," +msgstr "Tervetuloa," + +msgid "View site" +msgstr "Näytä sivusto" + +msgid "Documentation" +msgstr "Ohjeita" + +msgid "Log out" +msgstr "Kirjaudu ulos" + +#, python-format +msgid "Add %(name)s" +msgstr "Lisää %(name)s" + +msgid "History" +msgstr "Muokkaushistoria" + +msgid "View on site" +msgstr "Näytä lopputulos" + +msgid "Filter" +msgstr "Suodatin" + +msgid "Remove from sorting" +msgstr "Poista järjestämisestä" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Järjestysprioriteetti: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Kytke järjestäminen" + +msgid "Delete" +msgstr "Poista" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Kohteen '%(escaped_object)s' (%(object_name)s) poisto poistaisi myös siihen " +"liittyviä kohteita, mutta sinulla ei ole oikeutta näiden kohteiden " +"poistamiseen:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"%(object_name)s '%(escaped_object)s': poistettaessa joudutaan poistamaan " +"myös seuraavat suojatut siihen liittyvät kohteet:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Haluatko varmasti poistaa kohteen \"%(escaped_object)s\" (%(object_name)s)? " +"Myös seuraavat kohteet poistettaisiin samalla:" + +msgid "Objects" +msgstr "Kohteet" + +msgid "Yes, I'm sure" +msgstr "Kyllä, olen varma" + +msgid "No, take me back" +msgstr "Ei, mennään takaisin" + +msgid "Delete multiple objects" +msgstr "Poista useita kohteita" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Jos valitut %(objects_name)s poistettaisiin, jouduttaisiin poistamaan niihin " +"liittyviä kohteita. Sinulla ei kuitenkaan ole oikeutta poistaa seuraavia " +"kohdetyyppejä:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Jos valitut %(objects_name)s poistetaan, pitää poistaa myös seuraavat " +"suojatut niihin liittyvät kohteet:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Haluatki varmasti poistaa valitut %(objects_name)s? Samalla poistetaan " +"kaikki alla mainitut ja niihin liittyvät kohteet:" + +msgid "View" +msgstr "" + +msgid "Delete?" +msgstr "Poista?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " %(filter_title)s " + +msgid "Summary" +msgstr "Yhteenveto" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "%(name)s -applikaation mallit" + +msgid "Add" +msgstr "Lisää" + +msgid "You don't have permission to view or edit anything." +msgstr "" + +msgid "Recent actions" +msgstr "Viimeisimmät tapahtumat" + +msgid "My actions" +msgstr "Omat tapahtumat" + +msgid "None available" +msgstr "Ei yhtään" + +msgid "Unknown content" +msgstr "Tuntematon sisältö" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Tietokanta-asennuksessa on jotain vialla. Varmista, että sopivat taulut on " +"luotu ja että oikea käyttäjä voi lukea tietokantaa." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Olet kirjautunut käyttäjänä %(username)s, mutta sinulla ei ole pääsyä tälle " +"sivulle. Haluaisitko kirjautua eri tilille?" + +msgid "Forgotten your password or username?" +msgstr "Unohditko salasanasi tai käyttäjätunnuksesi?" + +msgid "Date/time" +msgstr "Pvm/klo" + +msgid "User" +msgstr "Käyttäjä" + +msgid "Action" +msgstr "Tapahtuma" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Tällä kohteella ei ole muutoshistoriaa. Sitä ei ole ilmeisesti lisätty tämän " +"ylläpitosivun avulla." + +msgid "Show all" +msgstr "Näytä kaikki" + +msgid "Save" +msgstr "Tallenna ja poistu" + +msgid "Popup closing…" +msgstr "" + +msgid "Search" +msgstr "Haku" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s osuma" +msgstr[1] "%(counter)s osumaa" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "yhteensä %(full_result_count)s" + +msgid "Save as new" +msgstr "Tallenna uutena" + +msgid "Save and add another" +msgstr "Tallenna ja lisää toinen" + +msgid "Save and continue editing" +msgstr "Tallenna välillä ja jatka muokkaamista" + +msgid "Save and view" +msgstr "" + +msgid "Close" +msgstr "Sulje" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Muuta valittuja %(model)s" + +#, python-format +msgid "Add another %(model)s" +msgstr "Lisää toinen %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Poista valitut %(model)s" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Kiitos sivuillamme viettämästäsi ajasta." + +msgid "Log in again" +msgstr "Kirjaudu uudelleen sisään" + +msgid "Password change" +msgstr "Salasanan vaihtaminen" + +msgid "Your password was changed." +msgstr "Salasanasi on vaihdettu." + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Syötä vanha salasanasi varmistukseksi, ja syötä sitten uusi salasanasi kaksi " +"kertaa, jotta se tulee varmasti oikein." + +msgid "Change my password" +msgstr "Vaihda salasana" + +msgid "Password reset" +msgstr "Salasanan nollaus" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Salasanasi on asetettu. Nyt voit kirjautua sisään." + +msgid "Password reset confirmation" +msgstr "Salasanan nollauksen vahvistus" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Syötä uusi salasanasi kaksi kertaa, jotta voimme varmistaa että syötit sen " +"oikein." + +msgid "New password:" +msgstr "Uusi salasana:" + +msgid "Confirm password:" +msgstr "Varmista uusi salasana:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Salasanan nollauslinkki oli virheellinen, mahdollisesti siksi että se on jo " +"käytetty. Ole hyvä ja pyydä uusi salasanan nollaus." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Sinulle on lähetetty sähköpostitse ohjeet salasanasi asettamiseen, mikäli " +"antamallasi sähköpostiosoitteella on olemassa tili." + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Jos viestiä ei näy, ole hyvä ja varmista syöttäneesi oikea sähköpostiosoite " +"sekä tarkista sähköpostisi roskapostikansio." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Tämä viesti on lähetetty sinulle, koska olet pyytänyt %(site_name)s -" +"sivustolla salasanan palautusta." + +msgid "Please go to the following page and choose a new password:" +msgstr "Määrittele uusi salasanasi oheisella sivulla:" + +msgid "Your username, in case you've forgotten:" +msgstr "Käyttäjätunnuksesi siltä varalta, että olet unohtanut sen:" + +msgid "Thanks for using our site!" +msgstr "Kiitos vierailustasi sivuillamme!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s -sivuston ylläpitäjät" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" +"Unohditko salasanasi? Syötä sähköpostiosoitteesi alle ja lähetämme sinulle " +"ohjeet uuden salasanan asettamiseksi." + +msgid "Email address:" +msgstr "Sähköpostiosoite:" + +msgid "Reset my password" +msgstr "Nollaa salasanani" + +msgid "All dates" +msgstr "Kaikki päivät" + +#, python-format +msgid "Select %s" +msgstr "Valitse %s" + +#, python-format +msgid "Select %s to change" +msgstr "Valitse muokattava %s" + +#, python-format +msgid "Select %s to view" +msgstr "" + +msgid "Date:" +msgstr "Pvm:" + +msgid "Time:" +msgstr "Klo:" + +msgid "Lookup" +msgstr "Etsi" + +msgid "Currently:" +msgstr "Tällä hetkellä:" + +msgid "Change:" +msgstr "Muokkaa:" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/fi/LC_MESSAGES/djangojs.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/fi/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..10d6422a4d2209b686aebfefa3eae9596faab6d1 GIT binary patch literal 4561 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/he/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/he/LC_MESSAGES/django.po new file mode 100644 index 0000000..e531548 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/he/LC_MESSAGES/django.po @@ -0,0 +1,703 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Alex Gaynor , 2011 +# Jannis Leidel , 2011 +# Meir Kriheli , 2011-2015,2017,2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-03-19 16:40+0000\n" +"Last-Translator: Meir Kriheli \n" +"Language-Team: Hebrew (http://www.transifex.com/django/django/language/he/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: he\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % " +"1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(count)d %(items)s נמחקו בהצלחה." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "לא ניתן למחוק %(name)s" + +msgid "Are you sure?" +msgstr "האם את/ה בטוח/ה ?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "מחק %(verbose_name_plural)s שנבחרו" + +msgid "Administration" +msgstr "ניהול" + +msgid "All" +msgstr "הכל" + +msgid "Yes" +msgstr "כן" + +msgid "No" +msgstr "לא" + +msgid "Unknown" +msgstr "לא ידוע" + +msgid "Any date" +msgstr "כל תאריך" + +msgid "Today" +msgstr "היום" + +msgid "Past 7 days" +msgstr "בשבוע האחרון" + +msgid "This month" +msgstr "החודש" + +msgid "This year" +msgstr "השנה" + +msgid "No date" +msgstr "ללא תאריך" + +msgid "Has date" +msgstr "עם תאריך" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"נא להזין את %(username)s והסיסמה הנכונים לחשבון איש צוות. נא לשים לב כי שני " +"השדות רגישים לאותיות גדולות/קטנות." + +msgid "Action:" +msgstr "פעולה" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "הוספת %(verbose_name)s" + +msgid "Remove" +msgstr "להסיר" + +msgid "Addition" +msgstr "הוספה" + +msgid "Change" +msgstr "שינוי" + +msgid "Deletion" +msgstr "מחיקה" + +msgid "action time" +msgstr "זמן פעולה" + +msgid "user" +msgstr "משתמש" + +msgid "content type" +msgstr "סוג תוכן" + +msgid "object id" +msgstr "מזהה אובייקט" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "ייצוג אובייקט" + +msgid "action flag" +msgstr "דגל פעולה" + +msgid "change message" +msgstr "הערה לשינוי" + +msgid "log entry" +msgstr "רישום יומן" + +msgid "log entries" +msgstr "רישומי יומן" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "בוצעה הוספת \"%(object)s\"." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "בוצע שינוי \"%(object)s\" - %(changes)s" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "בוצעה מחיקת \"%(object)s\"." + +msgid "LogEntry Object" +msgstr "אובייקט LogEntry" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "בוצעה הוספת {name} \"{object}\"." + +msgid "Added." +msgstr "נוסף." + +msgid "and" +msgstr "ו" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "בוצע שינוי {fields} עבור {name} \"{object}\"." + +#, python-brace-format +msgid "Changed {fields}." +msgstr " {fields} שונו." + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "בוצעה מחיקת {name} \"{object}\"." + +msgid "No fields changed." +msgstr "אף שדה לא השתנה." + +msgid "None" +msgstr "ללא" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" +"יש להחזיק את \"Control\", או \"Command\" על מק, לחוץ כדי לבחור יותר מאחד." + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "הוספת {name} \"{obj}\" בוצעה בהצלחה." + +msgid "You may edit it again below." +msgstr "ניתן לערוך שוב מתחת." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "הוספת {name} \"{obj}\" בוצעה בהצלחה. ניתן להוסיף עוד {name} מתחת.." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "עדכון {name} \"{obj}\" " + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "הוספת {name} \"{obj}\" בוצעה בהצלחה. ניתן לערוך שוב מתחת." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "עדכון {name} \"{obj}\" בוצע בהצלחה. ניתן להוסיף עוד {name} מתחת." + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "שינוי {name} \"{obj}\" בוצע בהצלחה." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "יש לסמן פריטים כדי לבצע עליהם פעולות. לא שונו פריטים." + +msgid "No action selected." +msgstr "לא נבחרה פעולה." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "מחיקת %(name)s \"%(obj)s\" בוצעה בהצלחה." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "%(name)s עם ID \"%(key)s\" לא במצאי. אולי זה נמחק?" + +#, python-format +msgid "Add %s" +msgstr "הוספת %s" + +#, python-format +msgid "Change %s" +msgstr "שינוי %s" + +#, python-format +msgid "View %s" +msgstr "צפיה ב%s" + +msgid "Database error" +msgstr "שגיאת בסיס נתונים" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "שינוי %(count)s %(name)s בוצע בהצלחה." +msgstr[1] "שינוי %(count)s %(name)s בוצע בהצלחה." +msgstr[2] "שינוי %(count)s %(name)s בוצע בהצלחה." +msgstr[3] "שינוי %(count)s %(name)s בוצע בהצלחה." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s נבחר" +msgstr[1] "כל ה־%(total_count)s נבחרו" +msgstr[2] "כל ה־%(total_count)s נבחרו" +msgstr[3] "כל ה־%(total_count)s נבחרו" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 מ %(cnt)s נבחרים" + +#, python-format +msgid "Change history: %s" +msgstr "היסטוריית שינוי: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"מחיקת %(class_name)s %(instance)s תדרוש מחיקת האובייקטים הקשורים והמוגנים " +"הבאים: %(related_objects)s" + +msgid "Django site admin" +msgstr "ניהול אתר Django" + +msgid "Django administration" +msgstr "ניהול Django" + +msgid "Site administration" +msgstr "ניהול אתר" + +msgid "Log in" +msgstr "כניסה" + +#, python-format +msgid "%(app)s administration" +msgstr "ניהול %(app)s" + +msgid "Page not found" +msgstr "דף לא קיים" + +msgid "We're sorry, but the requested page could not be found." +msgstr "אנו מצטערים, לא ניתן למצוא את הדף המבוקש." + +msgid "Home" +msgstr "דף הבית" + +msgid "Server error" +msgstr "שגיאת שרת" + +msgid "Server error (500)" +msgstr "שגיאת שרת (500)" + +msgid "Server Error (500)" +msgstr "שגיאת שרת (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"התרחשה שגיאה. היא דווחה למנהלי האתר בדוא\"ל ותתוקן בקרוב. תודה על סבלנותך." + +msgid "Run the selected action" +msgstr "הפעל את הפעולה שבחרת בה." + +msgid "Go" +msgstr "בצע" + +msgid "Click here to select the objects across all pages" +msgstr "לחיצה כאן תבחר את האובייקטים בכל העמודים" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "בחירת כל %(total_count)s ה־%(module_name)s" + +msgid "Clear selection" +msgstr "איפוס בחירה" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"ראשית יש להזין שם משתמש וסיסמה. לאחר מכן יהיה ביכולתך לערוך אפשרויות נוספות " +"עבור המשתמש." + +msgid "Enter a username and password." +msgstr "נא לשים שם משתמש וסיסמה." + +msgid "Change password" +msgstr "שינוי סיסמה" + +msgid "Please correct the error below." +msgstr "נא לתקן את השגיאה מתחת." + +msgid "Please correct the errors below." +msgstr "נא לתקן את השגיאות מתחת." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "יש להזין סיסמה חדשה עבור המשתמש %(username)s." + +msgid "Welcome," +msgstr "שלום," + +msgid "View site" +msgstr "צפיה באתר" + +msgid "Documentation" +msgstr "תיעוד" + +msgid "Log out" +msgstr "יציאה" + +#, python-format +msgid "Add %(name)s" +msgstr "הוספת %(name)s" + +msgid "History" +msgstr "היסטוריה" + +msgid "View on site" +msgstr "צפיה באתר" + +msgid "Filter" +msgstr "סינון" + +msgid "Remove from sorting" +msgstr "הסרה ממיון" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "עדיפות מיון: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "החלף כיוון מיון" + +msgid "Delete" +msgstr "מחיקה" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"מחיקת %(object_name)s '%(escaped_object)s' מצריכה מחיקת אובייקטים מקושרים, " +"אך לחשבון שלך אין הרשאות למחיקת סוגי האובייקטים הבאים:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"מחיקת ה%(object_name)s '%(escaped_object)s' תדרוש מחיקת האובייקטים הקשורים " +"והמוגנים הבאים:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"האם ברצונך למחוק את %(object_name)s \"%(escaped_object)s\"? כל הפריטים " +"הקשורים הבאים יימחקו:" + +msgid "Objects" +msgstr "אובייקטים" + +msgid "Yes, I'm sure" +msgstr "כן, אני בטוח/ה" + +msgid "No, take me back" +msgstr "לא, קח אותי חזרה." + +msgid "Delete multiple objects" +msgstr "מחק כמה פריטים" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"מחיקת ב%(objects_name)s הנבחרת תביא במחיקת אובייקטים קשורים, אבל החשבון שלך " +"אינו הרשאה למחוק את הסוגים הבאים של אובייקטים:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"מחיקת ה%(objects_name)s אשר סימנת תדרוש מחיקת האובייקטים הקשורים והמוגנים " +"הבאים:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"האם אתה בטוח שאתה רוצה למחוק את ה%(objects_name)s הנבחר? כל האובייקטים הבאים " +"ופריטים הקשורים להם יימחקו:" + +msgid "View" +msgstr "צפיה" + +msgid "Delete?" +msgstr "מחיקה ?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " לפי %(filter_title)s " + +msgid "Summary" +msgstr "סיכום" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "מודלים ביישום %(name)s" + +msgid "Add" +msgstr "הוספה" + +msgid "You don't have permission to view or edit anything." +msgstr "אין לך הרשאות לצפיה או עריכה." + +msgid "Recent actions" +msgstr "פעולות אחרונות" + +msgid "My actions" +msgstr "הפעולות שלי" + +msgid "None available" +msgstr "לא נמצאו" + +msgid "Unknown content" +msgstr "תוכן לא ידוע" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"משהו שגוי בהתקנת בסיס הנתונים שלך. נא לוודא שנוצרו טבלאות בסיס הנתונים " +"המתאימות, ובסיס הנתונים ניתן לקריאה על ידי המשתמש המתאים." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"התחברת בתור %(username)s, אך אין לך הרשאות גישה לעמוד זה. האם ברצונך להתחבר " +"בתור משתמש אחר?" + +msgid "Forgotten your password or username?" +msgstr "שכחת את שם המשתמש והסיסמה שלך ?" + +msgid "Date/time" +msgstr "תאריך/שעה" + +msgid "User" +msgstr "משתמש" + +msgid "Action" +msgstr "פעולה" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"לאובייקט זה אין היסטוריית שינוי. כנראה לא השתמשו בממשק הניהול הזה להוספתו." + +msgid "Show all" +msgstr "הצג הכל" + +msgid "Save" +msgstr "שמירה" + +msgid "Popup closing…" +msgstr "חלון צץ נסגר..." + +msgid "Search" +msgstr "חיפוש" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "תוצאה %(counter)s" +msgstr[1] "%(counter)s תוצאות" +msgstr[2] "%(counter)s תוצאות" +msgstr[3] "%(counter)s תוצאות" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s סה\"כ" + +msgid "Save as new" +msgstr "שמירה כחדש" + +msgid "Save and add another" +msgstr "שמירה והוספת אחר" + +msgid "Save and continue editing" +msgstr "שמירה והמשך עריכה" + +msgid "Save and view" +msgstr "שמירה וצפיה" + +msgid "Close" +msgstr "סגירה" + +#, python-format +msgid "Change selected %(model)s" +msgstr "שינוי %(model)s הנבחר." + +#, python-format +msgid "Add another %(model)s" +msgstr "הוספת %(model)s נוסף." + +#, python-format +msgid "Delete selected %(model)s" +msgstr "מחיקת %(model)s הנבחר." + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "תודה על בילוי זמן איכות עם האתר." + +msgid "Log in again" +msgstr "התחבר/י שוב" + +msgid "Password change" +msgstr "שינוי סיסמה" + +msgid "Your password was changed." +msgstr "סיסמתך שונתה." + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"נא להזין את סיסמתך הישנה, לצרכי אבטחה, ולאחר מכן את סיסמתך החדשה פעמיים כדי " +"שנוכל לוודא שהקלדת אותה כראוי." + +msgid "Change my password" +msgstr "שנה את סיסמתי" + +msgid "Password reset" +msgstr "איפוס סיסמה" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "ססמתך נשמרה. כעת ניתן להתחבר." + +msgid "Password reset confirmation" +msgstr "אימות איפוס סיסמה" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "נא להזין את סיסמתך החדשה פעמיים כדי שנוכל לוודא שהקלדת אותה כראוי." + +msgid "New password:" +msgstr "סיסמה חדשה:" + +msgid "Confirm password:" +msgstr "אימות סיסמה:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"הקישור לאיפוס הסיסמה אינו חוקי. ייתכן והשתמשו בו כבר. נא לבקש איפוס סיסמה " +"חדש." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"שלחנו אליך דואר אלקטרוני עם הוראות לקביעת הסיסמה, אם קיים חשבון עם כתובת " +"הדואר שהזנת. ההודעה אמור להגיע בקרוב." + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" +"אם הדוא\"ל לא הגיע, נא לוודא שהזנת כתובת נכונה בעת הרישום ולבדוק את תיקיית " +"דואר הזבל." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"הודעה זו נשלחה אליך עקב בקשתך לאיפוס הסיסמה עבור המשתמש שלך באתר " +"%(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "נא להגיע לעמוד הבא ולבחור סיסמה חדשה:" + +msgid "Your username, in case you've forgotten:" +msgstr "שם המשתמש שלך, במקרה ששכחת:" + +msgid "Thanks for using our site!" +msgstr "תודה על השימוש באתר שלנו!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "צוות %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" +"שכחת את סיסמתך ? נא להזין את כתובת הדוא\"ל מתחת, ואנו נשלח הוראות לקביעת " +"סיסמה חדשה." + +msgid "Email address:" +msgstr "כתובת דוא\"ל:" + +msgid "Reset my password" +msgstr "אפס את סיסמתי" + +msgid "All dates" +msgstr "כל התאריכים" + +#, python-format +msgid "Select %s" +msgstr "בחירת %s" + +#, python-format +msgid "Select %s to change" +msgstr "בחירת %s לשינוי" + +#, python-format +msgid "Select %s to view" +msgstr "בחירת %s לצפיה" + +msgid "Date:" +msgstr "תאריך:" + +msgid "Time:" +msgstr "שעה:" + +msgid "Lookup" +msgstr "חפש" + +msgid "Currently:" +msgstr "נוכחי:" + +msgid "Change:" +msgstr "שינוי:" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/he/LC_MESSAGES/djangojs.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/he/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..fe37ec5a833973db07881306042cd43924f44360 GIT binary patch literal 5157 zcmdT`U2I%O6&`4y!G$(WX`v)EgJ~Rx;`?UC>$PK= zRtO2kJNw-^bIzIXoH^&N-`TrsPGAgR?#F!V1429v{OW!9!kFGA#7STS_+j98E&d4j zA*_F5*FOh-6zgBw^=~Zx4)`(1|7h`V7Vm>`7vv8EKLXqjJOJzg_5eqKyMa}UlR%z- z4G0(FYry+~->~cJ7Hw`Y z7kOR-lIPcf^wR`3fi2)HFasmF6h8&h-!FiJz+VAr_W*=9fsX=d_a?9gJde#sfIqbO zHtmekc`TsG#J^_3ih%NDZEB_NvV*Ph3 z--k;9bHbLxK|$o;o~r-45MGLC-&mw>zX3h`^;3UD4cjm!BUa1W9|e8l2o79Y2`-{Jv_ z-9TKA_#`GrzXARIfPE(43?}cZ2lF$S9FH5&bp|(ju(l3if~I%^lUz8C7|=2C(XngB z#PK;yl%V)D7Z^x~9?S(o6up>7F^^&H!(?s`V@gcsHHXRf!a+=qEGFw<0J9sD<5LDi z9}wlL`-nBg!P;hDb3BR3+C_=LVQ;Mb!?6s<<-y)kkl+ylRZ3L(UH48%H&e}s6S77) zTZ=qjoUKpP<3yaDbUoiK`br**#jqQclrM%WVHhh5(v|1jq+?a^svWDObLDH>SOwad z@0DJbNhnL&opgO4V(BI_#3>muys;mtYB;I%K2(kMrrJ4GQq`i0#E2?JbvJ5=5zkMs ze#R>+anTL5>|)(-h>P_=iBUHyRq)*qqh2}iCMt=z6ovu55|x)PhIQ#i3|3acdL-S7 za?8wTtfEO3NrsczSr^pbyRs~*iWijMliQtDCr#9s!YOgNl!VN{Rh=jc%$FEbwZ!O+ zRiId?c(KGMsVM1tF)}?a-Hr>+==iH{W8+TZu&QLSVXMdsCTLofUZ7nR!)e6fhf~r; zDA);PiI-;eWVb1lZe%oqQc)#S3OYPJnF=M$Rh-$8RQsMc8QCiM4;h&h-HTCJMtKy% zYDnIq(5NYdj7m+IKSqt`ab0Dy98Q^tcFd=EQN^f5x?^QkT-5PKMc@@Q|mAov!gpvrmuBuuXCC+F(;gy{))+b`85awmqmCFTZ zI8rX_%HfMSFZ;8(Q%?4{lRGJMx%~0$k!*i93q|Lun)K*%Q}3jcJ?-R9%iM|lK<-Eu zqw7m{zFg%Rh}rXJ54SCMl*D1~LboAUBh(M#Ga^RlA4uK4xH z^_`J0s>XR4)buhQ8W@!3ai}+tLqjqrdwL{(z3_ll_ON_PW@TQQ&HlSLb9xWzS*^cS z!K}_;lYaW)=h$FZ`*%8BYX63(%js-7pRT5J>H2?t|AfS0vp8xcUB!O{=?qVnX*2yc z=4#r)-z@>@ZM|6J<6Qa*=4e>lj3~2nX)a0P(mnFV~jYF(XD3$LVL|npvF#a?y|U! zge<|ysz53LhzaBc{Fqo@HBQ$lGZMYcv@E7A%H}{44@CGhjRbCfw!9@0Ntav^D4|Yv+OQ?(Y9i6V-{|P%*|LjJ+ zEZ`#13T&Je-3+>lObMdU+qGzl8WnXLTDI2Mhp!0q)SScxuc3^VY@0RPjfM{8&9cAP zSj`OEp@r^3VHoioTVx)K6`8)?%?z<@mp}+AXbdc7QDF4V29elU)ZS2#uwWO>r+1|6 z)`zTi)2Kz;HQKWLj0@BlnrjEL+q-ltMP>lZw^3}z^L{9H+jKVX!Lf-0=lEt@LS$&! zj)XOFOK92j`j&HbPz&jGhPw#9%LxA<{+(rW>P&9D;h4VL$Qe`EJZe%o!zA+Z)|pQ} zut4~3U9#z2gJ)(>H#?OUpt1_*`c~%QaZPVA*9%y!LmLTO#NPr>WU;M4hDz9`u%_9q zf~omY*+y>$Vq7ozBH+aoRB55#&j^j~I{E5Kvt)THteBJZmS(<8b5_nB8y4PiFxOPu zx!WKlvBzsL6^4hKv~B9-waCdH-%e(mB_+2I5PZ`FcH1bfnLw6pDCiws!)@LzUEDU~ mJP2X&9(A(mU7z1R7`J%O16pt}%S!~WwT%x7YhFLEihltj)yW9} literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/hi/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/hi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b8c97bb4df2e48e3c799e309f5c296ef9a6cdd78 GIT binary patch literal 18457 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≺|5e$TE#M~`Qy5RqQEin9~nI%(k%Bt7LNfhBmJH!Z{$o^f0} zHq(H2nMRgzFMW_nKKq;VeLSm>*%aGoJbEz&@rGjHj&x=aMn>ZqiBh14f>4b&ckZ+` zb7m410TB&TIR z!nvS{rfFnWPbi^CS5W0m=Anwt3|a`F9D0^9KZ~0QmzmLEQLH}{?ubDii0b8zSXux= z$4p}!*6Yb)6~Db;EqYz) z?}R+6JWSI;77zg}A(-HsKm3$$7)ex-sU3%!#MtOQI=hTeGIf3x^B8z)9>H*gvTn~7 c5E;#Zd0tuB-<_|lG%}CzebDZG<6aE^16O07RsaA1 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/hi/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/hi/LC_MESSAGES/django.po new file mode 100644 index 0000000..8ed2fb9 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/hi/LC_MESSAGES/django.po @@ -0,0 +1,666 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# alkuma , 2013 +# Chandan kumar , 2012 +# Jannis Leidel , 2011 +# Pratik , 2013 +# Sandeep Satavlekar , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Hindi (http://www.transifex.com/django/django/language/hi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(count)d %(items)s सफलतापूर्वक हटा दिया गया है| |" + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "%(name)s नहीं हटा सकते" + +msgid "Are you sure?" +msgstr "क्या आप निश्चित हैं?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "चुने हुए %(verbose_name_plural)s हटा दीजिये " + +msgid "Administration" +msgstr "" + +msgid "All" +msgstr "सभी" + +msgid "Yes" +msgstr "हाँ" + +msgid "No" +msgstr "नहीं" + +msgid "Unknown" +msgstr "अनजान" + +msgid "Any date" +msgstr "कोई भी तारीख" + +msgid "Today" +msgstr "आज" + +msgid "Past 7 days" +msgstr "पिछले 7 दिन" + +msgid "This month" +msgstr "इस महीने" + +msgid "This year" +msgstr "इस साल" + +msgid "No date" +msgstr "" + +msgid "Has date" +msgstr "" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"कृपया कर्मचारी खाते का सही %(username)s व कूटशब्द भरें। भरते समय दीर्घाक्षर और लघु अक्षर " +"का खयाल रखें।" + +msgid "Action:" +msgstr " क्रिया:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "एक और %(verbose_name)s जोड़ें " + +msgid "Remove" +msgstr "निकालें" + +msgid "action time" +msgstr "कार्य समय" + +msgid "user" +msgstr "" + +msgid "content type" +msgstr "" + +msgid "object id" +msgstr "वस्तु आई डी " + +#. Translators: 'repr' means representation +#. (https://docs.python.org/3/library/functions.html#repr) +msgid "object repr" +msgstr "वस्तु प्रतिनिधित्व" + +msgid "action flag" +msgstr "कार्य ध्वज" + +msgid "change message" +msgstr "परिवर्तन सन्देश" + +msgid "log entry" +msgstr "लॉग प्रविष्टि" + +msgid "log entries" +msgstr "लॉग प्रविष्टियाँ" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "\"%(object)s\" को जोड़ा गया." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "परिवर्तित \"%(object)s\" - %(changes)s " + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "\"%(object)s\" को नष्ट कर दिया है." + +msgid "LogEntry Object" +msgstr "LogEntry ऑब्जेक्ट" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "" + +msgid "Added." +msgstr "" + +msgid "and" +msgstr "और" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "" + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "" + +msgid "No fields changed." +msgstr "कोई क्षेत्र नहीं बदला" + +msgid "None" +msgstr "कोई नहीं" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "कार्रवाई हेतु आयटम सही अनुक्रम में चुने जाने चाहिए | कोई आइटम नहीं बदले गये हैं." + +msgid "No action selected." +msgstr "कोई कार्रवाई नहीं चुनी है |" + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "%(name)s \"%(obj)s\" को कामयाबी से निकाला गया है" + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "%s बढाएं" + +#, python-format +msgid "Change %s" +msgstr "%s बदलो" + +msgid "Database error" +msgstr "डेटाबेस त्रुटि" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s का परिवर्तन कामयाब हुआ |" +msgstr[1] "%(count)s %(name)s का परिवर्तन कामयाब हुआ |" + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s चुने" +msgstr[1] "सभी %(total_count)s चुने " + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "%(cnt)s में से 0 चुने" + +#, python-format +msgid "Change history: %s" +msgstr "इतिहास बदलो: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" + +msgid "Django site admin" +msgstr "ज्याँगो साइट प्रशासन" + +msgid "Django administration" +msgstr "ज्याँगो प्रशासन" + +msgid "Site administration" +msgstr "साइट प्रशासन" + +msgid "Log in" +msgstr "लॉगिन" + +#, python-format +msgid "%(app)s administration" +msgstr "" + +msgid "Page not found" +msgstr "पृष्ठ लापता" + +msgid "We're sorry, but the requested page could not be found." +msgstr "क्षमा कीजिए पर निवेदित पृष्ठ लापता है ।" + +msgid "Home" +msgstr "गृह" + +msgid "Server error" +msgstr "सर्वर त्रुटि" + +msgid "Server error (500)" +msgstr "सर्वर त्रुटि (500)" + +msgid "Server Error (500)" +msgstr "सर्वर त्रुटि (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"एक त्रुटि मिली है। इसकी जानकारी स्थल के संचालकों को डाक द्वारा दे दी गई है, और यह जल्द " +"ठीक हो जानी चाहिए। धीरज रखने के लिए शुक्रिया।" + +msgid "Run the selected action" +msgstr "चयनित कार्रवाई चलाइये" + +msgid "Go" +msgstr "आगे बढ़े" + +msgid "Click here to select the objects across all pages" +msgstr "सभी पृष्ठों पर मौजूद वस्तुओं को चुनने के लिए यहाँ क्लिक करें " + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "तमाम %(total_count)s %(module_name)s चुनें" + +msgid "Clear selection" +msgstr "चयन खालिज किया जाये " + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"पहले प्रदवोक्ता नाम और कूटशब्द दर्ज करें । उसके पश्चात ही आप अधिक प्रवोक्ता विकल्प बदल " +"सकते हैं ।" + +msgid "Enter a username and password." +msgstr "उपयोगकर्ता का नाम और कूटशब्द दर्ज करें." + +msgid "Change password" +msgstr "कूटशब्द बदलें" + +msgid "Please correct the error below." +msgstr "कृपया नीचे पायी गयी गलतियाँ ठीक करें ।" + +msgid "Please correct the errors below." +msgstr "" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "%(username)s प्रवोक्ता के लिए नयी कूटशब्द दर्ज करें ।" + +msgid "Welcome," +msgstr "आपका स्वागत है," + +msgid "View site" +msgstr "" + +msgid "Documentation" +msgstr "दस्तावेज़ीकरण" + +msgid "Log out" +msgstr "लॉग आउट" + +#, python-format +msgid "Add %(name)s" +msgstr "%(name)s बढाएं" + +msgid "History" +msgstr "इतिहास" + +msgid "View on site" +msgstr "साइट पे देखें" + +msgid "Filter" +msgstr "छन्नी" + +msgid "Remove from sorting" +msgstr "श्रेणीकरण से हटाये " + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "श्रेणीकरण प्राथमिकता : %(priority_number)s" + +msgid "Toggle sorting" +msgstr "टॉगल श्रेणीकरण" + +msgid "Delete" +msgstr "मिटाएँ" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"%(object_name)s '%(escaped_object)s' को मिटाने पर सम्बंधित वस्तुएँ भी मिटा दी " +"जाएगी, परन्तु आप के खाते में निम्नलिखित प्रकार की वस्तुओं को मिटाने की अनुमति नहीं हैं |" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"%(object_name)s '%(escaped_object)s' को हटाने के लिए उनसे संबंधित निम्नलिखित " +"संरक्षित वस्तुओं को हटाने की आवश्यकता होगी:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"क्या आप %(object_name)s \"%(escaped_object)s\" हटाना चाहते हैं? निम्नलिखित सभी " +"संबंधित वस्तुएँ नष्ट की जाएगी" + +msgid "Objects" +msgstr "" + +msgid "Yes, I'm sure" +msgstr "हाँ, मैंने पक्का तय किया हैं " + +msgid "No, take me back" +msgstr "" + +msgid "Delete multiple objects" +msgstr "अनेक वस्तुएं हटाएँ" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"चयनित %(objects_name)s हटाने पर उस से सम्बंधित वस्तुएं भी हट जाएगी, परन्तु आपके खाते में " +"वस्तुओं के निम्नलिखित प्रकार हटाने की अनुमति नहीं है:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"चयनित %(objects_name)s को हटाने के पश्चात् निम्नलिखित संरक्षित संबंधित वस्तुओं को हटाने " +"की आवश्यकता होगी |" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"क्या आप ने पक्का तय किया हैं की चयनित %(objects_name)s को नष्ट किया जाये ? " +"निम्नलिखित सभी वस्तुएं और उनसे सम्बंधित वस्तुए भी नष्ट की जाएगी:" + +msgid "Change" +msgstr "बदलें" + +msgid "Delete?" +msgstr "मिटाएँ ?" + +#, python-format +msgid " By %(filter_title)s " +msgstr "%(filter_title)s द्वारा" + +msgid "Summary" +msgstr "" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "%(name)s अनुप्रयोग के प्रतिरूप" + +msgid "Add" +msgstr "बढाएं" + +msgid "You don't have permission to edit anything." +msgstr "आपके पास कुछ भी संपादन करने के लिये अनुमति नहीं है ।" + +msgid "Recent actions" +msgstr "" + +msgid "My actions" +msgstr "" + +msgid "None available" +msgstr " कोई भी उपलब्ध नहीं" + +msgid "Unknown content" +msgstr "अज्ञात सामग्री" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"अपने डेटाबेस स्थापना के साथ कुछ गलत तो है | सुनिश्चित करें कि उचित डेटाबेस तालिका बनायीं " +"गयी है, और सुनिश्चित करें कि डेटाबेस उपयुक्त उपयोक्ता के द्वारा पठनीय है |" + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "अपना पासवर्ड या उपयोगकर्ता नाम भूल गये हैं?" + +msgid "Date/time" +msgstr "तिथि / समय" + +msgid "User" +msgstr "उपभोक्ता" + +msgid "Action" +msgstr "कार्य" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"इस वस्तु का बदलाव इतिहास नहीं है. शायद वह इस साइट व्यवस्थापक के माध्यम से नहीं जोड़ा " +"गया है." + +msgid "Show all" +msgstr "सभी दिखाएँ" + +msgid "Save" +msgstr "सुरक्षित कीजिये" + +msgid "Popup closing..." +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "" + +msgid "Search" +msgstr "खोज" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s परिणाम" +msgstr[1] "%(counter)s परिणाम" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s कुल परिणाम" + +msgid "Save as new" +msgstr "नये सा सहेजें" + +msgid "Save and add another" +msgstr "सहेजें और एक और जोडें" + +msgid "Save and continue editing" +msgstr "सहेजें और संपादन करें" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "आज हमारे वेब साइट पर आने के लिए धन्यवाद ।" + +msgid "Log in again" +msgstr "फिर से लॉगिन कीजिए" + +msgid "Password change" +msgstr "कूटशब्द बदलें" + +msgid "Your password was changed." +msgstr "आपके कूटशब्द को बदला गया है" + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"सुरक्षा कारणों के लिए कृपया पुराना कूटशब्द दर्ज करें । उसके पश्चात नए कूटशब्द को दो बार दर्ज " +"करें ताकि हम उसे सत्यापित कर सकें ।" + +msgid "Change my password" +msgstr "कूटशब्द बदलें" + +msgid "Password reset" +msgstr "कूटशब्द पुनस्थाप" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "आपके कूटशब्द को स्थापित किया गया है । अब आप लॉगिन कर सकते है ।" + +msgid "Password reset confirmation" +msgstr "कूटशब्द पुष्टि" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "कृपया आपके नये कूटशब्द को दो बार दर्ज करें ताकि हम उसकी सत्याप्ती कर सकते है ।" + +msgid "New password:" +msgstr "नया कूटशब्द " + +msgid "Confirm password:" +msgstr "कूटशब्द पुष्टि कीजिए" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"कूटशब्द पुनस्थाप संपर्क अमान्य है, संभावना है कि उसे उपयोग किया गया है। कृपया फिर से कूटशब्द " +"पुनस्थाप की आवेदन करें ।" + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" +"अगर आपको कोई ईमेल प्राप्त नई होता है,यह ध्यान रखे की आपने सही पता रजिस्ट्रीकृत किया है " +"और आपने स्पॅम फोल्डर को जाचे|" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"आपको यह डाक इसलिए आई है क्योंकि आप ने %(site_name)s पर अपने खाते का कूटशब्द बदलने का " +"अनुरोध किया था |" + +msgid "Please go to the following page and choose a new password:" +msgstr "कृपया निम्नलिखित पृष्ठ पर नया कूटशब्द चुनिये :" + +msgid "Your username, in case you've forgotten:" +msgstr "आपका प्रवोक्ता नाम, यदि भूल गये हों :" + +msgid "Thanks for using our site!" +msgstr "हमारे साइट को उपयोग करने के लिए धन्यवाद ।" + +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s दल" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" +"कूटशब्द भूल गए? नीचे अपना डाक पता भरें, वहाँ पर हम आपको नया कूटशब्द रखने के निर्देश भेजेंगे।" + +msgid "Email address:" +msgstr "डाक पता -" + +msgid "Reset my password" +msgstr " मेरे कूटशब्द की पुनःस्थापना" + +msgid "All dates" +msgstr "सभी तिथियों" + +#, python-format +msgid "Select %s" +msgstr "%s चुनें" + +#, python-format +msgid "Select %s to change" +msgstr "%s के बदली के लिए चयन करें" + +msgid "Date:" +msgstr "तिथि:" + +msgid "Time:" +msgstr "समय:" + +msgid "Lookup" +msgstr "लुक अप" + +msgid "Currently:" +msgstr "फ़िलहाल - " + +msgid "Change:" +msgstr "बदलाव -" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/hi/LC_MESSAGES/djangojs.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/hi/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..bb755ad12f284460b42cd95628ab357c43000a67 GIT binary patch literal 4893 zcmdUx+ix7z9ml5yTIv=kv_M->dm1Uk7R=h~mIO8gl^Rl#5@IE$5`F4;=h!=8c8-}D zXJaW+9T0>nY7rtADWobw<3NFs$WkDYz`P*wQ2v2Rs2WujkA3V@rS|hXXZB*p;a0UO zEAM{iobx-s%lCH~|K)}&k9mAcL?D*@FtWWCC0+3z2Nu3Nl^9;C~^I|T0adc*2k;$ zTVQ}+?}H&Y0@)(}JIED02A%;=f#T=RYd!BV-jEckqj?^o^9>L1iv+c$yV<12APr*|{oTlk6}@*x#AMu}UvgbMGQe1%8( zNR4?Lhcg|IWXjB_jl<0(=aCKF%ysy&XPZ?}YuCK{_6JcMOvhSn%)E&pY3kUUXc?2~ z3RIx-sNG-1_B_*xy%0yu$5d`q(_T?Q9J8&0Tp2Xgyov64s@rD2w&#et+kLU^QJm}4 zdoT*Mw<`*hXttGm4;z#4)A9D$yA_BEZ*Pn3saBLJ{_>Vqagm>IK~QsG{RP^vDtONgkOnSn#Gy+lb%Z)WV!5WKxz3e-bs%Gd2M#G#wYw zx_o+%>WnmrI$^dIkkD?aL7EDhd1R71EPo4?K(Z+(1tFPFBo9F{t0~n455j1F6wU`R zwsjn4mYYqfR&%MDrXCkmY>Xv;#-x_zpF#3`o^v@3U|lvbD*W#iPuyAU<6T2Y4Z4@xE3bp&^!kgT8o>TaVMi-l@_S1RinWJRDsrkg2T%QUZ zM!D_9E+;!?th=IafMDzIT1}k@7p7?iljSvUGBx{{0sfBA|AkI7^3qV@KIk_?d-R-1 zbAMMh8-@N)=Vvp2$~4r_LNObn)w)kUr`}Mn3eRJc-_1nkz3_TQNxj&T#NfrmWNgHZskR+7cLz*^^)jfE_ z@+Yxf)}my_+{>M0c0QQZ{*(^d4fUX8LJha_e6BG%+Uay^x#){#^nqH_v`1Y;U5Km8 zqpfIkWN6opT@UnQuh+(gCQOp+1fOVuhRXGUd~_}jqGYS&KFxH#?UAYN{#|`Ju{EPp z|AC}wLgqk2-8CKMJtrHg6%9?s^Jx(K+fCZe8Y-Ey%WT{DR^=YI4JYb{+f;pI>k#AE z&F8Xsqg*;%7Eh?MxWE&G+s*K@I9VJhWYduFkAQLS4S?4m;wL-9Ug zGc5}#vKsg_-T)L7j6gU0RjspLwBnML)4i-v=8_x=k2@|!7g!JG+UD`3ZHHGlvUw9x zQ3O!ZFSw_HGGK$C5rr<16aQS#9d*ToH7j6GU5!bZ3!%VTcPeXaFA{^=u%^N{a0Nr0 zNu82C0T;~W>g|ima8)}*_}^u?SEFZL4Sf!hsm4>DErVr%LX^^4o7;Y=xmHF@O4yaz z<@$P6HLo*1t%6J2gqo1@daW$pwjHo+n*_VAV7en#1`_s{)v$GUQL3w08DY2Tubx|W zHdYg%IB)y+84UEMYPUD3{X5vNihs2h8ktVzGDhg=YQP{(ej$f5H;-sq-c7Eo-{J^~ z?n0Wpx;HBK6h&Ef=4`k2}y>l%qpIMBkG{{sktWZfx$yS zPKS&ep}d*~|67vRvdN5eQ?|=JFN*4gjANV-kB`7L##BlKi}N>9C~Dxpv7YRR=k%Y8jFBvOs9k515vJB5bzt;e4-A+zYh&A43dF z@5nz1h)a*NmU^%iv}mj1|2C1Il)|d1ENP^l7q1MRK7GCS=w+yK>7&|vO=5dqSU)eD T;Bl9Ps{h!uy-V{QhPr, 2012 +# Jannis Leidel , 2011 +# Sandeep Satavlekar , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-17 23:12+0200\n" +"PO-Revision-Date: 2017-09-19 16:41+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Hindi (http://www.transifex.com/django/django/language/hi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "उपलब्ध %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"यह उपलब्ध %s की सूची है. आप उन्हें नीचे दिए गए बॉक्स में से चयन करके कुछ को चुन सकते हैं और " +"उसके बाद दो बॉक्स के बीच \"चुनें\" तीर पर क्लिक करें." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "इस बॉक्स में टाइप करने के लिए नीचे उपलब्ध %s की सूची को फ़िल्टर करें." + +msgid "Filter" +msgstr "छानना" + +msgid "Choose all" +msgstr "सभी चुनें" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "एक ही बार में सभी %s को चुनने के लिए क्लिक करें." + +msgid "Choose" +msgstr "चुनें" + +msgid "Remove" +msgstr "हटाना" + +#, javascript-format +msgid "Chosen %s" +msgstr "चुनें %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"यह उपलब्ध %s की सूची है. आप उन्हें नीचे दिए गए बॉक्स में से चयन करके कुछ को हटा सकते हैं और " +"उसके बाद दो बॉक्स के बीच \"हटायें\" तीर पर क्लिक करें." + +msgid "Remove all" +msgstr "सभी को हटाएँ" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "एक ही बार में सभी %s को हटाने के लिए क्लिक करें." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(cnt)s में से %(sel)s चुना गया हैं" +msgstr[1] "%(cnt)s में से %(sel)s चुने गए हैं" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"स्वतंत्र सम्पादनक्षम क्षेत्र/स्तम्भ में किये हुए बदल अभी रक्षित नहीं हैं | अगर आप कुछ कार्रवाई " +"करते हो तो वे खो जायेंगे |" + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"आप ने कार्रवाई तो चुनी हैं, पर स्वतंत्र सम्पादनक्षम क्षेत्र/स्तम्भ में किये हुए बदल अभी सुरक्षित " +"नहीं किये हैं| उन्हें सुरक्षित करने के लिए कृपया 'ओके' क्लिक करे | आप को चुनी हुई कार्रवाई " +"दोबारा चलानी होगी |" + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"आप ने कार्रवाई चुनी हैं, और आप ने स्वतंत्र सम्पादनक्षम क्षेत्र/स्तम्भ में बदल नहीं किये हैं| " +"संभवतः 'सेव' बटन के बजाय आप 'गो' बटन ढून्ढ रहे हो |" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "" +msgstr[1] "" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" +msgstr[1] "" + +msgid "Now" +msgstr "अब" + +msgid "Choose a Time" +msgstr "" + +msgid "Choose a time" +msgstr "एक समय चुनें" + +msgid "Midnight" +msgstr "मध्यरात्री" + +msgid "6 a.m." +msgstr "सुबह 6 बजे" + +msgid "Noon" +msgstr "दोपहर" + +msgid "6 p.m." +msgstr "" + +msgid "Cancel" +msgstr "रद्द करें" + +msgid "Today" +msgstr "आज" + +msgid "Choose a Date" +msgstr "" + +msgid "Yesterday" +msgstr "कल (बीता)" + +msgid "Tomorrow" +msgstr "कल" + +msgid "January" +msgstr "" + +msgid "February" +msgstr "" + +msgid "March" +msgstr "" + +msgid "April" +msgstr "" + +msgid "May" +msgstr "" + +msgid "June" +msgstr "" + +msgid "July" +msgstr "" + +msgid "August" +msgstr "" + +msgid "September" +msgstr "" + +msgid "October" +msgstr "" + +msgid "November" +msgstr "" + +msgid "December" +msgstr "" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "" + +msgctxt "one letter Monday" +msgid "M" +msgstr "" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "" + +msgctxt "one letter Friday" +msgid "F" +msgstr "" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "" + +msgid "Show" +msgstr "दिखाओ" + +msgid "Hide" +msgstr " छिपाओ" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/hr/LC_MESSAGES/djangojs.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/hr/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..e8231f69af4f81310bfafe02a6ae3b0eab02b685 GIT binary patch literal 3360 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, 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:41+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Interlingua (http://www.transifex.com/django/django/language/" +"ia/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ia\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(count)d %(items)s delite con successo." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Non pote deler %(name)s" + +msgid "Are you sure?" +msgstr "Es tu secur?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Deler le %(verbose_name_plural)s seligite" + +msgid "Administration" +msgstr "" + +msgid "All" +msgstr "Totes" + +msgid "Yes" +msgstr "Si" + +msgid "No" +msgstr "No" + +msgid "Unknown" +msgstr "Incognite" + +msgid "Any date" +msgstr "Omne data" + +msgid "Today" +msgstr "Hodie" + +msgid "Past 7 days" +msgstr "Ultime 7 dies" + +msgid "This month" +msgstr "Iste mense" + +msgid "This year" +msgstr "Iste anno" + +msgid "No date" +msgstr "" + +msgid "Has date" +msgstr "" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" + +msgid "Action:" +msgstr "Action:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Adder un altere %(verbose_name)s" + +msgid "Remove" +msgstr "Remover" + +msgid "action time" +msgstr "hora de action" + +msgid "user" +msgstr "" + +msgid "content type" +msgstr "" + +msgid "object id" +msgstr "id de objecto" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/3/library/functions.html#repr) +msgid "object repr" +msgstr "repr de objecto" + +msgid "action flag" +msgstr "marca de action" + +msgid "change message" +msgstr "message de cambio" + +msgid "log entry" +msgstr "entrata de registro" + +msgid "log entries" +msgstr "entratas de registro" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "\"%(object)s\" addite." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "\"%(object)s\" cambiate - %(changes)s" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "\"%(object)s\" delite." + +msgid "LogEntry Object" +msgstr "Objecto LogEntry" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "" + +msgid "Added." +msgstr "" + +msgid "and" +msgstr "e" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "" + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "" + +msgid "No fields changed." +msgstr "Nulle campo cambiate." + +msgid "None" +msgstr "Nulle" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Es necessari seliger elementos pro poter exequer actiones. Nulle elemento ha " +"essite cambiate." + +msgid "No action selected." +msgstr "Nulle action seligite." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "Le %(name)s \"%(obj)s\" ha essite delite con successo." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "Adder %s" + +#, python-format +msgid "Change %s" +msgstr "Cambiar %s" + +msgid "Database error" +msgstr "Error in le base de datos" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s cambiate con successo." +msgstr[1] "%(count)s %(name)s cambiate con successo." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s seligite" +msgstr[1] "Tote le %(total_count)s seligite" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 de %(cnt)s seligite" + +#, python-format +msgid "Change history: %s" +msgstr "Historia de cambiamentos: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" + +msgid "Django site admin" +msgstr "Administration del sito Django" + +msgid "Django administration" +msgstr "Administration de Django" + +msgid "Site administration" +msgstr "Administration del sito" + +msgid "Log in" +msgstr "Aperir session" + +#, python-format +msgid "%(app)s administration" +msgstr "" + +msgid "Page not found" +msgstr "Pagina non trovate" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Regrettabilemente, le pagina requestate non poteva esser trovate." + +msgid "Home" +msgstr "Initio" + +msgid "Server error" +msgstr "Error del servitor" + +msgid "Server error (500)" +msgstr "Error del servitor (500)" + +msgid "Server Error (500)" +msgstr "Error del servitor (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Run the selected action" +msgstr "Exequer le action seligite" + +msgid "Go" +msgstr "Va" + +msgid "Click here to select the objects across all pages" +msgstr "Clicca hic pro seliger le objectos in tote le paginas" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Seliger tote le %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Rader selection" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"Primo, specifica un nomine de usator e un contrasigno. Postea, tu potera " +"modificar plus optiones de usator." + +msgid "Enter a username and password." +msgstr "Specifica un nomine de usator e un contrasigno." + +msgid "Change password" +msgstr "Cambiar contrasigno" + +msgid "Please correct the error below." +msgstr "Per favor corrige le errores sequente." + +msgid "Please correct the errors below." +msgstr "" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" +"Specifica un nove contrasigno pro le usator %(username)s." + +msgid "Welcome," +msgstr "Benvenite," + +msgid "View site" +msgstr "" + +msgid "Documentation" +msgstr "Documentation" + +msgid "Log out" +msgstr "Clauder session" + +#, python-format +msgid "Add %(name)s" +msgstr "Adder %(name)s" + +msgid "History" +msgstr "Historia" + +msgid "View on site" +msgstr "Vider in sito" + +msgid "Filter" +msgstr "Filtro" + +msgid "Remove from sorting" +msgstr "Remover del ordination" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Prioritate de ordination: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Alternar le ordination" + +msgid "Delete" +msgstr "Deler" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Deler le %(object_name)s '%(escaped_object)s' resultarea in le deletion de " +"objectos associate, me tu conto non ha le permission de deler objectos del " +"sequente typos:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Deler le %(object_name)s '%(escaped_object)s' necessitarea le deletion del " +"sequente objectos associate protegite:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Es tu secur de voler deler le %(object_name)s \"%(escaped_object)s\"? Tote " +"le sequente objectos associate essera delite:" + +msgid "Objects" +msgstr "" + +msgid "Yes, I'm sure" +msgstr "Si, io es secur" + +msgid "No, take me back" +msgstr "" + +msgid "Delete multiple objects" +msgstr "Deler plure objectos" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Deler le %(objects_name)s seligite resultarea in le deletion de objectos " +"associate, ma tu conto non ha le permission de deler objectos del sequente " +"typos:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Deler le %(objects_name)s seligite necessitarea le deletion del sequente " +"objectos associate protegite:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Es tu secur de voler deler le %(objects_name)s seligite? Tote le sequente " +"objectos e le objectos associate a illo essera delite:" + +msgid "Change" +msgstr "Cambiar" + +msgid "Delete?" +msgstr "Deler?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " Per %(filter_title)s " + +msgid "Summary" +msgstr "" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "" + +msgid "Add" +msgstr "Adder" + +msgid "You don't have permission to edit anything." +msgstr "Tu non ha le permission de modificar alcun cosa." + +msgid "Recent actions" +msgstr "" + +msgid "My actions" +msgstr "" + +msgid "None available" +msgstr "Nihil disponibile" + +msgid "Unknown content" +msgstr "Contento incognite" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Il ha un problema con le installation del base de datos. Assecura te que le " +"tabellas correcte ha essite create, e que le base de datos es legibile pro " +"le usator appropriate." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "Contrasigno o nomine de usator oblidate?" + +msgid "Date/time" +msgstr "Data/hora" + +msgid "User" +msgstr "Usator" + +msgid "Action" +msgstr "Action" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Iste objecto non ha un historia de cambiamentos. Illo probabilemente non " +"esseva addite per medio de iste sito administrative." + +msgid "Show all" +msgstr "Monstrar toto" + +msgid "Save" +msgstr "Salveguardar" + +msgid "Popup closing..." +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "" + +msgid "Search" +msgstr "Cercar" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s resultato" +msgstr[1] "%(counter)s resultatos" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s in total" + +msgid "Save as new" +msgstr "Salveguardar como nove" + +msgid "Save and add another" +msgstr "Salveguardar e adder un altere" + +msgid "Save and continue editing" +msgstr "Salveguardar e continuar le modification" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Gratias pro haber passate un tempore agradabile con iste sito web." + +msgid "Log in again" +msgstr "Aperir session de novo" + +msgid "Password change" +msgstr "Cambio de contrasigno" + +msgid "Your password was changed." +msgstr "Tu contrasigno ha essite cambiate." + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Per favor specifica tu ancian contrasigno, pro securitate, e postea " +"specifica tu nove contrasigno duo vices pro verificar que illo es scribite " +"correctemente." + +msgid "Change my password" +msgstr "Cambiar mi contrasigno" + +msgid "Password reset" +msgstr "Reinitialisar contrasigno" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Tu contrasigno ha essite reinitialisate. Ora tu pote aperir session." + +msgid "Password reset confirmation" +msgstr "Confirmation de reinitialisation de contrasigno" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Per favor scribe le nove contrasigno duo vices pro verificar que illo es " +"scribite correctemente." + +msgid "New password:" +msgstr "Nove contrasigno:" + +msgid "Confirm password:" +msgstr "Confirma contrasigno:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Le ligamine pro le reinitialisation del contrasigno esseva invalide, forsan " +"perque illo ha jam essite usate. Per favor submitte un nove demanda de " +"reinitialisation del contrasigno." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" + +msgid "Please go to the following page and choose a new password:" +msgstr "Per favor va al sequente pagina pro eliger un nove contrasigno:" + +msgid "Your username, in case you've forgotten:" +msgstr "Tu nomine de usator, in caso que tu lo ha oblidate:" + +msgid "Thanks for using our site!" +msgstr "Gratias pro usar nostre sito!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "Le equipa de %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" + +msgid "Email address:" +msgstr "" + +msgid "Reset my password" +msgstr "Reinitialisar mi contrasigno" + +msgid "All dates" +msgstr "Tote le datas" + +#, python-format +msgid "Select %s" +msgstr "Selige %s" + +#, python-format +msgid "Select %s to change" +msgstr "Selige %s a modificar" + +msgid "Date:" +msgstr "Data:" + +msgid "Time:" +msgstr "Hora:" + +msgid "Lookup" +msgstr "Recerca" + +msgid "Currently:" +msgstr "" + +msgid "Change:" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/ia/LC_MESSAGES/djangojs.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/ia/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..4c9eccce331d52b1577ced5951f966ba7177dc48 GIT binary patch literal 3177 zcmbtWO>Z1U5FH?VEf64q@DU^`mP{Nav)(ntN!BqUI1X{Ju@x^7$*p&$cele#_ok=E z>qT7Pk_!@w1VYLsT)805NQetJegRU1I3P}lUw{O!dS<+K;)DYu_rB?`>Q}F-Yy9iJ zJzoZRUMbt(z)7^*58wyS;K3j`0lWr$1o#c`N#J*7|A!KP0zQTDpMf>tFTlrvzXM+d z{snvuxc8yL&T-%#^iKmH1D+}S7l8N+R`J8*$7I+)T>-S?b^EwD*{)d2=3XTCmIXDjFb*F%A?@T$r3cQZ~2f)vPzX93K z07e)$fb+nQfp97K9{3sXN8l~s@)MW?{t4s|vM+2OUC#sHuI!S(OyIY_23z_m(cj(91A9=GMOC7$aHCPD$)+G z7?6>Z@qOoJNz~JNaArfOM065KlUcAJbR?5tp>IqkOCUi`rQ=@W=QFAOhD1dlk~0+f zEhLfz!z3ITSgHpL)x4Fd*^qu7ON-s(W#?4lqz%riSOzO9)~eTc!F$GN{0xJOes2kE zB3SQZxZPJ7;m`FYB`U*_T@u^8sncbXQz}Lkxy+=JI-^n^rF*PR<~Si`5gp&@LSS$$VhTMmyIm2&(~Mujl{#mK~B6tqoh zn0L?~4J2Gf$QmR4&km z9YPQz@|xoybWb8xH5kNdL&dpBaJEe1%xiPlN*Y+xK|YQsF~*DEHP);A4n)qK!)7a> zIuGJd)_XO2IJ<&k847G}CC#hK=K4 z^90Sj-fGSqZOk+pSQuWE8;Wg?*PRF(r^4nbYR5TzmI!BTi!KPQ zk#frt*F2%qV1w>kiSO2x?wU8TNB45klVMwmv_(rA`Ig`Y=7OgB&J9}A)5GDg?%1m8 z%FTLY(&@sl3X;;qv=Y-tYAZ`Ci(>_v^+s*Mz^Dc@T!a=mx#^|{iBNiuGr(rj&A;D1 z7oHrirP=ikYpjY<~J`!k*CF#Nf2wdLx(!Ga~d#pPXm64B+9kK7ecc) z*K!eiC$Ht~3*v%nB89)qa0x5A_-6J6O%(Fk2`-W_gPAxt<$e_S-FQ@0pKx2+VYu$%k>>0U~ldvU~pbq z6+lIZP&vd&R8@6+=5o@gzL@Wd2-!-JNIOb!auhCkZ+UcJ3MqUkN0$2hp-9?7>avVq z67ZNUf>k-RE|Lw2+m4Tn#mDrXWK#T7vc)DFZz@vvPF^^;V2hxmj3X9Zv4O7&f8W6f zrQBbDu^9-(D{+1-JJJd+>2gydcf5pERbNV2j2)-3J3ILx8r#pO6ank1Nbv2g)4F0u X3ftS&_5s{sS!NkCK_=lNfy?+Wn2ev0 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/id/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/id/LC_MESSAGES/django.po new file mode 100644 index 0000000..f4b29b2 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/id/LC_MESSAGES/django.po @@ -0,0 +1,715 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Claude Paroz , 2014 +# Fery Setiawan , 2015-2019 +# Jannis Leidel , 2011 +# M Asep Indrayana , 2015 +# oon arfiandwi , 2016 +# rodin , 2011-2013 +# rodin , 2013-2017 +# Sutrisno Efendi , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-01-26 23:57+0000\n" +"Last-Translator: Fery Setiawan \n" +"Language-Team: Indonesian (http://www.transifex.com/django/django/language/" +"id/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: id\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Sukes menghapus %(count)d %(items)s." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Tidak dapat menghapus %(name)s" + +msgid "Are you sure?" +msgstr "Yakin?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Hapus %(verbose_name_plural)s yang dipilih" + +msgid "Administration" +msgstr "Administrasi" + +msgid "All" +msgstr "Semua" + +msgid "Yes" +msgstr "Ya" + +msgid "No" +msgstr "Tidak" + +msgid "Unknown" +msgstr "Tidak diketahui" + +msgid "Any date" +msgstr "Kapanpun" + +msgid "Today" +msgstr "Hari ini" + +msgid "Past 7 days" +msgstr "Tujuh hari terakhir" + +msgid "This month" +msgstr "Bulan ini" + +msgid "This year" +msgstr "Tahun ini" + +msgid "No date" +msgstr "Tidak ada tanggal" + +msgid "Has date" +msgstr "Ada tanggal" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Masukkan nama pengguna %(username)s dan sandi yang benar untuk akun staf. " +"Huruf besar/kecil pada bidang ini berpengaruh." + +msgid "Action:" +msgstr "Aksi:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Tambahkan %(verbose_name)s lagi" + +msgid "Remove" +msgstr "Hapus" + +msgid "Addition" +msgstr "Tambahan" + +msgid "Change" +msgstr "Ubah" + +msgid "Deletion" +msgstr "Penghapusan" + +msgid "action time" +msgstr "waktu aksi" + +msgid "user" +msgstr "pengguna" + +msgid "content type" +msgstr "jenis isi" + +msgid "object id" +msgstr "id objek" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "representasi objek" + +msgid "action flag" +msgstr "jenis aksi" + +msgid "change message" +msgstr "ganti pesan" + +msgid "log entry" +msgstr "entri pencatatan" + +msgid "log entries" +msgstr "entri pencatatan" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "\"%(object)s\" ditambahkan." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "\"%(object)s\" diubah - %(changes)s" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "\"%(object)s\" dihapus." + +msgid "LogEntry Object" +msgstr "Objek LogEntry" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "{name} ditambahkan \"{object}\"." + +msgid "Added." +msgstr "Ditambahkan." + +msgid "and" +msgstr "dan" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "{fields} berubah untuk {name} \"{object}\"." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "{fields} berubah." + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr " {name} dihapus \"{object}\"." + +msgid "No fields changed." +msgstr "Tidak ada bidang yang berubah." + +msgid "None" +msgstr "None" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" +"Tekan \"Control\", atau \"Command\" pada Mac, untuk memilih lebih dari satu." + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "{name} \"{obj}\" telah berhasil ditambahkan." + +msgid "You may edit it again below." +msgstr "Anda dapat menyunting itu kembali dibawah." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" +"{name} \"{obj}\" telah berhasil ditambahkan. Anda dapat menambahkan {name} " +"lain di bawah." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" +" {name} \"{obj}\" telah berhasil diubah. Anda dapat mengeditnya kembali di " +"bawah." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" +"{name} \"{obj}\" telah berhasil ditambahkan. Anda dapat mengeditnya kembali " +"di bawah." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" +"{name} \"{obj}\" telah berhasil diubah. Anda dapat menambahkan {name} lain " +"di bawah." + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "{name} \"{obj}\" telah berhasil diubah." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Objek harus dipilih sebelum dimanipulasi. Tidak ada objek yang berubah." + +msgid "No action selected." +msgstr "Tidak ada aksi yang dipilih." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "%(name)s \"%(obj)s\" berhasil dihapus." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "%(name)s dengan ID \"%(key)s\" tidak ada. Mungkin telah dihapus?" + +#, python-format +msgid "Add %s" +msgstr "Tambahkan %s" + +#, python-format +msgid "Change %s" +msgstr "Ubah %s" + +#, python-format +msgid "View %s" +msgstr "Melihat %s" + +msgid "Database error" +msgstr "Galat basis data" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s berhasil diubah." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s dipilih" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 dari %(cnt)s dipilih" + +#, python-format +msgid "Change history: %s" +msgstr "Ubah riwayat: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Menghapus %(class_name)s %(instance)s memerlukan penghapusanobjek " +"terlindungi yang terkait sebagai berikut: %(related_objects)s" + +msgid "Django site admin" +msgstr "Admin situs Django" + +msgid "Django administration" +msgstr "Administrasi Django" + +msgid "Site administration" +msgstr "Administrasi situs" + +msgid "Log in" +msgstr "Masuk" + +#, python-format +msgid "%(app)s administration" +msgstr "Administrasi %(app)s" + +msgid "Page not found" +msgstr "Laman tidak ditemukan" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Maaf, laman yang Anda minta tidak ditemukan." + +msgid "Home" +msgstr "Beranda" + +msgid "Server error" +msgstr "Galat server" + +msgid "Server error (500)" +msgstr "Galat server (500)" + +msgid "Server Error (500)" +msgstr "Galat Server (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Galat terjadi dan telah dilaporkan ke administrator situs lewat email untuk " +"diperbaiki. Terima kasih atas pengertiannya." + +msgid "Run the selected action" +msgstr "Jalankan aksi terpilih" + +msgid "Go" +msgstr "Buka" + +msgid "Click here to select the objects across all pages" +msgstr "Klik di sini untuk memilih semua objek pada semua laman" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Pilih seluruh %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Bersihkan pilihan" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"Pertama-tama, masukkan nama pengguna dan sandi. Anda akan dapat mengubah " +"opsi pengguna lain setelah itu." + +msgid "Enter a username and password." +msgstr "Masukkan nama pengguna dan sandi." + +msgid "Change password" +msgstr "Ganti sandi" + +msgid "Please correct the error below." +msgstr "Harap perbaiki kesalahan dibawah." + +msgid "Please correct the errors below." +msgstr "Perbaiki galat di bawah ini." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Masukkan sandi baru untuk pengguna %(username)s." + +msgid "Welcome," +msgstr "Selamat datang," + +msgid "View site" +msgstr "Lihat situs" + +msgid "Documentation" +msgstr "Dokumentasi" + +msgid "Log out" +msgstr "Keluar" + +#, python-format +msgid "Add %(name)s" +msgstr "Tambahkan %(name)s" + +msgid "History" +msgstr "Riwayat" + +msgid "View on site" +msgstr "Lihat di situs" + +msgid "Filter" +msgstr "Filter" + +msgid "Remove from sorting" +msgstr "Dihapus dari pengurutan" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Prioritas pengurutan: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Ubah pengurutan" + +msgid "Delete" +msgstr "Hapus" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Menghapus %(object_name)s '%(escaped_object)s' akan menghapus objek lain " +"yang terkait, tetapi akun Anda tidak memiliki izin untuk menghapus objek " +"dengan tipe berikut:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Menghapus %(object_name)s '%(escaped_object)s' memerlukan penghapusan objek " +"terlindungi yang terkait sebagai berikut:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Yakin ingin menghapus %(object_name)s \"%(escaped_object)s\"? Semua objek " +"lain yang terkait juga akan dihapus:" + +msgid "Objects" +msgstr "Objek" + +msgid "Yes, I'm sure" +msgstr "Ya, tentu saja" + +msgid "No, take me back" +msgstr "Tidak, bawa saya kembali" + +msgid "Delete multiple objects" +msgstr "Hapus beberapa objek sekaligus" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Menghapus %(objects_name)s terpilih akan menghapus objek yang terkait, " +"tetapi akun Anda tidak memiliki izin untuk menghapus objek dengan tipe " +"berikut:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Menghapus %(objects_name)s terpilih memerlukan penghapusan objek terlindungi " +"yang terkait sebagai berikut:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Yakin akan menghapus %(objects_name)s terpilih? Semua objek berikut beserta " +"objek terkait juga akan dihapus:" + +msgid "View" +msgstr "Tampilan" + +msgid "Delete?" +msgstr "Hapus?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " Berdasarkan %(filter_title)s " + +msgid "Summary" +msgstr "Ringkasan" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Model pada aplikasi %(name)s" + +msgid "Add" +msgstr "Tambah" + +msgid "You don't have permission to view or edit anything." +msgstr "Anda tidak mempunyai perizinan untuk melihat atau menyunting apapun." + +msgid "Recent actions" +msgstr "Tindakan terbaru" + +msgid "My actions" +msgstr "Tindakan saya" + +msgid "None available" +msgstr "Tidak ada yang tersedia" + +msgid "Unknown content" +msgstr "Konten tidak diketahui" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Ada masalah dengan instalasi basis data Anda. Pastikan tabel yang sesuai " +"pada basis data telah dibuat dan dapat dibaca oleh pengguna yang benar." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Anda diautentikasi sebagai %(username)s, tapi tidak diperbolehkan untuk " +"mengakses halaman ini. Ingin mencoba mengakses menggunakan akun yang lain?" + +msgid "Forgotten your password or username?" +msgstr "Lupa nama pengguna atau sandi?" + +msgid "Date/time" +msgstr "Tanggal/waktu" + +msgid "User" +msgstr "Pengguna" + +msgid "Action" +msgstr "Aksi" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Objek ini tidak memiliki riwayat perubahan. Kemungkinan objek ini tidak " +"ditambahkan melalui situs administrasi ini." + +msgid "Show all" +msgstr "Tampilkan semua" + +msgid "Save" +msgstr "Simpan" + +msgid "Popup closing…" +msgstr "Menutup popup..." + +msgid "Search" +msgstr "Cari" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s buah" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s total" + +msgid "Save as new" +msgstr "Simpan sebagai baru" + +msgid "Save and add another" +msgstr "Simpan dan tambahkan lagi" + +msgid "Save and continue editing" +msgstr "Simpan dan terus mengedit" + +msgid "Save and view" +msgstr "Simpan dan tampilkan" + +msgid "Close" +msgstr "Tutup" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Ubah %(model)s yang dipilih" + +#, python-format +msgid "Add another %(model)s" +msgstr "Tambahkan %(model)s yang lain" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Hapus %(model)s yang dipilih" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Terima kasih telah menggunakan situs ini hari ini." + +msgid "Log in again" +msgstr "Masuk kembali" + +msgid "Password change" +msgstr "Ubah sandi" + +msgid "Your password was changed." +msgstr "Sandi Anda telah diubah." + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Dengan alasan keamanan, masukkan sandi lama Anda dua kali untuk memastikan " +"Anda tidak salah mengetikkannya." + +msgid "Change my password" +msgstr "Ubah sandi saya" + +msgid "Password reset" +msgstr "Setel ulang sandi" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Sandi Anda telah diperbarui. Silakan masuk." + +msgid "Password reset confirmation" +msgstr "Konfirmasi penyetelan ulang sandi" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Masukkan sandi baru dua kali untuk memastikan Anda tidak salah " +"mengetikkannya." + +msgid "New password:" +msgstr "Sandi baru:" + +msgid "Confirm password:" +msgstr "Konfirmasi sandi:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Tautan penyetelan ulang sandi tidak valid. Kemungkinan karena tautan " +"tersebut telah dipakai sebelumnya. Ajukan permintaan penyetelan sandi sekali " +"lagi." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Kami mengirimi Anda petunjuk untuk mengubah kata sandi. Jika ada akun dengan " +"alamat email yang sesuai. Anda seharusnya menerimanya sesaat lagi." + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Jika Anda tidak menerima email, pastikan Anda telah memasukkan alamat yang " +"digunakan saat pendaftaran serta periksa folder spam Anda." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Anda menerima email ini karena Anda meminta penyetelan ulang sandi untuk " +"akun pengguna di %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "Kunjungi laman di bawah ini dan ketikkan sandi baru:" + +msgid "Your username, in case you've forgotten:" +msgstr "Nama pengguna Anda, jika lupa:" + +msgid "Thanks for using our site!" +msgstr "Terima kasih telah menggunakan situs kami!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "Tim %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" +"Lupa sandinya? Masukkan alamat email Anda di bawah ini agar kami dapat " +"mengirimkan petunjuk untuk menyetel ulang sandinya." + +msgid "Email address:" +msgstr "Alamat email:" + +msgid "Reset my password" +msgstr "Setel ulang sandi saya" + +msgid "All dates" +msgstr "Semua tanggal" + +#, python-format +msgid "Select %s" +msgstr "Pilih %s" + +#, python-format +msgid "Select %s to change" +msgstr "Pilih %s untuk diubah" + +#, python-format +msgid "Select %s to view" +msgstr "Pilih %s untuk melihat" + +msgid "Date:" +msgstr "Tanggal:" + +msgid "Time:" +msgstr "Waktu:" + +msgid "Lookup" +msgstr "Cari" + +msgid "Currently:" +msgstr "Saat ini:" + +msgid "Change:" +msgstr "Ubah:" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/id/LC_MESSAGES/djangojs.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/id/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..6b7bff39c635b74cac9f69fbadbb49f9cbe4e2bc GIT binary patch literal 4407 zcmb`KON<;x8OIB3lCTMZ7>7p)p;+*Xb@$Hr5ies5?5@4>?lShuJ76N^QZrpUUGDCx zR(18x&M6WHkN^n~K_W3pgApY2Q@gNhv50ac8fVA!f@blnLz#jN8gwpr`r1?2Wa!U|@Y!468^I4Ge z{4z*#o&%o)p9jAI##jWA>}8PT{R+GY{uZQl52Eus;G-a|djTxLD;Rt?_|w2wz(>)3 zHMIX8+7Cd9qv(GEd=GdQ{5oQ_0e%qeKR(##`!A66pkNU11EB(Y2z(cKH1r<}TmUIP zZ4gV@rvf(vZw3y)Qy4d33w$0VJ6{R>9SB#jKY_I0p9B92lE3~I_)n1Z`Zq}aK7`Hj z%I*iL|0uW&J_fFU&w#Yg_X2+ilKdAzn*Vc<^nMA1tJtqWxP<*4{1NyX_+#*^4>xi; z?`+nsf|t<04wAetfnNZ>2GaZ^a8?Sw48qOq)FTZS0;9miz;@u-!1ICc!&)k58u%ya zONH!?QQwPt9QDJfRNmjf`;B5wg={^63bE`7)VHEiS!m#WPp?sElMkqT43+Go9HBxv zK!tpI1ob59Y1Ff*A3%khe4IH5SFkoJeHV_QQlZ#?1oa&1JSvsP8n8u>VnA`F9Hv6K zP3M}*M^Pzv5fTVIS;_oV#mx>sc5h{W~-BND+{wL{WzvJtM{i}mIGPzrDbcfZ);)4Y)$13?W-!0Y(r?@w^8R~woz-z zy21`pJjbl760L@*W7mw)csSYNPn((xOUCll)Rv1>iiG@GNxLg8Cv)P1=R);+pUnF* zRXVvRu?J7xZLGd#M(p~)8S=ml@2CLs7u%MlYvygInAl5I#qsA-$#Ye~(>q+u1UUBg z7h*h#No5Mj`{R&BN)Ksi!IkzR`eqMyle0}5K0$LE_wnTJO$CiSHoNz9?$ z-Ny>TgFGBVYX|Hx{*@Axd^i5WE( z9q3Q?w5*VeB#tsG70BbsiG@D-8^1eBNWG$`f+_cPPil(#3o$m!gtQR`BbaJ<-x9y ziE{q)H1Wy$j#rn&%{bWW`+7+u1r_=@3Z`-~Ga7HwAzXaTDunFt+H7CfXzJ_E_H7GS zQ*aM&-_~3EnYZ=z(%M!uvo|}lSIav)Z^}eB-8b2mHMj8jj@FatbJAAGl@3pCAtlV* z4OtrNqHZ-*NwiWAtEgu>d~WM{FIu%yP+mp!VearVt@cvXIv=$!@OHa%zO~Rg(`sR2 zbVKeclDR+cLe%RF+yTsUJp+?oXE{}a{}Dit0yC;A|9CHlUSjLwHV5%Cq>cW>pFpJD}`vBOr0w`i;JVtD0U=L?Z`b^wAdImK^`P5 zs$}uhTz9>DW#9aE+?rc8+DQ$ya56jG$vwAN=0fRID? zXRZ&02eQP?kKJ#Hf+wnv8wGK~7LD=HlI~ypD!8iz?9#s{5!di*!W*>>&mc2~?0VK* zpjXKu%s(5q%v_)=NI1+TqgSL=89s|5foUmE#Euh|biXaaabsR0$gpW#@WsGy7f}bZ z6Y`Os4C^rh0jWGQPGoQc?~9R0PxD;lH74OI$S8zR1d~dkvHQFa|2$2`L4-X#lei=r z5%HVr>I45eU8kw>|JT+#_paJrrDLU#MJuv08QYW&*3NhYL;LwV#$=qRySX2$3!1@v zmN`kGnubC4Ycxexsna+}PLyypj!fa5T=y~7#}xqSh+bLim_t~N=qrtAd4Y(=fV6d{ z=$o9c)R}-P8kZ_1ZRp)r1)_wX)D*A(LWQwk$4hBR7s$(STQ>^%97B#kB}xTcs?!5~ z$11ohL{^Ye5Es&@rY|fK2KF~!B)a7@oC6-m+5!, 2015-2016 +# Jannis Leidel , 2011 +# rodin , 2011-2012 +# rodin , 2014,2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:50+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: rodin \n" +"Language-Team: Indonesian (http://www.transifex.com/django/django/language/" +"id/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: id\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, javascript-format +msgid "Available %s" +msgstr "%s yang tersedia" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Berikut adalah daftar %s yang tersedia. Anda dapat memilih satu atau lebih " +"dengan memilihnya pada kotak di bawah, lalu mengeklik tanda panah \"Pilih\" " +"di antara kedua kotak." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Ketik pada kotak ini untuk menyaring daftar %s yang tersedia." + +msgid "Filter" +msgstr "Filter" + +msgid "Choose all" +msgstr "Pilih semua" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Pilih untuk memilih seluruh %s sekaligus." + +msgid "Choose" +msgstr "Pilih" + +msgid "Remove" +msgstr "Hapus" + +#, javascript-format +msgid "Chosen %s" +msgstr "%s terpilih" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Berikut adalah daftar %s yang terpilih. Anda dapat menghapus satu atau lebih " +"dengan memilihnya pada kotak di bawah, lalu mengeklik tanda panah \"Hapus\" " +"di antara kedua kotak." + +msgid "Remove all" +msgstr "Hapus semua" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Klik untuk menghapus semua pilihan %s sekaligus." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s dari %(cnt)s terpilih" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Beberapa perubahan bidang yang Anda lakukan belum tersimpan. Perubahan yang " +"telah dilakukan akan hilang." + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"Anda telah memilih sebuah aksi, tetapi belum menyimpan perubahan ke bidang " +"yang ada. Klik OK untuk menyimpan perubahan ini. Anda akan perlu mengulangi " +"aksi tersebut kembali." + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Anda telah memilih sebuah aksi, tetapi belum mengubah bidang apapun. " +"Kemungkinan Anda mencari tombol Buka dan bukan tombol Simpan." + +msgid "Now" +msgstr "Sekarang" + +msgid "Midnight" +msgstr "Tengah malam" + +msgid "6 a.m." +msgstr "6 pagi" + +msgid "Noon" +msgstr "Siang" + +msgid "6 p.m." +msgstr "18.00" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Catatan: Waktu Anda lebih cepat %s jam dibandingkan waktu server." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Catatan: Waktu Anda lebih lambat %s jam dibandingkan waktu server." + +msgid "Choose a Time" +msgstr "Pilih Waktu" + +msgid "Choose a time" +msgstr "Pilih waktu" + +msgid "Cancel" +msgstr "Batal" + +msgid "Today" +msgstr "Hari ini" + +msgid "Choose a Date" +msgstr "Pilih Tanggal" + +msgid "Yesterday" +msgstr "Kemarin" + +msgid "Tomorrow" +msgstr "Besok" + +msgid "January" +msgstr "Januari" + +msgid "February" +msgstr "Februari" + +msgid "March" +msgstr "Maret" + +msgid "April" +msgstr "April" + +msgid "May" +msgstr "Mei" + +msgid "June" +msgstr "Juni" + +msgid "July" +msgstr "Juli" + +msgid "August" +msgstr "Agustus" + +msgid "September" +msgstr "September" + +msgid "October" +msgstr "Oktober" + +msgid "November" +msgstr "November" + +msgid "December" +msgstr "Desember" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "M" + +msgctxt "one letter Monday" +msgid "M" +msgstr "S" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "S" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "R" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "K" + +msgctxt "one letter Friday" +msgid "F" +msgstr "J" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "S" + +msgid "Show" +msgstr "Bentangkan" + +msgid "Hide" +msgstr "Ciutkan" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/io/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/io/LC_MESSAGES/django.po new file mode 100644 index 0000000..ddf09c2 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/io/LC_MESSAGES/django.po @@ -0,0 +1,668 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Viko Bartero , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-20 01:58+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Ido (http://www.transifex.com/django/django/language/io/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: io\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(count)d %(items)s eliminesis sucesoze." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Onu ne povas eliminar %(name)s" + +msgid "Are you sure?" +msgstr "Ka vu esas certa?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Eliminar selektita %(verbose_name_plural)s" + +msgid "Administration" +msgstr "" + +msgid "All" +msgstr "Omni" + +msgid "Yes" +msgstr "Yes" + +msgid "No" +msgstr "No" + +msgid "Unknown" +msgstr "Nekonocato" + +msgid "Any date" +msgstr "Irga dato" + +msgid "Today" +msgstr "Hodie" + +msgid "Past 7 days" +msgstr "7 antea dii" + +msgid "This month" +msgstr "Ca monato" + +msgid "This year" +msgstr "Ca yaro" + +msgid "No date" +msgstr "" + +msgid "Has date" +msgstr "" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Skribez la korekta %(username)s e pasvorto di kelka staff account. Remarkez " +"ke both feldi darfas rikonocar miniskulo e mayuskulo." + +msgid "Action:" +msgstr "Ago:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Agregar altra %(verbose_name)s" + +msgid "Remove" +msgstr "Eliminar" + +msgid "action time" +msgstr "horo dil ago" + +msgid "user" +msgstr "" + +msgid "content type" +msgstr "" + +msgid "object id" +msgstr "id dil objekto" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/3/library/functions.html#repr) +msgid "object repr" +msgstr "repr dil objekto" + +msgid "action flag" +msgstr "flago dil ago" + +msgid "change message" +msgstr "chanjar mesajo" + +msgid "log entry" +msgstr "logo informo" + +msgid "log entries" +msgstr "logo informi" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "\"%(object)s\" agregesis." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "\"%(object)s\" chanjesis - %(changes)s" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "\"%(object)s\" eliminesis." + +msgid "LogEntry Object" +msgstr "LogEntry Objekto" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "" + +msgid "Added." +msgstr "" + +msgid "and" +msgstr "e" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "" + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "" + +msgid "No fields changed." +msgstr "Nula feldo chanjesis." + +msgid "None" +msgstr "Nula" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Onu devas selektar la objekti por aplikar oli irga ago. Nula objekto " +"chanjesis." + +msgid "No action selected." +msgstr "Nula ago selektesis." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "La %(name)s \"%(obj)s\" eliminesis sucesoze." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "Agregar %s" + +#, python-format +msgid "Change %s" +msgstr "Chanjar %s" + +msgid "Database error" +msgstr "Eroro del datumaro" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s chanjesis sucesoze." +msgstr[1] "%(count)s %(name)s chanjesis sucesoze." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s selektita" +msgstr[1] "La %(total_count)s selektita" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "Selektita 0 di %(cnt)s" + +#, python-format +msgid "Change history: %s" +msgstr "Modifikuro historio: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Por eliminar %(class_name)s %(instance)s on mustas eliminar la sequanta " +"protektita objekti relatita: %(related_objects)s" + +msgid "Django site admin" +msgstr "Django situo admin" + +msgid "Django administration" +msgstr "Django administreyo" + +msgid "Site administration" +msgstr "Administrayo dil ret-situo" + +msgid "Log in" +msgstr "Startar sesiono" + +#, python-format +msgid "%(app)s administration" +msgstr "" + +msgid "Page not found" +msgstr "La pagino ne renkontresis" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Pardonez, ma la demandita pagino ne renkontresis." + +msgid "Home" +msgstr "Hemo" + +msgid "Server error" +msgstr "Eroro del servilo" + +msgid "Server error (500)" +msgstr "Eroro del servilo (500)" + +msgid "Server Error (500)" +msgstr "Eroro del servilo (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Eroro eventis. Ico informesis per e-posto a la administranti dil ret-situo e " +"la eroro esos korektigata balde. Danko pro vua pacienteso." + +msgid "Run the selected action" +msgstr "Exekutar la selektita ago" + +msgid "Go" +msgstr "Irar" + +msgid "Click here to select the objects across all pages" +msgstr "Kliktez hike por selektar la objekti di omna pagini" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Selektar omna %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Desfacar selekto" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"Unesme, skribez uzer-nomo ed pasvorto. Pos, vu povos modifikar altra uzer-" +"selekto." + +msgid "Enter a username and password." +msgstr "Skribez uzer-nomo ed pasvorto." + +msgid "Change password" +msgstr "Chanjar pasvorto" + +msgid "Please correct the error below." +msgstr "Korektigez la eroro infre." + +msgid "Please correct the errors below." +msgstr "Korektigez la erori infre." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Skribez nova pasvorto por la uzero %(username)s." + +msgid "Welcome," +msgstr "Bonvenez," + +msgid "View site" +msgstr "" + +msgid "Documentation" +msgstr "Dokumento" + +msgid "Log out" +msgstr "Klozar sesiono" + +#, python-format +msgid "Add %(name)s" +msgstr "Agregar %(name)s" + +msgid "History" +msgstr "Historio" + +msgid "View on site" +msgstr "Vidar en la ret-situo" + +msgid "Filter" +msgstr "Filtrar" + +msgid "Remove from sorting" +msgstr "Eskartar de klasifiko" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Precedo dil klasifiko: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Aktivar/desaktivar klasifiko" + +msgid "Delete" +msgstr "Eliminar" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Eliminar la %(object_name)s '%(escaped_object)s' eliminos relatita objekti, " +"ma vua account ne havas permiso por eliminar la sequanta objekti:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Eliminar la %(object_name)s '%(escaped_object)s' eliminus la sequanta " +"protektita objekti relatita:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Ka vu volas eliminar la %(object_name)s \"%(escaped_object)s\"? Omna " +"sequanta objekti relatita eliminesos:" + +msgid "Objects" +msgstr "" + +msgid "Yes, I'm sure" +msgstr "Yes, me esas certa" + +msgid "No, take me back" +msgstr "" + +msgid "Delete multiple objects" +msgstr "Eliminar multopla objekti" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Eliminar la selektita %(objects_name)s eliminos relatita objekti, ma vua " +"account ne havas permiso por eliminar la sequanta objekti:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Eliminar la selektita %(objects_name)s eliminos la sequanta protektita " +"objekti relatita:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Ka vu volas eliminar la selektita %(objects_name)s? Omna sequanta objekti ed " +"olia relatita objekti eliminesos:" + +msgid "Change" +msgstr "Modifikar" + +msgid "Delete?" +msgstr "Ka eliminar?" + +#, python-format +msgid " By %(filter_title)s " +msgstr "Per %(filter_title)s " + +msgid "Summary" +msgstr "" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Modeli en la %(name)s apliko" + +msgid "Add" +msgstr "Agregar" + +msgid "You don't have permission to edit anything." +msgstr "Vu ne havas permiso por facar modifiki." + +msgid "Recent actions" +msgstr "" + +msgid "My actions" +msgstr "" + +msgid "None available" +msgstr "Nulo disponebla" + +msgid "Unknown content" +msgstr "Nekonocata kontenajo" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Vua datumaro instaluro esas defektiva. Verifikez ke la datumaro tabeli " +"kreadesis e ke la uzero havas permiso por lektar la datumaro." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "Ka vu obliviis vua pasvorto od uzer-nomo?" + +msgid "Date/time" +msgstr "Dato/horo" + +msgid "User" +msgstr "Uzero" + +msgid "Action" +msgstr "Ago" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Ica objekto ne havas chanjo-historio. Olu forsan ne agregesis per ica " +"administrala ret-situo." + +msgid "Show all" +msgstr "Montrar omni" + +msgid "Save" +msgstr "Salvar" + +msgid "Popup closing..." +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "" + +msgid "Search" +msgstr "Serchar" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s resulto" +msgstr[1] "%(counter)s resulti" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s totala" + +msgid "Save as new" +msgstr "Salvar kom nova" + +msgid "Save and add another" +msgstr "Salvar ed agregar altra" + +msgid "Save and continue editing" +msgstr "Salvar e durar la modifiko" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Danko pro vua spensita tempo en la ret-situo hodie." + +msgid "Log in again" +msgstr "Ristartar sesiono" + +msgid "Password change" +msgstr "Pasvorto chanjo" + +msgid "Your password was changed." +msgstr "Vua pasvorto chanjesis." + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Por kauciono, skribez vua anta pasvorto e pos skribez vua nova pasvorto " +"dufoye por verifikar ke olu skribesis korekte." + +msgid "Change my password" +msgstr "Modifikar mea pasvorto" + +msgid "Password reset" +msgstr "Pasvorto chanjo" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Vua pasvorto chanjesis. Vu darfas startar sesiono nun." + +msgid "Password reset confirmation" +msgstr "Pasvorto chanjo konfirmo" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Skribez vua nova pasvorto dufoye por verifikar ke olu skribesis korekte." + +msgid "New password:" +msgstr "Nova pasvorto:" + +msgid "Confirm password:" +msgstr "Konfirmez pasvorto:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"La link por chanjar pasvorto ne esis valida, forsan pro ke olu ja uzesis. " +"Demandez nova pasvorto chanjo." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Se vu ne recevas mesajo, verifikez ke vu skribis la sama e-posto adreso " +"uzita por vua registro e lektez vua spam mesaji." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Vu esas recevanta ica mesajo pro ke vu demandis pasvorto chanjo por vua " +"uzero account che %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "Irez al sequanta pagino e selektez nova pasvorto:" + +msgid "Your username, in case you've forgotten:" +msgstr "Vua uzernomo, se vu obliviis olu:" + +msgid "Thanks for using our site!" +msgstr "Danko pro uzar nia ret-situo!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "La equipo di %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" +"Ka vu obliviis vua pasvorto? Skribez vua e-posto adreso infre e ni sendos " +"instrucioni por kreadar nova pasvorto." + +msgid "Email address:" +msgstr "E-postala adreso:" + +msgid "Reset my password" +msgstr "Chanjar mea pasvorto" + +msgid "All dates" +msgstr "Omna dati" + +#, python-format +msgid "Select %s" +msgstr "Selektar %s" + +#, python-format +msgid "Select %s to change" +msgstr "Selektar %s por chanjar" + +msgid "Date:" +msgstr "Dato:" + +msgid "Time:" +msgstr "Horo:" + +msgid "Lookup" +msgstr "Serchado" + +msgid "Currently:" +msgstr "Aktuale" + +msgid "Change:" +msgstr "Chanjo:" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/is/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/is/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1e029ac8fd604ddc92aaaffa70ab7291c3b47b47 GIT binary patch literal 16598 zcmc(md$3(qeaE*5B8d+kD&hkd(U1i1JxM?WE{{t{0*R0qasv@7#(mG(=bWAM*q6Qc zxi<%hpoOARtZ&rPNUBD#2GWMcnhNTiDjnOYopJ2cR_%yW=^wN>9Xq9poqoP+t$iMs z8zEz-J;S=+z1Lok-}=4RTH!}0AN%ou-vP>NDEAx}1W)RDF@N~|{Y!%2<>2?hSAb7~ zuLfW6(ja&{xCA^C+zqP!bKn~A>)^TIF(cK^ z?`yzC;1npj-wA5o7N~Y}py=5Ro(kRuYTkQ5&2tFU{67N4r=Nna0-pwVfv3JK2yOsB z1U>*BL!&DA$KYqdS0Y65?W>^re-jj4{|JgN{|bt(UxJr{iy-23@Jdj0?F6p@Zvfu_ zJ_kyL0e+MW!BXAwq0*?j%1iT6SGPoT)hs9~!J3;BeM?m%a3@AQ+!GHfU zD1JWzihn-_Meh@!=KTc-3xZ#P>VFbUK?K2RAgU0IftvqfQ0u!4RJ*JF`*on^tNZs| zp!E3;P^R!%@O9vWpaH)F=HSo3Enr0BJHSKW1b7L`t9iSi=KBDsb$$vIo%e#``$HhC z3%&)4z8`^zF8B$^Qi7*It@Gs9IywxfamGOD%{idPyBO4XSA%DPWl;2g5ENg(2#OzH z1|^?wgX;HP@Iml#a4C2@Q=YW%MaDFHQ zck=!r@M7?np!jhCOj{0a1EnXsJ-#2*xE}{a_oqP7bD#hIr=aNihR471_1^=JrT)j@ z?a#x$K};oRE_3p`9h6)@35t$~K+*Z{Agm0|gqStp2Jk}g1EA#oE%1fl_d(737%09! z0ZI@46V&<_uW0Tm5?iY8@X1UkKg{YMlE)(ftsp`M%=uufZ1Y{{+r~ zo6d6WzX?iz{uY!zKMtM%{u`+NPl3|^#cy@T<72K0UzOgFSrAI*V&HmUkA0GZ~OPhz?bs= z1h@!%8k9VaN7+sS&j7{0b3p0&I#B%D;OpNB%8w=B$>43E=(`(~J?!!C`~CNaK#lt- zsByjzqSC>WzW&rVIXSNYsS37(cY}9=*MP4-7a4$Ea286|8!EH;C#6p8(|_z5z%rd!9|Wx&FLL_34itU+LCNdSK-ih-d7yssgQ&mtU+)BEkEampXrC->(MfwxgAzV3SP9Td@A z{4Vtm(rf)B7p)DETA8f}TNM2y>#}{q2YQS_*dKhk>-TC3 zuEG9LnczPEEI8Ib=N=>Q3zV1o_m6>}qDYUWBd1e7O?i;=yA=K2 zD1SiFZ?yyacO8Ep7<&IK&*PN4DT^tXN6?_?x0ceRTuXTgMZcRVH&J#{YLr(}^t+n! z`;@m(UQC&$6hB;ujhP3)V<;JA3nitDQ8rONNjZaZ3Z?kHoCn#oejlNH*gm;Gb>K7p zeJgkw!Luk|^6!ER zDI12~^|*u*QZ`bKqXg!%u35Ug8aMMO-I2$6Gg^_EVCnL3W`>8b(u&)0mZxDJCvB?B z%`nS$w8NH~EnObBvpj5hrsziZC-{D&9D5%MkJZ$ouh#yy(q{`Q_Wz3*U*|Kwu zg^6HIg;6RM+BqWKOJ*T#CwV+^!+uCbLxFf7Hs%Tuhtks1O6ZdJeM}eD0G` zXzUTDbR?ne?TUzr)1x6`GFTh75mK@Iz7W@1%?})yrCIS*N6nJ7J26z%>Y5qsYA#7D zMXUMmLu)D&!HqoOdyGomjI(%Wdl@?8npVtB)i`Qavfc1IH4A9O{C1^aZ8Hi}<7Sr& zSlf)t4TDBT61l6l66`avoF*B(L~b)-4aHg8L_dSINxK@St^PV8yOX9-J8yO;f^}gY zPKQ}!qBKoXy+$kZxE0waK3f~~U|QIJJkyMfpRuT4fJ3gMrxKl7x_sDNcFZ(8X(*F& z?It~raI&c7sw*m7yNaU^6B1kPUm_lea zh2^m!Cv2CS6Lk2>z#9_$=f}>zjXl95dw3;tWpZDN@{o$4<@XI{w3+;szgX>*SyuHKfEW6 z&P=dLsS_!k9Ugz`b3t-kqM6h3P2GZuVDpe>PXwD2{`24Zt0<|?$_#WdbwJ?e1hI&v zt;kG=jX@DPX@Q(3C`Mg(Cc0tvxfUdbY z530J1>I7R(2(e|7GvsJPtJBod5x-~i8aVS)_hP7FqaLwbtKgwwKTxd}eq4gYtDuzV z0C{Y|s#e&QPLxr;@hocNdeF;0Rc=zNP$NzzpNq>VQex)RwQY#yakXm|Q~qBmqeSc} z)i%SkVQ4^ER$=vH-X_bPG|s!rGLs=Rr_-z$BeA~ce~}J+FG??N4kDLwB+JKgJt0q; z=U69#Ey+x0#+1pS$Qd5HbziU*D<UcH1$iMAaCygC5~pHM;uP=Cg4$=if3#g@=9_2RwY5-{4N+H1j&kLmTE4#H^ol&JA;SNvhrSHrb^RQ%ZQ@!g)%txRf-R zNn_l({DbQNG)Yf}d|4W4kK=T0;C(efzf-KeZdkDqZMtiq!oP0e-ersWcc46m5QW)?>?Z+|eG03lC7EENE!<+=J-VI6=+-6l?#}p4 zzlg+GlWEMlD_vDy=Cnuj;ClR-o3$1{M;Ct@Y{TFtf^D)d{?=;bxrLvs3Szy?q3sH=W4{~t>!?}!GxSDB=YKlX> zk#?vMbh7nv(h)OCX1nEvC~U^Kf7&#Yn$k-en@U`*k|Wz7ZGG&dCBY@(3+!kW{gmEY zT@Tw`8-Pl-kG#TyCcv5`Gsg>gSgSgYafP!Jc>^hi{k+G!OC15x#O-|gvLI7ix_rpn zS~}7}U%5|fcX(X9CUjWWMQRh)@u@Z=fEP-{P|Eqehfak3C&e*E19XDaEyPDdlhg|G z+*WNOa9N6}Hp5!+Y)^+U+`zdHQtd25GJ)59ql7RJ9f%=~QHkQY8+bd7E5#GuA`L`G zuq91&YC68LGJb88>cnBfRP3gC(N^nH#y4fPxH5iOrsEpHv)8qLOPI=&9Q znlNXtT7ALzsyC0XI@hc|d*V&!zi}16MOTrWk8exEc1GTiq!VUcScCOzTI{ncDH+~H z6;;e!T9Y-EP~}VL)2?+`)c7_6-h|m$=46ymTsF(=c|J3-a^>9IT#3wu{J9$KQlFKM z*aB#72Ur|<6^Vg+`9%-Tjq@3Mi?@lN}N8+*HtDQ+(sxzY6ok2 z2WnB;JJ5fa2rldG%R}NLm4ipb;V2)e%SPV%R}@3t#F@0yqWkdCD@o~Nx9%x!307o} z-FlCiX4>3NTe73(v3)5rAw!4a?tM7oRlV8CX^gwe8eQAZ*BoKq$>0j|WvgwX zXh^oQjWD>(f-(mCWZ8y$4egzU|Jdv{;%36K*cGCr``ewO+u%!4<5t5o#npuy168xO z7)!PVf1NUnUSAZ=2GMWJXb z^WOeeJXAqXDU$muvrcQs%n6E9QLALnVAOE+d?Om%U)WZYj8Q??MtE65BYpi5xP=4g zYxogwcd>_Vib7jvMV8bN{U+b6NnPD)7QV6=o@msR9LWpV(os%pnW$u_xA!@lE3UbU z4jVje6_Jogz>iG2p=B~yN286dkEFsm2>QyX<+an^{W{x)|AkI1z$VWg`C8BOBiT8} zHX5rL;n&y~pr*Y?l!Ky>qozO4;JY$N?`G!D(&tIxOx*Ao(&+f}hE!a_N$4ydBH}iA zJ26A4MJnb!CkBiOr^1F!5`Y0uz+-%^V&@3$%zvb^Y zsFTrgzcEiUotv&gRZ2Ppn^+m%J&Iew`l{A&7$e>XqkJYcSPrv}nOfLrKtb;?hf$4A zjg*QtIi6U}a{RE&IBc?}WrMT~cfjCkn1!uS+F_@Xz_7MK6yaXK+9r%R^H5Kks+;Rv z5387_oJCWcLp+Y|OS0bn4r@@*cPTP10Su3dnI=SAwb?Bx$NZG(>HsHN_g} z&yhVDmF35DNQ7SBXhdo5`&WB=!#0_+XQu2{dWFy6RKha8$VUd|L)VHjdj;=-RShD) zqKPcTHQ|jl_Iq=(swueP>e!1HC70JK(P$}OXHGV(P9K$Ak`$sG-a}av%K9Bo%5Qf#SL*fgb2t)H4*Oj^yjMjU7=r(9t}+G1n6 zoeT+2+mZWH$QtnsT2Sxp9k>3mx3{Ld9`vu(+uMxi(>3suy@&A?eJV6fPNuD`RuL)L z>LV!l#VWKQv@Ny#;)HvILs^3xA9#Tugvawnb$-ri}fXKKx^g&m?~y^{B43yS<}(0~~;=aTU0?N@u=XCEU%V za5Jtoaas5dGE@GYT8S&j-ow(f5u>|&XP7ow!Ok#1rjGJd!H4+iRDHg#OCT-$XmDlJ z^&V&7U0^>#c7H|TbnmdUKI{7j^>uciOtx1J%5u@#>`=$7ksxB^6#rzGf7|_y+y@Vz@!t{%lu9S8~;i)>%8BcVjg42__7h`TL^Y!?G0ZCHs3z{1_ao z&q_l`kDQ|PcLF#{zuD}R%oRt9IofR4h+E}YMEcgTtApJzDlH<1OA4f)HhS<)8tG=# zwgVqb2Ek#APsqHiLr$0$x(RYSgoUqu2yL7jH*zUX!#fMDj7WmrXg7m|_w!nH8Vgr= z#c6X)J=#M=tDVSB8jUbLBPilTe|O@xdGZ2EE_E6+bm)i?9-QG;mT)!j&vM0mH^OOb z?_k5bb!+Dbm8}y{h=&JjoVJwA22Sa0K)`F+Jhk3Ctd#Mv!lmrS$4JQS^bT<5GVF|} z;|jJ&^l@%uBnA+#M>kWum9c2*;WLZ{nk*EWO>Ykr*?e)RyH6O4Ew1EH`2S}ecW{m} zGPcbGSh^0CY{<7-^qfcaiG-is{xec;zy5Dl*Ar_!~sB%%&A$m8K`LNe3p?UN#grJ%Qm z4O^_}*ham`uzZEfsysQ7!i)8C$}KXT^+B$-E>fpvZ+}CxxU3Q9D~qxbZm)DW%eWMA z2ce`EX+~zq+;(OqY`wi)8|e^2|G<*nnmRj+4YsET7K5 zTG6INn=tFY9oRd4TcO+&?)lI5vA4&bS`t=pYd-hVMYJ_f>p9$V6dcj&dhbvb=CKVS zBR;B4$iO5QN(9D=5bhnLxMsIBZND=jc~u;;fqanbTY2IjBys21$tvAG*>8hFo0Sb~ zfWj847PptTSBwR3fuR)ByI)5{_E1q0!N!#$kiporDzzD#2pG=S>>gXq>@LBQJ2+R6 z53oWH)0o96X^_v-p308ON1xDZSmk%A-&4kujsRx?cI?5hVvL4%A=PcgT-e3q5MDg- zs4=@p|H12?^CHhkQ2UG3uwoz0p$5$z?8m5+npo~n(+;CT3kD*^8rY%0`QqFy9z-Nb z)atT5jG)m-?BE}W_4_ctjWGQLo-3;%cS|TBh, 2019 +# Hafsteinn Einarsson , 2011-2012 +# Jannis Leidel , 2011 +# Kári Tristan Helgason , 2013 +# Thordur Sigurdsson , 2016-2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-06-05 12:48+0000\n" +"Last-Translator: Dagur Ammendrup \n" +"Language-Team: Icelandic (http://www.transifex.com/django/django/language/" +"is/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: is\n" +"Plural-Forms: nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Eyddi %(count)d %(items)s." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Get ekki eytt %(name)s" + +msgid "Are you sure?" +msgstr "Ertu viss?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Eyða völdum %(verbose_name_plural)s" + +msgid "Administration" +msgstr "Vefstjórn" + +msgid "All" +msgstr "Allt" + +msgid "Yes" +msgstr "Já" + +msgid "No" +msgstr "Nei" + +msgid "Unknown" +msgstr "Óþekkt" + +msgid "Any date" +msgstr "Allar dagsetningar" + +msgid "Today" +msgstr "Dagurinn í dag" + +msgid "Past 7 days" +msgstr "Síðustu 7 dagar" + +msgid "This month" +msgstr "Þessi mánuður" + +msgid "This year" +msgstr "Þetta ár" + +msgid "No date" +msgstr "Engin dagsetning" + +msgid "Has date" +msgstr "Hefur dagsetningu" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Vinsamlegast sláðu inn rétt %(username)s og lykilorð fyrir starfsmanna " +"aðgang. Takið eftir að í báðum reitum skipta há- og lágstafir máli." + +msgid "Action:" +msgstr "Aðgerð:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Bæta við öðrum %(verbose_name)s" + +msgid "Remove" +msgstr "Fjarlægja" + +msgid "Addition" +msgstr "Viðbót" + +msgid "Change" +msgstr "Breyta" + +msgid "Deletion" +msgstr "Eyðing" + +msgid "action time" +msgstr "tími aðgerðar" + +msgid "user" +msgstr "notandi" + +msgid "content type" +msgstr "efnistag" + +msgid "object id" +msgstr "kenni hlutar" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "framsetning hlutar" + +msgid "action flag" +msgstr "aðgerðarveifa" + +msgid "change message" +msgstr "breyta skilaboði" + +msgid "log entry" +msgstr "kladdafærsla" + +msgid "log entries" +msgstr "kladdafærslur" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "„%(object)s“ bætt við." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "Breytti „%(object)s“ - %(changes)s" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "Eyddi „%(object)s.“" + +msgid "LogEntry Object" +msgstr "LogEntry hlutur" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "Bætti við {name} „{object}“." + +msgid "Added." +msgstr "Bætti við." + +msgid "and" +msgstr "og" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "Breytti {fields} fyrir {name} „{object}“." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Breytti {fields}." + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "Eyddi {name} „{object}“." + +msgid "No fields changed." +msgstr "Engum reitum breytt." + +msgid "None" +msgstr "Ekkert" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" +"Haltu inni „Control“, eða „Command“ á Mac til þess að velja fleira en eitt." + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "{name} „{obj}“ var bætt við." + +msgid "You may edit it again below." +msgstr "Þú mátt breyta þessu aftur hér að neðan." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" +"{name} „{obj}“ hefur verið breytt. Þú getur bætt við öðru {name} að neðan." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "{name} „{obj}“ hefur verið breytt. Þú getur breytt því aftur að neðan." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" +"{name} „{obj}“ hefur verið bætt við. Þú getur breytt því aftur að neðan." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" +"{name} \"{obj}\" hefur verið breytt. Þú getur bætt við öðru {name} að neðan." + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "{name} „{obj}“ hefur verið breytt." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Hlutir verða að vera valdir til að framkvæma aðgerðir á þeim. Engu hefur " +"verið breytt." + +msgid "No action selected." +msgstr "Engin aðgerð valin." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "%(name)s „%(obj)s“ var eytt." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "%(name)s með ID \"%(key)s\" er ekki til. Var því mögulega eytt?" + +#, python-format +msgid "Add %s" +msgstr "Bæta við %s" + +#, python-format +msgid "Change %s" +msgstr "Breyta %s" + +#, python-format +msgid "View %s" +msgstr "Skoða %s" + +msgid "Database error" +msgstr "Gagnagrunnsvilla" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s var breytt." +msgstr[1] "%(count)s %(name)s var breytt." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "Allir %(total_count)s valdir" +msgstr[1] "Allir %(total_count)s valdir" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 af %(cnt)s valin" + +#, python-format +msgid "Change history: %s" +msgstr "Breytingarsaga: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Að eyða %(class_name)s %(instance)s þyrfti að eyða eftirfarandi tengdum " +"hlutum: %(related_objects)s" + +msgid "Django site admin" +msgstr "Django vefstjóri" + +msgid "Django administration" +msgstr "Django vefstjórn" + +msgid "Site administration" +msgstr "Vefstjóri" + +msgid "Log in" +msgstr "Skrá inn" + +#, python-format +msgid "%(app)s administration" +msgstr "%(app)s vefstjórn" + +msgid "Page not found" +msgstr "Síða fannst ekki" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Því miður fannst umbeðin síða ekki." + +msgid "Home" +msgstr "Heim" + +msgid "Server error" +msgstr "Kerfisvilla" + +msgid "Server error (500)" +msgstr "Kerfisvilla (500)" + +msgid "Server Error (500)" +msgstr "Kerfisvilla (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Villa kom upp. Hún hefur verið tilkynnt til vefstjóra með tölvupósti og ætti " +"að lagast fljótlega. Þökkum þolinmæðina." + +msgid "Run the selected action" +msgstr "Keyra valda aðgerð" + +msgid "Go" +msgstr "Áfram" + +msgid "Click here to select the objects across all pages" +msgstr "Smelltu hér til að velja alla hluti" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Velja alla %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Hreinsa val" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"Fyrst, settu inn notendanafn og lykilorð. Svo geturðu breytt öðrum " +"notendamöguleikum." + +msgid "Enter a username and password." +msgstr "Sláðu inn notandanafn og lykilorð." + +msgid "Change password" +msgstr "Breyta lykilorði" + +msgid "Please correct the error below." +msgstr "Vinsamlegast lagfærðu villuna fyrir neðan." + +msgid "Please correct the errors below." +msgstr "Vinsamlegast leiðréttu villurnar hér að neðan." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Settu inn nýtt lykilorð fyrir notandann %(username)s." + +msgid "Welcome," +msgstr "Velkomin(n)," + +msgid "View site" +msgstr "Skoða vef" + +msgid "Documentation" +msgstr "Skjölun" + +msgid "Log out" +msgstr "Skrá út" + +#, python-format +msgid "Add %(name)s" +msgstr "Bæta við %(name)s" + +msgid "History" +msgstr "Saga" + +msgid "View on site" +msgstr "Skoða á vef" + +msgid "Filter" +msgstr "Sía" + +msgid "Remove from sorting" +msgstr "Taka úr röðun" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Forgangur röðunar: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Röðun af/á" + +msgid "Delete" +msgstr "Eyða" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Eyðing á %(object_name)s „%(escaped_object)s“ hefði í för með sér eyðingu á " +"tengdum hlutum en þú hefur ekki réttindi til að eyða eftirfarandi hlutum:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Að eyða %(object_name)s „%(escaped_object)s“ þyrfti að eyða eftirfarandi " +"tengdum hlutum:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Ertu viss um að þú viljir eyða %(object_name)s „%(escaped_object)s“? Öllu " +"eftirfarandi verður eytt:" + +msgid "Objects" +msgstr "Hlutir" + +msgid "Yes, I'm sure" +msgstr "Já ég er viss." + +msgid "No, take me back" +msgstr "Nei, fara til baka" + +msgid "Delete multiple objects" +msgstr "Eyða mörgum hlutum." + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Að eyða völdu %(objects_name)s leiðir til þess að skyldum hlutum er eytt, en " +"þinn aðgangur hefur ekki réttindi til að eyða eftirtöldum hlutum:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Að eyða völdum %(objects_name)s myndi leiða til þess að eftirtöldum skyldum " +"hlutum yrði eytt:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Ertu viss um að þú viljir eyða völdum %(objects_name)s? Öllum eftirtöldum " +"hlutum og skyldum hlutum verður eytt:" + +msgid "View" +msgstr "Skoða" + +msgid "Delete?" +msgstr "Eyða?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " Eftir %(filter_title)s " + +msgid "Summary" +msgstr "Samantekt" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Módel í appinu %(name)s" + +msgid "Add" +msgstr "Bæta við" + +msgid "You don't have permission to view or edit anything." +msgstr "Þú hefur ekki réttindi til að skoða eða breyta neinu." + +msgid "Recent actions" +msgstr "Nýlegar aðgerðir" + +msgid "My actions" +msgstr "Mínar aðgerðir" + +msgid "None available" +msgstr "Engin fáanleg" + +msgid "Unknown content" +msgstr "Óþekkt innihald" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Eitthvað er að gagnagrunnsuppsetningu. Gakktu úr skugga um að allar töflur " +"séu til staðar og að notandinn hafi aðgang að grunninum." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Þú ert skráður inn sem %(username)s, en ert ekki með réttindi að þessari " +"síðu. Viltu skrá þig inn sem annar notandi?" + +msgid "Forgotten your password or username?" +msgstr "Gleymt notandanafn eða lykilorð?" + +msgid "Date/time" +msgstr "Dagsetning/tími" + +msgid "User" +msgstr "Notandi" + +msgid "Action" +msgstr "Aðgerð" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Þessi hlutur hefur enga breytingasögu. Hann var líklega ekki búinn til á " +"þessu stjórnunarsvæði." + +msgid "Show all" +msgstr "Sýna allt" + +msgid "Save" +msgstr "Vista" + +msgid "Popup closing…" +msgstr "Sprettigluggi lokast..." + +msgid "Search" +msgstr "Leita" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s niðurstaða" +msgstr[1] "%(counter)s niðurstöður" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s í heildina" + +msgid "Save as new" +msgstr "Vista sem nýtt" + +msgid "Save and add another" +msgstr "Vista og búa til nýtt" + +msgid "Save and continue editing" +msgstr "Vista og halda áfram að breyta" + +msgid "Save and view" +msgstr "Vista og skoða" + +msgid "Close" +msgstr "Loka" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Breyta völdu %(model)s" + +#, python-format +msgid "Add another %(model)s" +msgstr "Bæta við %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Eyða völdu %(model)s" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Takk fyrir að verja tíma í vefsíðuna í dag." + +msgid "Log in again" +msgstr "Skráðu þig inn aftur" + +msgid "Password change" +msgstr "Breyta lykilorði" + +msgid "Your password was changed." +msgstr "Lykilorði þínu var breytt" + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Vinsamlegast skrifaðu gamla lykilorðið þitt til öryggis. Sláðu svo nýja " +"lykilorðið tvisvar inn svo að hægt sé að ganga úr skugga um að þú hafir ekki " +"gert innsláttarvillu." + +msgid "Change my password" +msgstr "Breyta lykilorðinu mínu" + +msgid "Password reset" +msgstr "Endurstilla lykilorð" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Lykilorðið var endurstillt. Þú getur núna skráð þig inn á vefsvæðið." + +msgid "Password reset confirmation" +msgstr "Staðfesting endurstillingar lykilorðs" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Vinsamlegast settu inn nýja lykilorðið tvisvar til að forðast " +"innsláttarvillur." + +msgid "New password:" +msgstr "Nýtt lykilorð:" + +msgid "Confirm password:" +msgstr "Staðfestu lykilorð:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Endurstilling lykilorðs tókst ekki. Slóðin var ógild. Hugsanlega hefur hún " +"nú þegar verið notuð. Vinsamlegast biddu um nýja endurstillingu." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Við höfum sent þér tölvupóst með leiðbeiningum til að endurstilla lykilorðið " +"þitt, sé aðgangur til með netfanginu sem þú slóst inn. Þú ættir að fá " +"leiðbeiningarnar fljótlega. " + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Ef þú færð ekki tölvupóstinn, gakktu úr skugga um að netfangið sem þú slóst " +"inn sé það sama og þú notaðir til að stofna aðganginn og að það hafi ekki " +"lent í spamsíu." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Þú ert að fá þennan tölvupóst því þú baðst um endurstillingu á lykilorði " +"fyrir aðganginn þinn á %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "Vinsamlegast farðu á eftirfarandi síðu og veldu nýtt lykilorð:" + +msgid "Your username, in case you've forgotten:" +msgstr "Notandanafnið þitt ef þú skyldir hafa gleymt því:" + +msgid "Thanks for using our site!" +msgstr "Takk fyrir að nota vefinn okkar!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s hópurinn" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" +"Hefurðu gleymt lykilorðinu þínu? Sláðu inn netfangið þitt hér að neðan og " +"við sendum þér tölvupóst með leiðbeiningum til að setja nýtt lykilorð. " + +msgid "Email address:" +msgstr "Netfang:" + +msgid "Reset my password" +msgstr "Endursstilla lykilorðið mitt" + +msgid "All dates" +msgstr "Allar dagsetningar" + +#, python-format +msgid "Select %s" +msgstr "Veldu %s" + +#, python-format +msgid "Select %s to change" +msgstr "Veldu %s til að breyta" + +#, python-format +msgid "Select %s to view" +msgstr "Veldu %s til að skoða" + +msgid "Date:" +msgstr "Dagsetning:" + +msgid "Time:" +msgstr "Tími:" + +msgid "Lookup" +msgstr "Fletta upp" + +msgid "Currently:" +msgstr "Eins og er:" + +msgid "Change:" +msgstr "Breyta:" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/is/LC_MESSAGES/djangojs.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/is/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..3f47b7b22ad2e2a5441d444ae6c40b471b6cdf99 GIT binary patch literal 4559 zcmb`JUu+yl9mfZ1ptz;bmhh*9cIqav)8x))H%-Dt1_jsG#`GF1KAcwKW$t!vZ+yEm zr`g%Fuc}lKf(KARK#>562n#7ZAWKG3D-_yLu~4CkiWgpZAmR;Pk>G_F`2Ke1&X>dq zk;3TaK0C9&`OWY5o8Qdr)dwcN&rpt`?niy&J&ZjKe(5g!p=?etb^;uL?+1V3`AhJ9 zX#d)`e+S-+_8)xv&z^q;KZO3jdH&1uE)1ST|NY-wh)^ivEYekAY8s-^E%jgS0+>xu>vq9~J>7vHhNpfiQtR4nl;@dwv!q zdzZoc!4==%^wc0!vll_~=WF00@LS+K_?qwkyXQYZip#$}{{zyz6Igt*=U&eTL6UpO z^AV8dIRKLUEcjLMgy*k7gn)hSzQW!!AlY*kq;b!Kn2NPPlIwxw*NfoK!7qb90gryT zu;X2jmev`%k;9q>GYgD|tVJb&Z)ThF&We-FMFa_{)|yPlsw z9~Fw(u+TbCA-l_{A4jFwK8i}^lLhiP(V9~spQcfvmOYG0b5S``AdfLUmVBFHL*;Q) z^6%5sK!IC%p%^}ZI)i!?^$FBZp(0%DFe*nyXxJPooeKw1sZ>xOLp_E%g-Ye20&Etf z*wQ|t9Hv6KP5YY40aVIeEGZPuBr-ajaMR`oXIk3f5goGSWN^!O$GIrSWph2sXZl-c6&y_K=)%lth=i_yDcPsx^yo6@qHY}!=V0jsIVq5X^sBwH3b z?^{lz0b5SBWOZR%9sCbiT?JZ&9mk$CM&r-PDu2PGTv&3JcT8%z=tvPzJQHdA(sFXA zytgb&zkOlelpUpm+fuu?Xut6KIkUmeww$2|oXZ2{LGfa%vgZo9)eZz39hGqWTu1Uq zC5UvJi?IbR=l;iHFkF+w#F94$K8utNX=u!q&Q&zcCj5xZ1{ZJzZ!~YwqIo$!RV2z3 zB5EPjlx{;phGusghGV!)%6l3$TIXGhd=}iHMMa4ImqjK(dNfRI$Zpmc^dwwHraFor zd5!0Go@G2R8-+)E#*@7u6XYVPqs;0E0MX(9@2`B0$1xS_h#+ zi5;zBL7@67NJWIXWfUZNY^IT{J!_iSq5~colLxmTX#B zR)l2Cs8knI?i~slD3>2k!j}xUax6G!GtEZf=OJN8I33Duw1-m6_#wG zHr`h^n)>SFeXGKyw73(i*Yu{jZ1bQh8(Nc^T-U`#f8*W*x_O=}b^s zlQu!FRC%zDlrWR$WY1VvswbfeN}o@|q|`7~KDlzXQChT8P+pbjV6O7{%G}9P<;l|A z2|hPheX??-GGD1cuyjuL73sWQ?j)Z(R;_&INCjo`S&_I>!wQ{5!WmoTb>SR8hkhNV zB9x_u6mgZG!Nq`6K(+Wx$GKj0c6MW9qwHv$YRk=X%fz#V0W#$yXc(YeUu)GWf+h%|U zVk{i~@KlE~O`a+^ycNh$vD2=ThOiJfFeb{bWS6$cb()f;5kOJ9u3g_va*l;ryI=eKy+z~awOxI$YDiH$g?*wand&wqA6tWx|l*bTBQY#aoQ@nJp~%B zFGHkO`FdM5PVF}DBZGq!=3ZmoFeBan$GSX(BkN%AO$>a6b{@;V!tpr}rkbsGt!n3K zng?-{!ZqAm3GzP=x+omEY1moz3J6)-&ns>D5^)&LoZDki4pnrM|Ux8z< zXgzMz9$X!crrF!1HHBL{CR^~8i4zB_ISrR15vu7?v~m^R{OpRbZI>G^b&%Sw9N66Y zJQm2GGFw7SrA;}uM=>{i7@vK66p$rKc=$m|uuDe~jZ-A-*pNK1_^hYBG}2jSHCAWO LvQ;p, 2012 +# Hafsteinn Einarsson , 2011-2012 +# Jannis Leidel , 2011 +# Matt R, 2018 +# Thordur Sigurdsson , 2016-2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:50+0200\n" +"PO-Revision-Date: 2018-05-18 14:09+0000\n" +"Last-Translator: Matt R\n" +"Language-Team: Icelandic (http://www.transifex.com/django/django/language/" +"is/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: is\n" +"Plural-Forms: nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Fáanleg %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Þetta er listi af því %s sem er í boði. Þú getur ákveðið hluti með því að " +"velja þá í boxinu að neðan og ýta svo á \"Velja\" örina milli boxana tveggja." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Skrifaðu í boxið til að sía listann af því %s sem er í boði." + +msgid "Filter" +msgstr "Sía" + +msgid "Choose all" +msgstr "Velja öll" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Smelltu til að velja allt %s í einu." + +msgid "Choose" +msgstr "Veldu" + +msgid "Remove" +msgstr "Fjarlægja" + +#, javascript-format +msgid "Chosen %s" +msgstr "Valin %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Þetta er listinn af völdu %s. Þú getur fjarlægt hluti með því að velja þá í " +"boxinu að neðan og ýta svo á \"Eyða\" örina á milli boxana tveggja." + +msgid "Remove all" +msgstr "Eyða öllum" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Smelltu til að fjarlægja allt valið %s í einu." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] " %(sel)s í %(cnt)s valin" +msgstr[1] " %(sel)s í %(cnt)s valin" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Enn eru óvistaðar breytingar í reitum. Ef þú keyrir aðgerð munu breytingar " +"ekki verða vistaðar." + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"Þú hefur valið aðgerð en hefur ekki vistað breytingar á reitum. Vinsamlegast " +"veldu 'Í lagi' til að vista. Þú þarft að endurkeyra aðgerðina." + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Þú hefur valið aðgerð en hefur ekki gert breytingar á reitum. Þú ert líklega " +"að leita að 'Fara' hnappnum frekar en 'Vista' hnappnum." + +msgid "Now" +msgstr "Núna" + +msgid "Midnight" +msgstr "Miðnætti" + +msgid "6 a.m." +msgstr "6 f.h." + +msgid "Noon" +msgstr "Hádegi" + +msgid "6 p.m." +msgstr "6 e.h." + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Athugaðu að þú ert %s klukkustund á undan tíma vefþjóns." +msgstr[1] "Athugaðu að þú ert %s klukkustundum á undan tíma vefþjóns." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Athugaðu að þú ert %s klukkustund á eftir tíma vefþjóns." +msgstr[1] "Athugaðu að þú ert %s klukkustundum á eftir tíma vefþjóns." + +msgid "Choose a Time" +msgstr "Veldu tíma" + +msgid "Choose a time" +msgstr "Veldu tíma" + +msgid "Cancel" +msgstr "Hætta við" + +msgid "Today" +msgstr "Í dag" + +msgid "Choose a Date" +msgstr "Veldu dagsetningu" + +msgid "Yesterday" +msgstr "Í gær" + +msgid "Tomorrow" +msgstr "Á morgun" + +msgid "January" +msgstr "janúar" + +msgid "February" +msgstr "febrúar" + +msgid "March" +msgstr "mars" + +msgid "April" +msgstr "apríl" + +msgid "May" +msgstr "maí" + +msgid "June" +msgstr "júní" + +msgid "July" +msgstr "júlí" + +msgid "August" +msgstr "ágúst" + +msgid "September" +msgstr "september" + +msgid "October" +msgstr "október" + +msgid "November" +msgstr "nóvember" + +msgid "December" +msgstr "desember" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "S" + +msgctxt "one letter Monday" +msgid "M" +msgstr "M" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "Þ" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "M" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "F" + +msgctxt "one letter Friday" +msgid "F" +msgstr "F" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "L" + +msgid "Show" +msgstr "Sýna" + +msgid "Hide" +msgstr "Fela" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/it/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..72b2ffa20f79e02aa7a5e1c5dbf4d18b16c19f7e GIT binary patch literal 16882 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 N, 2011 +# Jannis Leidel , 2011 +# Luciano De Falco Alfano, 2016 +# Marco Bonetti, 2014 +# Nicola Larosa , 2011-2012 +# palmux , 2015 +# Stefano Brentegani , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:50+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: palmux \n" +"Language-Team: Italian (http://www.transifex.com/django/django/language/" +"it/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "%s disponibili" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Questa è la lista dei %s disponibili. Puoi sceglierne alcuni selezionandoli " +"nella casella qui sotto e poi facendo clic sulla freccia \"Scegli\" tra le " +"due caselle." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Scrivi in questa casella per filtrare l'elenco dei %s disponibili." + +msgid "Filter" +msgstr "Filtro" + +msgid "Choose all" +msgstr "Scegli tutto" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Fai clic per scegliere tutti i %s in una volta." + +msgid "Choose" +msgstr "Scegli" + +msgid "Remove" +msgstr "Elimina" + +#, javascript-format +msgid "Chosen %s" +msgstr "%s scelti" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Questa è la lista dei %s scelti. Puoi eliminarne alcuni selezionandoli nella " +"casella qui sotto e poi facendo clic sulla freccia \"Elimina\" tra le due " +"caselle." + +msgid "Remove all" +msgstr "Elimina tutti" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Fai clic per eliminare tutti i %s in una volta." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s di %(cnt)s selezionato" +msgstr[1] "%(sel)s di %(cnt)s selezionati" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Ci sono aggiornamenti non salvati su singoli campi modificabili. Se esegui " +"un'azione, le modifiche non salvate andranno perse." + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"Hai selezionato un'azione, ma non hai ancora salvato le modifiche apportate " +"a campi singoli. Fai clic su OK per salvare. Poi dovrai ri-eseguire l'azione." + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Hai selezionato un'azione, e non hai ancora apportato alcuna modifica a " +"campi singoli. Probabilmente stai cercando il pulsante Go, invece di Save." + +msgid "Now" +msgstr "Adesso" + +msgid "Midnight" +msgstr "Mezzanotte" + +msgid "6 a.m." +msgstr "6 del mattino" + +msgid "Noon" +msgstr "Mezzogiorno" + +msgid "6 p.m." +msgstr "6 del pomeriggio" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Nota: Sei %s ora in anticipo rispetto al server." +msgstr[1] "Nota: Sei %s ore in anticipo rispetto al server." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Nota: Sei %s ora in ritardo rispetto al server." +msgstr[1] "Nota: Sei %s ore in ritardo rispetto al server." + +msgid "Choose a Time" +msgstr "Scegli un orario" + +msgid "Choose a time" +msgstr "Scegli un orario" + +msgid "Cancel" +msgstr "Annulla" + +msgid "Today" +msgstr "Oggi" + +msgid "Choose a Date" +msgstr "Scegli una data" + +msgid "Yesterday" +msgstr "Ieri" + +msgid "Tomorrow" +msgstr "Domani" + +msgid "January" +msgstr "Gennaio" + +msgid "February" +msgstr "Febbraio" + +msgid "March" +msgstr "Marzo" + +msgid "April" +msgstr "Aprile" + +msgid "May" +msgstr "Maggio" + +msgid "June" +msgstr "Giugno" + +msgid "July" +msgstr "Luglio" + +msgid "August" +msgstr "Agosto" + +msgid "September" +msgstr "Settembre" + +msgid "October" +msgstr "Ottobre" + +msgid "November" +msgstr "Novembre" + +msgid "December" +msgstr "Dicembre" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "D" + +msgctxt "one letter Monday" +msgid "M" +msgstr "L" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "Ma" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "Me" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "G" + +msgctxt "one letter Friday" +msgid "F" +msgstr "V" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "S" + +msgid "Show" +msgstr "Mostra" + +msgid "Hide" +msgstr "Nascondi" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/ja/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/ja/LC_MESSAGES/django.po new file mode 100644 index 0000000..afa002d --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/ja/LC_MESSAGES/django.po @@ -0,0 +1,704 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Claude Paroz , 2016 +# Jannis Leidel , 2011 +# Shinichi Katsumata , 2019 +# Shinya Okano , 2012-2018 +# Tetsuya Morimoto , 2011 +# 上田慶祐 , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-01-19 07:00+0000\n" +"Last-Translator: Shinichi Katsumata \n" +"Language-Team: Japanese (http://www.transifex.com/django/django/language/" +"ja/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ja\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(count)d 個の %(items)s を削除しました。" + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "%(name)s が削除できません" + +msgid "Are you sure?" +msgstr "よろしいですか?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "選択された %(verbose_name_plural)s の削除" + +msgid "Administration" +msgstr "管理" + +msgid "All" +msgstr "全て" + +msgid "Yes" +msgstr "はい" + +msgid "No" +msgstr "いいえ" + +msgid "Unknown" +msgstr "不明" + +msgid "Any date" +msgstr "いつでも" + +msgid "Today" +msgstr "今日" + +msgid "Past 7 days" +msgstr "過去 7 日間" + +msgid "This month" +msgstr "今月" + +msgid "This year" +msgstr "今年" + +msgid "No date" +msgstr "日付なし" + +msgid "Has date" +msgstr "日付あり" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"スタッフアカウントの正しい%(username)sとパスワードを入力してください。どちら" +"のフィールドも大文字と小文字は区別されます。" + +msgid "Action:" +msgstr "操作:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "%(verbose_name)s の追加" + +msgid "Remove" +msgstr "削除" + +msgid "Addition" +msgstr "追加" + +msgid "Change" +msgstr "変更" + +msgid "Deletion" +msgstr "削除" + +msgid "action time" +msgstr "操作時刻" + +msgid "user" +msgstr "ユーザー" + +msgid "content type" +msgstr "コンテンツタイプ" + +msgid "object id" +msgstr "オブジェクト ID" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "オブジェクトの文字列表現" + +msgid "action flag" +msgstr "操作種別" + +msgid "change message" +msgstr "変更メッセージ" + +msgid "log entry" +msgstr "ログエントリー" + +msgid "log entries" +msgstr "ログエントリー" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "\"%(object)s\" を追加しました。" + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "\"%(object)s\" を変更しました - %(changes)s" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "\"%(object)s\"を削除しました。" + +msgid "LogEntry Object" +msgstr "ログエントリー オブジェクト" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "{name} \"{object}\" を追加しました。" + +msgid "Added." +msgstr "追加されました。" + +msgid "and" +msgstr "と" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "{name} \"{object}\" の {fields} を変更しました。" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "{fields} を変更しました。" + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "{name} \"{object}\" を削除しました。" + +msgid "No fields changed." +msgstr "変更はありませんでした。" + +msgid "None" +msgstr "None" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" +"複数選択するときには Control キーを押したまま選択してください。Mac では " +"Command キーを使ってください" + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "{name} \"{obj}\" を追加しました。" + +msgid "You may edit it again below." +msgstr "以下で再度編集できます。" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "{name} \"{obj}\" を追加しました。 別の {name} を以下から追加できます。" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "{name} \"{obj}\" を変更しました。 以下から再度編集できます。" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "{name} \"{obj}\" を追加しました。続けて編集できます。" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "{name} \"{obj}\" を変更しました。 別の {name} を以下から追加できます。" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "{name} \"{obj}\" を変更しました。" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"操作を実行するには、対象を選択する必要があります。何も変更されませんでした。" + +msgid "No action selected." +msgstr "操作が選択されていません。" + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "%(name)s \"%(obj)s\" を削除しました。" + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" +"ID \"%(key)s\" の%(name)sは見つかりませんでした。削除された可能性があります。" + +#, python-format +msgid "Add %s" +msgstr "%s を追加" + +#, python-format +msgid "Change %s" +msgstr "%s を変更" + +#, python-format +msgid "View %s" +msgstr "%sを表示" + +msgid "Database error" +msgstr "データベースエラー" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s 個の %(name)s を変更しました。" + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s 個選択されました" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "%(cnt)s個の内ひとつも選択されていません" + +#, python-format +msgid "Change history: %s" +msgstr "変更履歴: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"%(class_name)s %(instance)s を削除するには以下の保護された関連オブジェクトを" +"削除することになります: %(related_objects)s" + +msgid "Django site admin" +msgstr "Django サイト管理" + +msgid "Django administration" +msgstr "Django 管理サイト" + +msgid "Site administration" +msgstr "サイト管理" + +msgid "Log in" +msgstr "ログイン" + +#, python-format +msgid "%(app)s administration" +msgstr "%(app)s 管理" + +msgid "Page not found" +msgstr "ページが見つかりません" + +msgid "We're sorry, but the requested page could not be found." +msgstr "申し訳ありませんが、お探しのページは見つかりませんでした。" + +msgid "Home" +msgstr "ホーム" + +msgid "Server error" +msgstr "サーバーエラー" + +msgid "Server error (500)" +msgstr "サーバーエラー (500)" + +msgid "Server Error (500)" +msgstr "サーバーエラー (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"エラーが発生しました。サイト管理者にメールで報告されたので、修正されるまでし" +"ばらくお待ちください。" + +msgid "Run the selected action" +msgstr "選択された操作を実行" + +msgid "Go" +msgstr "実行" + +msgid "Click here to select the objects across all pages" +msgstr "全ページの項目を選択するにはここをクリック" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "%(total_count)s個ある%(module_name)s を全て選択" + +msgid "Clear selection" +msgstr "選択を解除" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"まずユーザー名とパスワードを登録してください。その後詳細情報が編集可能になり" +"ます。" + +msgid "Enter a username and password." +msgstr "ユーザー名とパスワードを入力してください。" + +msgid "Change password" +msgstr "パスワードの変更" + +msgid "Please correct the error below." +msgstr "下記のエラーを修正してください。" + +msgid "Please correct the errors below." +msgstr "下記のエラーを修正してください。" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" +"%(username)sさんの新しいパスワードを入力してください。" + +msgid "Welcome," +msgstr "ようこそ" + +msgid "View site" +msgstr "サイトを表示" + +msgid "Documentation" +msgstr "ドキュメント" + +msgid "Log out" +msgstr "ログアウト" + +#, python-format +msgid "Add %(name)s" +msgstr "%(name)s を追加" + +msgid "History" +msgstr "履歴" + +msgid "View on site" +msgstr "サイト上で表示" + +msgid "Filter" +msgstr "フィルター" + +msgid "Remove from sorting" +msgstr "ソート条件から外します" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "ソート優先順位: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "昇順降順を切り替えます" + +msgid "Delete" +msgstr "削除" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"%(object_name)s '%(escaped_object)s' の削除時に関連づけられたオブジェクトも削" +"除しようとしましたが、あなたのアカウントには以下のタイプのオブジェクトを削除" +"するパーミッションがありません:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"%(object_name)s '%(escaped_object)s' を削除するには以下の保護された関連オブ" +"ジェクトを削除することになります:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"%(object_name)s \"%(escaped_object)s\"を削除しますか? 関連づけられている以下" +"のオブジェクトも全て削除されます:" + +msgid "Objects" +msgstr "オブジェクト" + +msgid "Yes, I'm sure" +msgstr "はい" + +msgid "No, take me back" +msgstr "戻る" + +msgid "Delete multiple objects" +msgstr "複数のオブジェクトを削除します" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"選択した %(objects_name)s を削除すると関連するオブジェクトも削除しますが、あ" +"なたのアカウントは以下のオブジェクト型を削除する権限がありません:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"選択した %(objects_name)s を削除すると以下の保護された関連オブジェクトを削除" +"することになります:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"本当に選択した %(objects_name)s を削除しますか? 以下の全てのオブジェクトと関" +"連する要素が削除されます:" + +msgid "View" +msgstr "表示" + +msgid "Delete?" +msgstr "削除しますか?" + +#, python-format +msgid " By %(filter_title)s " +msgstr "%(filter_title)s で絞り込む" + +msgid "Summary" +msgstr "概要" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "%(name)s アプリケーション内のモデル" + +msgid "Add" +msgstr "追加" + +msgid "You don't have permission to view or edit anything." +msgstr "表示または変更のためのパーミッションがありません。" + +msgid "Recent actions" +msgstr "最近行った操作" + +msgid "My actions" +msgstr "自分の操作" + +msgid "None available" +msgstr "利用不可" + +msgid "Unknown content" +msgstr "不明なコンテント" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"データベースの設定に問題があるようです。適切なテーブルが作られていること、適" +"切なユーザーでデータベースのデータを読み込めることを確認してください。" + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"あなたは %(username)s として認証されましたが、このページへのアクセス許可があ" +"りません。他のアカウントでログインしますか?" + +msgid "Forgotten your password or username?" +msgstr "パスワードまたはユーザー名を忘れましたか?" + +msgid "Date/time" +msgstr "日付/時刻" + +msgid "User" +msgstr "ユーザー" + +msgid "Action" +msgstr "操作" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"このオブジェクトには変更履歴がありません。おそらくこの管理サイトで追加したも" +"のではありません。" + +msgid "Show all" +msgstr "全件表示" + +msgid "Save" +msgstr "保存" + +msgid "Popup closing…" +msgstr "ポップアップを閉じています..." + +msgid "Search" +msgstr "検索" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "結果 %(counter)s" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "全 %(full_result_count)s 件" + +msgid "Save as new" +msgstr "新規保存" + +msgid "Save and add another" +msgstr "保存してもう一つ追加" + +msgid "Save and continue editing" +msgstr "保存して編集を続ける" + +msgid "Save and view" +msgstr "保存して表示" + +msgid "Close" +msgstr "閉じる" + +#, python-format +msgid "Change selected %(model)s" +msgstr "選択された %(model)s の変更" + +#, python-format +msgid "Add another %(model)s" +msgstr "%(model)s の追加" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "選択された %(model)s を削除" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "ご利用ありがとうございました。" + +msgid "Log in again" +msgstr "もう一度ログイン" + +msgid "Password change" +msgstr "パスワードの変更" + +msgid "Your password was changed." +msgstr "あなたのパスワードは変更されました" + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"セキュリティ上の理由から元のパスワードの入力が必要です。新しいパスワードは正" +"しく入力したか確認できるように二度入力してください。" + +msgid "Change my password" +msgstr "パスワードの変更" + +msgid "Password reset" +msgstr "パスワードをリセット" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "パスワードがセットされました。ログインしてください。" + +msgid "Password reset confirmation" +msgstr "パスワードリセットの確認" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "確認のために、新しいパスワードを二回入力してください。" + +msgid "New password:" +msgstr "新しいパスワード:" + +msgid "Confirm password:" +msgstr "新しいパスワード (確認用) :" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"パスワードリセットのリンクが不正です。おそらくこのリンクは既に使われていま" +"す。もう一度パスワードリセットしてください。" + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"入力されたメールアドレスを持つアカウントが存在する場合、パスワードを設定する" +"ためのメールを送信しました。すぐに受け取る必要があります。" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" +"メールが届かない場合は、登録したメールアドレスを入力したか確認し、スパムフォ" +"ルダに入っていないか確認してください。" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"このメールは %(site_name)s で、あなたのアカウントのパスワードリセットが要求さ" +"れたため、送信されました。" + +msgid "Please go to the following page and choose a new password:" +msgstr "次のページで新しいパスワードを選んでください:" + +msgid "Your username, in case you've forgotten:" +msgstr "あなたのユーザー名 (念のため):" + +msgid "Thanks for using our site!" +msgstr "ご利用ありがとうございました!" + +#, python-format +msgid "The %(site_name)s team" +msgstr " %(site_name)s チーム" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" +"パスワードを忘れましたか? メールアドレスを以下に入力すると、新しいパスワード" +"の設定方法をお知らせします。" + +msgid "Email address:" +msgstr "メールアドレス:" + +msgid "Reset my password" +msgstr "パスワードをリセット" + +msgid "All dates" +msgstr "いつでも" + +#, python-format +msgid "Select %s" +msgstr "%s を選択" + +#, python-format +msgid "Select %s to change" +msgstr "変更する %s を選択" + +#, python-format +msgid "Select %s to view" +msgstr "表示する%sを選択" + +msgid "Date:" +msgstr "日付:" + +msgid "Time:" +msgstr "時刻:" + +msgid "Lookup" +msgstr "検索" + +msgid "Currently:" +msgstr "現在の値:" + +msgid "Change:" +msgstr "変更後:" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/ka/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/ka/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ed45180dd7220974c01d2e46054156db6a4cb804 GIT binary patch literal 20101 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/ka/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/ka/LC_MESSAGES/django.po new file mode 100644 index 0000000..75aee9c --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/ka/LC_MESSAGES/django.po @@ -0,0 +1,699 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# André Bouatchidzé , 2013-2015 +# David A. , 2011 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-01-18 00:36+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Georgian (http://www.transifex.com/django/django/language/" +"ka/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ka\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(count)d %(items)s წარმატებით წაიშალა." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "%(name)s ვერ იშლება" + +msgid "Are you sure?" +msgstr "დარწმუნებული ხართ?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "არჩეული %(verbose_name_plural)s-ის წაშლა" + +msgid "Administration" +msgstr "ადმინისტრირება" + +msgid "All" +msgstr "ყველა" + +msgid "Yes" +msgstr "კი" + +msgid "No" +msgstr "არა" + +msgid "Unknown" +msgstr "გაურკვეველი" + +msgid "Any date" +msgstr "ნებისმიერი თარიღი" + +msgid "Today" +msgstr "დღეს" + +msgid "Past 7 days" +msgstr "ბოლო 7 დღე" + +msgid "This month" +msgstr "მიმდინარე თვე" + +msgid "This year" +msgstr "მიმდინარე წელი" + +msgid "No date" +msgstr "" + +msgid "Has date" +msgstr "" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"გთხოვთ, შეიყვანოთ სწორი %(username)s და პაროლი პერსონალის ანგარიშისთვის. " +"იქონიეთ მხედველობაში, რომ ორივე ველი ითვალისწინებს მთავრულს." + +msgid "Action:" +msgstr "მოქმედება:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "კიდევ ერთი %(verbose_name)s-ის დამატება" + +msgid "Remove" +msgstr "წაშლა" + +msgid "Addition" +msgstr "" + +msgid "Change" +msgstr "შეცვლა" + +msgid "Deletion" +msgstr "" + +msgid "action time" +msgstr "მოქმედების დრო" + +msgid "user" +msgstr "" + +msgid "content type" +msgstr "" + +msgid "object id" +msgstr "ობიექტის id" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "ობიექტის წარმ." + +msgid "action flag" +msgstr "მოქმედების დროშა" + +msgid "change message" +msgstr "შეცვლის შეტყობინება" + +msgid "log entry" +msgstr "ლოგის ერთეული" + +msgid "log entries" +msgstr "ლოგის ერთეულები" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "დამატებულია \"%(object)s\"." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "შეცვლილია \"%(object)s\" - %(changes)s" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "წაშლილია \"%(object)s.\"" + +msgid "LogEntry Object" +msgstr "ჟურნალის ჩანაწერის ობიექტი" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "" + +msgid "Added." +msgstr "" + +msgid "and" +msgstr "და" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "" + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "" + +msgid "No fields changed." +msgstr "არცერთი ველი არ შეცვლილა." + +msgid "None" +msgstr "არცერთი" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "" + +msgid "You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"ობიექტებზე მოქმედებების შესასრულებლად ისინი არჩეული უნდა იყოს. არცერთი " +"ობიექტი არჩეული არ არის." + +msgid "No action selected." +msgstr "მოქმედება არჩეული არ არის." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "%(name)s \"%(obj)s\" წარმატებით წაიშალა." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "დავამატოთ %s" + +#, python-format +msgid "Change %s" +msgstr "შევცვალოთ %s" + +#, python-format +msgid "View %s" +msgstr "" + +msgid "Database error" +msgstr "მონაცემთა ბაზის შეცდომა" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s წარმატებით შეიცვალა." +msgstr[1] "%(count)s %(name)s წარმატებით შეიცვალა." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s-ია არჩეული" +msgstr[1] "%(total_count)s-ია არჩეული" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "%(cnt)s-დან არცერთი არჩეული არ არის" + +#, python-format +msgid "Change history: %s" +msgstr "ცვლილებების ისტორია: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" + +msgid "Django site admin" +msgstr "Django-ს ადმინისტრირების საიტი" + +msgid "Django administration" +msgstr "Django-ს ადმინისტრირება" + +msgid "Site administration" +msgstr "საიტის ადმინისტრირება" + +msgid "Log in" +msgstr "შესვლა" + +#, python-format +msgid "%(app)s administration" +msgstr "%(app)s ადმინისტრირება" + +msgid "Page not found" +msgstr "გვერდი ვერ მოიძებნა" + +msgid "We're sorry, but the requested page could not be found." +msgstr "უკაცრავად, მოთხოვნილი გვერდი ვერ მოიძებნა." + +msgid "Home" +msgstr "საწყისი გვერდი" + +msgid "Server error" +msgstr "სერვერის შეცდომა" + +msgid "Server error (500)" +msgstr "სერვერის შეცდომა (500)" + +msgid "Server Error (500)" +msgstr "სერვერის შეცდომა (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"მოხდა შეცდომა. ინფორმაცია მასზე გადაეცა საიტის ადმინისტრატორებს ელ. ფოსტით " +"და ის უნდა შესწორდეს უმოკლეს ვადებში. გმადლობთ მოთმინებისთვის." + +msgid "Run the selected action" +msgstr "არჩეული მოქმედების შესრულება" + +msgid "Go" +msgstr "გადასვლა" + +msgid "Click here to select the objects across all pages" +msgstr "ყველა გვერდზე არსებული ობიექტის მოსანიშნად დააწკაპეთ აქ" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "ყველა %(total_count)s %(module_name)s-ის მონიშვნა" + +msgid "Clear selection" +msgstr "მონიშვნის გასუფთავება" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"ჯერ შეიყვანეთ მომხმარებლის სახელი და პაროლი. ამის შემდეგ თქვენ გექნებათ " +"მომხმარებლის სხვა ოპციების რედაქტირების შესაძლებლობა." + +msgid "Enter a username and password." +msgstr "შეიყვანეთ მომხმარებლის სახელი და პაროლი" + +msgid "Change password" +msgstr "პაროლის შეცვლა" + +msgid "Please correct the error below." +msgstr "" + +msgid "Please correct the errors below." +msgstr "გთხოვთ, შეასწოროთ ქვემოთმოყვანილი შეცდომები." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" +"შეიყვანეთ ახალი პაროლი მომხმარებლისათვის %(username)s." + +msgid "Welcome," +msgstr "კეთილი იყოს თქვენი მობრძანება," + +msgid "View site" +msgstr "საიტის ნახვა" + +msgid "Documentation" +msgstr "დოკუმენტაცია" + +msgid "Log out" +msgstr "გამოსვლა" + +#, python-format +msgid "Add %(name)s" +msgstr "დავამატოთ %(name)s" + +msgid "History" +msgstr "ისტორია" + +msgid "View on site" +msgstr "წარმოდგენა საიტზე" + +msgid "Filter" +msgstr "ფილტრი" + +msgid "Remove from sorting" +msgstr "დალაგებიდან მოშორება" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "დალაგების პრიორიტეტი: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "დალაგების გადართვა" + +msgid "Delete" +msgstr "წავშალოთ" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"ობიექტების წაშლა: %(object_name)s '%(escaped_object)s' გამოიწვევს " +"დაკავშირებული ობიექტების წაშლას, მაგრამ თქვენ არა გაქვთ შემდეგი ტიპების " +"ობიექტების წაშლის უფლება:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"%(object_name)s ტიპის '%(escaped_object)s' ობიექტის წაშლა მოითხოვს ასევე " +"შემდეგი დაკავშირებული ობიექტების წაშლას:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"ნამდვილად გსურთ, წაშალოთ %(object_name)s \"%(escaped_object)s\"? ყველა " +"ქვემოთ მოყვანილი დაკავშირებული ობიექტი წაშლილი იქნება:" + +msgid "Objects" +msgstr "ობიექტები" + +msgid "Yes, I'm sure" +msgstr "კი, ნამდვილად" + +msgid "No, take me back" +msgstr "არა, დამაბრუნეთ უკან" + +msgid "Delete multiple objects" +msgstr "რამდენიმე ობიექტის წაშლა" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"%(objects_name)s ტიპის ობიექტის წაშლა ითხოვს ასევე შემდეგი ობიექტების " +"წაშლას, მაგრამ თქვენ არ გაქვთ ამის ნებართვა:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"არჩეული %(objects_name)s ობიექტის წაშლა მოითხოვს ასევე შემდეგი დაცული " +"დაკავშირეული ობიექტების წაშლას:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"დარწმუნებული ხართ, რომ გსურთ %(objects_name)s ობიექტის წაშლა? ყველა შემდეგი " +"ობიექტი, და მათზე დამოკიდებული ჩანაწერები წაშლილი იქნება:" + +msgid "View" +msgstr "" + +msgid "Delete?" +msgstr "წავშალოთ?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " %(filter_title)s მიხედვით " + +msgid "Summary" +msgstr "შეჯამება" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "მოდელები %(name)s აპლიკაციაში" + +msgid "Add" +msgstr "დამატება" + +msgid "You don't have permission to view or edit anything." +msgstr "" + +msgid "Recent actions" +msgstr "" + +msgid "My actions" +msgstr "" + +msgid "None available" +msgstr "არ არის მისაწვდომი" + +msgid "Unknown content" +msgstr "უცნობი შიგთავსი" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"თქვენი მონაცემთა ბაზის ინსტალაცია არაკორექტულია. დარწმუნდით, რომ მონაცემთა " +"ბაზის შესაბამისი ცხრილები შექმნილია, და მონაცემთა ბაზის წაკითხვა შეუძლია " +"შესაბამის მომხმარებელს." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "დაგავიწყდათ თქვენი პაროლი ან მომხმარებლის სახელი?" + +msgid "Date/time" +msgstr "თარიღი/დრო" + +msgid "User" +msgstr "მომხმარებელი" + +msgid "Action" +msgstr "მოქმედება" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"ამ ობიექტს ცვლილებების ისტორია არა აქვს. როგორც ჩანს, იგი არ იყო დამატებული " +"ადმინისტრირების საიტის მეშვეობით." + +msgid "Show all" +msgstr "ვაჩვენოთ ყველა" + +msgid "Save" +msgstr "შევინახოთ" + +msgid "Popup closing…" +msgstr "" + +msgid "Search" +msgstr "ძებნა" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s შედეგი" +msgstr[1] "%(counter)s შედეგი" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "სულ %(full_result_count)s" + +msgid "Save as new" +msgstr "შევინახოთ, როგორც ახალი" + +msgid "Save and add another" +msgstr "შევინახოთ და დავამატოთ ახალი" + +msgid "Save and continue editing" +msgstr "შევინახოთ და გავაგრძელოთ რედაქტირება" + +msgid "Save and view" +msgstr "" + +msgid "Close" +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "მონიშნული %(model)s-ის შეცვლა" + +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "მონიშნული %(model)s-ის წაშლა" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "გმადლობთ, რომ დღეს ამ საიტთან მუშაობას დაუთმეთ დრო." + +msgid "Log in again" +msgstr "ხელახლა შესვლა" + +msgid "Password change" +msgstr "პაროლის შეცვლა" + +msgid "Your password was changed." +msgstr "თქვენი პაროლი შეიცვალა." + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"გთხოვთ, უსაფრთხოების დაცვის მიზნით, შეიყვანოთ თქვენი ძველი პაროლი, შემდეგ კი " +"ახალი პაროლი ორჯერ, რათა დარწმუნდეთ, რომ იგი შეყვანილია სწორად." + +msgid "Change my password" +msgstr "შევცვალოთ ჩემი პაროლი" + +msgid "Password reset" +msgstr "პაროლის აღდგენა" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "" +"თქვენი პაროლი დაყენებულია. ახლა შეგიძლიათ გადახვიდეთ შემდეგ გვერდზე და " +"შეხვიდეთ სისტემაში." + +msgid "Password reset confirmation" +msgstr "პაროლი შეცვლის დამოწმება" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"გთხოვთ, შეიყვანეთ თქვენი ახალი პაროლი ორჯერ, რათა დავრწმუნდეთ, რომ იგი " +"სწორად ჩაბეჭდეთ." + +msgid "New password:" +msgstr "ახალი პაროლი:" + +msgid "Confirm password:" +msgstr "პაროლის დამოწმება:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"პაროლის აღდგენის ბმული არასწორი იყო, შესაძლოა იმის გამო, რომ იგი უკვე ყოფილა " +"გამოყენებული. გთხოვთ, კიდევ ერთხელ სცადოთ პაროლის აღდგენა." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"თქვენ მიიღეთ ეს წერილი იმიტომ, რომ გააკეთეთ პაროლის თავიდან დაყენების " +"მოთხოვნა თქვენი მომხმარებლის ანგარიშისთვის %(site_name)s-ზე." + +msgid "Please go to the following page and choose a new password:" +msgstr "გთხოვთ, გადახვიდეთ შემდეგ გვერდზე და აირჩიოთ ახალი პაროლი:" + +msgid "Your username, in case you've forgotten:" +msgstr "თქვენი მომხმარებლის სახელი (თუ დაგავიწყდათ):" + +msgid "Thanks for using our site!" +msgstr "გმადლობთ, რომ იყენებთ ჩვენს საიტს!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s საიტის გუნდი" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" +"დაგავიწყდათ თქვენი პაროლი? შეიყვანეთ თქვენი ელ. ფოსტის მისამართი ქვემოთ და " +"ჩვენ გამოგიგზავნით მითითებებს ახალი პაროლის დასაყენებლად." + +msgid "Email address:" +msgstr "ელ. ფოსტის მისამართი:" + +msgid "Reset my password" +msgstr "აღვადგინოთ ჩემი პაროლი" + +msgid "All dates" +msgstr "ყველა თარიღი" + +#, python-format +msgid "Select %s" +msgstr "ავირჩიოთ %s" + +#, python-format +msgid "Select %s to change" +msgstr "აირჩიეთ %s შესაცვლელად" + +#, python-format +msgid "Select %s to view" +msgstr "" + +msgid "Date:" +msgstr "თარიღი;" + +msgid "Time:" +msgstr "დრო:" + +msgid "Lookup" +msgstr "ძიება" + +msgid "Currently:" +msgstr "ამჟამად:" + +msgid "Change:" +msgstr "შეცვლა:" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/ka/LC_MESSAGES/djangojs.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/ka/LC_MESSAGES/djangojs.po new file mode 100644 index 0000000..65ee60f --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/ka/LC_MESSAGES/djangojs.po @@ -0,0 +1,218 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# André Bouatchidzé , 2013,2015 +# David A. , 2011 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:50+0200\n" +"PO-Revision-Date: 2017-09-19 16:41+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Georgian (http://www.transifex.com/django/django/language/" +"ka/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ka\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "მისაწვდომი %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"ეს არის მისაწვდომი %s-ის სია. ზოგიერთი მათგანის ასარჩევად, მონიშვნით ისინი " +"ქვედა სარკმელში და დააწკაპუნეთ ორ სარკმელს შორის მდებარე ისარზე \"არჩევა\" ." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "აკრიფეთ ამ სარკმელში მისაწვდომი %s-ის სიის გასაფილტრად." + +msgid "Filter" +msgstr "ფილტრი" + +msgid "Choose all" +msgstr "ავირჩიოთ ყველა" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "დააწკაპუნეთ ერთდროულად ყველა %s-ის ასარჩევად." + +msgid "Choose" +msgstr "არჩევა" + +msgid "Remove" +msgstr "წავშალოთ" + +#, javascript-format +msgid "Chosen %s" +msgstr "არჩეული %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"ეს არის არჩეული %s-ის სია. ზოგიერთი მათგანის მოსაშორებლად, მონიშვნით ისინი " +"ქვედა სარკმელში და დააწკაპუნეთ ორ სარკმელს შორის მდებარე ისარზე \"მოშორება" +"\" ." + +msgid "Remove all" +msgstr "ყველას მოშორება" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "დააწკაპუნეთ ყველა არჩეული %s-ის ერთდროულად მოსაშორებლად." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(cnt)s-დან არჩეულია %(sel)s" +msgstr[1] "%(cnt)s-დან არჩეულია %(sel)s" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"ცალკეულ ველებში შეუნახავი ცვლილებები გაქვთ! თუ მოქმედებას შეასრულებთ, " +"შეუნახავი ცვლილებები დაიკარაგება." + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"აგირჩევიათ მოქმედება, მაგრამ ცალკეული ველები ჯერ არ შეგინახიათ! გთხოვთ, " +"შენახვისთვის დააჭიროთ OK. მოქმედების ხელახლა გაშვება მოგიწევთ." + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"აგირჩევიათ მოქმედება, მაგრამ ცალკეულ ველებში ცვლილებები არ გაგიკეთებიათ! " +"სავარაუდოდ, ეძებთ ღილაკს \"Go\", და არა \"შენახვა\"" + +msgid "Now" +msgstr "ახლა" + +msgid "Midnight" +msgstr "შუაღამე" + +msgid "6 a.m." +msgstr "დილის 6 სთ" + +msgid "Noon" +msgstr "შუადღე" + +msgid "6 p.m." +msgstr "" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "შენიშვნა: თქვენ ხართ %s საათით წინ სერვერის დროზე." +msgstr[1] "შენიშვნა: თქვენ ხართ %s საათით წინ სერვერის დროზე." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "შენიშვნა: თქვენ ხართ %s საათით უკან სერვერის დროზე." +msgstr[1] "შენიშვნა: თქვენ ხართ %s საათით უკან სერვერის დროზე." + +msgid "Choose a Time" +msgstr "" + +msgid "Choose a time" +msgstr "ავირჩიოთ დრო" + +msgid "Cancel" +msgstr "უარი" + +msgid "Today" +msgstr "დღეს" + +msgid "Choose a Date" +msgstr "" + +msgid "Yesterday" +msgstr "გუშინ" + +msgid "Tomorrow" +msgstr "ხვალ" + +msgid "January" +msgstr "" + +msgid "February" +msgstr "" + +msgid "March" +msgstr "" + +msgid "April" +msgstr "" + +msgid "May" +msgstr "" + +msgid "June" +msgstr "" + +msgid "July" +msgstr "" + +msgid "August" +msgstr "" + +msgid "September" +msgstr "" + +msgid "October" +msgstr "" + +msgid "November" +msgstr "" + +msgid "December" +msgstr "" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "" + +msgctxt "one letter Monday" +msgid "M" +msgstr "" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "" + +msgctxt "one letter Friday" +msgid "F" +msgstr "" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "" + +msgid "Show" +msgstr "ვაჩვენოთ" + +msgid "Hide" +msgstr "დავმალოთ" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/kab/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/kab/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d095721bce64c57a116dd52df7d9fdece6a7aadf GIT binary patch literal 3531 zcmZvdTWlRi8Gt8Hpf!|UD80}ElQyLZ@!CG7jgw7W=OlJ6Bu*^*xFHfknsau%XLELE zoxSArSjr29C#ZyIxIDC|C0ryV9?}=uA_S-sYCwoSAdo<+8Uzm@RUkk@h!?(pcb%Au z)&BF%^`HMTJNw3+H+@C%97P^LI`2@*z%SlJ!E^h&mEu)*P`n4;3*QNK)4!wPZuoxs zr@7h-wqUidQCfr_tX9?d@uY4l>NR3#m_5H^t{@Pzt)WZ8j8Qahwp=bf@1&Q;RoP< zAg{WOPO3@ObK8{qD-?g9#z?W_5)}Q2#GQJAs`}hpxRi{Me7kBQcO?8WDRW21k*PAhLfOk?&&{BKB=QAEqLCkXXv&)lhrk z93pp~?7t5YdnHzz&n%S#n++)OK8!rFrEh_{#Nh}sj~qlkfk+NNhCGh!K;&E7iEMp* z8skmJhqew-e+ZHLLmr9y!&ObGN8xTn&QJ^4gUGqj2q9GWBJxO%`wToLklI6;bLM_^KTQBKqN6V1o&eL@vsU%+wR(SheF=2d1#haiglH+L_g( zwA6W-**SH%Z(L{_=yj9l!!!$;wyzGSZY|1^>jU(ZS!P`kk9;+63ez>Y)i%r0OqzDG zh!R`X7`Cx3XjGU}^J%Y4SXmplkeDdeCI~W{=e{};#f8n((NrBXd2Q!0JV~>WI+mjG zWE$$oRY=PMrh{@_EsnIQf|9FKcDTjJQ>i+Y)@n|r&Z^VhbGBFHYRQCFyR^`2Y3Tx* zwY$1kN8x%Kqik_wxN7QN9gEt2rWSgJEk?Oown=)y0v73HblncMV(6AaQwPH=y z>w_3`By%e^yI`{>fGhoUs0~?Li3*ndZ#GxTBr$}e(~okUq^{`K)e$OHhp79ilVXlq zbpw|Uom$Na=o1lfNuAEoSU0NL8T$yQAWySwG_Jd4p^LuNnLS_Hys!Zd5T;&Q#z7UV zuC3!Wq0ZR2M>@vUSx!_Pdc78#aI;=z-w;`1Rgi04jMlA+Ngj2$|CoY^WLo*X`3 zPfxXGys4Jg+NWE4{73igo@z}^G0|JL7b4NQbzW=Ao7$sWE&nm*@r<1$r(P#BE{_dI z&)19PwU@qaU7!!y_&f(a(FeLV9+;j@W@ZkCa)c*{$K$MYVM)-ujx~v|Pnhl~wt8p3 zDAxVS$>DG~!AI%xXw5z;3npvFHW4?gCkLiGxod3k_~OEi7_=s)#`p>)nqG%!`ns@B z7L)6-iQIlUxEZHzcC~ZF+k0c4Y_?`IZ^8A_AabFv_jaS=x|zOar?I8D%uMVZNwXyP zwOg;6`Rw$5T~}v!I=y{Xw|4Cx&7!1|% z4V!FOrxPv*qs|&WcIi% zt}J}D+Aq~=Y8b_w!2k$@Nig#rgpu}GG{m5 z-iu8VBd5#%J3b$ASD~oPbK|&3Z5R^5DlmN0l|tDAFLb@liXFs!tu=IT!m5?dwIHm4%oDET4D&YlS)@iz>)fa}Jf49KXo_(5T& z1SHArc~N=B#E}kcs7p~|D>bb+L4pHN@bN* Jqp+oN;J?tM4u=2$ literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/kab/LC_MESSAGES/djangojs.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/kab/LC_MESSAGES/djangojs.po new file mode 100644 index 0000000..57f70c9 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/kab/LC_MESSAGES/djangojs.po @@ -0,0 +1,204 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-17 23:12+0200\n" +"PO-Revision-Date: 2017-10-06 08:10+0000\n" +"Last-Translator: Muḥend Belqasem \n" +"Language-Team: Kabyle (http://www.transifex.com/django/django/language/" +"kab/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kab\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Yella %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "" + +msgid "Filter" +msgstr "Tastayt" + +msgid "Choose all" +msgstr "Fren akk" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "" + +msgid "Choose" +msgstr "Fren" + +msgid "Remove" +msgstr "kkes" + +#, javascript-format +msgid "Chosen %s" +msgstr "Ifren %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" + +msgid "Remove all" +msgstr "Kkes akk" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "" + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s si %(cnt)s yettwafren" +msgstr[1] "%(sel)s si %(cnt)s ttwafernen" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "" +msgstr[1] "" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" +msgstr[1] "" + +msgid "Now" +msgstr "Tura" + +msgid "Choose a Time" +msgstr "Fren akud:" + +msgid "Choose a time" +msgstr "Fren akud" + +msgid "Midnight" +msgstr "Ttnaṣfa n yiḍ" + +msgid "6 a.m." +msgstr "6 f.t." + +msgid "Noon" +msgstr "Ttnaṣfa n uzal" + +msgid "6 p.m." +msgstr "6 m.d." + +msgid "Cancel" +msgstr "Sefsex" + +msgid "Today" +msgstr "Ass-a" + +msgid "Choose a Date" +msgstr "Fren azemz" + +msgid "Yesterday" +msgstr "Iḍelli" + +msgid "Tomorrow" +msgstr "Azekka" + +msgid "January" +msgstr "Yennayer" + +msgid "February" +msgstr "Fuṛaṛ" + +msgid "March" +msgstr "Meɣres" + +msgid "April" +msgstr "Yebrir" + +msgid "May" +msgstr "Mayyu" + +msgid "June" +msgstr "Yunyu" + +msgid "July" +msgstr "Yulyu" + +msgid "August" +msgstr "Ɣuct" + +msgid "September" +msgstr "Ctamber" + +msgid "October" +msgstr "Tuber" + +msgid "November" +msgstr "Wamber" + +msgid "December" +msgstr "Dujamber" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "" + +msgctxt "one letter Monday" +msgid "M" +msgstr "" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "" + +msgctxt "one letter Friday" +msgid "F" +msgstr "" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "" + +msgid "Show" +msgstr "Sken" + +msgid "Hide" +msgstr "Ffer" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/kk/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/kk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..abc3c54e8bdd09b2e719ac9fdfd72cfa633f6a5a GIT binary patch literal 12845 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/km/LC_MESSAGES/djangojs.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/km/LC_MESSAGES/djangojs.po new file mode 100644 index 0000000..fbe0ae1 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/km/LC_MESSAGES/djangojs.po @@ -0,0 +1,201 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-17 23:12+0200\n" +"PO-Revision-Date: 2017-09-19 16:41+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Khmer (http://www.transifex.com/django/django/language/km/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: km\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, javascript-format +msgid "Available %s" +msgstr "%s ដែលអាច​ជ្រើសរើសបាន" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "" + +msgid "Filter" +msgstr "ស្វែងរកជាមួយ" + +msgid "Choose all" +msgstr "ជ្រើសរើសទាំងអស់" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "" + +msgid "Choose" +msgstr "" + +msgid "Remove" +msgstr "លប់ចេញ" + +#, javascript-format +msgid "Chosen %s" +msgstr "%s ដែលបានជ្រើសរើស" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" + +msgid "Remove all" +msgstr "" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "" + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" + +msgid "Now" +msgstr "ឥឡូវនេះ" + +msgid "Choose a Time" +msgstr "" + +msgid "Choose a time" +msgstr "ជ្រើសរើសម៉ោង" + +msgid "Midnight" +msgstr "អធ្រាត្រ" + +msgid "6 a.m." +msgstr "ម៉ោង ៦ ព្រឹក" + +msgid "Noon" +msgstr "ពេលថ្ងែត្រង់" + +msgid "6 p.m." +msgstr "" + +msgid "Cancel" +msgstr "លប់ចោល" + +msgid "Today" +msgstr "ថ្ងៃនេះ" + +msgid "Choose a Date" +msgstr "" + +msgid "Yesterday" +msgstr "ម្សិលមិញ" + +msgid "Tomorrow" +msgstr "ថ្ងៃស្អែក" + +msgid "January" +msgstr "" + +msgid "February" +msgstr "" + +msgid "March" +msgstr "" + +msgid "April" +msgstr "" + +msgid "May" +msgstr "" + +msgid "June" +msgstr "" + +msgid "July" +msgstr "" + +msgid "August" +msgstr "" + +msgid "September" +msgstr "" + +msgid "October" +msgstr "" + +msgid "November" +msgstr "" + +msgid "December" +msgstr "" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "" + +msgctxt "one letter Monday" +msgid "M" +msgstr "" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "" + +msgctxt "one letter Friday" +msgid "F" +msgstr "" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "" + +msgid "Show" +msgstr "" + +msgid "Hide" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/lt/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/lt/LC_MESSAGES/django.po new file mode 100644 index 0000000..0c93418 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/lt/LC_MESSAGES/django.po @@ -0,0 +1,720 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# lauris , 2011 +# Matas Dailyda , 2015-2019 +# Nikolajus Krauklis , 2013 +# Simonas Kazlauskas , 2012-2013 +# sirex , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-01-18 10:32+0000\n" +"Last-Translator: Matas Dailyda \n" +"Language-Team: Lithuanian (http://www.transifex.com/django/django/language/" +"lt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lt\n" +"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < " +"11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? " +"1 : n % 1 != 0 ? 2: 3);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Sėkmingai ištrinta %(count)d %(items)s." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Ištrinti %(name)s negalima" + +msgid "Are you sure?" +msgstr "Ar esate tikras?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Ištrinti pasirinktus %(verbose_name_plural)s " + +msgid "Administration" +msgstr "Administravimas" + +msgid "All" +msgstr "Visi" + +msgid "Yes" +msgstr "Taip" + +msgid "No" +msgstr "Ne" + +msgid "Unknown" +msgstr "Nežinomas" + +msgid "Any date" +msgstr "Betkokia data" + +msgid "Today" +msgstr "Šiandien" + +msgid "Past 7 days" +msgstr "Paskutinės 7 dienos" + +msgid "This month" +msgstr "Šį mėnesį" + +msgid "This year" +msgstr "Šiais metais" + +msgid "No date" +msgstr "Nėra datos" + +msgid "Has date" +msgstr "Turi datą" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Prašome įvesti tinkamą personalo paskyros %(username)s ir slaptažodį. " +"Atminkite, kad abu laukeliai yra jautrūs raidžių dydžiui." + +msgid "Action:" +msgstr "Veiksmas:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Pridėti dar viena %(verbose_name)s" + +msgid "Remove" +msgstr "Pašalinti" + +msgid "Addition" +msgstr "Pridėjimas" + +msgid "Change" +msgstr "Pakeisti" + +msgid "Deletion" +msgstr "Pašalinimas" + +msgid "action time" +msgstr "veiksmo laikas" + +msgid "user" +msgstr "vartotojas" + +msgid "content type" +msgstr "turinio tipas" + +msgid "object id" +msgstr "objekto id" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "objekto repr" + +msgid "action flag" +msgstr "veiksmo žymė" + +msgid "change message" +msgstr "pakeisti žinutę" + +msgid "log entry" +msgstr "log įrašas" + +msgid "log entries" +msgstr "log įrašai" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "„%(object)s“ pridėti." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "Pakeisti „%(object)s“ - %(changes)s" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "„%(object)s“ ištrinti." + +msgid "LogEntry Object" +msgstr "LogEntry objektas" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "Pridėtas {name} \"{object}\"." + +msgid "Added." +msgstr "Pridėta." + +msgid "and" +msgstr "ir" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "Pakeisti {fields} arba {name} \"{object}\"." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Pakeisti {fields}." + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "Pašalintas {name} \"{object}\"." + +msgid "No fields changed." +msgstr "Nei vienas laukas nepakeistas" + +msgid "None" +msgstr "None" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" +"Nuspauskite \"Control\", arba \"Command\" Mac kompiuteriuose, kad pasirinkti " +"daugiau nei vieną." + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "{name} \"{obj}\" buvo sėkmingai pridėtas." + +msgid "You may edit it again below." +msgstr "Galite tai dar kartą redaguoti žemiau." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" +"{name} \"{obj}\" buvo sėkmingai pridėtas. Galite pridėti kitą {name} žemiau." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "{name} \"{obj}\" buvo sėkmingai pakeistas. Galite jį koreguoti žemiau." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" +"{name} \"{obj}\" buvo sėkmingai pridėtas. Galite jį vėl redaguoti žemiau." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" +"{name} \"{obj}\" buvo sėkmingai pakeistas. Galite pridėti kitą {name} žemiau." + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "{name} \"{obj}\" buvo sėkmingai pakeistas." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Įrašai turi būti pasirinkti, kad būtų galima atlikti veiksmus. Įrašai " +"pakeisti nebuvo." + +msgid "No action selected." +msgstr "Veiksmai atlikti nebuvo." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "%(name)s \"%(obj)s\" sėkmingai ištrintas." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "%(name)s su ID \"%(key)s\" neegzistuoja. Gal tai buvo ištrinta?" + +#, python-format +msgid "Add %s" +msgstr "Pridėti %s" + +#, python-format +msgid "Change %s" +msgstr "Pakeisti %s" + +#, python-format +msgid "View %s" +msgstr "Peržiūrėti %s" + +msgid "Database error" +msgstr "Duomenų bazės klaida" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s sėkmingai pakeistas." +msgstr[1] "%(count)s %(name)s sėkmingai pakeisti." +msgstr[2] "%(count)s %(name)s " +msgstr[3] "%(count)s %(name)s " + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s pasirinktas" +msgstr[1] "%(total_count)s pasirinkti" +msgstr[2] "Visi %(total_count)s pasirinkti" +msgstr[3] "Visi %(total_count)s pasirinkti" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 iš %(cnt)s pasirinkta" + +#, python-format +msgid "Change history: %s" +msgstr "Pakeitimų istorija: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"%(class_name)s %(instance)s šalinimas reikalautų pašalinti apsaugotus " +"susijusius objektus: %(related_objects)s" + +msgid "Django site admin" +msgstr "Django tinklalapio administravimas" + +msgid "Django administration" +msgstr "Django administravimas" + +msgid "Site administration" +msgstr "Tinklalapio administravimas" + +msgid "Log in" +msgstr "Prisijungti" + +#, python-format +msgid "%(app)s administration" +msgstr "%(app)s administravimas" + +msgid "Page not found" +msgstr "Puslapis nerastas" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Atsiprašome, bet prašytas puslapis nerastas." + +msgid "Home" +msgstr "Pradinis" + +msgid "Server error" +msgstr "Serverio klaida" + +msgid "Server error (500)" +msgstr "Serverio klaida (500)" + +msgid "Server Error (500)" +msgstr "Serverio klaida (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Netikėta klaida. Apie ją buvo pranešta administratoriams el. paštu ir ji " +"turėtų būti greitai sutvarkyta. Dėkui už kantrybę." + +msgid "Run the selected action" +msgstr "Vykdyti pasirinktus veiksmus" + +msgid "Go" +msgstr "Vykdyti" + +msgid "Click here to select the objects across all pages" +msgstr "Spauskite čia norėdami pasirinkti visus įrašus" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Pasirinkti visus %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Atstatyti į pradinę būseną" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"Pirmiausia įveskite naudotojo vardą ir slaptažodį. Tada galėsite keisti " +"daugiau naudotojo nustatymų." + +msgid "Enter a username and password." +msgstr "Įveskite naudotojo vardą ir slaptažodį." + +msgid "Change password" +msgstr "Keisti slaptažodį" + +msgid "Please correct the error below." +msgstr "Prašome ištaisyti žemiau esančią klaidą." + +msgid "Please correct the errors below." +msgstr "Ištaisykite žemiau esančias klaidas." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Įveskite naują slaptažodį naudotojui %(username)s." + +msgid "Welcome," +msgstr "Sveiki," + +msgid "View site" +msgstr "Peržiūrėti tinklalapį" + +msgid "Documentation" +msgstr "Dokumentacija" + +msgid "Log out" +msgstr "Atsijungti" + +#, python-format +msgid "Add %(name)s" +msgstr "Naujas %(name)s" + +msgid "History" +msgstr "Istorija" + +msgid "View on site" +msgstr "Matyti tinklalapyje" + +msgid "Filter" +msgstr "Filtras" + +msgid "Remove from sorting" +msgstr "Pašalinti iš rikiavimo" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Rikiavimo prioritetas: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Perjungti rikiavimą" + +msgid "Delete" +msgstr "Ištrinti" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Trinant %(object_name)s '%(escaped_object)s' turi būti ištrinti ir susiję " +"objektai, bet tavo vartotojas neturi teisių ištrinti šių objektų:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Ištrinant %(object_name)s '%(escaped_object)s' būtų ištrinti šie apsaugoti " +"ir susiję objektai:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Ar este tikri, kad norite ištrinti %(object_name)s \"%(escaped_object)s\"? " +"Visi susiję objektai bus ištrinti:" + +msgid "Objects" +msgstr "Objektai" + +msgid "Yes, I'm sure" +msgstr "Taip, esu tikras" + +msgid "No, take me back" +msgstr "Ne, grįžti atgal" + +msgid "Delete multiple objects" +msgstr "Ištrinti kelis objektus" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Ištrinant pasirinktą %(objects_name)s būtų ištrinti susiję objektai, tačiau " +"jūsų vartotojas neturi reikalingų teisių ištrinti šiuos objektų tipus:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Ištrinant pasirinktus %(objects_name)s būtų ištrinti šie apsaugoti ir susiję " +"objektai:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Ar esate tikri, kad norite ištrinti pasirinktus %(objects_name)s? Sekantys " +"pasirinkti bei susiję objektai bus ištrinti:" + +msgid "View" +msgstr "Peržiūrėti" + +msgid "Delete?" +msgstr "Ištrinti?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " Pagal %(filter_title)s " + +msgid "Summary" +msgstr "Santrauka" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "%(name)s aplikacijos modeliai" + +msgid "Add" +msgstr "Pridėti" + +msgid "You don't have permission to view or edit anything." +msgstr "Jūs neturite teisių peržiūrai ir redagavimui." + +msgid "Recent actions" +msgstr "Paskutiniai veiksmai" + +msgid "My actions" +msgstr "Mano veiksmai" + +msgid "None available" +msgstr "Nėra prieinamų" + +msgid "Unknown content" +msgstr "Nežinomas turinys" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Kažkas yra negerai su jūsų duomenų bazės instaliacija. Įsitikink, kad visos " +"reikalingos lentelės sukurtos ir vartotojas turi teises skaityti duomenų " +"bazę." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Jūs esate prisijungęs kaip %(username)s, bet neturite teisių patekti į šį " +"puslapį. Ar norėtumete prisijungti su kitu vartotoju?" + +msgid "Forgotten your password or username?" +msgstr "Pamiršote slaptažodį ar vartotojo vardą?" + +msgid "Date/time" +msgstr "Data/laikas" + +msgid "User" +msgstr "Naudotojas" + +msgid "Action" +msgstr "Veiksmas" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Šis objektas neturi pakeitimų istorijos. Tikriausiai jis buvo pridėtas ne " +"per administravimo puslapį." + +msgid "Show all" +msgstr "Rodyti visus" + +msgid "Save" +msgstr "Išsaugoti" + +msgid "Popup closing…" +msgstr "Iškylantysis langas užsidaro..." + +msgid "Search" +msgstr "Ieškoti" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s rezultatas" +msgstr[1] "%(counter)s rezultatai" +msgstr[2] "%(counter)s rezultatai" +msgstr[3] "%(counter)s rezultatai" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s iš viso" + +msgid "Save as new" +msgstr "Išsaugoti kaip naują" + +msgid "Save and add another" +msgstr "Išsaugoti ir pridėti naują" + +msgid "Save and continue editing" +msgstr "Išsaugoti ir tęsti redagavimą" + +msgid "Save and view" +msgstr "Išsaugoti ir peržiūrėti" + +msgid "Close" +msgstr "Uždaryti" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Keisti pasirinktus %(model)s" + +#, python-format +msgid "Add another %(model)s" +msgstr "Pridėti dar vieną %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Pašalinti pasirinktus %(model)s" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Dėkui už šiandien tinklalapyje turiningai praleistą laiką." + +msgid "Log in again" +msgstr "Prisijungti dar kartą" + +msgid "Password change" +msgstr "Slaptažodžio keitimas" + +msgid "Your password was changed." +msgstr "Jūsų slaptažodis buvo pakeistas." + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Saugumo sumetimais įveskite seną slaptažodį ir tada du kartus naują, kad " +"įsitikinti, jog nesuklydote rašydamas" + +msgid "Change my password" +msgstr "Keisti mano slaptažodį" + +msgid "Password reset" +msgstr "Slaptažodžio atstatymas" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Jūsų slaptažodis buvo išsaugotas. Dabas galite prisijungti." + +msgid "Password reset confirmation" +msgstr "Slaptažodžio atstatymo patvirtinimas" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Įveskite naująjį slaptažodį du kartus, taip užtikrinant, jog nesuklydote " +"rašydami." + +msgid "New password:" +msgstr "Naujasis slaptažodis:" + +msgid "Confirm password:" +msgstr "Slaptažodžio patvirtinimas:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Slaptažodžio atstatymo nuoroda buvo negaliojanti, nes ji tikriausiai jau " +"buvo panaudota. Prašykite naujo slaptažodžio pakeitimo." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Jei egzistuoja vartotojas su jūsų įvestu elektroninio pašto adresu, " +"išsiųsime jums slaptažodžio nustatymo instrukcijas . Instrukcijas turėtumėte " +"gauti netrukus." + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Jei el. laiško negavote, prašome įsitikinti ar įvedėte tą el. pašto adresą " +"kuriuo registravotės ir patikrinkite savo šlamšto aplanką." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Jūs gaunate šį laišką nes prašėte paskyros slaptažodžio atkūrimo " +"%(site_name)s svetainėje." + +msgid "Please go to the following page and choose a new password:" +msgstr "Prašome eiti į šį puslapį ir pasirinkti naują slaptažodį:" + +msgid "Your username, in case you've forgotten:" +msgstr "Jūsų naudotojo vardas, jei netyčia jį užmiršote:" + +msgid "Thanks for using our site!" +msgstr "Dėkui, kad naudojatės mūsų tinklalapiu!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s komanda" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" +"Pamiršote slaptažodį? Įveskite savo el. pašto adresą ir mes išsiųsime laišką " +"su instrukcijomis kaip nustatyti naują slaptažodį." + +msgid "Email address:" +msgstr "El. pašto adresas:" + +msgid "Reset my password" +msgstr "Atstatyti slaptažodį" + +msgid "All dates" +msgstr "Visos datos" + +#, python-format +msgid "Select %s" +msgstr "Pasirinkti %s" + +#, python-format +msgid "Select %s to change" +msgstr "Pasirinkite %s kurį norite keisti" + +#, python-format +msgid "Select %s to view" +msgstr "Pasirinkti %s peržiūrai" + +msgid "Date:" +msgstr "Data:" + +msgid "Time:" +msgstr "Laikas:" + +msgid "Lookup" +msgstr "Paieška" + +msgid "Currently:" +msgstr "Šiuo metu:" + +msgid "Change:" +msgstr "Pakeisti:" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/lv/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/lv/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d68a14a7f9bd188951ebda3f16994c77c32aab87 GIT binary patch literal 16662 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/lv/LC_MESSAGES/djangojs.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/lv/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..61e6e33e7e9d79b2c50de6bbfecb87c59953585c GIT binary patch literal 4903 zcmd6r?{6GO8OMh-(AI@QTLLXDVdCJ}X>#kkq)n^~rgh!8*o|Y$zP3c<&D`zyZhX5l z$IR^c$D7C!3WACkm0O7-AzB5>3rncHpzxw9yx2nmA@L3gAytSs@CU#fUh#c)_k0&> z(h%OT^6Y13_L*m%d7fux_x%2YhhJm3o#SI|BL=hOUGL9(w7k{wMDCa?~8AGis^ zWcCdZs@conr@+_1Pl9iO4}$N24}iY`@yGszTNV5pI0YU@P-*;C5GJrSko11N;AZjs z8c6ehtKcgj+4*|GAAn@%k3gFLC*WJ)d*BUF-k;BNFCNmkhd`2l1SGwqAldggNOqhD z$*yO>KY*7C9>*d{{+}TE=MWaR2;L2n-WR~@;Mc$(f`0+O1AY_EI0PO+kcbZ#e6-+E z5Mf})3LY;wR`6jwqw7qL>`rl@i|h_iK8tb!PMr^iajFSbp;Li#_)T*g?sO5)S zQ8v~|ohge{qs_hHjZ7UEQG{+TJU5snV6*+_R>r0)v*!@aM-RlFl?@r!rDb!nZWCd* z*qn+y+FwzjWD7!PeG5sn#TF7R*`lzG7VcYYQH5GHTb^AuM&ssXm0vLl7nT;wTPCqw zw4?~hpHAAYw49a`94rgdZ(o?#WlQPsw$vUh+Raye*=(?-hBxGamCR8E$X{$#c6=_k z+Ja!Mr5wkfZ%H002T!kYF%;k+TYoIJ`Y~}Pmb|`IWRcQM8X9w@GZl5SiFHI~g9|JL zPc&~(&d2+r^>iSE(zyL zH7m4>gg3UzFDFqn?{Hj}`Ij{6%4yV}RvH^4h`L|K2;EFXQMKgG)&;{4b&Do^nW8fQ*k7}YP0_$R@>cl zH%fQCyX8~$Ay3Qaf^wOitKud)Hr<2!naEz%jx8%G*G25;?Ks{9r%9f76!J+T84{8eB*ODmXQQP~cd*gbcDfr3 zCeMee?cQ}6-_F1=d)-^CdX3)q=?+!tjc*-Wg?l@mVSjY<{`DUGv+fwEiLtP7e=MlJ zoH#AoXrdCrY}iYS&b+vt?#0Nhn&=jtTv=L;^R%@cR*Ez!-rXV_CIa&QEypEyHtbHP zqjBkO;|{F6gHiusGL7%HxK0tOiKYmdY2!nMn)7+Q`^%Bpr zEEcZ~E85QEBg;~vQJ#x+g>R8Dya#KtOET-}PM&WtNBFvmoHxBU(;eh)x@ SI-_$ zl+xXGq&;g}_z|Nl{_ezawr?b=G7HK6!mtN=Z{UQL znypaiRw!VK7Y>a~Gu_F3M4wI;>r8HPJAE1y3J-`edr`E7WedGMhbZAkLf;T10pcrF z+v8xfbp$z~km1WBm%?t>>E1fBNN2}Wg8iDblYnQcLW_VaQ^lXxq`6dvBV-iq&>UMYLfk)gwA(3nL3Z^wp37`}5*74pn-C)*RDTBF9j6 z@&& literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/lv/LC_MESSAGES/djangojs.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/lv/LC_MESSAGES/djangojs.po new file mode 100644 index 0000000..4f1b55f --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/lv/LC_MESSAGES/djangojs.po @@ -0,0 +1,224 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# NullIsNot0 , 2017 +# Jannis Leidel , 2011 +# peterisb , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:50+0200\n" +"PO-Revision-Date: 2017-11-18 08:13+0000\n" +"Last-Translator: NullIsNot0 \n" +"Language-Team: Latvian (http://www.transifex.com/django/django/language/" +"lv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lv\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : " +"2);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Pieejams %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Šis ir saraksts ar pieejamajiem %s. Tev ir jāizvēlas atbilstošās vērtības " +"atzīmējot izvēlēs zemāk esošajā sarakstā un pēc tam spiežot pogu \"Izvēlēties" +"\", lai pārvietotu starp izvēļu sarakstiem." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "" +"Raksti šajā logā, lai filtrētu zemāk esošo sarakstu ar pieejamajiem %s." + +msgid "Filter" +msgstr "Filtrs" + +msgid "Choose all" +msgstr "Izvēlēties visu" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Izvēlies, lai pievienotu visas %s izvēles vienā reizē." + +msgid "Choose" +msgstr "Izvēlies" + +msgid "Remove" +msgstr "Izņemt" + +#, javascript-format +msgid "Chosen %s" +msgstr "Izvēlies %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Šis ir saraksts ar izvēlētajiem %s. Tev ir jāizvēlas atbilstošās vērtības " +"atzīmējot izvēlēs zemāk esošajā sarakstā un pēc tam spiežot pogu \"Izņemt\", " +"lai izņemtu no izvēlēto ierakstu saraksta." + +msgid "Remove all" +msgstr "Izņemt visu" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Izvēlies, lai izņemtu visas %s izvēles vienā reizē." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s no %(cnt)s izvēlēts" +msgstr[1] "%(sel)s no %(cnt)s izvēlēti" +msgstr[2] "%(sel)s no %(cnt)s izvēlēti" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Jūs neesat saglabājis izmaiņas rediģējamiem laukiem. Ja jūs tagad " +"izpildīsiet izvēlēto darbību, šīs izmaiņas netiks saglabātas." + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"Jūs esat izvēlējies veikt darbību un neesat saglabājis veiktās izmaiņas. " +"Lūdzu nospiežat OK, lai saglabātu. Jums nāksies šo darbību izpildīt vēlreiz." + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Jūs esat izvēlējies veikt darbību un neesat izmainījis nevienu lauku. Jūs " +"droši vien meklējat pogu 'Aiziet' nevis 'Saglabāt'." + +msgid "Now" +msgstr "Tagad" + +msgid "Midnight" +msgstr "Pusnakts" + +msgid "6 a.m." +msgstr "06.00" + +msgid "Noon" +msgstr "Pusdienas laiks" + +msgid "6 p.m." +msgstr "6:00" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Piezīme: Tavs laiks ir %s stundas pirms servera laika." +msgstr[1] "Piezīme: Tavs laiks ir %s stundu pirms servera laika." +msgstr[2] "Piezīme: Tavs laiks ir %s stundas pirms servera laika." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Piezīme: Tavs laiks ir %s stundas pēc servera laika." +msgstr[1] "Piezīme: Tavs laiks ir %s stundu pēc servera laika." +msgstr[2] "Piezīme: Tavs laiks ir %s stundas pēc servera laika." + +msgid "Choose a Time" +msgstr "Izvēlies laiku" + +msgid "Choose a time" +msgstr "Izvēlieties laiku" + +msgid "Cancel" +msgstr "Atcelt" + +msgid "Today" +msgstr "Šodien" + +msgid "Choose a Date" +msgstr "Izvēlies datumu" + +msgid "Yesterday" +msgstr "Vakar" + +msgid "Tomorrow" +msgstr "Rīt" + +msgid "January" +msgstr "janvāris" + +msgid "February" +msgstr "februāris" + +msgid "March" +msgstr "marts" + +msgid "April" +msgstr "aprīlis" + +msgid "May" +msgstr "maijs" + +msgid "June" +msgstr "jūnijs" + +msgid "July" +msgstr "jūlijs" + +msgid "August" +msgstr "augusts" + +msgid "September" +msgstr "septembris" + +msgid "October" +msgstr "oktobris" + +msgid "November" +msgstr "novembris" + +msgid "December" +msgstr "decembris" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "Sv" + +msgctxt "one letter Monday" +msgid "M" +msgstr "Pr" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "O" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "T" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "C" + +msgctxt "one letter Friday" +msgid "F" +msgstr "Pk" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "Se" + +msgid "Show" +msgstr "Parādīt" + +msgid "Hide" +msgstr "Slēpt" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/mk/LC_MESSAGES/djangojs.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/mk/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..5b11c786c3af77ff4182c9db0d638570c42bbfab GIT binary patch literal 5633 zcmc&$Uu+yl9Uj_HiVG=iDgT<5sY?=v0r6*-H(n~7id=J)6OeKUJ+-Miwu0@o(ARcP1VC&Vt`*KfxS*WndHYyr*y?*Lx3*aE&E z{YBgV8Sq2s|I+qXWI~Mn0{2t&3fvbR@2Cf0F0geLi1lBB00qOq; z5GKTPzz+bQxBXWv&I0ihXK`Z+uK{W2bs*O@fnNj8153b_Fv|C3Am@8P+N}fe6NhnQ zoJW9+^IJgLIR!ig{66qIz&sYgr1&Y2_I?iB2K)_>>+ZtfY2f`pu4@A8z@2z`AMg!} zzX0Bk{#&;H7u&xRL3|YB4*@?0+z4Dmt@Z$Sq2CAcR|59~?*%$Qyb>`GKXC*%`gy_j ze_-*)z>i~m!QyW%{t-BU@!L?mdw}bKW55yMH-OIrKLUK);@^Q-B32>@;sZd&Gk_aX z6+B-;5AFb4hvNS+=6IrN(cuEKnh{cFI3D8_BTw=Mq3;-4+PWAU#R z|7P(YK$`gk8n0mk`hJ&vX5M);^1lY{VKiQ!G@y0Hn)9Nz)}pZ%%$G6oT5mve$;X`S zGbdi3MS}#zgY4iUExgD9Qr9)!0NjZ702(=3hbGZLy%<8{xv(0IR{`x2v`uLJXuLjU zKnwyQSG|vrzP_kA?rUD3L8Epd6&M_dl(#OD!Gv5rQ1)XyVnCH+Rk`K6&C=Fyx7rsAF5g~rSyADHLH8mo={~~8&{ziRpVj931`Hp z>&57Q$*m}{$MN;po`yFg_B4DY#+rjuWKE<#`aWI3*?u3uS}*`=pWnXI1-rp4ZJ9FT$inkWn8OB_)3 z*vvan#l%w8jU;|?RY}i{!1RQ4G6l}-{At;xxwIx-Uz->Y4kHgQ zn3fJw!5d$eSu{IO_8Xz}gV7L^##KD6Fo)jb=|Ez+it@V!&~ax+f;8!rV>j?O zX#QsG1b=NTYfc4%_gM$WpH$esX?MtVV@$)5L)$ z-Y=6kt~ZfmzxxWdFc_*_*f5b9N-{w;eB*LyDpbXd_3_lv(UpH0>gU zacqSkit{4y@uXsuOOA#vO15G&J2n>h92?7y9dP0Xi@V~$b)yYE^SZH8wGl>~S<22V zHPp?6PpgV=hMyMu!r&Pk-?`nD+*2xypp~MmJOfDtefw2C2;pebM!xtl84r-sr zT7Rthyad2>YdO9D|xI3W^bJ3tluLGX7FjzY@xUO$( z_t?%J5kvVx-;ThKm5%_iM~gC6hvUJz=eYhhiZhHep|kr6p0*Q}AITaXW< zKeSGMK^A0D4sGibNh`UMTuh%$n#r3<8y{u!eNNiR<<1vcu+yE>T6)fAiS^C&czO)B z+W1f>i&(apT!rDwcr`DQmy$)iYb96tIG0?)B;;utRX|tV z;BGa5 z1N{F{aD6<>rhz9F57ncjQzWm!49;<$BdwGt4oE@)b#}UFZ9|)_orDNLA_bAo^7c*C z7snd4hQ|726{gFj%ea)vMDj8YBc3e?WVZW_oHIt6kkxarN;gJM6u0%zIZm3aHXKl0 zu)`h1ZbyBLn#XiYr+mV^$;yJqBLisD4g6|LmuT)H`rU*m^FqeVLB_3wg6&Whx9=vpKf#6JO3_j<$t literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/mn/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/mn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..57a9d75e6e81948a29589bb3af03bcd0aa966547 GIT binary patch literal 20545 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, 2013 +# Jannis Leidel , 2011 +# jargalan , 2011 +# Zorig, 2016 +# Анхбаяр Анхаа , 2013-2016,2018-2019 +# Баясгалан Цэвлээ , 2011,2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-02-13 09:17+0000\n" +"Last-Translator: Анхбаяр Анхаа \n" +"Language-Team: Mongolian (http://www.transifex.com/django/django/language/" +"mn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(items)s ээс %(count)d-ийг амжилттай устгалаа." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "%(name)s устгаж чадахгүй." + +msgid "Are you sure?" +msgstr "Итгэлтэй байна уу?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Сонгосон %(verbose_name_plural)s-ийг устга" + +msgid "Administration" +msgstr "Удирдлага" + +msgid "All" +msgstr "Бүгд " + +msgid "Yes" +msgstr "Тийм" + +msgid "No" +msgstr "Үгүй" + +msgid "Unknown" +msgstr "Тодорхойгүй" + +msgid "Any date" +msgstr "Бүх өдөр" + +msgid "Today" +msgstr "Өнөөдөр" + +msgid "Past 7 days" +msgstr "Өнгөрсөн долоо хоног" + +msgid "This month" +msgstr "Энэ сар" + +msgid "This year" +msgstr "Энэ жил" + +msgid "No date" +msgstr "Огноогүй" + +msgid "Has date" +msgstr "Огноотой" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Ажилтан хэрэглэгчийн %(username)s ба нууц үгийг зөв оруулна уу. Хоёр талбарт " +"том жижигээр үсгээр бичих ялгаатай." + +msgid "Action:" +msgstr "Үйлдэл:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Өөр %(verbose_name)s нэмэх " + +msgid "Remove" +msgstr "Хасах" + +msgid "Addition" +msgstr "Нэмэгдсэн" + +msgid "Change" +msgstr "Өөрчлөх" + +msgid "Deletion" +msgstr "Устгагдсан" + +msgid "action time" +msgstr "үйлдлийн хугацаа" + +msgid "user" +msgstr "хэрэглэгч" + +msgid "content type" +msgstr "агуулгын төрөл" + +msgid "object id" +msgstr "обектийн id" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "обектийн хамаарал" + +msgid "action flag" +msgstr "үйлдэлийн тэмдэг" + +msgid "change message" +msgstr "өөрчлөлтийн мэдээлэл" + +msgid "log entry" +msgstr "лог өгөгдөл" + +msgid "log entries" +msgstr "лог өгөгдөлүүд" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "\"%(object)s\" нэмсэн." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "\"%(object)s\"-ийг %(changes)s өөрчилсөн." + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "\"%(object)s\" устгасан." + +msgid "LogEntry Object" +msgstr "Лог бүртгэлийн обект" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "Нэмэгдсэн {name} \"{object}\"." + +msgid "Added." +msgstr "Нэмэгдсэн." + +msgid "and" +msgstr "ба" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "{name} \"{object}\"-ны {fields} өөрчилөгдсөн." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Өөрчлөгдсөн {fields}." + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "Устгасан {name} \"{object}\"." + +msgid "No fields changed." +msgstr "Өөрчилсөн талбар алга байна." + +msgid "None" +msgstr "Хоосон" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" +"Олон утга сонгохын тулд \"Control\", эсвэл Mac дээр \"Command\" товчыг дарж " +"байгаад сонгоно." + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr " {name} \"{obj}\" амжилттай нэмэгдлээ." + +msgid "You may edit it again below." +msgstr "Та дараахийг дахин засах боломжтой" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" +"{name} \"{obj}\" амжилттай нэмэгдлээ. Доорх хэсгээс {name} өөрийн нэмэх " +"боломжтой." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "{name} \"{obj}\" амжилттай өөрчилөгдлөө. Та дахин засах боломжтой." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "{name} \"{obj}\" амжилттай нэмэгдлээ. Та дахин засах боломжтой." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" +"{name} \"{obj}\" амжилттай өөрчилөгдлөө. Доорх хэсгээс {name} өөрийн нэмэх " +"боломжтой." + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "{name} \"{obj}\" амжилттай засагдлаа." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Үйлдэл хийхийн тулд Та ядаж 1-ийг сонгох хэрэгтэй. Өөрчилөлт хийгдсэнгүй." + +msgid "No action selected." +msgstr "Үйлдэл сонгоогүй." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr " %(name)s \"%(obj)s\" амжилттай устгагдлаа." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" +"\"%(key)s\" дугаартай %(name)s байхгүй байна. Устсан байсан юм болов уу?" + +#, python-format +msgid "Add %s" +msgstr "%s-ийг нэмэх" + +#, python-format +msgid "Change %s" +msgstr "%s-ийг өөрчлөх" + +#, python-format +msgid "View %s" +msgstr "%s харах " + +msgid "Database error" +msgstr "Өгөгдлийн сангийн алдаа" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s-ийг амжилттай өөрчиллөө." +msgstr[1] "%(count)s %(name)s-ийг амжилттай өөрчиллөө." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "Бүгд %(total_count)s сонгогдсон" +msgstr[1] "Бүгд %(total_count)s сонгогдсон" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "%(cnt)s оос 0 сонгосон" + +#, python-format +msgid "Change history: %s" +msgstr "Өөрчлөлтийн түүх: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(instance)s %(class_name)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +" %(class_name)s төрлийн %(instance)s-ийг устгах гэж байна. Эхлээд дараах " +"холбоотой хамгаалагдсан обектуудыг устгах шаардлагатай: %(related_objects)s" + +msgid "Django site admin" +msgstr "Сайтын удирдлага" + +msgid "Django administration" +msgstr "Удирдлага" + +msgid "Site administration" +msgstr "Сайтын удирдлага" + +msgid "Log in" +msgstr "Нэвтрэх" + +#, python-format +msgid "%(app)s administration" +msgstr "%(app)s удирдлага" + +msgid "Page not found" +msgstr "Хуудас олдсонгүй." + +msgid "We're sorry, but the requested page could not be found." +msgstr "Уучлаарай, хандахыг хүссэн хуудас тань олдсонгүй." + +msgid "Home" +msgstr "Нүүр" + +msgid "Server error" +msgstr "Серверийн алдаа" + +msgid "Server error (500)" +msgstr "Серверийн алдаа (500)" + +msgid "Server Error (500)" +msgstr "Серверийн алдаа (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Алдаа гарсан байна. Энэ алдааг сайт хариуцагчид имэйлээр мэдэгдсэн бөгөөд " +"тэд нэн даруй засах хэрэгтэй. Хүлээцтэй хандсанд баярлалаа." + +msgid "Run the selected action" +msgstr "Сонгосон үйлдэлийг ажилуулах" + +msgid "Go" +msgstr "Гүйцэтгэх" + +msgid "Click here to select the objects across all pages" +msgstr "Бүх хуудаснууд дээрх объектуудыг сонгох" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Бүгдийг сонгох %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Сонгосонг цэвэрлэх" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"Эхлээд хэрэглэгчийн нэр нууц үгээ оруулна уу. Ингэснээр та хэрэглэгчийн " +"сонголтыг нэмж засварлах боломжтой болно. " + +msgid "Enter a username and password." +msgstr "Хэрэглэгчийн нэр ба нууц үгээ оруулна." + +msgid "Change password" +msgstr "Нууц үг өөрчлөх" + +msgid "Please correct the error below." +msgstr "Доорх алдааг засна уу" + +msgid "Please correct the errors below." +msgstr "Доор гарсан алдаануудыг засна уу." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "%(username)s.хэрэглэгчид шинэ нууц үг оруулна уу." + +msgid "Welcome," +msgstr "Тавтай морилно уу" + +msgid "View site" +msgstr "Сайтаас харах" + +msgid "Documentation" +msgstr "Баримтжуулалт" + +msgid "Log out" +msgstr "Гарах" + +#, python-format +msgid "Add %(name)s" +msgstr "%(name)s нэмэх" + +msgid "History" +msgstr "Түүх" + +msgid "View on site" +msgstr "Сайтаас харах" + +msgid "Filter" +msgstr "Шүүлтүүр" + +msgid "Remove from sorting" +msgstr "Эрэмблэлтээс хасах" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Эрэмблэх урьтамж: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Эрэмбэлэлтийг харуул" + +msgid "Delete" +msgstr "Устгах" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"%(object_name)s '%(escaped_object)s'-ийг устгавал холбогдох объект нь устах " +"ч бүртгэл тань дараах төрлийн объектуудийг устгах зөвшөөрөлгүй байна:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +" %(object_name)s обектийг устгаж байна. '%(escaped_object)s' холбоотой " +"хамгаалагдсан обектуудыг заавал утсгах хэрэгтэй :" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Та %(object_name)s \"%(escaped_object)s\"-ийг устгахдаа итгэлтэй байна уу? " +"Үүнийг устгавал дараах холбогдох зүйлс нь бүгд устана:" + +msgid "Objects" +msgstr "Бичлэгүүд" + +msgid "Yes, I'm sure" +msgstr "Тийм, итгэлтэй байна." + +msgid "No, take me back" +msgstr "Үгүй, намайг буцаа" + +msgid "Delete multiple objects" +msgstr "Олон обектууд устгах" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Сонгосон %(objects_name)s обектуудыг устгасанаар хамаатай бүх обкетууд устах " +"болно. Гэхдээ таньд эрх эдгээр төрлийн обектуудыг утсгах эрх байхгүй байна: " + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"%(objects_name)s обектуудыг утсгаж байна дараах холбоотой хамгаалагдсан " +"обектуудыг устгах шаардлагатай:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Та %(objects_name)s ийг устгах гэж байна итгэлтэй байна? Дараах обектууд " +"болон холбоотой зүйлс хамт устагдах болно:" + +msgid "View" +msgstr "Харах" + +msgid "Delete?" +msgstr "Устгах уу?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " %(filter_title)s -ээр" + +msgid "Summary" +msgstr "Нийт" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "%(name)s хэрэглүүр дэх моделууд." + +msgid "Add" +msgstr "Нэмэх" + +msgid "You don't have permission to view or edit anything." +msgstr "Танд харах болон засах эрх алга." + +msgid "Recent actions" +msgstr "Сүүлд хийсэн үйлдлүүд" + +msgid "My actions" +msgstr "Миний үйлдлүүд" + +msgid "None available" +msgstr "Үйлдэл алга" + +msgid "Unknown content" +msgstr "Тодорхойгүй агуулга" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Өгөгдлийн сангийн ямар нэг зүйл буруу суугдсан байна. Өгөгдлийн сангийн " +"зохих хүснэгт үүсгэгдсэн эсэх, өгөгдлийн санг зохих хэрэглэгч унших " +"боломжтой байгаа эсэхийг шалгаарай." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Та %(username)s нэрээр нэвтэрсэн байна гэвч энэ хуудасхуу хандах эрх " +"байхгүй байна. Та өөр эрхээр логин хийх үү?" + +msgid "Forgotten your password or username?" +msgstr "Таны мартсан нууц үг эсвэл нэрвтэр нэр?" + +msgid "Date/time" +msgstr "Огноо/цаг" + +msgid "User" +msgstr "Хэрэглэгч" + +msgid "Action" +msgstr "Үйлдэл" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Уг объектэд өөрчлөлтийн түүх байхгүй байна. Магадгүй үүнийг уг удирдлагын " +"сайтаар дамжуулан нэмээгүй байх." + +msgid "Show all" +msgstr "Бүгдийг харуулах" + +msgid "Save" +msgstr "Хадгалах" + +msgid "Popup closing…" +msgstr "Хааж байна..." + +msgid "Search" +msgstr "Хайлт" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s үр дүн" +msgstr[1] "%(counter)s үр дүн" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "Нийт %(full_result_count)s" + +msgid "Save as new" +msgstr "Шинээр хадгалах" + +msgid "Save and add another" +msgstr "Хадгалаад өөрийг нэмэх" + +msgid "Save and continue editing" +msgstr "Хадгалаад нэмж засах" + +msgid "Save and view" +msgstr "Хадгалаад харах." + +msgid "Close" +msgstr "Хаах" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Сонгосон %(model)s-ийг өөрчлөх" + +#, python-format +msgid "Add another %(model)s" +msgstr "Өөр %(model)s нэмэх" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Сонгосон %(model)s устгах" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Манай вэб сайтыг ашигласанд баярлалаа." + +msgid "Log in again" +msgstr "Ахин нэвтрэх " + +msgid "Password change" +msgstr "Нууц үгийн өөрчлөлт" + +msgid "Your password was changed." +msgstr "Нууц үг тань өөрчлөгдлөө." + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Аюулгүй байдлын үүднээс хуучин нууц үгээ оруулаад шинэ нууц үгээ хоёр удаа " +"хийнэ үү. Ингэснээр нууц үгээ зөв бичиж байгаа эсэхийг тань шалгах юм." + +msgid "Change my password" +msgstr "Нууц үгээ солих" + +msgid "Password reset" +msgstr "Нууц үг шинэчилэх" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Та нууц үгтэй боллоо. Одоо бүртгэлд нэвтрэх боломжтой." + +msgid "Password reset confirmation" +msgstr "Нууц үг шинэчилэхийг баталгаажуулах" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Шинэ нууц үгээ хоёр удаа оруулна уу. Ингэснээр нууц үгээ зөв бичиж байгаа " +"эсэхийг тань шалгах юм. " + +msgid "New password:" +msgstr "Шинэ нууц үг:" + +msgid "Confirm password:" +msgstr "Нууц үгээ батлах:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Нууц үг авах холбоос болохгүй байна. Үүнийг аль хэдийнэ хэрэглэснээс болсон " +"байж болзошгүй. Шинэ нууц үг авахаар хүсэлт гаргана уу. " + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Таны оруулсан имайл хаяг бүртгэлтэй бол таны имайл хаягруу нууц үг " +"тохируулах зааварыг удахгүй очих болно. Та удахгүй имайл хүлээж авах болно. " + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Хэрвээ та имайл хүлээж аваагүй бол оруулсан имайл хаягаараа бүртгүүлсэн " +"эсхээ шалгаад мөн имайлийнхаа Spam фолдер ийг шалгана уу." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"%(site_name)s сайтанд бүртгүүлсэн эрхийн нууц үгийг сэргээх хүсэлт гаргасан " +"учир энэ имэйл ийг та хүлээн авсан болно. " + +msgid "Please go to the following page and choose a new password:" +msgstr "Дараах хуудас руу орон шинэ нууц үг сонгоно уу:" + +msgid "Your username, in case you've forgotten:" +msgstr "Хэрэглэгчийн нэрээ мартсан бол :" + +msgid "Thanks for using our site!" +msgstr "Манай сайтыг хэрэглэсэнд баярлалаа!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s баг" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" +"Нууц үгээ мартсан уу? Доорх хэсэгт имайл хаягаа оруулвал бид хаягаар тань " +"нууц үг сэргэх зааварчилгаа явуулах болно." + +msgid "Email address:" +msgstr "Имэйл хаяг:" + +msgid "Reset my password" +msgstr "Нууц үгээ шинэчлэх" + +msgid "All dates" +msgstr "Бүх огноо" + +#, python-format +msgid "Select %s" +msgstr "%s-г сонго" + +#, python-format +msgid "Select %s to change" +msgstr "Өөрчлөх %s-г сонгоно уу" + +#, python-format +msgid "Select %s to view" +msgstr "Харахын тулд %s сонгоно уу" + +msgid "Date:" +msgstr "Огноо:" + +msgid "Time:" +msgstr "Цаг:" + +msgid "Lookup" +msgstr "Хайх" + +msgid "Currently:" +msgstr "Одоогийнх:" + +msgid "Change:" +msgstr "Өөрчилөлт:" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/mn/LC_MESSAGES/djangojs.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/mn/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..9f58362d57dbe0934779cd5a9ea9aae87f892c61 GIT binary patch literal 5228 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 BV4DB{ literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/mn/LC_MESSAGES/djangojs.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/mn/LC_MESSAGES/djangojs.po new file mode 100644 index 0000000..5fda297 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/mn/LC_MESSAGES/djangojs.po @@ -0,0 +1,218 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Tsolmon , 2012 +# Zorig, 2014,2018 +# Анхбаяр Анхаа , 2011-2012,2015,2019 +# Ганзориг БП , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:50+0200\n" +"PO-Revision-Date: 2019-02-13 09:19+0000\n" +"Last-Translator: Анхбаяр Анхаа \n" +"Language-Team: Mongolian (http://www.transifex.com/django/django/language/" +"mn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Боломжтой %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Энэ %s жагсаалт нь боломжит утгын жагсаалт. Та аль нэгийг нь сонгоод \"Сонгох" +"\" дээр дарж нөгөө хэсэгт оруулах боломжтой." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Энэ нүдэнд бичээд дараах %s жагсаалтаас шүүнэ үү. " + +msgid "Filter" +msgstr "Шүүлтүүр" + +msgid "Choose all" +msgstr "Бүгдийг нь сонгох" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Бүгдийг сонгох бол %s дарна уу" + +msgid "Choose" +msgstr "Сонгох" + +msgid "Remove" +msgstr "Хас" + +#, javascript-format +msgid "Chosen %s" +msgstr "Сонгогдсон %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Энэ %s сонгогдсон утгуудыг жагсаалт. Та аль нэгийг нь хасахыг хүсвэл сонгоох " +"\"Хас\" дээр дарна уу." + +msgid "Remove all" +msgstr "Бүгдийг арилгах" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "%s ийн сонгоод бүгдийг нь арилгана" + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s ээс %(cnt)s сонгосон" +msgstr[1] "%(sel)s ээс %(cnt)s сонгосон" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Хадгалаагүй өөрчлөлтүүд байна. Энэ үйлдэлийг хийвэл өөрчлөлтүүд устах болно." + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"Та 1 үйлдлийг сонгосон байна, гэвч та өөрийн өөрчлөлтүүдээ тодорхой " +"талбаруудад нь оруулагүй байна. OK дарж сануулна уу. Энэ үйлдлийг та дахин " +"хийх шаардлагатай." + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Та 1 үйлдлийг сонгосон байна бас та ямарваа өөрчлөлт оруулсангүй. Та Save " +"товчлуур биш Go товчлуурыг хайж байгаа бололтой." + +msgid "Now" +msgstr "Одоо" + +msgid "Midnight" +msgstr "Шөнө дунд" + +msgid "6 a.m." +msgstr "06 цаг" + +msgid "Noon" +msgstr "Үд дунд" + +msgid "6 p.m." +msgstr "18 цаг" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Та серверийн цагаас %s цагийн түрүүнд явж байна" +msgstr[1] "Та серверийн цагаас %s цагийн түрүүнд явж байна" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Та серверийн цагаас %s цагаар хоцорч байна" +msgstr[1] "Та серверийн цагаас %s цагаар хоцорч байна" + +msgid "Choose a Time" +msgstr "Цаг сонгох" + +msgid "Choose a time" +msgstr "Цаг сонгох" + +msgid "Cancel" +msgstr "Болих" + +msgid "Today" +msgstr "Өнөөдөр" + +msgid "Choose a Date" +msgstr "Өдөр сонгох" + +msgid "Yesterday" +msgstr "Өчигдөр" + +msgid "Tomorrow" +msgstr "Маргааш" + +msgid "January" +msgstr "1-р сар" + +msgid "February" +msgstr "2-р сар" + +msgid "March" +msgstr "3-р сар" + +msgid "April" +msgstr "4-р сар" + +msgid "May" +msgstr "5-р сар" + +msgid "June" +msgstr "6-р сар" + +msgid "July" +msgstr "7-р сар" + +msgid "August" +msgstr "8-р сар" + +msgid "September" +msgstr "9-р сар" + +msgid "October" +msgstr "10-р сар" + +msgid "November" +msgstr "11-р сар" + +msgid "December" +msgstr "12-р сар" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "Н" + +msgctxt "one letter Monday" +msgid "M" +msgstr "Д" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "М" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "Л" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "П" + +msgctxt "one letter Friday" +msgid "F" +msgstr "Ба" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "Бя" + +msgid "Show" +msgstr "Үзэх" + +msgid "Hide" +msgstr "Нуух" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/mr/LC_MESSAGES/djangojs.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/mr/LC_MESSAGES/djangojs.po new file mode 100644 index 0000000..2026d16 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/mr/LC_MESSAGES/djangojs.po @@ -0,0 +1,145 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2014-10-05 20:12+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Marathi (http://www.transifex.com/projects/p/django/language/" +"mr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mr\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "" + +msgid "Filter" +msgstr "" + +msgid "Choose all" +msgstr "" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "" + +msgid "Choose" +msgstr "" + +msgid "Remove" +msgstr "" + +#, javascript-format +msgid "Chosen %s" +msgstr "" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" + +msgid "Remove all" +msgstr "" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "" + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "" +msgstr[1] "" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "" +msgstr[1] "" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" +msgstr[1] "" + +msgid "Now" +msgstr "" + +msgid "Clock" +msgstr "" + +msgid "Choose a time" +msgstr "" + +msgid "Midnight" +msgstr "" + +msgid "6 a.m." +msgstr "" + +msgid "Noon" +msgstr "" + +msgid "Cancel" +msgstr "" + +msgid "Today" +msgstr "" + +msgid "Calendar" +msgstr "" + +msgid "Yesterday" +msgstr "" + +msgid "Tomorrow" +msgstr "" + +msgid "" +"January February March April May June July August September October November " +"December" +msgstr "" + +msgid "S M T W T F S" +msgstr "" + +msgid "Show" +msgstr "" + +msgid "Hide" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/my/LC_MESSAGES/djangojs.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/my/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..000b8bcb2dd32a1ec40f47d057804348251ae5c6 GIT binary patch literal 3268 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 CEn^A* literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/nb/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/nb/LC_MESSAGES/django.po new file mode 100644 index 0000000..c457c3d --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/nb/LC_MESSAGES/django.po @@ -0,0 +1,711 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# jensadne , 2013-2014 +# Jon , 2015-2016 +# Jon , 2017-2019 +# Jon , 2013 +# Jon , 2011,2013 +# Sigurd Gartmann , 2012 +# Tommy Strand , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-05-06 13:01+0000\n" +"Last-Translator: Jon \n" +"Language-Team: Norwegian Bokmål (http://www.transifex.com/django/django/" +"language/nb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Slettet %(count)d %(items)s." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Kan ikke slette %(name)s" + +msgid "Are you sure?" +msgstr "Er du sikker?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Slett valgte %(verbose_name_plural)s" + +msgid "Administration" +msgstr "Administrasjon" + +msgid "All" +msgstr "Alle" + +msgid "Yes" +msgstr "Ja" + +msgid "No" +msgstr "Nei" + +msgid "Unknown" +msgstr "Ukjent" + +msgid "Any date" +msgstr "Når som helst" + +msgid "Today" +msgstr "I dag" + +msgid "Past 7 days" +msgstr "Siste syv dager" + +msgid "This month" +msgstr "Denne måneden" + +msgid "This year" +msgstr "I år" + +msgid "No date" +msgstr "Ingen dato" + +msgid "Has date" +msgstr "Har dato" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Vennligst oppgi gyldig %(username)s og passord til en " +"administrasjonsbrukerkonto. Merk at det er forskjell på små og store " +"bokstaver." + +msgid "Action:" +msgstr "Handling:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Legg til ny %(verbose_name)s" + +msgid "Remove" +msgstr "Fjern" + +msgid "Addition" +msgstr "Tillegg" + +msgid "Change" +msgstr "Endre" + +msgid "Deletion" +msgstr "Sletting" + +msgid "action time" +msgstr "tid for handling" + +msgid "user" +msgstr "bruker" + +msgid "content type" +msgstr "innholdstype" + +msgid "object id" +msgstr "objekt-ID" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "objekt-repr" + +msgid "action flag" +msgstr "handlingsflagg" + +msgid "change message" +msgstr "endre melding" + +msgid "log entry" +msgstr "logginnlegg" + +msgid "log entries" +msgstr "logginnlegg" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "La til «%(object)s»." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "Endret «%(object)s» - %(changes)s" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "Slettet «%(object)s»." + +msgid "LogEntry Object" +msgstr "LogEntry-objekt" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "La til {name} \"{object}\"." + +msgid "Added." +msgstr "Lagt til." + +msgid "and" +msgstr "og" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "Endret {fields} for {name} \"{object}\"." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Endret {fields}." + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "Slettet {name} \"{object}\"." + +msgid "No fields changed." +msgstr "Ingen felt endret." + +msgid "None" +msgstr "Ingen" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" +"Hold nede «Control», eller «Command» på en Mac, for å velge mer enn en." + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "{name} \"{obj}\" ble lagt til." + +msgid "You may edit it again below." +msgstr "Du kan endre det igjen nedenfor." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "{name} \"{obj}\" ble lagt til. Du kan legge til en ny {name} nedenfor." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "{name} \"{obj}\" ble endret. Du kan redigere videre nedenfor." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "{name} \"{obj}\" ble lagt til. Du kan redigere videre nedenfor." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "{name} \"{obj}\" ble endret. Du kan legge til en ny {name} nedenfor." + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "{name} \"{obj}\" ble lagt til." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Du må velge objekter for å utføre handlinger på dem. Ingen objekter har " +"blitt endret." + +msgid "No action selected." +msgstr "Ingen handling valgt." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "%(name)s «%(obj)s» ble slettet." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "%(name)s med ID \"%(key)s\" eksisterer ikke. Kanskje det ble slettet?" + +#, python-format +msgid "Add %s" +msgstr "Legg til ny %s" + +#, python-format +msgid "Change %s" +msgstr "Endre %s" + +#, python-format +msgid "View %s" +msgstr "Se %s" + +msgid "Database error" +msgstr "Databasefeil" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s ble endret." +msgstr[1] "%(count)s %(name)s ble endret." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s valgt" +msgstr[1] "Alle %(total_count)s valgt" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 av %(cnt)s valgt" + +#, python-format +msgid "Change history: %s" +msgstr "Endringshistorikk: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Sletting av %(class_name)s «%(instance)s» krever sletting av følgende " +"beskyttede relaterte objekter: %(related_objects)s" + +msgid "Django site admin" +msgstr "Django administrasjonsside" + +msgid "Django administration" +msgstr "Django-administrasjon" + +msgid "Site administration" +msgstr "Nettstedsadministrasjon" + +msgid "Log in" +msgstr "Logg inn" + +#, python-format +msgid "%(app)s administration" +msgstr "%(app)s-administrasjon" + +msgid "Page not found" +msgstr "Fant ikke siden" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Beklager, men siden du spør etter finnes ikke." + +msgid "Home" +msgstr "Hjem" + +msgid "Server error" +msgstr "Tjenerfeil" + +msgid "Server error (500)" +msgstr "Tjenerfeil (500)" + +msgid "Server Error (500)" +msgstr "Tjenerfeil (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Det har oppstått en feil. Feilen er blitt rapportert til administrator via e-" +"post, og vil bli fikset snart. Takk for din tålmodighet." + +msgid "Run the selected action" +msgstr "Utfør den valgte handlingen" + +msgid "Go" +msgstr "Gå" + +msgid "Click here to select the objects across all pages" +msgstr "Trykk her for å velge samtlige objekter fra alle sider" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Velg alle %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Nullstill valg" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"Skriv først inn brukernavn og passord. Deretter vil du få mulighet til å " +"endre flere brukerinnstillinger." + +msgid "Enter a username and password." +msgstr "Skriv inn brukernavn og passord." + +msgid "Change password" +msgstr "Endre passord" + +msgid "Please correct the error below." +msgstr "Vennligst korriger feilen under." + +msgid "Please correct the errors below." +msgstr "Vennligst korriger feilene under." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Skriv inn et nytt passord for brukeren %(username)s." + +msgid "Welcome," +msgstr "Velkommen," + +msgid "View site" +msgstr "Vis nettsted" + +msgid "Documentation" +msgstr "Dokumentasjon" + +msgid "Log out" +msgstr "Logg ut" + +#, python-format +msgid "Add %(name)s" +msgstr "Legg til ny %(name)s" + +msgid "History" +msgstr "Historikk" + +msgid "View on site" +msgstr "Vis på nettsted" + +msgid "Filter" +msgstr "Filtrering" + +msgid "Remove from sorting" +msgstr "Fjern fra sortering" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Sorteringsprioritet: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Slå av og på sortering" + +msgid "Delete" +msgstr "Slett" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Om du sletter %(object_name)s «%(escaped_object)s», vil også relaterte " +"objekter slettes, men du har ikke tillatelse til å slette følgende " +"objekttyper:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Sletting av %(object_name)s «%(escaped_object)s» krever sletting av følgende " +"beskyttede relaterte objekter:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Er du sikker på at du vil slette %(object_name)s «%(escaped_object)s»? Alle " +"de følgende relaterte objektene vil bli slettet:" + +msgid "Objects" +msgstr "Objekter" + +msgid "Yes, I'm sure" +msgstr "Ja, jeg er sikker" + +msgid "No, take me back" +msgstr "Nei, ta meg tilbake" + +msgid "Delete multiple objects" +msgstr "Slett flere objekter" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Sletting av det valgte %(objects_name)s ville resultere i sletting av " +"relaterte objekter, men kontoen din har ikke tillatelse til å slette " +"følgende objekttyper:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Sletting av det valgte %(objects_name)s ville kreve sletting av følgende " +"beskyttede relaterte objekter:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Er du sikker på vil slette det valgte %(objects_name)s? De følgende " +"objektene og deres relaterte objekter vil bli slettet:" + +msgid "View" +msgstr "Se" + +msgid "Delete?" +msgstr "Slette?" + +#, python-format +msgid " By %(filter_title)s " +msgstr "Etter %(filter_title)s " + +msgid "Summary" +msgstr "Oppsummering" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Modeller i %(name)s-applikasjonen" + +msgid "Add" +msgstr "Legg til" + +msgid "You don't have permission to view or edit anything." +msgstr "Du har ikke tillatelse til å vise eller endre noe." + +msgid "Recent actions" +msgstr "Siste handlinger" + +msgid "My actions" +msgstr "Mine handlinger" + +msgid "None available" +msgstr "Ingen tilgjengelige" + +msgid "Unknown content" +msgstr "Ukjent innhold" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Noe er galt med databaseinstallasjonen din. Sørg for at databasetabellene er " +"opprettet og at brukeren har de nødvendige rettighetene." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Du er logget inn som %(username)s, men er ikke autorisert til å få tilgang " +"til denne siden. Ønsker du å logge inn med en annen konto?" + +msgid "Forgotten your password or username?" +msgstr "Glemt brukernavnet eller passordet ditt?" + +msgid "Date/time" +msgstr "Dato/tid" + +msgid "User" +msgstr "Bruker" + +msgid "Action" +msgstr "Handling" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Dette objektet har ingen endringshistorikk. Det ble sannsynligvis ikke lagt " +"til på denne administrasjonssiden." + +msgid "Show all" +msgstr "Vis alle" + +msgid "Save" +msgstr "Lagre" + +msgid "Popup closing…" +msgstr "Lukker popup..." + +msgid "Search" +msgstr "Søk" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s resultat" +msgstr[1] "%(counter)s resultater" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s totalt" + +msgid "Save as new" +msgstr "Lagre som ny" + +msgid "Save and add another" +msgstr "Lagre og legg til ny" + +msgid "Save and continue editing" +msgstr "Lagre og fortsett å redigere" + +msgid "Save and view" +msgstr "Lagre og se" + +msgid "Close" +msgstr "Lukk" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Endre valgt %(model)s" + +#, python-format +msgid "Add another %(model)s" +msgstr "Legg til ny %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Slett valgte %(model)s" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Takk for i dag." + +msgid "Log in again" +msgstr "Logg inn igjen" + +msgid "Password change" +msgstr "Endre passord" + +msgid "Your password was changed." +msgstr "Ditt passord ble endret." + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Av sikkerhetsgrunner må du oppgi ditt gamle passord. Deretter oppgir du det " +"nye passordet ditt to ganger, slik at vi kan kontrollere at det er korrekt." + +msgid "Change my password" +msgstr "Endre passord" + +msgid "Password reset" +msgstr "Nullstill passord" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Passordet ditt er satt. Du kan nå logge inn." + +msgid "Password reset confirmation" +msgstr "Bekreftelse på nullstilt passord" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Oppgi det nye passordet to ganger, for å sikre at det er skrevet korrekt." + +msgid "New password:" +msgstr "Nytt passord:" + +msgid "Confirm password:" +msgstr "Gjenta nytt passord:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Nullstillingslenken er ugyldig, kanskje fordi den allerede har vært brukt. " +"Vennligst nullstill passordet ditt på nytt." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Vi har sendt deg en e-post med instruksjoner for nullstilling av passord, " +"hvis en konto finnes på den e-postadressen du oppga. Du bør motta den om " +"kort tid." + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Hvis du ikke mottar en epost, sjekk igjen at du har oppgitt den adressen du " +"er registrert med og sjekk ditt spam filter." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Du mottar denne e-posten fordi du har bedt om nullstilling av passordet ditt " +"på %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "Vennligst gå til følgende side og velg et nytt passord:" + +msgid "Your username, in case you've forgotten:" +msgstr "Brukernavnet ditt, i tilfelle du har glemt det:" + +msgid "Thanks for using our site!" +msgstr "Takk for at du bruker siden vår!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "Hilsen %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" +"Glemt passordet ditt? Oppgi e-postadressen din under, så sender vi deg en e-" +"post med instruksjoner for nullstilling av passord." + +msgid "Email address:" +msgstr "E-postadresse:" + +msgid "Reset my password" +msgstr "Nullstill mitt passord" + +msgid "All dates" +msgstr "Alle datoer" + +#, python-format +msgid "Select %s" +msgstr "Velg %s" + +#, python-format +msgid "Select %s to change" +msgstr "Velg %s du ønsker å endre" + +#, python-format +msgid "Select %s to view" +msgstr "Velg %s å se" + +msgid "Date:" +msgstr "Dato:" + +msgid "Time:" +msgstr "Tid:" + +msgid "Lookup" +msgstr "Oppslag" + +msgid "Currently:" +msgstr "Nåværende:" + +msgid "Change:" +msgstr "Endre:" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/nb/LC_MESSAGES/djangojs.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/nb/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..5f34eb3aa73596a29608cd1ea8383041fafd3f17 GIT binary patch literal 4375 zcmbuDU2I%O6~_l^AaQ8gG^F7pv{OS8o8+!{-84xz1mW7*#BOXy*~O(&UuO5t-W~7k z%xdo3U9XVn6G(tWg&L%SgoK1FUW*W@5=bB!5JE`sgv3jMCy;mm2@p?6{LkELd)+u6 zf|2L`cIKWrbLPyMIX8LxiHWZ>lnbb*P=EX`#;${}Jc0+x<^*Gxz!CUf@OuT{0^fu7 zPm1=>!S|#6>!SVpf`0@bMgN}*{;S|47(9voW8h)%6!5Cp`- z1&@N{@8ckiKMB&fr@@=xY48TB>7*0B>!6wE?~a{$=*MKB==YFtKi?j zFM*#wn#&)0EZ27wTtxp#knDa1d<|@Y-v<8ydhiaM1~;?A$8sJi_-Mh$3LYzXyx@s~ zAH-NHb2-8jTNMgi!%C7gQTo7W5?uFB+RLZCn2NzJMP^o-4 z2b%?H56J%%!&E4y=v-6zI4Z?1wgd{NQ>kZCZrl9ybjx`BM2Bp78Q=HaMJ`Ic61&Lz zg!#Txn$2fPmU=cn5K4=tmi%Q`ynQ$XkQ`)0_L&cIU z3lsX5Gd*IIlT~&WVK6xM+E0&H3QJQ6XT?dfpQ;0^ZO* z2$M*hXafskHBfOTH0G8%PJ?gGB3S#*HgQBpTw5EQ-?oTUc=Helch>x3=Vq{D`Zr315=x z+_KyyV@72rpYmW=$XNMsJ?;2psU6HEbz=?=_P$foP{D*Ij)F~niCKeR(qp@L%_(fz zL~Xop#Tx2c8SkqLpV8({)c5sfL2_STqm#LmBpc(BjZEI%`I3xH-u)801kD^(tEASCSMZP~ZZM=NQf;^>7eNu!3X^2u9kjcCD1L2(t)#a!ic<;vx#{9IJI z#4DBRbLDg8xpEnT(QP?Uq;pU1QdE9Esyxpt7poU4=gKIPH%02Bh7%^$!dqA6%Lu1W zZdmi_uGQ8kp-aYo3SuV7L?WYx6ul~6wQeXAg&laoc6-}fnooDU?^kDMhr?mXlRDLw zo28cR&E^Z*fi4uyn&#}x92mK zQHw6`$7r|Am}K^Gmi)HU*_GYSry>x)Zjy_yDRyE)6*@6+N$Fm9Tv>?G5R0 z7)T8dOWQBIDARozcPHW2yBnDq=bXxbhXUOP9WIaD_mLO?V1{ zE^Q#LdHkHB(3pz)N<*k8wYEJPhbuH6h>w#4&Dq_?T|0_R{+|sA?zq1tONiZsEpg=0 zL>gA_IyJx&D+LG-p$KXty_B=Z2kRY$c8i)Hl z`HbEKk0l$pB6(P%G_k{bI92T?E4U9aM|Qa276cxAiqE1{7?X|+P9@J1!u9Q~sB1*O zFOjT+>YE}#(klAk^n2RVgLQHKHVo7>&~w~Gh?)BvMejw4uS-Lwz%K7bILXMP#bFM* zg6X(odFI>OZ^4B-zQDv3GG^qF-3kMIT266)#UTAguy*yAlU%~+ju|eF6 TJ|?ZP75u}qj{g*Bur>ByowcMD literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/nb/LC_MESSAGES/djangojs.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/nb/LC_MESSAGES/djangojs.po new file mode 100644 index 0000000..7588b48 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/nb/LC_MESSAGES/djangojs.po @@ -0,0 +1,220 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Eirik Krogstad , 2014 +# Jannis Leidel , 2011 +# Jon , 2015-2016 +# Jon , 2014 +# Jon , 2011-2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:50+0200\n" +"PO-Revision-Date: 2017-09-19 16:41+0000\n" +"Last-Translator: Jon \n" +"Language-Team: Norwegian Bokmål (http://www.transifex.com/django/django/" +"language/nb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Tilgjengelige %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Dette er listen over tilgjengelige %s. Du kan velge noen ved å markere de i " +"boksen under og så klikke på \"Velg\"-pilen mellom de to boksene." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Skriv i dette feltet for å filtrere ned listen av tilgjengelige %s." + +msgid "Filter" +msgstr "Filter" + +msgid "Choose all" +msgstr "Velg alle" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Klikk for å velge alle %s samtidig" + +msgid "Choose" +msgstr "Velg" + +msgid "Remove" +msgstr "Slett" + +#, javascript-format +msgid "Chosen %s" +msgstr "Valgte %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Dette er listen over valgte %s. Du kan fjerne noen ved å markere de i boksen " +"under og så klikke på \"Fjern\"-pilen mellom de to boksene." + +msgid "Remove all" +msgstr "Fjern alle" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Klikk for å fjerne alle valgte %s samtidig" + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s av %(cnt)s valgt" +msgstr[1] "%(sel)s av %(cnt)s valgt" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Du har ulagrede endringer i individuelle felter. Hvis du utfører en " +"handling, vil dine ulagrede endringer gå tapt." + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"Du har valgt en handling, men du har ikke lagret dine endringer i " +"individuelle felter enda. Vennligst trykk OK for å lagre. Du må utføre " +"handlingen på nytt." + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Du har valgt en handling, og har ikke gjort noen endringer i individuelle " +"felter. Du ser mest sannsynlig etter Gå-knappen, ikke Lagre-knappen." + +msgid "Now" +msgstr "Nå" + +msgid "Midnight" +msgstr "Midnatt" + +msgid "6 a.m." +msgstr "06:00" + +msgid "Noon" +msgstr "12:00" + +msgid "6 p.m." +msgstr "18:00" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Merk: Du er %s time foran server-tid." +msgstr[1] "Merk: Du er %s timer foran server-tid." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Merk: Du er %s time bak server-tid." +msgstr[1] "Merk: Du er %s timer bak server-tid." + +msgid "Choose a Time" +msgstr "Velg et klokkeslett" + +msgid "Choose a time" +msgstr "Velg et klokkeslett" + +msgid "Cancel" +msgstr "Avbryt" + +msgid "Today" +msgstr "I dag" + +msgid "Choose a Date" +msgstr "Velg en dato" + +msgid "Yesterday" +msgstr "I går" + +msgid "Tomorrow" +msgstr "I morgen" + +msgid "January" +msgstr "Januar" + +msgid "February" +msgstr "Februar" + +msgid "March" +msgstr "Mars" + +msgid "April" +msgstr "April" + +msgid "May" +msgstr "Mai" + +msgid "June" +msgstr "Juni" + +msgid "July" +msgstr "Juli" + +msgid "August" +msgstr "August" + +msgid "September" +msgstr "September" + +msgid "October" +msgstr "Oktober" + +msgid "November" +msgstr "November" + +msgid "December" +msgstr "Desember" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "S" + +msgctxt "one letter Monday" +msgid "M" +msgstr "M" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "T" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "O" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "T" + +msgctxt "one letter Friday" +msgid "F" +msgstr "F" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "L" + +msgid "Show" +msgstr "Vis" + +msgid "Hide" +msgstr "Skjul" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/ne/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/ne/LC_MESSAGES/django.po new file mode 100644 index 0000000..c7e4294 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/ne/LC_MESSAGES/django.po @@ -0,0 +1,645 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Sagar Chalise , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-10-07 02:46+0000\n" +"Last-Translator: Sagar Chalise \n" +"Language-Team: Nepali (http://www.transifex.com/django/django/language/ne/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ne\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "सफलतापूर्वक मेटियो %(count)d %(items)s ।" + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "%(name)s मेट्न सकिएन " + +msgid "Are you sure?" +msgstr "के तपाई पक्का हुनुहुन्छ ?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "%(verbose_name_plural)s छानिएको मेट्नुहोस" + +msgid "Administration" +msgstr "प्रशासन " + +msgid "All" +msgstr "सबै" + +msgid "Yes" +msgstr "हो" + +msgid "No" +msgstr "होइन" + +msgid "Unknown" +msgstr "अज्ञात" + +msgid "Any date" +msgstr "कुनै मिति" + +msgid "Today" +msgstr "आज" + +msgid "Past 7 days" +msgstr "पूर्व ७ दिन" + +msgid "This month" +msgstr "यो महिना" + +msgid "This year" +msgstr "यो साल" + +msgid "No date" +msgstr "" + +msgid "Has date" +msgstr "" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"कृपया स्टाफ खाताको लागि सही %(username)s र पासवर्ड राख्नु होस । दुवै खाली ठाउँ केस " +"सेन्सिटिव हुन सक्छन् ।" + +msgid "Action:" +msgstr "कार्य:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "अर्को %(verbose_name)s थप्नुहोस ।" + +msgid "Remove" +msgstr "हटाउनुहोस" + +msgid "action time" +msgstr "कार्य समय" + +msgid "user" +msgstr "प्रयोग कर्ता" + +msgid "content type" +msgstr "" + +msgid "object id" +msgstr "वस्तु परिचय" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/3/library/functions.html#repr) +msgid "object repr" +msgstr "" + +msgid "action flag" +msgstr "एक्सन फ्ल्याग" + +msgid "change message" +msgstr "सन्देश परिवर्तन गर्नुहोस" + +msgid "log entry" +msgstr "लग" + +msgid "log entries" +msgstr "लगहरु" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr " \"%(object)s\" थपिएको छ ।" + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "\"%(object)s\" - %(changes)s फेरियो ।" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "\"%(object)s\" मेटिएको छ ।" + +msgid "LogEntry Object" +msgstr "लग ईन्ट्री वस्तु" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "" + +msgid "Added." +msgstr "थपिएको छ ।" + +msgid "and" +msgstr "र" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "" + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "" + +msgid "No fields changed." +msgstr "कुनै फाँट फेरिएन ।" + +msgid "None" +msgstr "शुन्य" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "कार्य गर्नका निम्ति वस्तु छान्नु पर्दछ । कुनैपनि छस्तु छानिएको छैन । " + +msgid "No action selected." +msgstr "कार्य छानिएको छैन ।" + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "%(name)s \"%(obj)s\" सफलतापूर्वक मेटियो । " + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "%s थप्नुहोस" + +#, python-format +msgid "Change %s" +msgstr "%s परिवर्तित ।" + +msgid "Database error" +msgstr "डाटाबेस त्रुटि" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s सफलतापूर्वक परिवर्तन भयो ।" +msgstr[1] "%(count)s %(name)sहरु सफलतापूर्वक परिवर्तन भयो ।" + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s चयन भयो" +msgstr[1] "सबै %(total_count)s चयन भयो" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "%(cnt)s को ० चयन गरियो" + +#, python-format +msgid "Change history: %s" +msgstr "इतिहास फेर्नुहोस : %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" + +msgid "Django site admin" +msgstr "ज्याङ्गो साइट प्रशासन" + +msgid "Django administration" +msgstr "ज्याङ्गो प्रशासन" + +msgid "Site administration" +msgstr "साइट प्रशासन" + +msgid "Log in" +msgstr "लगिन" + +#, python-format +msgid "%(app)s administration" +msgstr "" + +msgid "Page not found" +msgstr "पृष्ठ भेटिएन" + +msgid "We're sorry, but the requested page could not be found." +msgstr "क्षमापार्थी छौं तर अनुरोध गरिएको पृष्ठ भेटिएन ।" + +msgid "Home" +msgstr "गृह" + +msgid "Server error" +msgstr "सर्भर त्रुटि" + +msgid "Server error (500)" +msgstr "सर्भर त्रुटि (५००)" + +msgid "Server Error (500)" +msgstr "सर्भर त्रुटि (५००)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"त्रुटी भयो । साइट प्रशासकलाई ई-मेलबाट खबर गरिएको छ र चाँडै समाधान हुनेछ । धैर्यताको " +"लागि धन्यवाद ।" + +msgid "Run the selected action" +msgstr "छानिएको कार्य गर्नुहोस ।" + +msgid "Go" +msgstr "बढ्नुहोस" + +msgid "Click here to select the objects across all pages" +msgstr "सबै पृष्ठभरमा वस्तु छान्न यहाँ थिच्नुहोस ।" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "%(total_count)s %(module_name)s सबै छान्नुहोस " + +msgid "Clear selection" +msgstr "चुनेको कुरा हटाउनुहोस ।" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"सर्वप्रथम प्रयोगकर्ता नाम र पासवर्ड हाल्नुहोस । अनिपछि तपाइ प्रयोगकर्ताका विकल्पहरु " +"संपादन गर्न सक्नुहुनेछ ।" + +msgid "Enter a username and password." +msgstr "प्रयोगकर्ता नाम र पासवर्ड राख्नुहोस।" + +msgid "Change password" +msgstr "पासवर्ड फेर्नुहोस " + +msgid "Please correct the error below." +msgstr "कृपया तलका त्रुटिहरु सच्याउनुहोस ।" + +msgid "Please correct the errors below." +msgstr "कृपया तलका त्रुटी सुधार्नु होस ।" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "प्रयोगकर्ता %(username)s को लागि नयाँ पासवर्ड राख्नुहोस ।" + +msgid "Welcome," +msgstr "स्वागतम्" + +msgid "View site" +msgstr "साइट हेर्नु होस ।" + +msgid "Documentation" +msgstr "विस्तृत विवरण" + +msgid "Log out" +msgstr "लग आउट" + +#, python-format +msgid "Add %(name)s" +msgstr "%(name)s थप्नुहोस" + +msgid "History" +msgstr "इतिहास" + +msgid "View on site" +msgstr "साइटमा हेर्नुहोस" + +msgid "Filter" +msgstr "छान्नुहोस" + +msgid "Remove from sorting" +msgstr "" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "" + +msgid "Toggle sorting" +msgstr "" + +msgid "Delete" +msgstr "मेट्नुहोस" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" + +msgid "Objects" +msgstr "" + +msgid "Yes, I'm sure" +msgstr "हुन्छ, म पक्का छु ।" + +msgid "No, take me back" +msgstr "" + +msgid "Delete multiple objects" +msgstr "वहु वस्तुहरु मेट्नुहोस ।" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "%(objects_name)s " + +msgid "Change" +msgstr "फेर्नुहोस" + +msgid "Delete?" +msgstr "मेट्नुहुन्छ ?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " %(filter_title)s द्वारा" + +msgid "Summary" +msgstr "" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "%(name)s एप्लिकेसनमा भएको मोडेलहरु" + +msgid "Add" +msgstr "थप्नुहोस " + +msgid "You don't have permission to edit anything." +msgstr "तपाइलाई केही पनि संपादन गर्ने अनुमति छैन ।" + +msgid "Recent actions" +msgstr "" + +msgid "My actions" +msgstr "" + +msgid "None available" +msgstr "कुनै पनि उपलब्ध छैन ।" + +msgid "Unknown content" +msgstr "अज्ञात सामग्री" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"डाटाबेस स्थापनामा केही त्रुटी छ । सम्वद्ध टेबल बनाएको र प्रयोगकर्तालाई डाटाबेसमा अनुमति " +"भएको छ छैन जाच्नुहोस ।" + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "पासवर्ड अथवा प्रयोगकर्ता नाम भुल्नुभयो ।" + +msgid "Date/time" +msgstr "मिति/समय" + +msgid "User" +msgstr "प्रयोगकर्ता" + +msgid "Action" +msgstr "कार्य:" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "यो अब्जेक्टको पुर्व परिवर्तन छैन । यो यस " + +msgid "Show all" +msgstr "सबै देखाउनुहोस" + +msgid "Save" +msgstr "बचत गर्नुहोस" + +msgid "Popup closing..." +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "" + +msgid "Search" +msgstr "खोज्नुहोस" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s नतिजा" +msgstr[1] "%(counter)s नतिजाहरु" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "जम्मा %(full_result_count)s" + +msgid "Save as new" +msgstr "नयाँ रुपमा बचत गर्नुहोस" + +msgid "Save and add another" +msgstr "बचत गरेर अर्को थप्नुहोस" + +msgid "Save and continue editing" +msgstr "बचत गरेर संशोधन जारी राख्नुहोस" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "वेब साइटमा समय बिताउनु भएकोमा धन्यवाद ।" + +msgid "Log in again" +msgstr "पुन: लगिन गर्नुहोस" + +msgid "Password change" +msgstr "पासवर्ड फेरबदल" + +msgid "Your password was changed." +msgstr "तपाइको पासवर्ड फेरिएको छ ।" + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"सुरक्षाको निम्ति आफ्नो पुरानो पासवर्ड राख्नुहोस र कृपया दोहर्याएर आफ्नो नयाँ पासवर्ड " +"राख्नुहोस ताकी प्रमाणीकरण होस । " + +msgid "Change my password" +msgstr "मेरो पासवर्ड फेर्नुहोस " + +msgid "Password reset" +msgstr "पासवर्डपून: राख्नुहोस । " + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "तपाइको पासवर्ड राखियो । कृपया लगिन गर्नुहोस ।" + +msgid "Password reset confirmation" +msgstr "पासवर्ड पुनर्स्थापना पुष्टि" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "ठीक तरिकाले राखिएको पुष्टि गर्न कृपया नयाँ पासवर्ड दोहोर्याएर राख्नुहोस ।" + +msgid "New password:" +msgstr "नयाँ पासवर्ड :" + +msgid "Confirm password:" +msgstr "पासवर्ड पुष्टि:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "पासवर्ड पुनर्स्थापना प्रयोग भइसकेको छ । कृपया नयाँ पासवर्ड रिसेट माग्नुहोस ।" + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" +"ई-मेल नपाइए मा कृपया ई-मेल ठेगाना सही राखेको नराखेको जाँच गर्नु होला र साथै आफ्नो ई-" +"मेलको स्प्याम पनि जाँच गर्नु होला ।" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +" %(site_name)s को लागि तपाइले पासवर्ड पुन: राख्न आग्रह गरेको हुनाले ई-मेल पाउनुहुदैंछ । " + +msgid "Please go to the following page and choose a new password:" +msgstr "कृपया उक्त पृष्ठमा जानुहोस र नयाँ पासवर्ड राख्नुहोस :" + +msgid "Your username, in case you've forgotten:" +msgstr "तपाइको प्रयोगकर्ता नाम, बिर्सनुभएको भए :" + +msgid "Thanks for using our site!" +msgstr "हाम्रो साइट प्रयोग गरेकोमा धन्यवाद" + +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s टोली" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" +"पासवर्ड बिर्सनु भयो ? तल ई-मेल दिनु होस र हामी नयाँ पासवर्ड हाल्ने प्रकृया पठाइ दिनेछौँ ।" + +msgid "Email address:" +msgstr "ई-मेल ठेगाना :" + +msgid "Reset my password" +msgstr "मेरो पासवर्ड पुन: राख्नुहोस ।" + +msgid "All dates" +msgstr "सबै मिति" + +#, python-format +msgid "Select %s" +msgstr "%s छान्नुहोस" + +#, python-format +msgid "Select %s to change" +msgstr "%s परिवर्तन गर्न छान्नुहोस ।" + +msgid "Date:" +msgstr "मिति:" + +msgid "Time:" +msgstr "समय:" + +msgid "Lookup" +msgstr "खोज तलास" + +msgid "Currently:" +msgstr "अहिले :" + +msgid "Change:" +msgstr "फेर्नु होस :" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/ne/LC_MESSAGES/djangojs.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/ne/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..820885722a24f51b798ec671a28202510a97f65e GIT binary patch literal 5362 zcmd^>O^h5z6~_w_KC%V^CVU1+t%Z|y?4F%nz-!Ig2v}llz=`DyC^<#FJGDD)db(HL zJv&};AmPi2EI=qYF?N&)(&HHC%K{B>I+g5PDn`H5WiQ|^R+u!*2)1S zS~K(Ss(SV6U;p>&)%<1W&1V(QB;Swm{p4Geng;j1l^>p0!8!0X@a^E_O%A8PchR0M z+XqWr0N+jjmrH!0#AR@T{tUbY{1$iz_!xL6_zO_{zXIM2{sDX^_~)|ySMUMauY+}P z0V7`3IZ)<31&aS?K|bmwetrV}3j8s6Hp??+`J!x;{P%z^M4P{VgGk< z9^CU@rHb#cs0YulJ-(t(!yXho*BbP!n=i}5MQhH*#x@MR>@OQLmYr+2yd?n1T% zqeYW-3^uZQ)`>OKO63oFvx8{bU&?|w+Gq7!FAbu*GTrhUv@S_#O z*^6M%2-bo|+YedWgpJf{a~B!8n#7BotaTm6u@!$gCLK}vONiXgGA1WJZRuoD8M$AW zxUtIC)G*S+)KX?Pq$lZ#n3xp)&lW4u$%K{s$O+YS7&RV-oLlXGx1eF&AfWzM``G1aZ)2pD}JIE znm*ZO^g$$$msEN`x6-1ZR+i${XPFnRwEY$1)s5e(>3hv8c6zFrWvjL6=}xCp$;4@} zY);99X}7H&gyrn%$V~5k75QZ`5X&DF`EznFSxOge`(lrx3|_Ks zu0gcOuWHOLxK*v?roopiv7BFgY_z1S=cnlAxVl>8OnCXmOgG55iKFw&&K@1(cfbI% z9zTi1k9y$}C0s-16GAjVDNN20n`&)MJMB@Va z?6T+ohYiQo#rc0in;T_Ac1cMn@+WL%x}vtoYQ}oUYYQtmTNEqG+!Ho!$0fHESJG-s zv7^`4W}DIE)%l`Jk#xnWoAWlD*JM1$=rp}J6tltcpn)Gqkg76533dg;?m&*yGxTmO zSfiG9TK8c~g5j-Io^38zDxU>%d)&azZZ@UG5M57}@+` zkDM6Eq%o7+fv|VTFfFc*bB-Xhe{L_8Q3c$M@n-fd$DAt?{~PzVCE+*PC5Pxcb_di( zIl<$c(A~cS-MyE0Z5XLnn_}$5+Ze{n?hci^n)H3z&O=>7O?di$MF-x9w95hHW5d0x xc38Ob_-~B%$R4%`??#5sv`nFa3glbQiPdM!ayGkUE3WuUqH=5`L+l@fe*+UY5ySuh literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/nl/LC_MESSAGES/djangojs.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/nl/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..348bbbc1ad7fc38620aa67e80c72eeeff8a69ebf GIT binary patch literal 4619 zcmb`JO^h5z6@V+mA<2dW2qgR^p=_|%#-84vIJPs6Nj7WmVmoUa?>Ht14mH!YGriMO zHFQ_+czsBe3kM=0MF|ohaR3fTNJ!=Y$^i*3a6m{LIG_kA;>L*^xq;w&-95Xr$>OXC zwOjLbRad=w_1>#`{nmr~zN09|sgF>9b%#>R@N0MSL%Fd}sgrOMeh~h=<{R)X+P|*b zzl9&7{fD~!X3f9C`|1B%&9`gb$>b^eKML=KkHF8uL+}t>g7?5d%?&8)zXTDXz6tM! zuhi|=YJL~;uYSOfY~jaHzkAF2HF4Ez!8zrYvaiztPe)xT=~yXGAaR{eL@ysPHjHSewYN#;tKuTcJq z-cm53im0EU9-{82O8HcU(r)5&DYB<&s@Ui;s@Oux(F*0B z4U?p%omzb`SBu7VY^oM}-siT4Hu|gy6RlPLTs7u~Eeu8c47kr^jCY#kgUu4?!tck^*xy?3gre!zD<@*{P*6TDd9YH6q%VlTC7hoKs`+GAj=m*krN(6c&CaxA^3 z&4h!aa{mLfIrd5J2UfQ?>nKWGSEdeh;z|*1e}jFbexwas;f>QBaaui2AE*N502a*{ z)V5({86&HQk=IPOd9DUpBrZ(K+BS{z(l*ls>oD_ej_9UNy)TWw=806Syo`~H5SW}9+S19Q@@7>usoq7m zSB*h>Qnj3!vGinH%3+OnDW^AWi1d}zn%q`Vp)X$)yUF}YbI!Z7$f7f|jjX6Nt4uPX zRN<;6cQ=KNlTcnyW1E~`E7cWo69z8zeW#>Rf(mVpg3m*wyyM9R+@+VY1efhwn(SNg zPWo0R`&LaT#JT%cck~wJ$Q^yHUXkT8vNbufRoHiTUbnHUy05D%nP2DnZk&%B&)X~~ zR+>6qCnWsTRXg-qXsqPjByK!gbn`~bH}%w&%dN&@W{t#ELoVi~o}ZmN)tG&vF?UkW z%{8BxJvuu-JIlbvRlAXh%Cu#-%eyrdH0coZH^@Tr@ki=v}Z5Z8(rk9qf%TGfYk5PD>e10b`rLfY-*QIT}g|~q>Uw?4RSh$WivlBe_B_MXAV2P|BRkHa(Zej zhi(vA9MEx&<$zXMmXp4xF(-7v@tNjWcY5q7&Ply>kJ%v3a%IXKY|0#53u{SH^TJF}Eh#W|7)eOmcoQGt%vqvqY9V+u#cLX9~);tuj%IMIZNsqHg!Q3>jp{IV!aJ7*B)E(!<&g1 zR@Z*2a<|wb`u|TA73F6ApVr;uWXJbU`Hgd_P`+O!d+a#2w%U3wU6-qTEA4YwvGmy_ zNZKc4@fB%*fc@G#LMqbNbiZ&xvlWRWV_YE7R53!5!?HIe3F;nGH%wpm5}OgJ<<7?` z4aaN#W4!1LUXTTc$$F}%t1z9`p~&U?jehwQ5J7#K5@&=SkI}BGZpYhyQF9{l-oLI} z#)1sZW1$*l}a;lnr>rt*?ILHAzNSOi>y4<*RXOMS6~{+hE`8r zFvrBiU3rK5Zzf%?HJ(}0tlcafBF9k}nELYKTT&}(mA@8$*VTUjZ8rJV literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/nl/LC_MESSAGES/djangojs.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/nl/LC_MESSAGES/djangojs.po new file mode 100644 index 0000000..f89838c --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/nl/LC_MESSAGES/djangojs.po @@ -0,0 +1,226 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Bouke Haarsma , 2013 +# Evelijn Saaltink , 2016 +# Harro van der Klauw , 2012 +# Ilja Maas , 2015 +# Jannis Leidel , 2011 +# Jeffrey Gelens , 2011-2012 +# Sander Steffann , 2015 +# Tonnes , 2019 +# wunki , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:50+0200\n" +"PO-Revision-Date: 2019-02-24 20:42+0000\n" +"Last-Translator: Tonnes \n" +"Language-Team: Dutch (http://www.transifex.com/django/django/language/nl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Beschikbare %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Dit is de lijst met beschikbare %s. U kunt er een aantal kiezen door ze in " +"het vak hieronder te selecteren en daarna op de pijl 'Kiezen' tussen de twee " +"vakken te klikken." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Typ in dit vak om de lijst met beschikbare %s te filteren." + +msgid "Filter" +msgstr "Filter" + +msgid "Choose all" +msgstr "Alle kiezen" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Klik om alle %s te kiezen." + +msgid "Choose" +msgstr "Kiezen" + +msgid "Remove" +msgstr "Verwijderen" + +#, javascript-format +msgid "Chosen %s" +msgstr "Gekozen %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Dit is de lijst met gekozen %s. U kunt er een aantal verwijderen door ze in " +"het vak hieronder te selecteren en daarna op de pijl 'Verwijderen' tussen de " +"twee vakken te klikken." + +msgid "Remove all" +msgstr "Verwijder alles" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Klik om alle gekozen %s tegelijk te verwijderen." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s van de %(cnt)s geselecteerd" +msgstr[1] "%(sel)s van de %(cnt)s geselecteerd" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"U hebt niet-opgeslagen wijzigingen op afzonderlijke bewerkbare velden. Als u " +"een actie uitvoert, gaan uw wijzigingen verloren." + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"U hebt een actie geselecteerd, maar uw wijzigingen in afzonderlijke velden " +"nog niet opgeslagen. Klik op OK om op te slaan. U dient de actie opnieuw uit " +"te voeren." + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"U hebt een actie geselecteerd, en geen wijzigingen in afzonderlijke velden " +"aangebracht. Waarschijnlijk zoekt u de knop Gaan in plaats van de knop " +"Opslaan." + +msgid "Now" +msgstr "Nu" + +msgid "Midnight" +msgstr "Middernacht" + +msgid "6 a.m." +msgstr "6 uur 's ochtends" + +msgid "Noon" +msgstr "12 uur 's middags" + +msgid "6 p.m." +msgstr "6 uur 's avonds" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Let op: u ligt %s uur voor ten opzichte van de servertijd." +msgstr[1] "Let op: u ligt %s uur voor ten opzichte van de servertijd." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Let op: u ligt %s uur achter ten opzichte van de servertijd." +msgstr[1] "Let op: u ligt %s uur achter ten opzichte van de servertijd." + +msgid "Choose a Time" +msgstr "Kies een tijdstip" + +msgid "Choose a time" +msgstr "Kies een tijd" + +msgid "Cancel" +msgstr "Annuleren" + +msgid "Today" +msgstr "Vandaag" + +msgid "Choose a Date" +msgstr "Kies een datum" + +msgid "Yesterday" +msgstr "Gisteren" + +msgid "Tomorrow" +msgstr "Morgen" + +msgid "January" +msgstr "januari" + +msgid "February" +msgstr "februari" + +msgid "March" +msgstr "maart" + +msgid "April" +msgstr "april" + +msgid "May" +msgstr "mei" + +msgid "June" +msgstr "juni" + +msgid "July" +msgstr "juli" + +msgid "August" +msgstr "augustus" + +msgid "September" +msgstr "september" + +msgid "October" +msgstr "oktober" + +msgid "November" +msgstr "november" + +msgid "December" +msgstr "december" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "S" + +msgctxt "one letter Monday" +msgid "M" +msgstr "M" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "T" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "W" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "T" + +msgctxt "one letter Friday" +msgid "F" +msgstr "F" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "S" + +msgid "Show" +msgstr "Tonen" + +msgid "Hide" +msgstr "Verbergen" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/os/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/os/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..dbf509f59e4f8bed8737727995a50431dd2ef9ea GIT binary patch literal 14978 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 VdVh!@q;d}TP6&g2vR9Mle*x&7ET8}Y literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/os/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/os/LC_MESSAGES/django.po new file mode 100644 index 0000000..aae9d9c --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/os/LC_MESSAGES/django.po @@ -0,0 +1,665 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Soslan Khubulov , 2013 +# Soslan Khubulov , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Ossetic (http://www.transifex.com/django/django/language/" +"os/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: os\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(count)d %(items)s хафт ӕрцыдысты." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Нӕ уайы схафын %(name)s" + +msgid "Are you sure?" +msgstr "Ӕцӕг дӕ фӕнды?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Схафын ӕвзӕрст %(verbose_name_plural)s" + +msgid "Administration" +msgstr "" + +msgid "All" +msgstr "Иууылдӕр" + +msgid "Yes" +msgstr "О" + +msgid "No" +msgstr "Нӕ" + +msgid "Unknown" +msgstr "Ӕнӕбӕрӕг" + +msgid "Any date" +msgstr "Цыфӕнды бон" + +msgid "Today" +msgstr "Абон" + +msgid "Past 7 days" +msgstr "Фӕстаг 7 бон" + +msgid "This month" +msgstr "Ацы мӕй" + +msgid "This year" +msgstr "Ацы аз" + +msgid "No date" +msgstr "" + +msgid "Has date" +msgstr "" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Дӕ хорзӕхӕй, раст кусӕджы аккаунты %(username)s ӕмӕ пароль бафысс. Дӕ сӕры " +"дар уый, ӕмӕ дыууӕ дӕр гӕнӕн ис стыр ӕмӕ гыццыл дамгъӕ ӕвзарой." + +msgid "Action:" +msgstr "Ми:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Бафтауын ӕндӕр %(verbose_name)s" + +msgid "Remove" +msgstr "Схафын" + +msgid "action time" +msgstr "мийы рӕстӕг" + +msgid "user" +msgstr "" + +msgid "content type" +msgstr "" + +msgid "object id" +msgstr "объекты бӕрӕггӕнӕн" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/3/library/functions.html#repr) +msgid "object repr" +msgstr "объекты хуыз" + +msgid "action flag" +msgstr "мийы флаг" + +msgid "change message" +msgstr "фыстӕг фӕивын" + +msgid "log entry" +msgstr "логы иуӕг" + +msgid "log entries" +msgstr "логы иуӕгтӕ" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "Ӕфтыд ӕрцыд \"%(object)s\"." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "Ивд ӕрцыд \"%(object)s\" - %(changes)s" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "Хафт ӕрцыд \"%(object)s.\"" + +msgid "LogEntry Object" +msgstr "ЛогыИуӕг Объект" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "" + +msgid "Added." +msgstr "" + +msgid "and" +msgstr "ӕмӕ" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "" + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "" + +msgid "No fields changed." +msgstr "Ивд бынат нӕй." + +msgid "None" +msgstr "Никӕцы" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Иуӕгтӕ хъуамӕ ӕвзӕрст уой, цӕмӕй цын исты ми бакӕнай. Ницы иуӕг ӕрцыд ивд." + +msgid "No action selected." +msgstr "Ницы ми у ӕвзӕрст." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "%(name)s \"%(obj)s\" хафт ӕрцыд." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "Бафтауын %s" + +#, python-format +msgid "Change %s" +msgstr "Фӕивын %s" + +msgid "Database error" +msgstr "Бӕрӕгдоны рӕдыд" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s ивд ӕрцыд." +msgstr[1] "%(count)s %(name)s ивд ӕрцыдысты." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s у ӕвзӕрст" +msgstr[1] "%(total_count)s дӕр иууылдӕр сты ӕвзӕрст" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "%(cnt)s-ӕй 0 у ӕвзӕрст" + +#, python-format +msgid "Change history: %s" +msgstr "Ивынты истори: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" + +msgid "Django site admin" +msgstr "Django сайты админ" + +msgid "Django administration" +msgstr "Django администраци" + +msgid "Site administration" +msgstr "Сайты администраци" + +msgid "Log in" +msgstr "Бахизын" + +#, python-format +msgid "%(app)s administration" +msgstr "" + +msgid "Page not found" +msgstr "Фарс нӕ зыны" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Хатыр, фӕлӕ домд фарс нӕ зыны." + +msgid "Home" +msgstr "Хӕдзар" + +msgid "Server error" +msgstr "Серверы рӕдыд" + +msgid "Server error (500)" +msgstr "Серверы рӕдыд (500)" + +msgid "Server Error (500)" +msgstr "Серверы Рӕдыд (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Рӕдыд разынд. Уый тыххӕй сайты администратормӕ электрон фыстӕг ӕрвыст ӕрцыд " +"ӕмӕ йӕ тагъд сраст кӕндзысты. Бузныг кӕй лӕууыс." + +msgid "Run the selected action" +msgstr "Бакӕнын ӕвзӕрст ми" + +msgid "Go" +msgstr "Бацӕуын" + +msgid "Click here to select the objects across all pages" +msgstr "Ам ныххӕц цӕмӕй алы фарсы объекттӕ равзарын" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Равзарын %(total_count)s %(module_name)s иууылдӕр" + +msgid "Clear selection" +msgstr "Ӕвзӕрст асыгъдӕг кӕнын" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"Фыццаг бафысс фӕсномыг ӕмӕ пароль. Стӕй дӕ бон уыдзӕн фылдӕр архайӕджы " +"фадӕттӕ ивын." + +msgid "Enter a username and password." +msgstr "Бафысс фӕсномыг ӕмӕ пароль." + +msgid "Change password" +msgstr "Пароль фӕивын" + +msgid "Please correct the error below." +msgstr "Дӕ хорзӕхӕй, бындӕр цы рӕдыдтытӕ ис, уыдон сраст кӕн." + +msgid "Please correct the errors below." +msgstr "" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Бафысс ног пароль архайӕг %(username)s-ӕн." + +msgid "Welcome," +msgstr "Ӕгас цу," + +msgid "View site" +msgstr "" + +msgid "Documentation" +msgstr "Документаци" + +msgid "Log out" +msgstr "Рахизын" + +#, python-format +msgid "Add %(name)s" +msgstr "Бафтауын %(name)s" + +msgid "History" +msgstr "Истори" + +msgid "View on site" +msgstr "Сайты фенын" + +msgid "Filter" +msgstr "Фӕрсудзӕн" + +msgid "Remove from sorting" +msgstr "Радӕй айсын" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Рады приоритет: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Рад аивын" + +msgid "Delete" +msgstr "Схафын" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"%(object_name)s '%(escaped_object)s' хафыны тыххӕй баст объекттӕ дӕр хафт " +"ӕрцӕудзысты, фӕлӕ дӕ аккаунтӕн нӕй бар ацы объекты хуызтӕ хафын:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"%(object_name)s '%(escaped_object)s' хафын домы ацы хъахъхъӕд баст объекттӕ " +"хафын дӕр:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Ӕцӕг дӕ фӕнды %(object_name)s \"%(escaped_object)s\" схафын? Ацы баст иуӕгтӕ " +"иууылдӕр хафт ӕрцӕудзысты:" + +msgid "Objects" +msgstr "" + +msgid "Yes, I'm sure" +msgstr "О, ӕцӕг мӕ фӕнды" + +msgid "No, take me back" +msgstr "" + +msgid "Delete multiple objects" +msgstr "Цалдӕр объекты схафын" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Ӕвзӕрст %(objects_name)s хафыны тыххӕй йемӕ баст объекттӕ дӕр схафт " +"уыдзысты, фӕлӕ дӕ аккаунтӕн нӕй бар ацы объекты хуызтӕ хафын:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Ӕвзӕрст %(objects_name)s хафын домы ацы хъахъхъӕд баст объекттӕ хафын дӕр:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Ӕцӕг дӕ фӕнды ӕвзӕрст %(objects_name)s схафын? ацы объекттӕ иууылдӕр, ӕмӕ " +"семӕ баст иуӕгтӕ хафт ӕрцӕудзысты:" + +msgid "Change" +msgstr "Фӕивын" + +msgid "Delete?" +msgstr "Хъӕуы схафын?" + +#, python-format +msgid " By %(filter_title)s " +msgstr "%(filter_title)s-мӕ гӕсгӕ" + +msgid "Summary" +msgstr "" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Моделтӕ %(name)s ӕфтуаны" + +msgid "Add" +msgstr "Бафтауын" + +msgid "You don't have permission to edit anything." +msgstr "Нӕй дын бар исты ивын." + +msgid "Recent actions" +msgstr "" + +msgid "My actions" +msgstr "" + +msgid "None available" +msgstr "Ницы ис" + +msgid "Unknown content" +msgstr "Ӕнӕбӕрӕг мидис" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Дӕ бӕрӕгдоны цыдӕр раст ӕвӕрд нӕу. Сбӕрӕг кӕн, хъӕугӕ бӕрӕгдоны таблицӕтӕ " +"конд кӕй сты ӕмӕ амынд архайӕгӕн бӕрӕгдон фӕрсыны бар кӕй ис, уый." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "Дӕ пароль кӕнӕ дӕ фӕсномыг ферох кодтай?" + +msgid "Date/time" +msgstr "Бон/рӕстӕг" + +msgid "User" +msgstr "Архайӕг" + +msgid "Action" +msgstr "Ми" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "Ацы объектӕн ивдтыты истори нӕй. Уӕццӕгӕн ацы админӕй ӕфтыд нӕ уыд." + +msgid "Show all" +msgstr "Иууылдӕр равдисын" + +msgid "Save" +msgstr "Нывӕрын" + +msgid "Popup closing..." +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "" + +msgid "Search" +msgstr "Агурын" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s фӕстиуӕг" +msgstr[1] "%(counter)s фӕстиуӕджы" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s иумӕ" + +msgid "Save as new" +msgstr "Нывӕрын куыд ног" + +msgid "Save and add another" +msgstr "Нывӕрын ӕмӕ ног бафтауын" + +msgid "Save and continue editing" +msgstr "Нывӕрын ӕмӕ дарддӕр ивын" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Бузныг дӕ рӕстӕг абон ацы веб сайтимӕ кӕй арвыстай." + +msgid "Log in again" +msgstr "Ногӕй бахизын" + +msgid "Password change" +msgstr "Пароль ивын" + +msgid "Your password was changed." +msgstr "Дӕ пароль ивд ӕрцыд." + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Дӕ хорзӕхӕй, ӕдасдзинады тыххӕй, бафысс дӕ зӕронд пароль ӕмӕ стӕй та дыууӕ " +"хатт дӕ нӕуӕг пароль, цӕмӕй мах сбӕлвырд кӕнӕм раст ӕй кӕй ныффыстай, уый." + +msgid "Change my password" +msgstr "Мӕ пароль фӕивын" + +msgid "Password reset" +msgstr "Пароль рацаразын" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Дӕ пароль ӕвӕрд ӕрцыд. Дӕ бон у дарддӕр ацӕуын ӕмӕ бахизын." + +msgid "Password reset confirmation" +msgstr "Пароль ӕвӕрыны бӕлвырдгӕнӕн" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Дӕ хорзӕхӕй, дӕ ног пароль дыууӕ хатт бафысс, цӕмӕй мах сбӕрӕг кӕнӕм раст ӕй " +"кӕй ныффыстай, уый." + +msgid "New password:" +msgstr "Ног пароль:" + +msgid "Confirm password:" +msgstr "Бӕлвырд пароль:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Парол ӕвӕрыны ӕрвитӕн раст нӕ уыд. Уӕццӕгӕн уый тыххӕй, ӕмӕ нырид пайдагонд " +"ӕрцыд. Дӕ хорзӕхӕй, ӕрдом ног пароль ӕвӕрын." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Кӕд ницы фыстӕг райстай, уӕд, дӕ хорзӕхӕй, сбӕрӕг кӕн цы электрон постимӕ " +"срегистраци кодтай, уый бацамыдтай, ӕви нӕ, ӕмӕ абӕрӕг кӕн дӕ спамтӕ." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Ды райстай ацы фыстӕг, уымӕн ӕмӕ %(site_name)s-ы дӕ архайӕджы аккаунтӕн " +"пароль сӕвӕрын ӕрдомдтай." + +msgid "Please go to the following page and choose a new password:" +msgstr "Дӕ хорзӕхӕй, ацу ацы фарсмӕ ӕмӕ равзар дӕ ног пароль:" + +msgid "Your username, in case you've forgotten:" +msgstr "Дӕ фӕсномыг, кӕд дӕ ферох ис:" + +msgid "Thanks for using our site!" +msgstr "Бузныг нӕ сайтӕй нын кӕй пайда кӕныс!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s-ы бал" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" +"Ферох дӕ ис дӕ пароль? Дӕ пароль бындӕр бафысс, ӕмӕ дӕм мах email-ӕй ног " +"пароль сывӕрыны амынд арвитдзыстӕм." + +msgid "Email address:" +msgstr "Email адрис:" + +msgid "Reset my password" +msgstr "Мӕ пароль ногӕй сӕвӕрын" + +msgid "All dates" +msgstr "Бонтӕ иууылдӕр" + +#, python-format +msgid "Select %s" +msgstr "Равзарын %s" + +#, python-format +msgid "Select %s to change" +msgstr "Равзарын %s ивынӕн" + +msgid "Date:" +msgstr "Бон:" + +msgid "Time:" +msgstr "Рӕстӕг:" + +msgid "Lookup" +msgstr "Акӕсын" + +msgid "Currently:" +msgstr "Нырыккон:" + +msgid "Change:" +msgstr "Ивд:" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/os/LC_MESSAGES/djangojs.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/os/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..7af0f7931e4e5d102314e82d76aeba18447da8ba GIT binary patch literal 3806 zcmbtVTWl0n7#~@cvcw19e3`KiMng=9#z$X#GBMHbKWFw<3L4#X_S-q2YO;19ri zfxiHs0saPj4!GtH6=y4O72bCO?*ZG6Cjqd^X;{9njlYb6hREGdQ2z)of4}cr+ z{weTTUPk^N3IUwmXAMJk!TnAo1 z1HZ@m9|(fbTDV&I{Rn&u@7IB}z6(LV2JQ!LfZuA6FXO#^jiylx0kR&LOFjUZmymR$ z7{rf0597I8{%Zb0>m=v(z$frfeUMXo6wi}**5RQKTA@9Fhje)i4@!_VKMtf1&6w8O z=5f2-Vdjy(hf@B2q=VhXb8)xAO(%cp$W;$6~aae}fM|P}5snWts*M(7<`y~z=%I=p0gFE+( z6-m_!t}}|{_@9iFF#p6zWX(}6CGvuJYpKx!N6BcJPx?{S_??ptU|CU86|JbJc9?r; z6NMvXhfFlII%*J&nHk>_&K9ZPXk_4Q^3j4UI`2>)OlOc|R2?wLTEkYhXxhll?W`xY z+2nFoa77yPILd4xr1&}EN|pCQ%BYV8j}!dGO5Aid!QG zHEtlsM!9dW0h^m1S5v|IUnAYfUopqvI~=jF=yKgHDrQQO22w>wrCeDGp0#{=7OR@< z%SpNvu0deQcX_0e1qx{#1>yOIHsFe*xC8WkS^Z7!dgx1%WsgFB5j)5W!u9n&Z_vu> zFBbL~qH}Y+GaiSbevl7a6tix( zO^@%;6FXRa&qED z_&9?_bCByPZswD$-}AU{Wmwyg?-!CC9i>vq@F}8|<0D2!89?x$kp>kYLC9XZb!Lt+|_qG8Ii?JkYwA_ zmS3ZpWWtLL*hSa0^*zGPdr9UL|u%a?iem)c|+?Jw>b|$ImH0$WI1kvZeAq3@%}T3InYx!TDez9Ea63eFyUmi`cqK4wQUM z3uf!Vn_gBbSc*E2oQSP7Y}8y2Cs1urLHH|D^b6tfplq<<)Y1%7Sy?#A$hj&csn4he zIFd%;B*-peVGct)=kn(akNj4~^NlayUp2(=CkmYfy&V;0c5LaXlR69xGZ#0NB zs<4)*zS@km=*Wo(R0v6b0eKdyT!Koy*NUWMUq)Zi3#t?z&8@ttLbFs>Qd-s< z1!dVgVvXY^uLnwfkuGjZgISY(q}o+enmY_uXAp~`R81*6t{mL^GLXDa)KOJUCaO12 SA5H~d%A0gb-BT*6q5TcX$#mra literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/os/LC_MESSAGES/djangojs.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/os/LC_MESSAGES/djangojs.po new file mode 100644 index 0000000..ec6c9c4 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/os/LC_MESSAGES/djangojs.po @@ -0,0 +1,217 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Soslan Khubulov , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-17 23:12+0200\n" +"PO-Revision-Date: 2017-09-19 16:41+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Ossetic (http://www.transifex.com/django/django/language/" +"os/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: os\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Уӕвӕг %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Уӕвӕг %s-ты номхыгъд. Дӕ бон у искӕцытӕ дзы рауӕлдай кӕнай, куы сӕ равзарай " +"бындӕр къӕртты ӕмӕ дыууӕ къӕртты ӕхсӕн \"Равзарын\"-ы ӕгънӕгыл куы ныххӕцай, " +"уӕд." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Бафысс ацы къӕртты, уӕвӕг %s-ты номхыгъд фӕрсудзынӕн." + +msgid "Filter" +msgstr "Фӕрсудзӕн" + +msgid "Choose all" +msgstr "Равзарын алкӕцыдӕр" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Ныххӕц, алы %s равзарынӕн." + +msgid "Choose" +msgstr "Равзарын" + +msgid "Remove" +msgstr "Схафын" + +#, javascript-format +msgid "Chosen %s" +msgstr "Ӕвзӕрст %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Ай у ӕвзӕрст %s-ты номхыгъд. Сӕ хафынӕн сӕ дӕ бон у бындӕр къӕртты равзарын " +"ӕмӕ дыууӕ ӕгънӕджы ӕхсӕн \"Схфын\"-ыл ныххӕцын." + +msgid "Remove all" +msgstr "Схафын алкӕцыдӕр" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Ныххӕц, алы ӕвзӕрст %s схафынӕн." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(cnt)s-ӕй %(sel)s ӕвзӕрст" +msgstr[1] "%(cnt)s-ӕй %(sel)s ӕвзӕрст" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Ӕнӕвӕрд ивдтытӕ баззадысты ивыны бынӕтты. Кӕд исты ми саразай, уӕд дӕ " +"ӕнӕвӕрд ивдтытӕ фесӕфдзысты." + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"Ды равзӕрстай цыдӕр ми, фӕлӕ ивӕн бынӕтты цы фӕивтай, уыдон нӕ бавӕрдтай. Дӕ " +"хорзӕхӕй, ныххӕц Хорзыл цӕмӕй бавӕрд уой. Стӕй дын хъӕудзӕн ацы ми ногӕй " +"бакӕнын." + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Ды равзӕртай цыдӕр ми, фӕлӕ ивӕн бынӕтты ницы баивтай. Уӕццӕгӕн дӕ Ацӕуыны " +"ӕгънӕг хъӕуы, Бавӕрыны нӕ фӕлӕ." + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "" +msgstr[1] "" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" +msgstr[1] "" + +msgid "Now" +msgstr "Ныр" + +msgid "Choose a Time" +msgstr "" + +msgid "Choose a time" +msgstr "Рӕстӕг равзарын" + +msgid "Midnight" +msgstr "Ӕмбисӕхсӕв" + +msgid "6 a.m." +msgstr "6 ӕ.р." + +msgid "Noon" +msgstr "Ӕмбисбон" + +msgid "6 p.m." +msgstr "" + +msgid "Cancel" +msgstr "Раздӕхын" + +msgid "Today" +msgstr "Абон" + +msgid "Choose a Date" +msgstr "" + +msgid "Yesterday" +msgstr "Знон" + +msgid "Tomorrow" +msgstr "Сом" + +msgid "January" +msgstr "" + +msgid "February" +msgstr "" + +msgid "March" +msgstr "" + +msgid "April" +msgstr "" + +msgid "May" +msgstr "" + +msgid "June" +msgstr "" + +msgid "July" +msgstr "" + +msgid "August" +msgstr "" + +msgid "September" +msgstr "" + +msgid "October" +msgstr "" + +msgid "November" +msgstr "" + +msgid "December" +msgstr "" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "" + +msgctxt "one letter Monday" +msgid "M" +msgstr "" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "" + +msgctxt "one letter Friday" +msgid "F" +msgstr "" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "" + +msgid "Show" +msgstr "Равдисын" + +msgid "Hide" +msgstr "Айсын" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/pa/LC_MESSAGES/djangojs.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/pa/LC_MESSAGES/djangojs.po new file mode 100644 index 0000000..2a36046 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/pa/LC_MESSAGES/djangojs.po @@ -0,0 +1,205 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:50+0200\n" +"PO-Revision-Date: 2017-09-19 16:41+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Panjabi (Punjabi) (http://www.transifex.com/django/django/" +"language/pa/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pa\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "ਉਪਲੱਬਧ %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "" + +msgid "Filter" +msgstr "ਫਿਲਟਰ" + +msgid "Choose all" +msgstr "ਸਭ ਚੁਣੋ" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "" + +msgid "Choose" +msgstr "" + +msgid "Remove" +msgstr "ਹਟਾਓ" + +#, javascript-format +msgid "Chosen %s" +msgstr "%s ਚੁਣੋ" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" + +msgid "Remove all" +msgstr "" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "" + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "" +msgstr[1] "" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" + +msgid "Now" +msgstr "ਹੁਣੇ" + +msgid "Midnight" +msgstr "ਅੱਧੀ-ਰਾਤ" + +msgid "6 a.m." +msgstr "6 ਸਵੇਰ" + +msgid "Noon" +msgstr "ਦੁਪਹਿਰ" + +msgid "6 p.m." +msgstr "" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "" +msgstr[1] "" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" +msgstr[1] "" + +msgid "Choose a Time" +msgstr "" + +msgid "Choose a time" +msgstr "ਸਮਾਂ ਚੁਣੋ" + +msgid "Cancel" +msgstr "ਰੱਦ ਕਰੋ" + +msgid "Today" +msgstr "ਅੱਜ" + +msgid "Choose a Date" +msgstr "" + +msgid "Yesterday" +msgstr "ਕੱਲ੍ਹ" + +msgid "Tomorrow" +msgstr "ਭਲਕੇ" + +msgid "January" +msgstr "" + +msgid "February" +msgstr "" + +msgid "March" +msgstr "" + +msgid "April" +msgstr "" + +msgid "May" +msgstr "" + +msgid "June" +msgstr "" + +msgid "July" +msgstr "" + +msgid "August" +msgstr "" + +msgid "September" +msgstr "" + +msgid "October" +msgstr "" + +msgid "November" +msgstr "" + +msgid "December" +msgstr "" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "" + +msgctxt "one letter Monday" +msgid "M" +msgstr "" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "" + +msgctxt "one letter Friday" +msgid "F" +msgstr "" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "" + +msgid "Show" +msgstr "ਵੇਖੋ" + +msgid "Hide" +msgstr "ਓਹਲੇ" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/pl/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c27a1cb55bedc641c665fe4609f83e084f17a14a GIT binary patch literal 17192 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 C*zy?w literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/pt/LC_MESSAGES/djangojs.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/pt/LC_MESSAGES/djangojs.po new file mode 100644 index 0000000..1737994 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/pt/LC_MESSAGES/djangojs.po @@ -0,0 +1,222 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Nuno Mariz , 2011-2012,2015,2017 +# Paulo Köch , 2011 +# Raúl Pedro Fernandes Santos, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-17 23:12+0200\n" +"PO-Revision-Date: 2017-11-30 23:49+0000\n" +"Last-Translator: Nuno Mariz \n" +"Language-Team: Portuguese (http://www.transifex.com/django/django/language/" +"pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Disponível %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Esta é a lista de %s disponíveis. Poderá escolher alguns, selecionando-os na " +"caixa abaixo e clicando na seta \"Escolher\" entre as duas caixas." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Digite nesta caixa para filtrar a lista de %s disponíveis." + +msgid "Filter" +msgstr "Filtrar" + +msgid "Choose all" +msgstr "Escolher todos" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Clique para escolher todos os %s de uma vez." + +msgid "Choose" +msgstr "Escolher" + +msgid "Remove" +msgstr "Remover" + +#, javascript-format +msgid "Chosen %s" +msgstr "Escolhido %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Esta é a lista de %s escolhidos. Poderá remover alguns, selecionando-os na " +"caixa abaixo e clicando na seta \"Remover\" entre as duas caixas." + +msgid "Remove all" +msgstr "Remover todos" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Clique para remover todos os %s escolhidos de uma vez." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s de %(cnt)s selecionado" +msgstr[1] "%(sel)s de %(cnt)s selecionados" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Tem mudanças por guardar nos campos individuais. Se usar uma ação, as suas " +"mudanças por guardar serão perdidas." + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"Selecionou uma ação mas ainda não guardou as mudanças dos campos " +"individuais. Carregue em OK para gravar. Precisará de correr de novo a ação." + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Selecionou uma ação mas ainda não guardou as mudanças dos campos " +"individuais. Provavelmente quererá o botão Ir ao invés do botão Guardar." + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "" +"Nota: O seu fuso horário está %s hora adiantado em relação ao servidor." +msgstr[1] "" +"Nota: O seu fuso horário está %s horas adiantado em relação ao servidor." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" +"Nota: O use fuso horário está %s hora atrasado em relação ao servidor." +msgstr[1] "" +"Nota: O use fuso horário está %s horas atrasado em relação ao servidor." + +msgid "Now" +msgstr "Agora" + +msgid "Choose a Time" +msgstr "Escolha a Hora" + +msgid "Choose a time" +msgstr "Escolha a hora" + +msgid "Midnight" +msgstr "Meia-noite" + +msgid "6 a.m." +msgstr "6 a.m." + +msgid "Noon" +msgstr "Meio-dia" + +msgid "6 p.m." +msgstr "6 p.m." + +msgid "Cancel" +msgstr "Cancelar" + +msgid "Today" +msgstr "Hoje" + +msgid "Choose a Date" +msgstr "Escolha a Data" + +msgid "Yesterday" +msgstr "Ontem" + +msgid "Tomorrow" +msgstr "Amanhã" + +msgid "January" +msgstr "Janeiro" + +msgid "February" +msgstr "Fevereiro" + +msgid "March" +msgstr "Março" + +msgid "April" +msgstr "Abril" + +msgid "May" +msgstr "Maio" + +msgid "June" +msgstr "Junho" + +msgid "July" +msgstr "Julho" + +msgid "August" +msgstr "Agosto" + +msgid "September" +msgstr "Setembro" + +msgid "October" +msgstr "Outubro" + +msgid "November" +msgstr "Novembro" + +msgid "December" +msgstr "Dezembro" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "D" + +msgctxt "one letter Monday" +msgid "M" +msgstr "S" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "T" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "Q" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "Q" + +msgctxt "one letter Friday" +msgid "F" +msgstr "S" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "S" + +msgid "Show" +msgstr "Mostrar" + +msgid "Hide" +msgstr "Ocultar" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/pt_BR/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/pt_BR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d2644ce2a64ac999f66fc4dea52af0b88f4b2f7a GIT binary patch literal 16830 zcmc(m3zS_|dB-;h0zs^R_yTp45@#YacM=fA8As}t9P;UKaYL({`U9Y`x_oT>!dpkzmL(*quq0|G2hqq>HNd*&!2A0Ip8~Nt^{8M9s%|I{oqFM3*aT-iO=xgUkW~z`yJpZ;BN3K;H$x>fl+wh0ySR; z6g{_rXM-OCp96jl)HsiTr-I)CA<6t5sPTRPo(BFfyg%_wXyg8L@D}jR;2Gf4&+_Xz z57c-UgZi!t@}Jof@OqG?nEl{$!9$?ve6jv%yF>ekf&T>_1fTs(V{Qa* z2R{m)NT+G=X|0+;)#^4sP37!Q07I+x^40t_wF^kirir(*mn)gQ_EHM8K>iaWc3L-Gi1yKbv0&4#Cpw_nuRKM%O{a#S>&4&Af zp!E4xP^NG%_(Jd@(1KqF3-F)8onTDoTft9*Rd55!t9chd&G!~i>%0pTo$mw1_fLYb z&U_gZeUE~O&ioC?Qp^uQt@EtsdpazraYjJt&BdU`TMufy>%bR-HBj`w4HRGR2gQ%i zfRfKwL4EfP@FDOqa25D&guNR4T~Pda4BP;IA7rVf0u$DN+dx#r90EJw+d<8HiZ$jM z@FMU^@O9t__!V#m_yceoxcPiz-Uz-GlswNyxUT?T0BT+HpzPuG0dEDx$G3u_>mE?@ zdOs+>eKO!@!~4&JTKAVhjrR@kW#C_ew}I#UyywGFP=4cnP<;L<_)FmDz>C503%no7 z!TsFd4z34(42mBwhiSv$Bq%*O67bES#=R31-FJba=R@KBr$Ev5#ejbto<9Pf#Pe^1 z51fE~gR;{*hPWJA39A1j2n$RL#8k~4ASz-W0JY9P0#5}W0VRh=!IQy%0=3>Bfa2#

P$u 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 MDtUdk<$;3vU!jD{TL1t6 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/pt_BR/LC_MESSAGES/djangojs.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/pt_BR/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..f499f4fe940d433eca671494bd21cd24c4b1fd11 GIT binary patch literal 4619 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/ro/LC_MESSAGES/djangojs.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/ro/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..73da12644ec309c2be025f30b43ba640b0922062 GIT binary patch literal 4686 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/ro/LC_MESSAGES/djangojs.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/ro/LC_MESSAGES/djangojs.po new file mode 100644 index 0000000..1ac469b --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/ro/LC_MESSAGES/djangojs.po @@ -0,0 +1,228 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Bogdan Mateescu, 2018 +# Daniel Ursache-Dogariu, 2011 +# Denis Darii , 2011 +# Ionel Cristian Mărieș , 2012 +# Jannis Leidel , 2011 +# Răzvan Ionescu , 2015 +# Razvan Stefanescu , 2016-2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:50+0200\n" +"PO-Revision-Date: 2018-02-27 12:32+0000\n" +"Last-Translator: Bogdan Mateescu\n" +"Language-Team: Romanian (http://www.transifex.com/django/django/language/" +"ro/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ro\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" +"2:1));\n" + +#, javascript-format +msgid "Available %s" +msgstr "%s disponibil" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Aceasta este o listă cu %s disponibile. Le puteți alege selectând mai multe " +"in chenarul de mai jos și apăsând pe săgeata \"Alege\" dintre cele două " +"chenare." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Scrie în acest chenar pentru a filtra lista de %s disponibile." + +msgid "Filter" +msgstr "Filtru" + +msgid "Choose all" +msgstr "Alege toate" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Click pentru a alege toate %s." + +msgid "Choose" +msgstr "Alege" + +msgid "Remove" +msgstr "Elimină" + +#, javascript-format +msgid "Chosen %s" +msgstr "%s alese" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Aceasta este lista de %s alese. Puteți elimina din ele selectându-le in " +"chenarul de mai jos și apasand pe săgeata \"Elimină\" dintre cele două " +"chenare." + +msgid "Remove all" +msgstr "Elimină toate" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Click pentru a elimina toate %s alese." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s din %(cnt)s selectate" +msgstr[1] "%(sel)s din %(cnt)s selectate" +msgstr[2] "de %(sel)s din %(cnt)s selectate" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Aveţi modificări nesalvate în cîmpuri individuale editabile. Dacă executaţi " +"o acțiune, modificările nesalvate vor fi pierdute." + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"Aţi selectat o acţiune, dar nu aţi salvat încă modificările la câmpuri " +"individuale. Faceţi clic pe OK pentru a salva. Va trebui să executați " +"acțiunea din nou." + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Ați selectat o acţiune și nu ațţi făcut modificări în cîmpuri individuale. " +"Probabil căutați butonul Go, în loc de Salvează." + +msgid "Now" +msgstr "Acum" + +msgid "Midnight" +msgstr "Miezul nopții" + +msgid "6 a.m." +msgstr "6 a.m." + +msgid "Noon" +msgstr "Amiază" + +msgid "6 p.m." +msgstr "6 p.m." + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Notă: Sunteți cu %s oră înaintea orei serverului." +msgstr[1] "Notă: Sunteți cu %s ore înaintea orei serverului." +msgstr[2] "Notă: Sunteți cu %s de ore înaintea orei serverului." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Notă: Sunteți cu %s oră în urma orei serverului." +msgstr[1] "Notă: Sunteți cu %s ore în urma orei serverului." +msgstr[2] "Notă: Sunteți cu %s de ore în urma orei serverului." + +msgid "Choose a Time" +msgstr "Alege o oră" + +msgid "Choose a time" +msgstr "Alege o oră" + +msgid "Cancel" +msgstr "Anulează" + +msgid "Today" +msgstr "Astăzi" + +msgid "Choose a Date" +msgstr "Alege a dată" + +msgid "Yesterday" +msgstr "Ieri" + +msgid "Tomorrow" +msgstr "Mâine" + +msgid "January" +msgstr "Ianuarie" + +msgid "February" +msgstr "Februarie" + +msgid "March" +msgstr "Martie" + +msgid "April" +msgstr "Aprilie" + +msgid "May" +msgstr "Mai" + +msgid "June" +msgstr "Iunie" + +msgid "July" +msgstr "Iulie" + +msgid "August" +msgstr "August" + +msgid "September" +msgstr "Septembrie" + +msgid "October" +msgstr "Octombrie" + +msgid "November" +msgstr "Noiembrie" + +msgid "December" +msgstr "Decembrie" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "D" + +msgctxt "one letter Monday" +msgid "M" +msgstr "L" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "M" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "M" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "J" + +msgctxt "one letter Friday" +msgid "F" +msgstr "V" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "S" + +msgid "Show" +msgstr "Arată" + +msgid "Hide" +msgstr "Ascunde" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/ru/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 0000000..e27b05c --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,729 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ivan Ivaschenko , 2013 +# Denis Darii , 2011 +# Dimmus , 2011 +# Eugene , 2016-2017 +# Sergey , 2016 +# Jannis Leidel , 2011 +# Алексей Борискин , 2012-2015 +# Дмитрий , 2019 +# Дмитрий Шатера , 2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-02-14 12:41+0000\n" +"Last-Translator: Дмитрий \n" +"Language-Team: Russian (http://www.transifex.com/django/django/language/" +"ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" +"%100>=11 && n%100<=14)? 2 : 3);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Успешно удалены %(count)d %(items)s." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Не удается удалить %(name)s" + +msgid "Are you sure?" +msgstr "Вы уверены?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Удалить выбранные %(verbose_name_plural)s" + +msgid "Administration" +msgstr "Администрирование" + +msgid "All" +msgstr "Все" + +msgid "Yes" +msgstr "Да" + +msgid "No" +msgstr "Нет" + +msgid "Unknown" +msgstr "Неизвестно" + +msgid "Any date" +msgstr "Любая дата" + +msgid "Today" +msgstr "Сегодня" + +msgid "Past 7 days" +msgstr "Последние 7 дней" + +msgid "This month" +msgstr "Этот месяц" + +msgid "This year" +msgstr "Этот год" + +msgid "No date" +msgstr "Дата не указана" + +msgid "Has date" +msgstr "Дата указана" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Пожалуйста, введите корректные %(username)s и пароль учётной записи. Оба " +"поля могут быть чувствительны к регистру." + +msgid "Action:" +msgstr "Действие:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Добавить еще один %(verbose_name)s" + +msgid "Remove" +msgstr "Удалить" + +msgid "Addition" +msgstr "Добавление" + +msgid "Change" +msgstr "Изменить" + +msgid "Deletion" +msgstr "Удаление" + +msgid "action time" +msgstr "время действия" + +msgid "user" +msgstr "пользователь" + +msgid "content type" +msgstr "тип содержимого" + +msgid "object id" +msgstr "идентификатор объекта" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "представление объекта" + +msgid "action flag" +msgstr "тип действия" + +msgid "change message" +msgstr "сообщение об изменении" + +msgid "log entry" +msgstr "запись в журнале" + +msgid "log entries" +msgstr "записи в журнале" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "Добавлено \"%(object)s\"." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "Изменено \"%(object)s\" - %(changes)s" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "Удалено \"%(object)s.\"" + +msgid "LogEntry Object" +msgstr "Запись в журнале" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "Добавлен {name} \"{object}\"." + +msgid "Added." +msgstr "Добавлено." + +msgid "and" +msgstr "и" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "Изменено {fields} у {name} \"{object}\"." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Изменено {fields}." + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "Удален {name} \"{object}\"." + +msgid "No fields changed." +msgstr "Ни одно поле не изменено." + +msgid "None" +msgstr "Нет" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" +"Удерживайте \"Control\" (или \"Command\" на Mac), чтобы выбрать несколько " +"значений." + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "{name} \"{obj}\" было успешно добавлено." + +msgid "You may edit it again below." +msgstr "Вы можете снова изменить этот объект ниже." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" +"{name} \"{obj}\" был успешно добавлен. Вы можете добавить еще один {name} " +"ниже." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" +"{name} \"{obj}\" был изменен успешно. Вы можете отредактировать его снова " +"ниже." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" +"{name} \"{obj}\" был успешно добавлен. Вы можете отредактировать его еще раз " +"ниже." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "{name} \"{obj}\" был изменен. Вы можете добавить еще один {name} ниже." + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "{name} \"{obj}\" был изменен." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Чтобы произвести действия над объектами, необходимо их выбрать. Объекты не " +"были изменены." + +msgid "No action selected." +msgstr "Действие не выбрано." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "%(name)s \"%(obj)s\" был успешно удален." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "%(name)s с ID \"%(key)s\" не существует. Возможно оно было удалено?" + +#, python-format +msgid "Add %s" +msgstr "Добавить %s" + +#, python-format +msgid "Change %s" +msgstr "Изменить %s" + +#, python-format +msgid "View %s" +msgstr "Просмотреть %s" + +msgid "Database error" +msgstr "Ошибка базы данных" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s был успешно изменен." +msgstr[1] "%(count)s %(name)s были успешно изменены." +msgstr[2] "%(count)s %(name)s были успешно изменены." +msgstr[3] "%(count)s %(name)s были успешно изменены." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "Выбран %(total_count)s" +msgstr[1] "Выбраны все %(total_count)s" +msgstr[2] "Выбраны все %(total_count)s" +msgstr[3] "Выбраны все %(total_count)s" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "Выбрано 0 объектов из %(cnt)s " + +#, python-format +msgid "Change history: %s" +msgstr "История изменений: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Удаление объекта %(instance)s типа %(class_name)s будет требовать удаления " +"следующих связанных объектов: %(related_objects)s" + +msgid "Django site admin" +msgstr "Административный сайт Django" + +msgid "Django administration" +msgstr "Администрирование Django" + +msgid "Site administration" +msgstr "Администрирование сайта" + +msgid "Log in" +msgstr "Войти" + +#, python-format +msgid "%(app)s administration" +msgstr "Администрирование приложения «%(app)s»" + +msgid "Page not found" +msgstr "Страница не найдена" + +msgid "We're sorry, but the requested page could not be found." +msgstr "К сожалению, запрашиваемая вами страница не найдена." + +msgid "Home" +msgstr "Начало" + +msgid "Server error" +msgstr "Ошибка сервера" + +msgid "Server error (500)" +msgstr "Ошибка сервера (500)" + +msgid "Server Error (500)" +msgstr "Ошибка сервера (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Произошла ошибка. О ней сообщено администраторам сайта по электронной почте, " +"ошибка должна быть вскоре исправлена. Благодарим вас за терпение." + +msgid "Run the selected action" +msgstr "Выполнить выбранное действие" + +msgid "Go" +msgstr "Выполнить" + +msgid "Click here to select the objects across all pages" +msgstr "Нажмите здесь, чтобы выбрать объекты на всех страницах" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Выбрать все %(module_name)s (%(total_count)s)" + +msgid "Clear selection" +msgstr "Снять выделение" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"Сначала введите имя пользователя и пароль. Затем вы сможете ввести больше " +"информации о пользователе." + +msgid "Enter a username and password." +msgstr "Введите имя пользователя и пароль." + +msgid "Change password" +msgstr "Изменить пароль" + +msgid "Please correct the error below." +msgstr "Пожалуйста, исправьте ошибку ниже." + +msgid "Please correct the errors below." +msgstr "Пожалуйста, исправьте ошибки ниже." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Введите новый пароль для пользователя %(username)s." + +msgid "Welcome," +msgstr "Добро пожаловать," + +msgid "View site" +msgstr "Открыть сайт" + +msgid "Documentation" +msgstr "Документация" + +msgid "Log out" +msgstr "Выйти" + +#, python-format +msgid "Add %(name)s" +msgstr "Добавить %(name)s" + +msgid "History" +msgstr "История" + +msgid "View on site" +msgstr "Смотреть на сайте" + +msgid "Filter" +msgstr "Фильтр" + +msgid "Remove from sorting" +msgstr "Удалить из сортировки" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Приоритет сортировки: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Сортировать в другом направлении" + +msgid "Delete" +msgstr "Удалить" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Удаление %(object_name)s '%(escaped_object)s' приведет к удалению связанных " +"объектов, но ваша учетная запись не имеет прав для удаления следующих типов " +"объектов:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Удаление %(object_name)s '%(escaped_object)s' потребует удаления следующих " +"связанных защищенных объектов:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Вы уверены, что хотите удалить %(object_name)s \"%(escaped_object)s\"? Все " +"следующие связанные объекты также будут удалены:" + +msgid "Objects" +msgstr "Объекты" + +msgid "Yes, I'm sure" +msgstr "Да, я уверен" + +msgid "No, take me back" +msgstr "Нет, отменить и вернуться к выбору" + +msgid "Delete multiple objects" +msgstr "Удалить несколько объектов" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Удаление выбранной %(objects_name)s приведет к удалению связанных объектов, " +"но ваша учетная запись не имеет прав на удаление следующих типов объектов:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Удаление %(objects_name)s потребует удаления следующих связанных защищенных " +"объектов:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Вы уверены, что хотите удалить %(objects_name)s? Все следующие объекты и " +"связанные с ними элементы будут удалены:" + +msgid "View" +msgstr "Просмотреть" + +msgid "Delete?" +msgstr "Удалить?" + +#, python-format +msgid " By %(filter_title)s " +msgstr "%(filter_title)s" + +msgid "Summary" +msgstr "Краткая статистика" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Модели в приложении %(name)s" + +msgid "Add" +msgstr "Добавить" + +msgid "You don't have permission to view or edit anything." +msgstr "У вас недостаточно полномочий для просмотра или изменения чего либо." + +msgid "Recent actions" +msgstr "Последние действия" + +msgid "My actions" +msgstr "Мои действия" + +msgid "None available" +msgstr "Недоступно" + +msgid "Unknown content" +msgstr "Неизвестный тип" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Ваша база данных неправильно настроена. Убедитесь, что соответствующие " +"таблицы были созданы, и что соответствующему пользователю разрешен к ним " +"доступ." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Вы вошли в систему как %(username)s, однако у вас недостаточно прав для " +"просмотра данной страницы. Возможно, вы хотели бы войти в систему, используя " +"другую учётную запись?" + +msgid "Forgotten your password or username?" +msgstr "Забыли свой пароль или имя пользователя?" + +msgid "Date/time" +msgstr "Дата и время" + +msgid "User" +msgstr "Пользователь" + +msgid "Action" +msgstr "Действие" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Данный объект не имеет истории изменений. Возможно, он был добавлен не через " +"данный административный сайт." + +msgid "Show all" +msgstr "Показать все" + +msgid "Save" +msgstr "Сохранить" + +msgid "Popup closing…" +msgstr "Всплывающее окно закрывается..." + +msgid "Search" +msgstr "Найти" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s результат" +msgstr[1] "%(counter)s результата" +msgstr[2] "%(counter)s результатов" +msgstr[3] "%(counter)s результатов" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s всего" + +msgid "Save as new" +msgstr "Сохранить как новый объект" + +msgid "Save and add another" +msgstr "Сохранить и добавить другой объект" + +msgid "Save and continue editing" +msgstr "Сохранить и продолжить редактирование" + +msgid "Save and view" +msgstr "Сохранить и просмотреть" + +msgid "Close" +msgstr "Закрыть" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Изменить выбранный объект типа \"%(model)s\"" + +#, python-format +msgid "Add another %(model)s" +msgstr "Добавить ещё один объект типа \"%(model)s\"" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Удалить выбранный объект типа \"%(model)s\"" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Благодарим вас за время, проведенное на этом сайте." + +msgid "Log in again" +msgstr "Войти снова" + +msgid "Password change" +msgstr "Изменение пароля" + +msgid "Your password was changed." +msgstr "Ваш пароль был изменен." + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"В целях безопасности, пожалуйста, введите свой старый пароль, затем введите " +"новый пароль дважды, чтобы мы могли убедиться в правильности написания." + +msgid "Change my password" +msgstr "Изменить мой пароль" + +msgid "Password reset" +msgstr "Восстановление пароля" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Ваш пароль был сохранен. Теперь вы можете войти." + +msgid "Password reset confirmation" +msgstr "Подтверждение восстановления пароля" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Пожалуйста, введите новый пароль дважды, чтобы мы могли убедиться в " +"правильности написания." + +msgid "New password:" +msgstr "Новый пароль:" + +msgid "Confirm password:" +msgstr "Подтвердите пароль:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Неверная ссылка для восстановления пароля. Возможно, ей уже воспользовались. " +"Пожалуйста, попробуйте восстановить пароль еще раз." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Мы отправили вам инструкцию по установке нового пароля на указанный адрес " +"электронной почты (если в нашей базе данных есть такой адрес). Вы должны " +"получить ее в ближайшее время." + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Если вы не получили письмо, пожалуйста, убедитесь, что вы ввели адрес с " +"которым Вы зарегистрировались, и проверьте папку со спамом." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Вы получили это письмо, потому что вы (или кто-то другой) запросили " +"восстановление пароля от учётной записи на сайте %(site_name)s, которая " +"связана с этим адресом электронной почты." + +msgid "Please go to the following page and choose a new password:" +msgstr "Пожалуйста, перейдите на эту страницу и введите новый пароль:" + +msgid "Your username, in case you've forgotten:" +msgstr "Ваше имя пользователя (на случай, если вы его забыли):" + +msgid "Thanks for using our site!" +msgstr "Спасибо, что используете наш сайт!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "Команда сайта %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" +"Забыли пароль? Введите свой адрес электронной почты ниже, и мы вышлем вам " +"инструкцию, как установить новый пароль." + +msgid "Email address:" +msgstr "Адрес электронной почты:" + +msgid "Reset my password" +msgstr "Восстановить мой пароль" + +msgid "All dates" +msgstr "Все даты" + +#, python-format +msgid "Select %s" +msgstr "Выберите %s" + +#, python-format +msgid "Select %s to change" +msgstr "Выберите %s для изменения" + +#, python-format +msgid "Select %s to view" +msgstr "Выберите %s для просмотра" + +msgid "Date:" +msgstr "Дата:" + +msgid "Time:" +msgstr "Время:" + +msgid "Lookup" +msgstr "Поиск" + +msgid "Currently:" +msgstr "Сейчас:" + +msgid "Change:" +msgstr "Изменить:" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/sk/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/sk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d7a5ba3777927030935f6650693b21f15ccb0431 GIT binary patch literal 16288 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/sq/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/sq/LC_MESSAGES/django.po new file mode 100644 index 0000000..46d3678 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/sq/LC_MESSAGES/django.po @@ -0,0 +1,715 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Besnik , 2011,2015 +# Besnik , 2015,2018-2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-01-18 11:06+0000\n" +"Last-Translator: Besnik \n" +"Language-Team: Albanian (http://www.transifex.com/django/django/language/" +"sq/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sq\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "U fshinë me sukses %(count)d %(items)s." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "S’mund të fshijë %(name)s" + +msgid "Are you sure?" +msgstr "Jeni i sigurt?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Fshiji %(verbose_name_plural)s e përzgjedhur" + +msgid "Administration" +msgstr "Administrim" + +msgid "All" +msgstr "Krejt" + +msgid "Yes" +msgstr "Po" + +msgid "No" +msgstr "Jo" + +msgid "Unknown" +msgstr "E panjohur" + +msgid "Any date" +msgstr "Çfarëdo date" + +msgid "Today" +msgstr "Sot" + +msgid "Past 7 days" +msgstr "7 ditët e shkuara" + +msgid "This month" +msgstr "Këtë muaj" + +msgid "This year" +msgstr "Këtë vit" + +msgid "No date" +msgstr "Pa datë" + +msgid "Has date" +msgstr "Ka datë" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Ju lutemi, jepni %(username)s dhe fjalëkalimin e saktë për një llogari " +"ekipi. Kini parasysh se që të dy fushat mund të jenë të ndjeshme ndaj " +"shkrimit me shkronja të mëdha ose të vogla." + +msgid "Action:" +msgstr "Veprim:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Shtoni një tjetër %(verbose_name)s" + +msgid "Remove" +msgstr "Hiqe" + +msgid "Addition" +msgstr "Shtim" + +msgid "Change" +msgstr "Ndryshoje" + +msgid "Deletion" +msgstr "Fshirje" + +msgid "action time" +msgstr "kohë veprimi" + +msgid "user" +msgstr "përdorues" + +msgid "content type" +msgstr "lloj lënde" + +msgid "object id" +msgstr "id objekti" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "paraqitje objekti" + +msgid "action flag" +msgstr "shenjë veprimi" + +msgid "change message" +msgstr "mesazh ndryshimi" + +msgid "log entry" +msgstr "zë regjistrimi" + +msgid "log entries" +msgstr "zëra regjistrimi" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "U shtua \"%(object)s\"." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "U ndryshua \"%(object)s\" - %(changes)s" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "U fshi \"%(object)s.\"" + +msgid "LogEntry Object" +msgstr "Objekt LogEntry" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "U shtua {name} \"{object}\"." + +msgid "Added." +msgstr "U shtua." + +msgid "and" +msgstr "dhe " + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "U ndryshua {fields} për {name} \"{object}\"." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "U ndryshuan {fields}." + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "U fshi {name} \"{object}\"." + +msgid "No fields changed." +msgstr "S’u ndryshua ndonjë fushë." + +msgid "None" +msgstr "Asnjë" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" +"Për të përzgjedhur më shumë se një, në Mac mbani të shtypur \"Control\", ose " +"\"Command\"." + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "{name} \"{obj}\" u shtua me sukses." + +msgid "You may edit it again below." +msgstr "Mund ta ripërpunoni më poshtë." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" +"{name} \"{obj}\" u ndryshua me sukses. Mund të shtoni një tjetër {name} më " +"poshtë." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "{name} \"{obj}\" u ndryshua me sukses. Mund të ripërpunoni më poshtë." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "{name} \"{obj}\" u ndryshua me sukses. Mund ta ripërpunoni më poshtë." + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" +"{name} \"{obj}\" u ndryshua me sukses. Mund të shtoni një tjetër {name} më " +"poshtë." + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "{name} \"{obj}\" u ndryshua me sukses." + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Duhen përzgjedhur objekte që të kryhen veprime mbi ta. S’u ndryshua ndonjë " +"objekt." + +msgid "No action selected." +msgstr "S’u përzgjodh ndonjë veprim." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "%(name)s \"%(obj)s\" u fshi me sukses." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "%(name)s me ID \"%(key)s\" s’ekziston. Mos qe fshirë?" + +#, python-format +msgid "Add %s" +msgstr "Shtoni %s" + +#, python-format +msgid "Change %s" +msgstr "Ndrysho %s" + +#, python-format +msgid "View %s" +msgstr "Shiheni %s" + +msgid "Database error" +msgstr "Gabim baze të dhënash" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s u ndryshua me sukses." +msgstr[1] "%(count)s %(name)s u ndryshuan me sukses." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s i përzgjedhur" +msgstr[1] "Krejt %(total_count)s të përzgjedhurat" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 nga %(cnt)s të përzgjedhur" + +#, python-format +msgid "Change history: %s" +msgstr "Ndryshoni historikun: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Fshirja e %(class_name)s %(instance)s do të lypte fshirjen e objekteve " +"vijuese të mbrojtura që kanë lidhje me ta: %(related_objects)s" + +msgid "Django site admin" +msgstr "Përgjegjës sajti Django" + +msgid "Django administration" +msgstr "Administrim i Django-s" + +msgid "Site administration" +msgstr "Administrim sajti" + +msgid "Log in" +msgstr "Hyni" + +#, python-format +msgid "%(app)s administration" +msgstr "Administrim %(app)s" + +msgid "Page not found" +msgstr "S’u gjet faqe" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Na ndjeni, por faqja e kërkuar s’gjendet dot." + +msgid "Home" +msgstr "Hyrje" + +msgid "Server error" +msgstr "Gabim shërbyesi" + +msgid "Server error (500)" +msgstr "Gabim shërbyesi (500)" + +msgid "Server Error (500)" +msgstr "Gabim Shërbyesi (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Pati një gabim. Iu është njoftuar përgjegjësve të sajtit përmes email-i dhe " +"do të duhej të ndreqej shpejt. Faleminderit për durimin." + +msgid "Run the selected action" +msgstr "Xhiro veprimin e përzgjedhur" + +msgid "Go" +msgstr "Shko tek" + +msgid "Click here to select the objects across all pages" +msgstr "Klikoni këtu që të përzgjidhni objektet nëpër krejt faqet" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Përzgjidhni krejt %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Pastroje përzgjedhjen" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"Së pari, jepni një emër përdoruesi dhe fjalëkalim. Mandej, do të jeni në " +"gjendje të përpunoni më tepër mundësi përdoruesi." + +msgid "Enter a username and password." +msgstr "Jepni emër përdoruesi dhe fjalëkalim." + +msgid "Change password" +msgstr "Ndryshoni fjalëkalimin" + +msgid "Please correct the error below." +msgstr "Ju lutemi, ndreqni gabimin më poshtë." + +msgid "Please correct the errors below." +msgstr "Ju lutemi, ndreqni gabimet më poshtë." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" +"Jepni një fjalëkalim të ri për përdoruesin %(username)s." + +msgid "Welcome," +msgstr "Mirë se vini," + +msgid "View site" +msgstr "Shihni sajtin" + +msgid "Documentation" +msgstr "Dokumentim" + +msgid "Log out" +msgstr "Dilni" + +#, python-format +msgid "Add %(name)s" +msgstr "Shto %(name)s" + +msgid "History" +msgstr "Historik" + +msgid "View on site" +msgstr "Shiheni në sajt" + +msgid "Filter" +msgstr "Filtër" + +msgid "Remove from sorting" +msgstr "Hiqe prej renditjeje" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Përparësi renditjesh: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Shfaq/fshih renditjen" + +msgid "Delete" +msgstr "Fshije" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Fshirja e %(object_name)s '%(escaped_object)s' do të shpinte në fshirjen e " +"objekteve të lidhur me të, por llogaria juaj nuk ka leje për fshirje të " +"objekteve të llojeve të mëposhtëm:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Fshirja e %(object_name)s '%(escaped_object)s' do të kërkonte fshirjen e " +"objekteve të mbrojtur vijues, të lidhur me të:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Jeni i sigurt se doni të fshihet %(object_name)s \"%(escaped_object)s\"? " +"Krejt objektet vijues të lidhur me të do të fshihen:" + +msgid "Objects" +msgstr "Objekte" + +msgid "Yes, I'm sure" +msgstr "Po, jam i sigurt" + +msgid "No, take me back" +msgstr "Jo, kthemëni mbrapsht" + +msgid "Delete multiple objects" +msgstr "Fshini disa objekte njëherësh" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Fshirja e %(objects_name)s të përzgjedhur do të shpjerë në fshirjen e " +"objekteve të lidhur me të, por llogaria juaj nuk ka leje të fshijë llojet " +"vijuese të objekteve:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Fshirja e %(objects_name)s të përzgjedhur do të kërkonte fshirjen e " +"objekteve të mbrojtur vijues, të lidhur me të:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Jeni i sigurt se doni të fshihen %(objects_name)s e përzgjedhur? Krejt " +"objektet vijues dhe gjëra të lidhura me ta do të fshihen:" + +msgid "View" +msgstr "Shiheni" + +msgid "Delete?" +msgstr "Të fshihet?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " Nga %(filter_title)s " + +msgid "Summary" +msgstr "Përmbledhje" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Modele te aplikacioni %(name)s" + +msgid "Add" +msgstr "Shtoni" + +msgid "You don't have permission to view or edit anything." +msgstr "S’keni leje të shihni apo përpunoni gjë." + +msgid "Recent actions" +msgstr "Veprime së fundi" + +msgid "My actions" +msgstr "Veprimet e mia" + +msgid "None available" +msgstr "Asnjë i passhëm" + +msgid "Unknown content" +msgstr "Lëndë e panjohur" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Ka diçka që s’shkon me instalimin e bazës suaj të të dhënave. Sigurohuni që " +"janë krijuar tabelat e duhura të bazës së të dhënave, dhe që baza e të " +"dhënave është e lexueshme nga përdoruesi i duhur." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Jeni mirëfilltësuar si %(username)s, por s’jeni i autorizuar të hyni në këtë " +"faqe. Do të donit të hyni në një llogari tjetër?" + +msgid "Forgotten your password or username?" +msgstr "Harruat fjalëkalimin ose emrin tuaj të përdoruesit?" + +msgid "Date/time" +msgstr "Datë/kohë" + +msgid "User" +msgstr "Përdorues" + +msgid "Action" +msgstr "Veprim" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Ky objekt s’ka historik ndryshimesh. Ndoshta s’qe shtuar përmes këtij sajti " +"administrimi." + +msgid "Show all" +msgstr "Shfaqi krejt" + +msgid "Save" +msgstr "Ruaje" + +msgid "Popup closing…" +msgstr "Mbyllje flluske…" + +msgid "Search" +msgstr "Kërko" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s përfundim" +msgstr[1] "%(counter)s përfundime" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s gjithsej" + +msgid "Save as new" +msgstr "Ruaje si të ri" + +msgid "Save and add another" +msgstr "Ruajeni dhe shtoni një tjetër" + +msgid "Save and continue editing" +msgstr "Ruajeni dhe vazhdoni përpunimin" + +msgid "Save and view" +msgstr "Ruajeni dhe shiheni" + +msgid "Close" +msgstr "Mbylle" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Ndryshoni %(model)s e përzgjedhur" + +#, python-format +msgid "Add another %(model)s" +msgstr "Shtoni një %(model)s tjetër" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Fshije %(model)s e përzgjedhur" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Faleminderit që shpenzoni sot pak kohë të çmuar me sajtin Web." + +msgid "Log in again" +msgstr "Hyni sërish" + +msgid "Password change" +msgstr "Ndryshim fjalëkalimi" + +msgid "Your password was changed." +msgstr "Fjalëkalimi juaj u ndryshua." + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Ju lutemi, jepni fjalëkalimin tuaj të vjetër, për hir të sigurisë, dhe " +"mandej jepni dy herë fjalëkalimin tuaj të ri, që kështu të mund të " +"verifikojmë se e shtypët saktë." + +msgid "Change my password" +msgstr "Ndrysho fjalëkalimin tim" + +msgid "Password reset" +msgstr "Ricaktim fjalëkalimi" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "" +"Fjalëkalimi juaj u caktua. Mund të vazhdoni më tej dhe të bëni hyrjen tani." + +msgid "Password reset confirmation" +msgstr "Ripohim ricaktimi fjalëkalimi" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Ju lutemi, jepeni fjalëkalimin tuaj dy herë, që kështu të mund të " +"verifikojmë që e shtypët saktë." + +msgid "New password:" +msgstr "Fjalëkalim i ri:" + +msgid "Confirm password:" +msgstr "Ripohoni fjalëkalimin:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Lidhja për ricaktimin e fjalëkalimit qe e pavlefshme, ndoshta ngaqë është " +"përdorur tashmë një herë. Ju lutemi, kërkoni një ricaktim të ri fjalëkalimi." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"Ju kemi dërguar me email udhëzime për caktimin e fjalëkalimit tuaj, nëse ka " +"një llogari me email-in që dhatë. Do të duhej t’ju vinin pas pak." + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Nëse nuk merrni një email, ju lutemi, sigurohuni që keni dhënë adresën e " +"saktë me të cilën u regjistruat, dhe kontrolloni dosjen tuaj të mesazheve të " +"padëshiruara." + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Këtë email po e merrni ngaqë kërkuat ricaktim fjalëkalimi për llogarinë tuaj " +"si përdorues te %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "Ju lutemi, shkoni te faqja vijuese dhe zgjidhni një fjalëkalim të ri:" + +msgid "Your username, in case you've forgotten:" +msgstr "Emri juaj i përdoruesit, në rast se e keni harruar:" + +msgid "Thanks for using our site!" +msgstr "Faleminderit që përdorni sajtin tonë!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "Ekipi i %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" +"Harruat fjalëkalimin tuaj? Jepni më poshtë adresën tuaj email, dhe do t’ju " +"dërgojmë udhëzimet për të caktuar një të ri." + +msgid "Email address:" +msgstr "Adresë email:" + +msgid "Reset my password" +msgstr "Ricakto fjalëkalimin tim" + +msgid "All dates" +msgstr "Krejt datat" + +#, python-format +msgid "Select %s" +msgstr "Përzgjidhni %s" + +#, python-format +msgid "Select %s to change" +msgstr "Përzgjidhni %s për ta ndryshuar" + +#, python-format +msgid "Select %s to view" +msgstr "Përzgjidhni %s për parje" + +msgid "Date:" +msgstr "Datë:" + +msgid "Time:" +msgstr "Kohë:" + +msgid "Lookup" +msgstr "Kërkim" + +msgid "Currently:" +msgstr "Tani:" + +msgid "Change:" +msgstr "Ndryshim:" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/sq/LC_MESSAGES/djangojs.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/sq/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..7b4668bb6a2975363d0a654c095a464d7ed0cbdc GIT binary patch literal 4590 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 A&;S4c literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/sq/LC_MESSAGES/djangojs.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/sq/LC_MESSAGES/djangojs.po new file mode 100644 index 0000000..163c241 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/sq/LC_MESSAGES/djangojs.po @@ -0,0 +1,220 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Besnik , 2011-2012,2015 +# Besnik , 2015,2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:50+0200\n" +"PO-Revision-Date: 2017-11-29 22:17+0000\n" +"Last-Translator: Besnik \n" +"Language-Team: Albanian (http://www.transifex.com/django/django/language/" +"sq/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sq\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "%s i gatshëm" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Kjo është lista e %s të gatshëm. Mund të zgjidhni disa duke i përzgjedhur te " +"kutiza më poshtë dhe mandej duke klikuar mbi shigjetën \"Zgjidhe\" mes dy " +"kutizave." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Shkruani brenda kutizës që të filtrohet lista e %s të passhme." + +msgid "Filter" +msgstr "Filtro" + +msgid "Choose all" +msgstr "Zgjidheni krejt" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Klikoni që të zgjidhen krejt %s njëherësh." + +msgid "Choose" +msgstr "Zgjidhni" + +msgid "Remove" +msgstr "Hiqe" + +#, javascript-format +msgid "Chosen %s" +msgstr "U zgjodh %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Kjo është lista e %s të gatshme. Mund të hiqni disa duke i përzgjedhur te " +"kutiza më poshtë e mandej duke klikuar mbi shigjetën \"Hiqe\" mes dy " +"kutizave." + +msgid "Remove all" +msgstr "Hiqi krejt" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Klikoni që të hiqen krejt %s e zgjedhura njëherësh." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "U përzgjodh %(sel)s nga %(cnt)s" +msgstr[1] "U përzgjodhën %(sel)s nga %(cnt)s" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Keni ndryshime të paruajtura te fusha individuale të ndryshueshme. Nëse " +"kryeni një veprim, ndryshimet e paruajtura do të humbin." + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"Keni përzgjedhur një veprim, por nuk keni ruajtur ende ndryshimet që bëtë te " +"fusha individuale. Ju lutemi, klikoni OK që të bëhet ruajtja. Do t’ju duhet " +"ta ribëni veprimin." + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Keni përzgjedhur një veprim, dhe nuk keni bërë ndonjë ndryshim te fusha " +"individuale. Ndoshta po kërkonit për butonin Shko, në vend se për butonin " +"Ruaje." + +msgid "Now" +msgstr "Tani" + +msgid "Midnight" +msgstr "Mesnatë" + +msgid "6 a.m." +msgstr "6 a.m." + +msgid "Noon" +msgstr "Mesditë" + +msgid "6 p.m." +msgstr "6 p.m." + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Shënim: Jeni %s orë para kohës së shërbyesit." +msgstr[1] "Shënim: Jeni %s orë para kohës së shërbyesit." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Shënim: Jeni %s orë pas kohës së shërbyesit." +msgstr[1] "Shënim: Jeni %s orë pas kohës së shërbyesit." + +msgid "Choose a Time" +msgstr "Zgjidhni një Kohë" + +msgid "Choose a time" +msgstr "Zgjidhni një kohë" + +msgid "Cancel" +msgstr "Anuloje" + +msgid "Today" +msgstr "Sot" + +msgid "Choose a Date" +msgstr "Zgjidhni një Datë" + +msgid "Yesterday" +msgstr "Dje" + +msgid "Tomorrow" +msgstr "Nesër" + +msgid "January" +msgstr "Janar" + +msgid "February" +msgstr "Shkurt" + +msgid "March" +msgstr "Mars" + +msgid "April" +msgstr "Prill" + +msgid "May" +msgstr "Maj" + +msgid "June" +msgstr "Qershor" + +msgid "July" +msgstr "Korrik" + +msgid "August" +msgstr "Gusht" + +msgid "September" +msgstr "Shtator" + +msgid "October" +msgstr "Tetor" + +msgid "November" +msgstr "Nëntor" + +msgid "December" +msgstr "Dhjetor" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "D" + +msgctxt "one letter Monday" +msgid "M" +msgstr "H" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "M" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "M" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "E" + +msgctxt "one letter Friday" +msgid "F" +msgstr "P" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "S" + +msgid "Show" +msgstr "Shfaqe" + +msgid "Hide" +msgstr "Fshihe" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/sr/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/sr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..16d4e9db2944a580ad4ad09821e420c6d34118e7 GIT binary patch literal 20855 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/sr/LC_MESSAGES/djangojs.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/sr/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..3c6ee7f7a7b841b0ff34dcaf7da5e83ecf0bb067 GIT binary patch literal 5221 zcmcguTWlOx89vYe!G)BTmU1cOG}Mkwvg=*PZKF*bn!0gGS|=vnwnT~qvpdJTlg!Rp zW@f!!scM~uCJ{VPge%-jQYEdF2SD0fwp}@n!vhzoRB+}EgjAtQsBb)Rc>oE%|IFF- zIB|;+Eu%g2o%5gn{{QF9zIDsG=NO)0j5{zEKg8HWz(Y6Sg=c0RWA_0Yz>fmY8*BqV zg7sCi{sr(8Sifo3zc=_t;3q+U$KYQL-T>hq&~FBQ9C!!tOTa#0A8-t~9#}Cr4J7+d z0il8&2Yw9rJ+uCy!FeEl>=a%U!Ye@1a}G#yP2e|xEnptF0ZM7V2qbmeZdu@Cq;pbZ=bJ_#HJUIcy$_;(=bTaOo1u-gsZZ7>T& zir7wryMdISN6h+BAo+R7U(-^m7^kLkEK@a7d9;zqQ=!bf169&RycVdt) z^lXkn=a{A`v!)p7`3eSFP}i8&NQZtXW`xZ8F}7fA#i0CBZU-?m)oh6z}aXdLgDDh+-)0 z_uRXeTj@%g-OH;4yQ;q9vR$=OEeP4JY0Gh~f-87$z(y^vC|ovLmNF0qxWyl|!o(`? zR1&K&xpK8^AUv(ib&5xLD0xw<0!Ic|vc*Bo20y_TnGduwik?X7u&jaz=PjCX^LJGSSP$|2h)rH5B2a{QpI zam%M*d0EzcZk2^)Q$7RXPYa(@IO)}S;riN{c|nvN&t8+-)mf+GsQ1Y_+g}VNW#E8L zlmW^Yn-tYB=9?^oF<*89j$c?7+;swEdWu_#0;hHS6|2#yNgykN7aFFE9Ir&874CRi zMM2IW4p-K>g;22L@gfz?@bQgtqijS*eJ~Y7SQp?S>tS7Th>IY-s#D!MFMDLV;D7We zPSJnzNZM$RysSv_o8=o-fsoOuA?1&v#(YY58MkFUj%d|R@>#ffMb)1KXK)?3(4mws7r0=VlX{wd%_Pj%b6s zQtISSNpvc*{1B2{3quI|7S=?BQQDa#PvX7wd%FfEo^&mMq)imR>m0IiopZb)!Ze?7 zg%yanEBOA0DQ_endyez&3FrdR7b(9Mdlsi8;Z)6wO|G5_VLPF|o;o?%Go{@nb%_LP zf3MY4ci=(+M?nT*nn@2c5u#jt%y&?-bz@1|xb%oNo}^7$VU3ErZgK^+ra4#8^5vQz z5NAHgnXifKiH{50i^-3(311$@^_|*drydi2fL_UQ`!HHU_8bsZ>4&NDpyb%82Wq7t zm6ti*GqFFP8uf)meU+k%Imd@G*=?!JJ*n({Je$qkli8dZ%4EQpIv}PU(z${!o7$S; z*-UO|cyk6%&m&e4rt-e!1+EoJKgS=y{D|Za%OjR2r=23-QP7n8k8~($>6dmw&@0uf zl1Sx+Rmt&5;TIfKq`w@7)!g7CVGrnhh_i_rd z=}gb4^g`jmHJr{I55-J4SamJO+fHri2O=DKG(VQww#-Miri7o`?G>esD=Npg6`Zi^ zW{wAb&xBj^EjKkL{YsGIUR5uHk*(W#JRRxxdb634ku2})<223OHImKpuks8BJJvf# zhB{k2MuussB{Dm*8UDl*u?ToF1CYr=W@uo0PxsTTmei&0hg-GP>#C{FN3(ceSqqP9 zu8FH1J;Sowq7(5;J*%$5L|a{Em|jp9qhrz0=xL_r)DlgiW9q89qT2MuRxiUt%%hXh z)2hwXeC(lWkpiYpt4ri?yaY#!6G5w3Ty^&Xxj-H?pdZ@#R3IH4$Ts2ro_b@7vKlQzt2i4%>^)GHrNPR~-F?CZMCTe88x_ z3!pA_SQE!!#hIWa>0@^Wimy^LEvu)FTtJh&7GDAvV1W)7$9Y1(fwxH)!HU}?dZv4j z(j1+=1mPBG<;epFLYu?VWo@m66QWNh6jHZx-RgiByP{BgoqTj`*%4^Nj}Cep?>HeK z;FckGI#-JBhBmGe-TteFv*K<>l&D@Mmpf(pe*6C8jhd>*J2eE;sHn6Az z1Q8c)EC{zq5bL2ciI>ppEoJ-V?{TrsqNkjku literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/sr_Latn/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/sr_Latn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..65c851bf901564118d2b2c80243e6ed5ceea9753 GIT binary patch literal 12383 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 U5jDL(C0lUwINjo-B%x*g7n7_efB*mh literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/sr_Latn/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/sr_Latn/LC_MESSAGES/django.po new file mode 100644 index 0000000..4c3d304 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/sr_Latn/LC_MESSAGES/django.po @@ -0,0 +1,694 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Igor Jerosimić, 2019 +# Jannis Leidel , 2011 +# Janos Guljas , 2011-2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-06-27 12:37+0000\n" +"Last-Translator: Igor Jerosimić\n" +"Language-Team: Serbian (Latin) (http://www.transifex.com/django/django/" +"language/sr@latin/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sr@latin\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Uspešno obrisano: %(count)d %(items)s." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Nesuspelo brisanje %(name)s" + +msgid "Are you sure?" +msgstr "Da li ste sigurni?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Briši označene objekte klase %(verbose_name_plural)s" + +msgid "Administration" +msgstr "Administracija" + +msgid "All" +msgstr "Svi" + +msgid "Yes" +msgstr "Da" + +msgid "No" +msgstr "Ne" + +msgid "Unknown" +msgstr "Nepoznato" + +msgid "Any date" +msgstr "Svi datumi" + +msgid "Today" +msgstr "Danas" + +msgid "Past 7 days" +msgstr "Poslednjih 7 dana" + +msgid "This month" +msgstr "Ovaj mesec" + +msgid "This year" +msgstr "Ova godina" + +msgid "No date" +msgstr "Nema datuma" + +msgid "Has date" +msgstr "Ima datum" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Molim vas unesite ispravno %(username)s i lozinku. Obratite pažnju da mala i " +"velika slova predstavljaju različite karaktere." + +msgid "Action:" +msgstr "Radnja:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Dodaj još jedan objekat klase %(verbose_name)s." + +msgid "Remove" +msgstr "Obriši" + +msgid "Addition" +msgstr "Dodavanja" + +msgid "Change" +msgstr "Izmeni" + +msgid "Deletion" +msgstr "Brisanja" + +msgid "action time" +msgstr "vreme radnje" + +msgid "user" +msgstr "korisnik" + +msgid "content type" +msgstr "tip sadržaja" + +msgid "object id" +msgstr "id objekta" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "opis objekta" + +msgid "action flag" +msgstr "oznaka radnje" + +msgid "change message" +msgstr "opis izmene" + +msgid "log entry" +msgstr "zapis u logovima" + +msgid "log entries" +msgstr "zapisi u logovima" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "Dodat objekat klase „%(object)s“." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "Promenjen objekat klase „%(object)s“ - %(changes)s" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "Uklonjen objekat klase „%(object)s“." + +msgid "LogEntry Object" +msgstr "Objekat unosa loga" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "Dodat objekat {name} \"{object}\"." + +msgid "Added." +msgstr "Dodato." + +msgid "and" +msgstr "i" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "Izmenjena polja {fields} za {name} \"{object}\"." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Izmenjena polja {fields}." + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "Obrisan objekat {name} \"{object}\"." + +msgid "No fields changed." +msgstr "Bez izmena u poljima." + +msgid "None" +msgstr "Ništa" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "" + +msgid "You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Potrebno je izabrati objekte da bi se izvršila akcija nad njima. Nijedan " +"objekat nije promenjen." + +msgid "No action selected." +msgstr "Nije izabrana nijedna akcija." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "Objekat „%(obj)s“ klase %(name)s uspešno je obrisan." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "Dodaj objekat klase %s" + +#, python-format +msgid "Change %s" +msgstr "Izmeni objekat klase %s" + +#, python-format +msgid "View %s" +msgstr "Pregled %s" + +msgid "Database error" +msgstr "Greška u bazi podataka" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "Uspešno promenjen %(count)s %(name)s." +msgstr[1] "Uspešno promenjena %(count)s %(name)s." +msgstr[2] "Uspešno promenjenih %(count)s %(name)s." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s izabran" +msgstr[1] "Sva %(total_count)s izabrana" +msgstr[2] "Svih %(total_count)s izabranih" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 od %(cnt)s izabrano" + +#, python-format +msgid "Change history: %s" +msgstr "Istorijat izmena: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" + +msgid "Django site admin" +msgstr "Django administracija sajta" + +msgid "Django administration" +msgstr "Django administracija" + +msgid "Site administration" +msgstr "Administracija sistema" + +msgid "Log in" +msgstr "Prijava" + +#, python-format +msgid "%(app)s administration" +msgstr "" + +msgid "Page not found" +msgstr "Stranica nije pronađena" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Žao nam je, tražena stranica nije pronađena." + +msgid "Home" +msgstr "Početna" + +msgid "Server error" +msgstr "Greška na serveru" + +msgid "Server error (500)" +msgstr "Greška na serveru (500)" + +msgid "Server Error (500)" +msgstr "Greška na serveru (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Run the selected action" +msgstr "Pokreni odabranu radnju" + +msgid "Go" +msgstr "Počni" + +msgid "Click here to select the objects across all pages" +msgstr "Izaberi sve objekte na ovoj stranici." + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Izaberi sve %(module_name)s od %(total_count)s ukupno." + +msgid "Clear selection" +msgstr "Poništi izbor" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"Prvo unesite korisničko ime i lozinku. Potom ćete moći da menjate još " +"korisničkih podešavanja." + +msgid "Enter a username and password." +msgstr "Unesite korisničko ime i lozinku" + +msgid "Change password" +msgstr "Promena lozinke" + +msgid "Please correct the error below." +msgstr "" + +msgid "Please correct the errors below." +msgstr "" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Unesite novu lozinku za korisnika %(username)s." + +msgid "Welcome," +msgstr "Dobrodošli," + +msgid "View site" +msgstr "Pogledaj sajt" + +msgid "Documentation" +msgstr "Dokumentacija" + +msgid "Log out" +msgstr "Odjava" + +#, python-format +msgid "Add %(name)s" +msgstr "Dodaj objekat klase %(name)s" + +msgid "History" +msgstr "Istorijat" + +msgid "View on site" +msgstr "Pregled na sajtu" + +msgid "Filter" +msgstr "Filter" + +msgid "Remove from sorting" +msgstr "Izbaci iz sortiranja" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Prioritet sortiranja: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Uključi/isključi sortiranje" + +msgid "Delete" +msgstr "Obriši" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Uklanjanje %(object_name)s „%(escaped_object)s“ povlači uklanjanje svih " +"objekata koji su povezani sa ovim objektom, ali vaš nalog nema dozvole za " +"brisanje sledećih tipova objekata:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Da bi izbrisali izabran %(object_name)s „%(escaped_object)s“ potrebno je " +"brisati i sledeće zaštićene povezane objekte:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Da sigurni da želite da obrišete %(object_name)s „%(escaped_object)s“? " +"Sledeći objekti koji su u vezi sa ovim objektom će takođe biti obrisani:" + +msgid "Objects" +msgstr "" + +msgid "Yes, I'm sure" +msgstr "Da, siguran sam" + +msgid "No, take me back" +msgstr "" + +msgid "Delete multiple objects" +msgstr "Brisanje više objekata" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Da bi izbrisali izabrane %(objects_name)s potrebno je brisati i zaštićene " +"povezane objekte, međutim vaš nalog nema dozvole za brisanje sledećih tipova " +"objekata:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Da bi izbrisali izabrane %(objects_name)s potrebno je brisati i sledeće " +"zaštićene povezane objekte:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Da li ste sigurni da želite da izbrišete izabrane %(objects_name)s? Svi " +"sledeći objekti i objekti sa njima povezani će biti izbrisani:" + +msgid "View" +msgstr "Pregled" + +msgid "Delete?" +msgstr "Brisanje?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " %(filter_title)s " + +msgid "Summary" +msgstr "" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "" + +msgid "Add" +msgstr "Dodaj" + +msgid "You don't have permission to view or edit anything." +msgstr "Nemate dozvolu da pogledate ili izmenite bilo šta." + +msgid "Recent actions" +msgstr "" + +msgid "My actions" +msgstr "" + +msgid "None available" +msgstr "Nema podataka" + +msgid "Unknown content" +msgstr "Nepoznat sadržaj" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Nešto nije uredu sa vašom bazom podataka. Proverite da li postoje " +"odgovarajuće tabele i da li odgovarajući korisnik ima pristup bazi." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "Zaboravili ste lozinku ili korisničko ime?" + +msgid "Date/time" +msgstr "Datum/vreme" + +msgid "User" +msgstr "Korisnik" + +msgid "Action" +msgstr "Radnja" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Ovaj objekat nema zabeležen istorijat izmena. Verovatno nije dodat kroz ovaj " +"sajt za administraciju." + +msgid "Show all" +msgstr "Prikaži sve" + +msgid "Save" +msgstr "Sačuvaj" + +msgid "Popup closing…" +msgstr "" + +msgid "Search" +msgstr "Pretraga" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s rezultat" +msgstr[1] "%(counter)s rezultata" +msgstr[2] "%(counter)s rezultata" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "ukupno %(full_result_count)s" + +msgid "Save as new" +msgstr "Sačuvaj kao novi" + +msgid "Save and add another" +msgstr "Sačuvaj i dodaj sledeći" + +msgid "Save and continue editing" +msgstr "Sačuvaj i nastavi sa izmenama" + +msgid "Save and view" +msgstr "Snimi i pogledaj" + +msgid "Close" +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Hvala što ste danas proveli vreme na ovom sajtu." + +msgid "Log in again" +msgstr "Ponovna prijava" + +msgid "Password change" +msgstr "Izmena lozinke" + +msgid "Your password was changed." +msgstr "Vaša lozinka je izmenjena." + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Iz bezbednosnih razloga prvo unesite svoju staru lozinku, a novu zatim " +"unesite dva puta da bismo mogli da proverimo da li ste je pravilno uneli." + +msgid "Change my password" +msgstr "Izmeni moju lozinku" + +msgid "Password reset" +msgstr "Resetovanje lozinke" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Vaša lozinka je postavljena. Možete se prijaviti." + +msgid "Password reset confirmation" +msgstr "Potvrda resetovanja lozinke" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Unesite novu lozinku dva puta kako bismo mogli da proverimo da li ste je " +"pravilno uneli." + +msgid "New password:" +msgstr "Nova lozinka:" + +msgid "Confirm password:" +msgstr "Potvrda lozinke:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Link za resetovanje lozinke nije važeći, verovatno zato što je već " +"iskorišćen. Ponovo zatražite resetovanje lozinke." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" + +msgid "Please go to the following page and choose a new password:" +msgstr "Idite na sledeću stranicu i postavite novu lozinku." + +msgid "Your username, in case you've forgotten:" +msgstr "Ukoliko ste zaboravili, vaše korisničko ime:" + +msgid "Thanks for using our site!" +msgstr "Hvala što koristite naš sajt!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "Ekipa sajta %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" + +msgid "Email address:" +msgstr "" + +msgid "Reset my password" +msgstr "Resetuj moju lozinku" + +msgid "All dates" +msgstr "Svi datumi" + +#, python-format +msgid "Select %s" +msgstr "Odaberi objekat klase %s" + +#, python-format +msgid "Select %s to change" +msgstr "Odaberi objekat klase %s za izmenu" + +#, python-format +msgid "Select %s to view" +msgstr "Odaberi %sza pregled" + +msgid "Date:" +msgstr "Datum:" + +msgid "Time:" +msgstr "Vreme:" + +msgid "Lookup" +msgstr "Pretraži" + +msgid "Currently:" +msgstr "" + +msgid "Change:" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/sv/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/sv/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3ca037edbd2f35d8da23ec8e68b4d771fd14632e GIT binary patch literal 16348 zcmc(l3$R^PdB>L&MS>3=BH{xVku-_id-6aOE`$&gAQ2J*xe3Ns-1nS)9y#aiec5}T zd$~ZWR*>?tXhn-))sm>i7Hn0tQ>(UjsvX+VvDS{QkB+q!r`n;Nv7@cF)8Buswf8yq z<|e}6O!wUH{P$x$zV)r|wbr`dIr-Ro4A;k@7en_y-I&L9e*!;T-*}EOr-FYEJ|BD> zd=dDJ=Nj``a5?y^-~mwY4}zP(FM#KQ$DHWvp9emJ=N;g2;BN3&z&C);0;BLf0oC6C z6hC)>r+^;?UjTjp9y{ogeCJYpxXN}cs%&i@co#R;Em@Kz?;F_z-NQcIoXfr z#h}_d2UNWYkUz5};I$w_G5f*O!5cvF|88(Oct5xj{5(k0<}py^{|j6P9uM<~)La1S z`zCN1xC<2DZv@qEA5^(nQ2ZPKPXliT)$jeF`gsIY|K9;6r|*L=1b+@*51#fsW3B`5 z1|I^Cp->b2L+}Cc1x%vk_E}K%{{j?W-vlL>e*?wW&%lepWiW9Dcm*iF_Jg~@>%gEL6ir*iB>i54vL}300RQ;0>3R7TC2T=tx2CDxJpvHFzsB%|_=e?l%Ylr9S zLFx0YpiJQb@TK6xpas7I7T~{wJHeR3w}Ov=6W~QCulk(>)!*%)#(6I&K0gRb?w@2@Loq)EHO`Y?;`y+k+8G0-H|KzAZv&|It_EKY)!8bVkLZUa#fa|1X4-wCSUwZx4 zbr6)?J{j7qP=4bE`21*|1BeYfEBq%*O5b!oo?cM{5?|VV<^U?7AQ=s_zvw(jU-hUlDmiONU z-~Tl18{ZUZ;eLLV|pyd7^ zp!DG9pvHe9jYE8s9-se19T*|4hJn@Fw1W8GH+P z#mjy9zXqk>-vp)4{|O!s{v4EFddArvUku8Q)`ODwX7D)hjUZEGnjoy3+d+-<6W|Hp z7s2zuzX8?$2`Hh)buzdNTp4gZsD3wqDtCFn9iYnZ1|{$PAVV;32i5<_LCwo&!uPL$ z8s`r|`QP?9ItBg%_y+KnnlXpK?}6g)HYP{oya&Xz%*Q~<|IvWo059SB`yi@jR%3LM z_YSZLUJLSPKF80U;Nzh9ziFKx&)YzizYE+Bz6X>({xkS?@CV>kV7lIy`#h-r|1v!P z9r#?H{}I%99|tj2^ONxYbc{paSA%Nzd{FY(0BU@bpycbH z*Ms1R;Gcu4_cc)S`UCJJ@T6CG|NpXpmx23v-vK4xzXk6D*PrX{^UI*xd)6y`e=h+w zjP(lG z`N$GH1JpPk1}_I61y%3l2|vy~;0~UrLAo-Z2j30;1k||h#F@0fdqMU4vPY8G- z_yXRa3TobJpyYclxD31ulw7U`C6_&*=6N6J#sQ*o<|gnF@F7ro65~vd0j~p9z5s6k zZv`2GIfmdP`?wIC178QKov(v029Mil3{!8;0wv$QpvKbyrI$0H^ydap`h6!Te%}X* z&qJWfKLpAi|0I0>Dv0}a*UR`t?aeIoMrZ}J7Lwd03thK+F!z8T3-^NGg)H>kS1-o~%Srt$BBE`|D#F6m0$-Ff@fZ3jY}=C|~~b&H4US9}1YT?f^mCNv4HgkA@YUYmH( z9P4@!giCN2Q)@mN?ght&`yyZregu*}>3TPGFC@K@j-CO%4|*876Vmlo4=$&DDfd@E zvbVQG?}v0rZ_8^7HxHE$-~-S&^j_!$2=zBzNY`el2kn8L1L?X6x)ItBwIJE1uB)N@ zpjSiBhNhtM!ezL%+Q&iJTn_DoGH49i4*fQCCUgo^Ua||>u&#GO?{s(mrwx1{JYNG| z0=)@33(~a)lHFbj9e{oZ+6%3QPK0(t_d~x29S7-pA#}aFGv<}x%c0*7&w>k}ts~F6 zT@FRiHt6Y)v6sx*6|0(^UJ+;eicZmsSLfEOSQSlAa}zcCourc&SyXh=gxB?6l;``B zsIOuxR&|oRh>|)F`j!ro!o3dPXQSNK+fmYr8#W)*>v5hp2ff~0ZOOuM79YKIoY8m| z=Yw8RHZbx^9H{kuzQn$gn<6cu9^XoyIz`)V+hUimSk;Z^R_DuYBaQQ9Wnts%8EDP! zjI(w$o!d@f#eXC2#YNoMNDHo|s@+Gptf~;@sq5!fa~L zN~1wJ&!m6I9Yjf5wBw9#{S;mhv`P-&&cxYNn#W;E^buh*xO8ei>@mJtcz2`PK46#M z=)W8&Ke+E5&(FfyW?*h`ji`v}Hkq@!Gn<&FxpcschMU}JI>&}?d9l4Lz3cmynRJ7`Q~IR;(H|mwnT{K^DoRe7TJQ z7f7%Yg>7^wXJ-rTs(yy<*;oh8IHU(@i4+MJ2fceQZgIWo!hQ_ayy!d?R1>=J9&=w zE%Gu$r%}vJ$GLn-DYS*`j;KZ`P&%fkI5$tWoBu~qV7puP6N}TuK|Q?9ak&1I*^<@= zeN58_{Y(2%r^lBDfi<5nmnLKiHnK@PTN$%+C(^`0&bJH67t*A4(TY`i^darSHQ{Bg zYM}h++-~XaYUVPRiU3(&j9IvFy)9kXPPXG@Osccehlywkzkpwg8-(wEin%$C(rLxF zoW|3vl@>*ucy%j#wRpp_hmA)nw9)#ZJ4KC0g+hQLc#XM%%*JBHe^z#s4P21Vorv^(lGI^ zoh)v_BEG*tU@qEz#PxPeL~v5cr=z|?c_YqhW}6G({Xt$RfLA7nBOuH%sZ0}=O(5!H z_HKSOEV}I1?2a_Vf9C+EVkXQ7vqsHanYQpI0c_NY!b3VJ^pZ)+=Im82{oy(74yMg^ zrB0-Du6g`v$OXx9iDq8Qx6hSam>naUJz;jF{Dp7TC~A7=<_z>Pb;#h3lxdMj`>~yh z>RrkvvHP*n47MaCHJ-uT>?B57r4LQA=LU~H4G66bpE16;SoCP?KB)Q;P_?kHf~z@N z^%Gl939)sOGv?8SRSa@-M!mptoq|V}^+2;(`f*JpUInE@2gqYf zQT3xa=|mmn8_(ke*MnYGT=`C&LM?DI#cZdJBBgd#RTE1r?=jhGQ2}&>}YOz&A?kgWsJTR zvx_k6ejF!QJm{7k!0mS$zuWLi^s|Kn{9j$evhKp!Zb53hU8&|lhnO%OWEj^}EVkL{^ z{k~+-pV9)^>>62nmn$g>`W3RWVz<^>O?=!nAi!jEW|A<{4KZsvP8vuAwZflWH;8)l zW0jqI*@)?D<0H1NQ4wEy72Z+KaXdd<9i5bG9Om z`mUYQkP(zLz1K;)uAxpc1DA+*nw3arswZbtkC2!=M4M{!&s976)h0^pG zN4hA%aXn~Y@q%U30na%WgZo*y#qq?8+P$o%uk6KT7Eh+%sxg-WFdX_JJKk!7z=gNr))-kpk}uf<-07N#xRt?cz5e`b7U_o&2l@_ zi9(vDWq;mwi!_2#vva-XvP}bo5IbTCE)q;*_AxtNniEX4k6Uc}TfeecxO9nvyR%`@ zFD5b8bPBVclddW+^V%bRa6Mtq%~?z6V-A06CNa1PGb#Jxx78xgE&crNq??c|nt;j* z$Z!j@8y8{r$UEytj@ThdmgM0d+}*YDN-|}d%jW!AtU%3!As`DEqHq?3P9-Xmk#d!q zp`MaOrNR_LJcQpPWV}IkKDimQ9a02R*s$7jJ8#70hk66$ zP$Bqa>EmZd!l>D6oixN@uY>!iOfPLIy`->hbec_aWEZ5JkKO24@JaX*D_TWArT0$P zqh!tnpqi^Audt*EFec5JmxVm6Qynk3(%Ff<;Vec~-V@xVwty(&S3cETkg2U$HR5d@ zAK9?3+^4fUJT6`nKAh_!wTasJRF@GT3ngMG<>J~SJHp|U;+UcVIzj3d;iKV6Y6W|K zsWxGJmSUT|s8!y(-60Iuc=ti7o#)Jq3A%5U5E}8pG-MrAqP(9o!A?7k@(yp28S!Cu zW~p{f$G0`c_r#fY942hTEt;2I<6O%4_Po_;j9)Tn<>Qm-gk84ts>$)qisqCZ--2RI z*!64Ioj<;I-T1m!ay#*g^=GeLw{|TB$FGTJI%;!Kx%KDSb>~dH;@q>>axJ@(EPi}4 zi;|oKBh4o4);P&JUAr^t^?O*Iy*6t1T4Td zi{|8QyQ*Cj(-Ujf%+Ai%$aBcHoALEEjAe}SeN8^IX7#e|+qPdi6vDdN+GU%) zTN$53v=g?7uP@e2_gH*gARm{Z4jXn)UN(N-u$=nB5XLV}>Zvk_347jDr>NMRu=&ig zoo)+moOO9WpRkGFk;^x%zks!=Hs?01O6-{%?7Gz#EHifJ{2`Qc@ma;D1-sTPu_)tC zFU(Ok<@9awamD<>q>)99m^|nSeH}S`h?Y8$a4(N|B%vB14eH}&I&Rl797#Bb7-wv} zc5vl2dj*oj%^+sdH@r;L>J*qEA?omR2~r<-CK1`iS+u@HX04ZyKaudSwrb=okYh7{ zOVOG?m^CKMmGcK%conwaM{a4-v%KJ4zTl}krx>%u))vePROx$9`r zvBmKH5*x2qMlF`La7T>fSIlzGvEZ2Gls~vTEIIe- zOsDG(F~awLhhg^SA7MeSbByrzuotW^5W0jkJks)IB^qym3p8QTQASm!I?K@fEukWZ z6|Au$PV&eOGK6cc&_PCI+o-$b>1SzX{vea7}Ud8fhY#I6E!X_-sn zZZ?0giLz8fWV2{66XEt6q-q2Mt^S&EPq%|U+S>4U6XqI*k6(<7ewS}PG~B`(b#sWa5iygS!u zXtEDe&ZW;a4(oiO2`+iE@szkQo1AejZShNXmv=d3W+|B@@f6B~w$Q?1!y^@Jd5a$- zIpOd_*3l(|rp}GauUmx2esHVJ0dwgjJRd{(dHYs2lTDaK!dcoy*ubBg8n0kSpBdl9 zlWd*!FsC|F+s@+2KTH%y7Qj^8#`2s5f|Fc4em8Qd;SyYi^NjJ4g&o;ddCD;xPfd}Z z6#3%M>Zj7@>P(Ak;wzN4&{B=ao}uViCTJFIhdNgv?*O_u-g%03qecz*Te_PjSO3eG(8E4=?rH9 zN*o5ZMMK1isySMTQRR_JVm2nJxZIa?N?R4*XfK;1Ja*7!*4!h4W7n@i5Xs>o@5-xY z1X4F1UyA&O^uonRm+H7hVpl0MeLLUVW*MS@jB9lasRKr(si>LVh06FrxJbU$os)FB zX6yVR7*Z=E2PJ+;!?O~F2Mo}imblI&ui)sN$e39QAf>o(uIk&Q0HTBRq|qn~Y!O@(HthdYbh|%O9LbLps{oWUcEKIt;5y1h;n*7esvmnVB66 ztcQpg?>COGA*0qgE)IyWHe~0f)D>wm`$gco!43;`b&_KH$V|E3RMd@pE#IWxk*+2! zrIzkQrCYGAD_!ieRFaQIdTl&!6mpl5V9kL{ujdtRXc1LZS2irSQz?I*RK*n;*=9~y zsm1QVg}gS2%$`a;oL|=lBAn2}AvRE1&yolnRzxGv7bNOR^UpYPL8BWJ3w?*z0cj-> zAy1R2=VFRKXbG`sYW`3|IU>TOUFA1eWwTI{9OqrQ%q6dy*@KF-(uQr8R!ytP+=z&5 zF@x>2$bVX>fXo}S?n=6c>pvPC&p5~AM!$6Ht*DQ}S2Fd3@mV-QkOLTnRySa0N*uRo zF0l{ih<^FJF*LvOz?MQ1PmV__hP%evd;2RdG-SFwl9B3=3D;`ung?Cj${V+iV!O^q z-V!;OQ5LBkI}WW-pAqF-ls8`?BOfMsDf8@&j?8nKrYIcQnrgPaL z{c@{A6{Wn39CByQmq%>%@;@c0f-CPE3~Hm#5(Wb(Iz=V9{PTTNgc`faKd3sY`ZvAu*g|rI0;m_5A34PEf&d( z+X(pyc8!f^9H|BopJ__h9u{FbovCtJ?Tn0U4vy<6hGS`#`bn3*T!5;~dy&h;?Gx?E z1Bm=Ba>DsX_WNksz(rM|P5T>YEoSdIBzjp}dMck?D4O%nhzlKZt`=lvt%y)Qx~$=h zrbpyu{}yL^v`==+zfo4{tgeDmneMQAiQ>LYhiwo@8k$X$tbE_rbE#qD9dcx!VT zP?Jj^G#&l0M}?~;x&5pF37-&3*Mr*nG}*ow<>q~mVCP&K>{Q!?)7%pVQ7k(Mc_KddS9@Q{Kt z$+(>|4_~+dV0PU6`(>H0j0ik?6;svVFkfyEnEC> zOsm|H=qsMMWlb_>ULEl_X7@+lxBDc)V4=!qIG)i#4qNt|I4FuONSGuem2z`iE-{@G zSK}^a4m0hh*6xv^<5oE$a7nUrq0)2yuNUdL(el5cKF6;VMuKulA_d76{i>rf`J@U> zsE&6l)wjk1PoU3ksljVB`LGq!&@*}l{LGUk4=1YJs#!E!1Sj{#PnWc7f%As31v_?5 zWxOA7PB*Zf3)urz+ay15YdgPf(vHeyDC1o{VcP0Zg4F2_S$y@Z?J|O| t@f>MR!Wz<4_LQ?bpo5*3U-MMA#%~rVqYS4!T}4NX#-)|cL@PdH^M5KWLKy%6 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/sw/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/sw/LC_MESSAGES/django.po new file mode 100644 index 0000000..1271dff --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/sw/LC_MESSAGES/django.po @@ -0,0 +1,676 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Machaku , 2013-2014 +# Machaku , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Swahili (http://www.transifex.com/django/django/language/" +"sw/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sw\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Umefanikiwa kufuta %(items)s %(count)d." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Huwezi kufuta %(name)s" + +msgid "Are you sure?" +msgstr "Una uhakika?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Futa %(verbose_name_plural)s teule" + +msgid "Administration" +msgstr "Utawala" + +msgid "All" +msgstr "yote" + +msgid "Yes" +msgstr "Ndiyo" + +msgid "No" +msgstr "Hapana" + +msgid "Unknown" +msgstr "Haijulikani" + +msgid "Any date" +msgstr "Tarehe yoyote" + +msgid "Today" +msgstr "Leo" + +msgid "Past 7 days" +msgstr "Siku 7 zilizopita" + +msgid "This month" +msgstr "mwezi huu" + +msgid "This year" +msgstr "Mwaka huu" + +msgid "No date" +msgstr "Hakuna tarehe" + +msgid "Has date" +msgstr "Kuna tarehe" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Tafadhali ingiza %(username)s na nywila sahihi kwa akaunti ya msimamizi. " +"Kumbuka kuzingatia herufi kubwa na ndogo." + +msgid "Action:" +msgstr "Tendo" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Ongeza %(verbose_name)s" + +msgid "Remove" +msgstr "Ondoa" + +msgid "action time" +msgstr "muda wa tendo" + +msgid "user" +msgstr "mtumiaji" + +msgid "content type" +msgstr "aina ya maudhui" + +msgid "object id" +msgstr "Kitambulisho cha kitu" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/3/library/functions.html#repr) +msgid "object repr" +msgstr "`repr` ya kitu" + +msgid "action flag" +msgstr "bendera ya tendo" + +msgid "change message" +msgstr "badilisha ujumbe" + +msgid "log entry" +msgstr "ingizo kwenye kumbukumbu" + +msgid "log entries" +msgstr "maingizo kwenye kumbukumbu" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "Kuongezwa kwa \"%(object)s\"." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "Kubadilishwa kwa \"%(object)s\" - %(changes)s" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "Kufutwa kwa \"%(object)s\"." + +msgid "LogEntry Object" +msgstr "Kitu cha Ingizo la Kumbukumbu" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "Kumeongezeka {name} \"{object}\"." + +msgid "Added." +msgstr "Imeongezwa" + +msgid "and" +msgstr "na" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "Mabadiliko ya {fields} yamefanyika katika {name} \"{object}\"." + +#, python-brace-format +msgid "Changed {fields}." +msgstr "Mabadiliko yamefanyika katika {fields} " + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "Futa {name} \"{object}\"." + +msgid "No fields changed." +msgstr "Hakuna uga uliobadilishwa." + +msgid "None" +msgstr "Hakuna" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" +"Ingizo la {name} \"{obj}\" limefanyika kwa mafanikio. Unaweza kuhariri tena" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Nilazima kuchagua vitu ili kufanyia kitu fulani. Hakuna kitu " +"kilichochaguliwa." + +msgid "No action selected." +msgstr "Hakuna tendo lililochaguliwa" + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "Ufutaji wa \"%(obj)s\" %(name)s umefanikiwa." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "Ongeza %s" + +#, python-format +msgid "Change %s" +msgstr "Badilisha %s" + +msgid "Database error" +msgstr "Hitilafu katika hifadhidata" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "mabadiliko ya %(name)s %(count)s yamefanikiwa." +msgstr[1] "mabadiliko ya %(name)s %(count)s yamefanikiwa." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s kuchaguliwa" +msgstr[1] "%(total_count)s (kila kitu) kuchaguliwa" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "Vilivyo chaguliwa ni 0 kati ya %(cnt)s" + +#, python-format +msgid "Change history: %s" +msgstr "Badilisha historia: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(instance)s %(class_name)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Kufutwa kwa ingizo la %(instance)s %(class_name)s kutahitaji kufutwa kwa " +"vitu vifuatavyo vyenye mahusiano vilivyokingwa: %(related_objects)s" + +msgid "Django site admin" +msgstr "Utawala wa tovuti ya django" + +msgid "Django administration" +msgstr "Utawala wa Django" + +msgid "Site administration" +msgstr "Utawala wa tovuti" + +msgid "Log in" +msgstr "Ingia" + +#, python-format +msgid "%(app)s administration" +msgstr "Utawala wa %(app)s" + +msgid "Page not found" +msgstr "Ukurasa haujapatikana" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Samahani, ukurasa uliohitajika haukupatikana." + +msgid "Home" +msgstr "Sebule" + +msgid "Server error" +msgstr "Hitilafu ya seva" + +msgid "Server error (500)" +msgstr "Hitilafu ya seva (500)" + +msgid "Server Error (500)" +msgstr "Hitilafu ya seva (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Kumekuwa na hitilafu. Imeripotiwa kwa watawala kupitia barua pepe na " +"inatakiwa kurekebishwa mapema." + +msgid "Run the selected action" +msgstr "Fanya tendo lililochaguliwa." + +msgid "Go" +msgstr "Nenda" + +msgid "Click here to select the objects across all pages" +msgstr "Bofya hapa kuchagua viumbile katika kurasa zote" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Chagua kila %(module_name)s, (%(total_count)s). " + +msgid "Clear selection" +msgstr "Safisha chaguo" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"Kwanza, ingiza jina lamtumiaji na nywila. Kisha, utaweza kuhariri zaidi " +"machaguo ya mtumiaji." + +msgid "Enter a username and password." +msgstr "Ingiza jina la mtumiaji na nywila." + +msgid "Change password" +msgstr "Badilisha nywila" + +msgid "Please correct the error below." +msgstr "Tafadhali sahihisha makosa yafuatayo " + +msgid "Please correct the errors below." +msgstr "Tafadhali sahihisha makosa yafuatayo." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "ingiza nywila ya mtumiaji %(username)s." + +msgid "Welcome," +msgstr "Karibu" + +msgid "View site" +msgstr "Tazama tovuti" + +msgid "Documentation" +msgstr "Nyaraka" + +msgid "Log out" +msgstr "Toka" + +#, python-format +msgid "Add %(name)s" +msgstr "Ongeza %(name)s" + +msgid "History" +msgstr "Historia" + +msgid "View on site" +msgstr "Ona kwenye tovuti" + +msgid "Filter" +msgstr "Chuja" + +msgid "Remove from sorting" +msgstr "Ondoa katika upangaji" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Kipaumbele katika mpangilio: %(priority_number)s" + +msgid "Toggle sorting" +msgstr "Geuza mpangilio" + +msgid "Delete" +msgstr "Futa" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Kufutwa kwa '%(escaped_object)s' %(object_name)s kutasababisha kufutwa kwa " +"vitu vinavyohuisana, lakini akaunti yako haina ruhusa ya kufuta vitu vya " +"aina zifuatazo:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Kufuta '%(escaped_object)s' %(object_name)s kutahitaji kufuta vitu " +"vifuatavyo ambavyo vinavyohuisana na vimelindwa:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Una uhakika kuwa unataka kufuta \"%(escaped_object)s\" %(object_name)s ? " +"Vitu vyote vinavyohuisana kati ya vifuatavyo vitafutwa:" + +msgid "Objects" +msgstr "Viumbile" + +msgid "Yes, I'm sure" +msgstr "Ndiyo, Nina uhakika" + +msgid "No, take me back" +msgstr "Hapana, nirudishe" + +msgid "Delete multiple objects" +msgstr "Futa viumbile mbalimbali" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Kufutwa kwa %(objects_name)s chaguliwa kutasababisha kufutwa kwa " +"vituvinavyohusiana, lakini akaunti yako haina ruhusa ya kufuta vitu vya " +"vifuatavyo:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Kufutwa kwa %(objects_name)s kutahitaji kufutwa kwa vitu vifuatavyo vyenye " +"uhusiano na vilivyolindwa:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Una uhakika kuwa unataka kufuta %(objects_name)s chaguliwa ? Vitu vyote kati " +"ya vifuatavyo vinavyohusiana vitafutwa:" + +msgid "Change" +msgstr "Badilisha" + +msgid "Delete?" +msgstr "Futa?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " Kwa %(filter_title)s" + +msgid "Summary" +msgstr "Muhtasari" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Models katika application %(name)s" + +msgid "Add" +msgstr "Ongeza" + +msgid "You don't have permission to edit anything." +msgstr "Huna ruhusa ya kuhariri chochote" + +msgid "Recent actions" +msgstr "Matendo ya karibuni" + +msgid "My actions" +msgstr "Matendo yangu" + +msgid "None available" +msgstr "Hakuna kilichopatikana" + +msgid "Unknown content" +msgstr "Maudhui hayajulikani" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Kuna tatizo limetokea katika usanikishaji wako wa hifadhidata. Hakikisha " +"kuwa majedwali sahihi ya hifadhidata yameundwa, na hakikisha hifadhidata " +"inaweza kusomwana mtumiaji sahihi." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "Umesahau jina na nenosiri lako?" + +msgid "Date/time" +msgstr "Tarehe/saa" + +msgid "User" +msgstr "Mtumiaji" + +msgid "Action" +msgstr "Tendo" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Kiumbile hiki hakina historia ya kubadilika. Inawezekana hakikuwekwa kupitia " +"hii tovuti ya utawala." + +msgid "Show all" +msgstr "Onesha yotee" + +msgid "Save" +msgstr "Hifadhi" + +msgid "Popup closing..." +msgstr "Udukizi unafunga" + +#, python-format +msgid "Change selected %(model)s" +msgstr "Badili %(model)s husika" + +#, python-format +msgid "Add another %(model)s" +msgstr "Ongeza %(model)s tena" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Futa %(model)s husika" + +msgid "Search" +msgstr "Tafuta" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "tokeo %(counter)s" +msgstr[1] "matokeo %(counter)s" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "jumla %(full_result_count)s" + +msgid "Save as new" +msgstr "Hifadhi kama mpya" + +msgid "Save and add another" +msgstr "Hifadhi na ongeza" + +msgid "Save and continue editing" +msgstr "Hifadhi na endelea kuhariri" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Ahsante kwa kutumia muda wako katika Tovuti yetu leo. " + +msgid "Log in again" +msgstr "ingia tena" + +msgid "Password change" +msgstr "Badilisha nywila" + +msgid "Your password was changed." +msgstr "Nywila yako imebadilishwa" + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Tafadhali ingiza nywila yako ya zamani, kwa ajili ya usalama, kisha ingiza " +"nywila mpya mara mbili ili tuweze kuthibitisha kuwa umelichapisha kwa " +"usahihi." + +msgid "Change my password" +msgstr "Badilisha nywila yangu" + +msgid "Password reset" +msgstr "Kuseti nywila upya" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Nywila yako imesetiwa. Unaweza kuendelea na kuingia sasa." + +msgid "Password reset confirmation" +msgstr "Uthibitisho wa kuseti nywila upya" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Tafadhali ingiza nywila mpya mara mbili ili tuweze kuthibitisha kuwa " +"umelichapisha kwa usahihi." + +msgid "New password:" +msgstr "Nywila mpya:" + +msgid "Confirm password:" +msgstr "Thibitisha nywila" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Kiungo cha kuseti nywila upya ni batili, inawezekana ni kwa sababu kiungo " +"hicho tayari kimetumika. tafadhali omba upya kuseti nywila." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Ikiwa hujapata barua pepe, tafadhali hakikisha umeingiza anuani ya barua " +"pepe uliyoitumia kujisajili na angalia katika folda la spam" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Umepata barua pepe hii kwa sababu ulihitaji ku seti upya nywila ya akaunti " +"yako ya %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "Tafadhali nenda ukurasa ufuatao na uchague nywila mpya:" + +msgid "Your username, in case you've forgotten:" +msgstr "Jina lako la mtumiaji, ikiwa umesahau:" + +msgid "Thanks for using our site!" +msgstr "Ahsante kwa kutumia tovui yetu!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "timu ya %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" +"Umesahau nywila yako? Ingiza anuani yako ya barua pepe hapo chini, nasi " +"tutakutumia maelekezo ya kuseti nenosiri jipya. " + +msgid "Email address:" +msgstr "Anuani ya barua pepe:" + +msgid "Reset my password" +msgstr "Seti nywila yangu upya" + +msgid "All dates" +msgstr "Tarehe zote" + +#, python-format +msgid "Select %s" +msgstr "Chagua %s" + +#, python-format +msgid "Select %s to change" +msgstr "Chaguo %s kwa mabadilisho" + +msgid "Date:" +msgstr "Tarehe" + +msgid "Time:" +msgstr "Saa" + +msgid "Lookup" +msgstr "`Lookup`" + +msgid "Currently:" +msgstr "Kwa sasa:" + +msgid "Change:" +msgstr "Badilisha:" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/sw/LC_MESSAGES/djangojs.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/sw/LC_MESSAGES/djangojs.po new file mode 100644 index 0000000..5806dd9 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/sw/LC_MESSAGES/djangojs.po @@ -0,0 +1,217 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Machaku , 2013-2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-17 23:12+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Swahili (http://www.transifex.com/django/django/language/" +"sw/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sw\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Yaliyomo: %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Hii ni orodha ya %s uliyochagua. Unaweza kuchagua baadhi vitu kwa kuvichagua " +"katika kisanduku hapo chini kisha kubofya mshale wa \"Chagua\" kati ya " +"visanduku viwili." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Chapisha katika kisanduku hiki ili kuchuja orodha ya %s iliyopo." + +msgid "Filter" +msgstr "Chuja" + +msgid "Choose all" +msgstr "Chagua vyote" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Bofya kuchagua %s kwa pamoja." + +msgid "Choose" +msgstr "Chagua" + +msgid "Remove" +msgstr "Ondoa" + +#, javascript-format +msgid "Chosen %s" +msgstr "Chaguo la %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Hii ni orodha ya %s uliyochagua. Unaweza kuondoa baadhi vitu kwa kuvichagua " +"katika kisanduku hapo chini kisha kubofya mshale wa \"Ondoa\" kati ya " +"visanduku viwili." + +msgid "Remove all" +msgstr "Ondoa vyote" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Bofya ili kuondoa %s chaguliwa kwa pamoja." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "umechagua %(sel)s kati ya %(cnt)s" +msgstr[1] "umechagua %(sel)s kati ya %(cnt)s" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Umeacha kuhifadhi mabadiliko katika uga zinazoharirika. Ikiwa utafanya tendo " +"lingine, mabadiliko ambayo hayajahifadhiwa yatapotea." + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"Umechagua tendo, lakini bado hujahifadhi mabadiliko yako katika uga husika. " +"Tafadali bofya Sawa ukitaka kuhifadhi. Utahitajika kufanya upya kitendo " + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Umechagua tendo, lakini bado hujahifadhi mabadiliko yako katika uga husika. " +"Inawezekana unatafuta kitufe cha Nenda badala ya Hifadhi" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Kumbuka: Uko saa %s mbele ukilinganisha na majira ya seva" +msgstr[1] "Kumbuka: Uko masaa %s mbele ukilinganisha na majira ya seva" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Kumbuka: Uko saa %s nyuma ukilinganisha na majira ya seva" +msgstr[1] "Kumbuka: Uko masaa %s nyuma ukilinganisha na majira ya seva" + +msgid "Now" +msgstr "Sasa" + +msgid "Choose a Time" +msgstr "" + +msgid "Choose a time" +msgstr "Chagua wakati" + +msgid "Midnight" +msgstr "Usiku wa manane" + +msgid "6 a.m." +msgstr "Saa 12 alfajiri" + +msgid "Noon" +msgstr "Adhuhuri" + +msgid "6 p.m." +msgstr "" + +msgid "Cancel" +msgstr "Ghairi" + +msgid "Today" +msgstr "Leo" + +msgid "Choose a Date" +msgstr "" + +msgid "Yesterday" +msgstr "Jana" + +msgid "Tomorrow" +msgstr "Kesho" + +msgid "January" +msgstr "" + +msgid "February" +msgstr "" + +msgid "March" +msgstr "" + +msgid "April" +msgstr "" + +msgid "May" +msgstr "" + +msgid "June" +msgstr "" + +msgid "July" +msgstr "" + +msgid "August" +msgstr "" + +msgid "September" +msgstr "" + +msgid "October" +msgstr "" + +msgid "November" +msgstr "" + +msgid "December" +msgstr "" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "" + +msgctxt "one letter Monday" +msgid "M" +msgstr "" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "" + +msgctxt "one letter Friday" +msgid "F" +msgstr "" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "" + +msgid "Show" +msgstr "Onesha" + +msgid "Hide" +msgstr "Ficha" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/ta/LC_MESSAGES/djangojs.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/ta/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..339311151934df01a30f236f83be8e2226fe6124 GIT binary patch literal 1379 zcmb7>%WD)d9LGnkuk}ei_`pXLgqD)somKmoTG3VuinXPzqQ|(K?xxHp%S`$@cqsVj zMUm1Tr3VFT53@cIL991VUOae|oc$xjZ!+E1tAXS*zvTOS&ac*%MGtEq_EGEw?1R|5 zH{rmlg4;j=?gr~?_C0V9?E7E_oCkM;&(_{wf;(U*U<>#W+yZ`Hd;bbR% z{|PQ&8|)*nC*X7ndhsTiHtC2{J^OB}l%k&nHVxeR}%HvE{RA!XdRix=qToGm3KT(Nk zQ3WJ3GF+qs5oa1&dYNe+kV4+?r1^8y?;?dWfnVsz7xH-s=_sERHs*$|i{^W%-$VS) z;H=+~$I4u1v8Kg{$v9+MMFF|Sq!cl^&PADr(1R0Y0)a!77{yio*3iP*^;W|(vF%4*PL^j<=QhtSBI`_^zLW#nE@p=m#Ar` zj^;F<*13AfgzP1yDvM&S`)(EoY4?WC<{IM>y&_AhEMz4h-FJmvFA_0WW+a@5SV#v| zREq;5>&}e(3cV!#>}!+cWFPU{do!L%7ESWSByUY)j&u@}Bqn)ol2t;y(=p6PCV6cd zvsTu4?8K`kd1I0n@FMX3U>cA-caKXhQi5;$GM{=P#eRYkv^p7 zLz681n-s;EhSR&;{}npz@;_=Z$%;$6;%Y?xCDevu&^#uC zVWM(-3lk5^&YnfPu2(y*S=$Vzj0wV_VZYOXLD3A|zy$D9-n*tyob!2LFVZA7!y>}K X, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-17 23:12+0200\n" +"PO-Revision-Date: 2017-09-19 16:41+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Tamil (http://www.transifex.com/django/django/language/ta/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ta\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "%s இருக்கிறதா " + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "" + +msgid "Filter" +msgstr "வடிகட்டி" + +msgid "Choose all" +msgstr "எல்லாவற்றையும் தேர்ந்த்தெடுக்க" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "" + +msgid "Choose" +msgstr "" + +msgid "Remove" +msgstr "அழிக்க" + +#, javascript-format +msgid "Chosen %s" +msgstr "%s தேர்ந்த்தெடுக்கப்பட்ட" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" + +msgid "Remove all" +msgstr "" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "" + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "" +msgstr[1] "" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "" +msgstr[1] "" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" +msgstr[1] "" + +msgid "Now" +msgstr "இப்பொழுது " + +msgid "Choose a Time" +msgstr "" + +msgid "Choose a time" +msgstr "ஒரு நேரத்தை தேர்ந்த்தெடுக்க " + +msgid "Midnight" +msgstr "நடு இரவு " + +msgid "6 a.m." +msgstr "காலை 6 மணி " + +msgid "Noon" +msgstr "மதியம் " + +msgid "6 p.m." +msgstr "" + +msgid "Cancel" +msgstr "வேண்டாம் " + +msgid "Today" +msgstr "இன்று " + +msgid "Choose a Date" +msgstr "" + +msgid "Yesterday" +msgstr "நேற்று " + +msgid "Tomorrow" +msgstr "நாளை" + +msgid "January" +msgstr "" + +msgid "February" +msgstr "" + +msgid "March" +msgstr "" + +msgid "April" +msgstr "" + +msgid "May" +msgstr "" + +msgid "June" +msgstr "" + +msgid "July" +msgstr "" + +msgid "August" +msgstr "" + +msgid "September" +msgstr "" + +msgid "October" +msgstr "" + +msgid "November" +msgstr "" + +msgid "December" +msgstr "" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "" + +msgctxt "one letter Monday" +msgid "M" +msgstr "" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "" + +msgctxt "one letter Friday" +msgid "F" +msgstr "" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "" + +msgid "Show" +msgstr "" + +msgid "Hide" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/te/LC_MESSAGES/djangojs.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/te/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..92b65f1794ac8a4d3d74093edea919f0946ac91b GIT binary patch literal 1362 zcmah{J7^R^7+y8L*0&%Qii|}dAv~Cn4n@b#8a`H+)eH_?9CjzbBXCxP!mKE zAr^w55Tc0aMi8{nly)|1Co&c`Vxx_%-^^|j!NP%=Z@>9p-#6@+txeMo))wrY*fZGM zvG**)fi($S1)Kt|2i{Kkec%T08K4V%0bC1wlg8fxo50@#*8o4H{4;O`_*bCm`z^iy z0bB|G6KL{(15H0?x#LXZ+Xb5V0~BX~vp}Qw6R;ilE4^>Q(B0tYft!F6K%;vKxC?kU z#h1Ws;2%@|9k>I0Eryu7W}vBSPx%obWZ1PD=Vt7U*v9)hY=o^JQ@gOx()L*3kZ70j zW!@W>tXK1nP6uI`TE;m%#{7T{2b?rVPA?NB9yq;KDI-o8QGSgtvcLu+E=*>>A1EF= z$NVyP2K=({D^=y3l2YIpcZPUPj&bKq72ic!W)nDTG7Ld4@Cb$GYA}?eyrk&yGCjw` z$d|$+dkwPxtL38ai-$@F4 zy?mi9SIFg%NQd~CZ+b4}b<*5^n%__I9p1itTMo-T$s$FIArn!+lngy`f(hYAvs{T=kqS_S3GVJTq&A zhqO;SL6kkOj0~hPB8eqHbx_Q|KniXHSbDyL(8!wcAa83rEM- zbbLj}vwH5bj-TrIt&V5x_X|CDL&sA(eyrzi;>6EDkRIDyT$l=?<9mAUx{jZNAb3Z| z)3|%3<7eg$r_H&w*u-|8ww*Ebp^oQKb@i|CC6xas{ogQ@FNs9Mm$vm2J7xxa*4lzn zqY-{%>*$d+llX-n7&BrZ{E-bqK4PyE^NAIN;T3(6juT@aCOz?Dm#po1Gdy_^^Qx&q gOa^&^0rstpki~|RM!T7mwt}`~hS7=$N>XpmAAXDQy#N3J literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/th/LC_MESSAGES/djangojs.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/th/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..71eff638706d0be66e2132078894b7ca48f1b3cd GIT binary patch literal 6250 zcmd6qU2Ggz6~_k}XmO#CLR&rxy`z9O(l>R?_PT+ot?2} zX8rM$CRB00R0-m=NvqO2p`;(Glmt>{C8Qz{JXAb06`8Y50kR@CICC)`q=3N30fLFl^co#wCeH9dcAC$NgARlL%hwwZE z3eOXu#F+!HHp)cz*`Bf`0{N-klg<1n&W5-X(AX+{w$&gYV?{9(WJq zYx($J`S=b)Rj{7hkAk0N zd=C5~_y#ER{*dD}@EeT(4L%4yKoQ5mLGU2>7ASG=y$ep@22jR(K&Ch@DEWijei)QI zFXZ-1x&4ozo1CAaAPac;RDvS4~uz83N^ zZDFo&@)Vv@d%2LqT+*YW$2#r}+z)e$&dBeq=T_XJ?*O-)3#+;1Dsf9cJi;w~C)bxP zIQ<~)YW9)TLN4Sr`&zzBKS}S>Is{x7Ykz&L!ZEdaT{TGfia}QsUAykPP0B4ciq0lA zA+UWS@_c7|bG#WR&h|;y^W9NjtJSeH=mu5oJA?HwjCBsmRXg0IYgF+XU8AIX~;fV+uihMoZZbpJHu{Nt@E65hP_(gjn@?gz(D!Y(nF<Mh$C31t*`4|QSR@bnwlym65AWo)8gK5SJwtVpWC0*``7mk?;75@pu<41 z)HfIgi4Ne$7A>npPbd8ozUu{Br8lEkC)<8d87gd9@RM9)Ix6f8s$q?Ds;st*dP#>P zG3tFIelv3Y!cZ7B;<5@R%rM?IuvOWw+e%yeIzOjbdMrz?Wa;6hzqncY7WS-lBunSB zbT(@}lcguJ)^Yru<=&moTC-Vt&M}V6c*6ufZ%pZ%S^66ZA~8w#EHRzcahAT2rB|~S z9GGx5OW)2?CbY1Sf^VcJ>uYB6VH=sjZ;j)Uah6`p(#stR3yvlT@325UkC+F!?mMA( z*(}*IhveL1+RqEy1)3dZvcjCU$?ywdE$e){C%^nu8yR}@WUZgF6eHDz1r|bn&Pati z7ZK_DdC>EU&A>N4hi@g-S*xy*xm`mOGBxFU)l`;+N(r*`Y}PsjzcXfx_@rhXaG1q< zGS@=dMM`g9E((e>*5?-5#W>PLNKQgB;GTCE5ojK3GOd-R@c5i< zpUTo#+CJ!HEqsBf>#(u=f> zZ3x>61f=z>uO-T`-59bb%^BFjdCr^+@Mp@btqxYx0b(M=F;mX2gGd&EoxWR=L#hcQ zc($`jb9Bv>l+@~YCL|z@+iUG@L_o`i;JmVSlStOekW-spBtrX8>MSXJNjRG$Sgq>e zyGj|N6o-y)_ldAaJy~=QiJKHtc5+KX^ei;}Xi2TSA1-F6E&hL0wUl}CIehcNQa#(q zwq0eLu&d}ITRTdz=mooMUOePbq2#merlEPwkC4{5bsDw3t2U;BIT3Nyz+ew3RfA<8S}KxPJ8>XhnAYD, 2011 +# Metin Amiroff , 2011 +# Murat Çorlu , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:50+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: BouRock\n" +"Language-Team: Turkish (http://www.transifex.com/django/django/language/" +"tr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#, javascript-format +msgid "Available %s" +msgstr "Mevcut %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Bu mevcut %s listesidir. Aşağıdaki kutudan bazılarını işaretleyerek ve ondan " +"sonra iki kutu arasındaki \"Seçin\" okuna tıklayarak seçebilirsiniz." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Mevcut %s listesini süzmek için bu kutu içine yazın." + +msgid "Filter" +msgstr "Süzgeç" + +msgid "Choose all" +msgstr "Tümünü seçin" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Bir kerede tüm %s seçilmesi için tıklayın." + +msgid "Choose" +msgstr "Seçin" + +msgid "Remove" +msgstr "Kaldır" + +#, javascript-format +msgid "Chosen %s" +msgstr "Seçilen %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Bu seçilen %s listesidir. Aşağıdaki kutudan bazılarını işaretleyerek ve " +"ondan sonra iki kutu arasındaki \"Kaldır\" okuna tıklayarak " +"kaldırabilirsiniz." + +msgid "Remove all" +msgstr "Tümünü kaldır" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Bir kerede tüm seçilen %s kaldırılması için tıklayın." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "%(sel)s / %(cnt)s seçildi" +msgstr[1] "%(sel)s / %(cnt)s seçildi" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Bireysel düzenlenebilir alanlarda kaydedilmemiş değişiklikleriniz var. Eğer " +"bir eylem çalıştırırsanız, kaydedilmemiş değişiklikleriniz kaybolacaktır." + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"Bir eylem seçtiniz, fakat henüz bireysel alanlara değişikliklerinizi " +"kaydetmediniz. Kaydetmek için lütfen TAMAM düğmesine tıklayın. Eylemi " +"yeniden çalıştırmanız gerekecek." + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Bir eylem seçtiniz, fakat bireysel alanlar üzerinde hiçbir değişiklik " +"yapmadınız. Muhtemelen Kaydet düğmesi yerine Git düğmesini arıyorsunuz." + +msgid "Now" +msgstr "Şimdi" + +msgid "Midnight" +msgstr "Geceyarısı" + +msgid "6 a.m." +msgstr "Sabah 6" + +msgid "Noon" +msgstr "Öğle" + +msgid "6 p.m." +msgstr "6 ö.s." + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Not: Sunucu saatinin %s saat ilerisindesiniz." +msgstr[1] "Not: Sunucu saatinin %s saat ilerisindesiniz." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Not: Sunucu saatinin %s saat gerisindesiniz." +msgstr[1] "Not: Sunucu saatinin %s saat gerisindesiniz." + +msgid "Choose a Time" +msgstr "Bir Saat Seçin" + +msgid "Choose a time" +msgstr "Bir saat seçin" + +msgid "Cancel" +msgstr "İptal" + +msgid "Today" +msgstr "Bugün" + +msgid "Choose a Date" +msgstr "Bir Tarih Seçin" + +msgid "Yesterday" +msgstr "Dün" + +msgid "Tomorrow" +msgstr "Yarın" + +msgid "January" +msgstr "Ocak" + +msgid "February" +msgstr "Şubat" + +msgid "March" +msgstr "Mart" + +msgid "April" +msgstr "Nisan" + +msgid "May" +msgstr "Mayıs" + +msgid "June" +msgstr "Haziran" + +msgid "July" +msgstr "Temmuz" + +msgid "August" +msgstr "Ağustos" + +msgid "September" +msgstr "Eylül" + +msgid "October" +msgstr "Ekim" + +msgid "November" +msgstr "Kasım" + +msgid "December" +msgstr "Aralık" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "P" + +msgctxt "one letter Monday" +msgid "M" +msgstr "P" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "S" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "Ç" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "P" + +msgctxt "one letter Friday" +msgid "F" +msgstr "C" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "C" + +msgid "Show" +msgstr "Göster" + +msgid "Hide" +msgstr "Gizle" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/tt/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/tt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6bfde60aa116c04fa307a7b732fb9f8aaa7b01c7 GIT binary patch literal 12952 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, 2011 +# v_ildar , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Tatar (http://www.transifex.com/django/django/language/tt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tt\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "%(count)d %(items)s уңышлы рәвештә бетерелгән." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "%(name)s бетереп булмады" + +msgid "Are you sure?" +msgstr "Сез инанып карар кылдыгызмы?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Сайланган %(verbose_name_plural)s бетерергә" + +msgid "Administration" +msgstr "" + +msgid "All" +msgstr "Барысы" + +msgid "Yes" +msgstr "Әйе" + +msgid "No" +msgstr "Юк" + +msgid "Unknown" +msgstr "Билгесез" + +msgid "Any date" +msgstr "Теләсә нинди көн һәм вакыт" + +msgid "Today" +msgstr "Бүген" + +msgid "Past 7 days" +msgstr "Соңгы 7 көн" + +msgid "This month" +msgstr "Бу ай" + +msgid "This year" +msgstr "Бу ел" + +msgid "No date" +msgstr "" + +msgid "Has date" +msgstr "" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" + +msgid "Action:" +msgstr "Гамәл:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Тагын бер %(verbose_name)s өстәргә" + +msgid "Remove" +msgstr "Бетерергә" + +msgid "action time" +msgstr "гамәл вакыты" + +msgid "user" +msgstr "" + +msgid "content type" +msgstr "" + +msgid "object id" +msgstr "объект идентификаторы" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/3/library/functions.html#repr) +msgid "object repr" +msgstr "объект фаразы" + +msgid "action flag" +msgstr "гамәл тибы" + +msgid "change message" +msgstr "үзгәрү белдерүе" + +msgid "log entry" +msgstr "журнал язмасы" + +msgid "log entries" +msgstr "журнал язмалары" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "" + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "" + +msgid "LogEntry Object" +msgstr "" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "" + +msgid "Added." +msgstr "" + +msgid "and" +msgstr "һәм" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "" + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "" + +msgid "No fields changed." +msgstr "Үзгәртелгән кырлар юк." + +msgid "None" +msgstr "Юк" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Элементар өстеннән гамәл кылу өчен алар сайланган булырга тиеш. Элементлар " +"үзгәртелмәгән." + +msgid "No action selected." +msgstr "Гамәл сайланмаган." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "%(name)s \"%(obj)s\" уңышлы рәвештә бетерелгән." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "%s өстәргә" + +#, python-format +msgid "Change %s" +msgstr "%s үзгәртергә" + +msgid "Database error" +msgstr "Бирелмәләр базасы хатасы" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "%(count)s %(name)s уңышлы рәвештә үзгәртелгән." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "%(total_count)s сайланган" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "Барлык %(cnt)s объектан 0 сайланган" + +#, python-format +msgid "Change history: %s" +msgstr "Үзгәртү тарихы: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" + +msgid "Django site admin" +msgstr "Django сайты идарәсе" + +msgid "Django administration" +msgstr "Django идарәсе" + +msgid "Site administration" +msgstr "Сайт идарәсе" + +msgid "Log in" +msgstr "Керергә" + +#, python-format +msgid "%(app)s administration" +msgstr "" + +msgid "Page not found" +msgstr "Сәхифә табылмаган" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Кызганычка каршы, соралган сәхифә табылмады." + +msgid "Home" +msgstr "Башбит" + +msgid "Server error" +msgstr "Сервер хатасы" + +msgid "Server error (500)" +msgstr "Сервер хатасы (500)" + +msgid "Server Error (500)" +msgstr "Сервер хатасы (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Run the selected action" +msgstr "Сайланган гамәлне башкарырга" + +msgid "Go" +msgstr "Башкарырга" + +msgid "Click here to select the objects across all pages" +msgstr "Барлык сәхифәләрдә булган объектларны сайлау өчен монда чирттерегез" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Бөтен %(total_count)s %(module_name)s сайларга" + +msgid "Clear selection" +msgstr "Сайланганлыкны алырга" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"Баштан логин һәм серсүзне кертегез. Аннан соң сез кулланучы турында күбрәк " +"мәгълүматне төзәтә алырсыз." + +msgid "Enter a username and password." +msgstr "Логин һәм серсүзне кертегез." + +msgid "Change password" +msgstr "Серсүзне үзгәртергә" + +msgid "Please correct the error below." +msgstr "Зинһар, биредәге хаталарны төзәтегез." + +msgid "Please correct the errors below." +msgstr "" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "%(username)s кулланучы өчен яңа серсүзне кертегез." + +msgid "Welcome," +msgstr "Рәхим итегез," + +msgid "View site" +msgstr "" + +msgid "Documentation" +msgstr "Документация" + +msgid "Log out" +msgstr "Чыгарга" + +#, python-format +msgid "Add %(name)s" +msgstr "%(name)s өстәргә" + +msgid "History" +msgstr "Тарих" + +msgid "View on site" +msgstr "Сайтта карарга" + +msgid "Filter" +msgstr "Филтер" + +msgid "Remove from sorting" +msgstr "" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "" + +msgid "Toggle sorting" +msgstr "" + +msgid "Delete" +msgstr "Бетерергә" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"%(object_name)s '%(escaped_object)s' бетереүе аның белән бәйләнгән " +"объектларның бетерелүенә китерә ала, әмма сезнең хисап язмагызның киләсе " +"объект тибларын бетерү өчен хокуклары җитми:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"%(object_name)s '%(escaped_object)s' бетерүе киләсе сакланган объектларның " +"бетерелүен таләп итә:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Сез инанып %(object_name)s \"%(escaped_object)s\" бетерергә телисезме? " +"Барлык киләсе бәйләнгән объектлар да бетерелер:" + +msgid "Objects" +msgstr "" + +msgid "Yes, I'm sure" +msgstr "Әйе, мин инандым" + +msgid "No, take me back" +msgstr "" + +msgid "Delete multiple objects" +msgstr "Берничә объектны бетерергә" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Сайланган %(objects_name)s бетерүе аның белән бәйләнгән объектларның " +"бетерелүенә китерә ала, әмма сезнең хисап язмагызның киләсе объект тибларын " +"бетерү өчен хокуклары җитми:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"%(objects_name)s бетерүе киләсе аның белән бәйләнгән сакланган объектларның " +"бетерелүен таләп итә:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Сез инанып %(objects_name)s бетерергә телисезме? Барлык киләсе объектлар һәм " +"алар белән бәйләнгән элементлар да бетерелер:" + +msgid "Change" +msgstr "Үзгәртергә" + +msgid "Delete?" +msgstr "Бетерергә?" + +#, python-format +msgid " By %(filter_title)s " +msgstr "%(filter_title)s буенча" + +msgid "Summary" +msgstr "" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "" + +msgid "Add" +msgstr "Өстәргә" + +msgid "You don't have permission to edit anything." +msgstr "Төзәтү өчен хокукларыгыз җитми." + +msgid "Recent actions" +msgstr "" + +msgid "My actions" +msgstr "" + +msgid "None available" +msgstr "Тарих юк" + +msgid "Unknown content" +msgstr "Билгесез тип" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Сезнең бирелмәләр базасы дөрес итем көйләнмәгән. Тиешле җәдвәлләр төзелгәнен " +"һәм тиешле кулланучының хокуклары җитәрлек булуын тикшерегез." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" + +msgid "Forgotten your password or username?" +msgstr "" + +msgid "Date/time" +msgstr "Көн һәм вакыт" + +msgid "User" +msgstr "Кулланучы" + +msgid "Action" +msgstr "Гамәл" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Әлеге объектның үзгәртү тарихы юк. Бу идарә итү сайты буенча өстәлмәгән " +"булуы ихтимал." + +msgid "Show all" +msgstr "Бөтенесен күрсәтергә" + +msgid "Save" +msgstr "Сакларга" + +msgid "Popup closing..." +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "" + +msgid "Search" +msgstr "Эзләргә" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s нәтиҗә" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "барлыгы %(full_result_count)s" + +msgid "Save as new" +msgstr "Яңа объект итеп сакларга" + +msgid "Save and add another" +msgstr "Сакларга һәм бүтән объектны өстәргә" + +msgid "Save and continue editing" +msgstr "Сакларга һәм төзәтүне дәвам итәргә" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Сайтыбызда үткәргән вакыт өчен рәхмәт." + +msgid "Log in again" +msgstr "Тагын керергә" + +msgid "Password change" +msgstr "Серсүзне үзгәртү" + +msgid "Your password was changed." +msgstr "Серсүзегез үзгәртелгән." + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Хәвефсезлек сәбәпле, зинһар, үзегезнең иске серсүзне кертегез, аннан яңа " +"серсүзне ике тапкыр кертегез (дөрес язылышын тикшерү өчен)." + +msgid "Change my password" +msgstr "Серсүземне үзгәртергә" + +msgid "Password reset" +msgstr "Серсүзне торгызу" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Серсүзегез үзгәртелгән. Сез хәзер керә аласыз." + +msgid "Password reset confirmation" +msgstr "Серсүзне торгызу раслау" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "Зинһар, тикшерү өчен яңа серсүзегезне ике тапкыр кертегез." + +msgid "New password:" +msgstr "Яңа серсуз:" + +msgid "Confirm password:" +msgstr "Серсүзне раслагыз:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Серсүзне торгызу өчен сылтама хаталы. Бәлки аның белән инде кулланганнар. " +"Зинһар, серсүзне тагын бер тапкыр торгызып карагыз." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" + +msgid "Please go to the following page and choose a new password:" +msgstr "Зинһар, бу сәхифәгә юнәлегез һәм яңа серсүзне кертегез:" + +msgid "Your username, in case you've forgotten:" +msgstr "Сезнең кулланучы исемегез (оныткан булсагыз):" + +msgid "Thanks for using our site!" +msgstr "Безнең сайтны куллану өчен рәхмәт!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s сайтының төркеме" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" + +msgid "Email address:" +msgstr "Эл. почта адресы:" + +msgid "Reset my password" +msgstr "Серсүземне торгызырга" + +msgid "All dates" +msgstr "Бөтен көннәр" + +#, python-format +msgid "Select %s" +msgstr "%s сайлагыз" + +#, python-format +msgid "Select %s to change" +msgstr "Үзгәртү өчен %s сайлагыз" + +msgid "Date:" +msgstr "Көн:" + +msgid "Time:" +msgstr "Вакыт:" + +msgid "Lookup" +msgstr "Эзләү" + +msgid "Currently:" +msgstr "" + +msgid "Change:" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/tt/LC_MESSAGES/djangojs.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/tt/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..16af5a0237f0815d2689f5dc2bd5d16e01743128 GIT binary patch literal 2607 zcmb7E-ES0C6dx5oSicbQ!T5E=G=MO(yA=v-#V8dNq0+#r;f3UO=kD&n?94iIx21^> z{fH?EYQShBO-#g(2Yiqc*c2$$7hm+nJ8j~lk^jL5-}HCx?6%t$Nt|}(H|O4a&iS3+ zIkSJPU-P+z>j~UX zhJ@#fL0?i=Z1sttBz>!|8iuhXLCUMiMawrEu?+a+e$Q7jvflJuY4v+<;8m*1dOHjQ zJcg|!vK9_W>u444#n2Tac-F!wf_Y5FaO9<9VS}n-NG{SP5s)Y;FATQf)uoZvfnbxO zns7lV7@<;C1Qm&L1M&jb8}i(S@Tu%c-;EtY%uSJ`dK3<#rV;YP@T3=1s2oP5s*>Ia zX|SOboFf677m<{Ajxv*U&$%--99l*#hNmGLEs|5=YH~Cpl|uu*6p*&$d!>_f_#ojV z`=`u(p8|c&wEH3{xQF)Z zLdgPk=kh&vZik)UN!>3M^4(i=-MJhN+DGJ&$1#`A?X+{d?fh=a_Y}70x8`tV4vARV z#YhCPFH{&6=q(WhUQCB12G6IL!3O55zA+syD2K1WC#W<;McPFvY6U6^B_i5fRjOXd zW`~D|9mVmyvOMLK!df=1s11J0IjdB5OQ!!o|GuT#^G+_)7Y0fO;51T4aY~+2*}5;h zpqG0e#Zv8gr?}tVwRDbim1Sh_3reAjQ7q7|K~F7`L=2S~@Eeiv?fqd?iwhLgjT!IB z_fq=0C)b<7x14_5dO8`!J(ir&bNHLqbNKGlpMYcx=5;;Gi~0&bE&W9@nv5@;Hw#Vb zvGi997n2W@v4!)=IO%K2xNgGX3ZLNbTK}ML;BT6eNhClFxSv5nyjl8FguDTBoH{aH z!MPbrpKBd8ygK&Vz86+fGugh?*Ys@iQ8J#4TKZCQS~qc?ZxFKd*9#ZHDw*IC(vr}a&bB4H7eG}nlp;@z| z5`C2w;c97q7W+2|!d}!ftRzBX2^82xUk2IJtRfa}BHE&(L;9SFd_!O3$eeE@@Po~GYLME3V?1SHTn$)*18qH-JF$9&<(AcKvXjg?PCbd{RW4tKvrYM`5%RE zBd(ikLUhy6%d9V_;vq>(xQY$P^k3?rq*l4Bv^m>~fJ#%{Q&lDiBRdJMbNq{GL|+s~ z&n=u!1?Ryt-GRtwAyoQlAlr}g->hmX#>pIpN@)c=VEU)Dj%5w(P|ghE8Lk{d%XLG# zDY#v4#aO9AM-5=ZgMjYxK(88`R87bS?zf%7&XF<#no75E2DA{-n<&z37|E8U!)(s* X_rzaOdrm3&#E{{RO@dTw{2c3FJ%44c literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/uk/LC_MESSAGES/djangojs.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/uk/LC_MESSAGES/djangojs.po new file mode 100644 index 0000000..502c548 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/uk/LC_MESSAGES/djangojs.po @@ -0,0 +1,230 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Oleksandr Chernihov , 2014 +# Boryslav Larin , 2011 +# Денис Подлесный , 2016 +# Jannis Leidel , 2011 +# panasoft , 2016 +# Sergey Lysach , 2011-2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:50+0200\n" +"PO-Revision-Date: 2017-09-19 16:41+0000\n" +"Last-Translator: Денис Подлесный \n" +"Language-Team: Ukrainian (http://www.transifex.com/django/django/language/" +"uk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != " +"11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % " +"100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || " +"(n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n" + +#, javascript-format +msgid "Available %s" +msgstr "В наявності %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Це список всіх доступних %s. Ви можете обрати деякі з них, виділивши їх у " +"полі нижче і натиснувшт кнопку \"Обрати\"." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "" +"Почніть вводити текст в цьому полі щоб відфільтрувати список доступних %s." + +msgid "Filter" +msgstr "Фільтр" + +msgid "Choose all" +msgstr "Обрати всі" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Натисніть щоб обрати всі %s відразу." + +msgid "Choose" +msgstr "Обрати" + +msgid "Remove" +msgstr "Видалити" + +#, javascript-format +msgid "Chosen %s" +msgstr "Обрано %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Це список обраних %s. Ви можете видалити деякі з них, виділивши їх у полі " +"нижче і натиснувши кнопку \"Видалити\"." + +msgid "Remove all" +msgstr "Видалити все" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Натисніть щоб видалити всі обрані %s відразу." + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "Обрано %(sel)s з %(cnt)s" +msgstr[1] "Обрано %(sel)s з %(cnt)s" +msgstr[2] "Обрано %(sel)s з %(cnt)s" +msgstr[3] "Обрано %(sel)s з %(cnt)s" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Ви зробили якісь зміни у деяких полях. Якщо Ви виконаєте цю дію, всі " +"незбережені зміни буде втрачено." + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"Ви обрали дію, але не зберегли зміни в окремих полях. Будь ласка, натисніть " +"ОК, щоб зберегти. Вам доведеться повторно запустити дію." + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Ви обрали дію і не зробили жодних змін у полях. Ви, напевно, шукаєте кнопку " +"\"Виконати\", а не \"Зберегти\"." + +msgid "Now" +msgstr "Зараз" + +msgid "Midnight" +msgstr "Північ" + +msgid "6 a.m." +msgstr "6" + +msgid "Noon" +msgstr "Полудень" + +msgid "6 p.m." +msgstr "18:00" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "Примітка: Ви на %s годину попереду серверного часу." +msgstr[1] "Примітка: Ви на %s години попереду серверного часу." +msgstr[2] "Примітка: Ви на %s годин попереду серверного часу." +msgstr[3] "Примітка: Ви на %s годин попереду серверного часу." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "Примітка: Ви на %s годину позаду серверного часу." +msgstr[1] "Примітка: Ви на %s години позаду серверного часу." +msgstr[2] "Примітка: Ви на %s годин позаду серверного часу." +msgstr[3] "Примітка: Ви на %s годин позаду серверного часу." + +msgid "Choose a Time" +msgstr "Оберіть час" + +msgid "Choose a time" +msgstr "Оберіть час" + +msgid "Cancel" +msgstr "Відмінити" + +msgid "Today" +msgstr "Сьогодні" + +msgid "Choose a Date" +msgstr "Оберіть дату" + +msgid "Yesterday" +msgstr "Вчора" + +msgid "Tomorrow" +msgstr "Завтра" + +msgid "January" +msgstr "січня" + +msgid "February" +msgstr "лютого" + +msgid "March" +msgstr "березня" + +msgid "April" +msgstr "квітня" + +msgid "May" +msgstr "травня" + +msgid "June" +msgstr "червня" + +msgid "July" +msgstr "липня" + +msgid "August" +msgstr "серпня" + +msgid "September" +msgstr "вересня" + +msgid "October" +msgstr "жовтня" + +msgid "November" +msgstr "листопада" + +msgid "December" +msgstr "грудня" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "Н" + +msgctxt "one letter Monday" +msgid "M" +msgstr "П" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "В" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "С" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "Ч" + +msgctxt "one letter Friday" +msgid "F" +msgstr "П" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "С" + +msgid "Show" +msgstr "Показати" + +msgid "Hide" +msgstr "Сховати" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/ur/LC_MESSAGES/djangojs.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/ur/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..65de1984ff62879a8ed018bd10e4dbb0ea8e7abb GIT binary patch literal 2678 zcmb7EO>Y}j6dj;IF&~8j5+IOn7gbV~aqQ5htwSnkXiK4Kqc#O~gEa9x+e621%zPw` z1dE`=SRxCQ1{VDRbrM2@NegWjS+Ri)OWxQL0yg{x#D;Tc#&+G70wa%)-+TAt+;i{q zFFUt=uHktW?~8c9$NLgq`#yZ(`4xBo_#5yc;Pdxu+G9Wh@>&Nz4%`P!0gnJ50gff- z?*g}B{T^^TFrTb#-~(8H0OUA9vi~9QL9AziZ2t+6<9!Ca47?0n0`7-%1^6TI61WW` ziG}q~aOQl65OfFdFz{*MDc}phN#Jw9kATkrzW_b~{4&8!AlLH)kn8yw$nky$J_Y;( z$o78%@zJ(F9PjS{a=u-_zkpfbaq!Z)2w;FB08uQCgED#^=E!`w5ABEJu{%GH;zh_P zC+qekUe<|w!TPix=EnS)`%d26-R}u|k4H{{cK7F{kDu5Od0&|KJR2e-T~2GSPZ^eN zOxl8Wd)lZW^TO6fOOE3SGRU{eqO-E215Ze{JZ9OxaJ4rrQ)pwBDXn73*G@T(#MiWT zMwFc?p`9(^_k?2_Gx#n$u8ZY);lYu&&N~5>j49EfONJyP?^}+189z;$NepD4Pi4ad zAvr_&k|B!%Gnv|7AQ;#$maQJ zZQOO<#~kS=O#L06;&xk3DV|MKh=$S)$_7G)>8b z2BxQ{(>{l@3gTiq@017Pg4$pwz5{_fuqQQkV(e(Q^lUnl8g-;EBq+^PP@69<`U4f) zu;ehe-t~k(a&F?7ez0rDxeCJ7kIKAbViI$7aMJQS9CH-7sc}1S4O>6vxMeR#vJx%5 zk-=e#e~$D^+BHJiJ;N#7==h3<^R0#ECaI0qBCdV>4-n3WRkf*`8tQ5zz4T~q67L#=WU1jV(FQf!1ZbrmU8gE?qnE&N!mQcw2e2+qrQJ-EeK zT~q6=Sq|Q;Hn&tgtcEwExV#Lp0X9*Zs=6M|l4@XQ6~vHs3-%3-xoN1nj-$0MEw$cU z;dqHV0$);VFa}(KPMov363%HT_Zx6nZLirP+@i1wDO4S)S2!kuqv|MFZ$YgEYHqa_ z)dGxR(O~HMe+?JNM@$ce)zGq}bI4s|YJ`q0gUv!XhXu0Eamrk ztzlUUm-GxOu0^FoAEv{cqWM^6bL3g1zHnY$4QG+{Mr6t7oft^B*jmyM zxy$`O*G^0w^?(Xm!I{Acvh_s!XC+{^g}Qr{Q1wVE^;N>SSC~X3D1&K0O&P)>4}?HylF6?dDPA(3okAOqIoMM+E0@ zqrqt40$^HeeBrt}#yNQgH%PSwz-56-;T$&}k, 2012 +# Jannis Leidel , 2011 +# Thanh Le Viet , 2013 +# Tran , 2011 +# Tran Van , 2011-2013,2016,2018 +# Vuong Nguyen , 2011 +# xgenvn , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-16 20:42+0100\n" +"PO-Revision-Date: 2019-01-18 00:36+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Vietnamese (http://www.transifex.com/django/django/language/" +"vi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: vi\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "Đã xóa thành công %(count)d %(items)s ." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "Không thể xóa %(name)s" + +msgid "Are you sure?" +msgstr "Bạn có chắc chắn không?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Xóa các %(verbose_name_plural)s đã chọn" + +msgid "Administration" +msgstr "Quản trị website" + +msgid "All" +msgstr "Tất cả" + +msgid "Yes" +msgstr "Có" + +msgid "No" +msgstr "Không" + +msgid "Unknown" +msgstr "Chưa xác định" + +msgid "Any date" +msgstr "Bất kì ngày nào" + +msgid "Today" +msgstr "Hôm nay" + +msgid "Past 7 days" +msgstr "7 ngày trước" + +msgid "This month" +msgstr "Tháng này" + +msgid "This year" +msgstr "Năm nay" + +msgid "No date" +msgstr "" + +msgid "Has date" +msgstr "" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "" +"Bạn hãy nhập đúng %(username)s và mật khẩu. (Có phân biệt chữ hoa, thường)" + +msgid "Action:" +msgstr "Hoạt động:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Thêm một %(verbose_name)s " + +msgid "Remove" +msgstr "Gỡ bỏ" + +msgid "Addition" +msgstr "" + +msgid "Change" +msgstr "Thay đổi" + +msgid "Deletion" +msgstr "" + +msgid "action time" +msgstr "Thời gian tác động" + +msgid "user" +msgstr "" + +msgid "content type" +msgstr "kiểu nội dung" + +msgid "object id" +msgstr "Mã đối tượng" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) +msgid "object repr" +msgstr "đối tượng repr" + +msgid "action flag" +msgstr "hiệu hành động" + +msgid "change message" +msgstr "thay đổi tin nhắn" + +msgid "log entry" +msgstr "đăng nhập" + +msgid "log entries" +msgstr "mục đăng nhập" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "Thêm \"%(object)s\"." + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "Đã thay đổi \"%(object)s\" - %(changes)s" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "Đối tượng \"%(object)s.\" đã được xoá." + +msgid "LogEntry Object" +msgstr "LogEntry Object" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "{name} \"{object}\" đã được thêm vào." + +msgid "Added." +msgstr "Được thêm." + +msgid "and" +msgstr "và" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "" + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "" + +msgid "No fields changed." +msgstr "Không có trường nào thay đổi" + +msgid "None" +msgstr "Không" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" +"Giữ phím \"Control\", hoặc \"Command\" trên Mac, để chọn nhiều hơn một." + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "" + +msgid "You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "" +"Mục tiêu phải được chọn mới có thể thực hiện hành động trên chúng. Không có " +"mục tiêu nào đã được thay đổi." + +msgid "No action selected." +msgstr "Không có hoạt động nào được lựa chọn." + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "%(name)s \"%(obj)s\" đã được xóa thành công." + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "" + +#, python-format +msgid "Add %s" +msgstr "Thêm %s" + +#, python-format +msgid "Change %s" +msgstr "Thay đổi %s" + +#, python-format +msgid "View %s" +msgstr "" + +msgid "Database error" +msgstr "Cơ sở dữ liệu bị lỗi" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] " %(count)s %(name)s đã được thay đổi thành công." + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "Tất cả %(total_count)s đã được chọn" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "0 của %(cnt)s được chọn" + +#, python-format +msgid "Change history: %s" +msgstr "Lịch sử thay đổi: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"Xóa %(class_name)s %(instance)s sẽ tự động xóa các đối tượng liên quan sau: " +"%(related_objects)s" + +msgid "Django site admin" +msgstr "Trang web admin Django" + +msgid "Django administration" +msgstr "Trang quản trị cho Django" + +msgid "Site administration" +msgstr "Site quản trị hệ thống." + +msgid "Log in" +msgstr "Đăng nhập" + +#, python-format +msgid "%(app)s administration" +msgstr "Quản lý %(app)s" + +msgid "Page not found" +msgstr "Không tìm thấy trang nào" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Xin lỗi bạn! Trang mà bạn yêu cầu không tìm thấy." + +msgid "Home" +msgstr "Trang chủ" + +msgid "Server error" +msgstr "Lỗi máy chủ" + +msgid "Server error (500)" +msgstr "Lỗi máy chủ (500)" + +msgid "Server Error (500)" +msgstr "Lỗi máy chủ (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"Có lỗi xảy ra. Lỗi sẽ được gửi đến quản trị website qua email và sẽ được " +"khắc phục sớm. Cám ơn bạn." + +msgid "Run the selected action" +msgstr "Bắt đầu hành động lựa chọn" + +msgid "Go" +msgstr "Đi đến" + +msgid "Click here to select the objects across all pages" +msgstr "Click vào đây để lựa chọn các đối tượng trên tất cả các trang" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "Hãy chọn tất cả %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "Xóa lựa chọn" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"Đầu tiên, điền tên đăng nhập và mật khẩu. Sau đó bạn mới có thể chỉnh sửa " +"nhiều hơn lựa chọn của người dùng." + +msgid "Enter a username and password." +msgstr "Điền tên đăng nhập và mật khẩu." + +msgid "Change password" +msgstr "Đổi mật khẩu" + +msgid "Please correct the error below." +msgstr "Hãy sửa lỗi sai dưới đây" + +msgid "Please correct the errors below." +msgstr "Hãy chỉnh sửa lại các lỗi sau." + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Hãy nhập mật khẩu mới cho người sử dụng %(username)s." + +msgid "Welcome," +msgstr "Chào mừng bạn," + +msgid "View site" +msgstr "" + +msgid "Documentation" +msgstr "Tài liệu" + +msgid "Log out" +msgstr "Thoát" + +#, python-format +msgid "Add %(name)s" +msgstr "Thêm vào %(name)s" + +msgid "History" +msgstr "Bản ghi nhớ" + +msgid "View on site" +msgstr "Xem trên trang web" + +msgid "Filter" +msgstr "Bộ lọc" + +msgid "Remove from sorting" +msgstr "Bỏ khỏi sắp xếp" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "Sắp xếp theo:%(priority_number)s" + +msgid "Toggle sorting" +msgstr "Hoán đổi sắp xếp" + +msgid "Delete" +msgstr "Xóa" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Xóa %(object_name)s '%(escaped_object)s' sẽ làm mất những dữ liệu có liên " +"quan. Tài khoản của bạn không được cấp quyển xóa những dữ liệu đi kèm theo." + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"Xóa các %(object_name)s ' %(escaped_object)s ' sẽ bắt buộc xóa các đối " +"tượng được bảo vệ sau đây:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Bạn có chắc là muốn xóa %(object_name)s \"%(escaped_object)s\"?Tất cả những " +"dữ liệu đi kèm dưới đây cũng sẽ bị mất:" + +msgid "Objects" +msgstr "Đối tượng" + +msgid "Yes, I'm sure" +msgstr "Có, tôi chắc chắn." + +msgid "No, take me back" +msgstr "" + +msgid "Delete multiple objects" +msgstr "Xóa nhiều đối tượng" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"Xóa các %(objects_name)s sẽ bắt buộc xóa các đối tượng liên quan, nhưng tài " +"khoản của bạn không có quyền xóa các loại đối tượng sau đây:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "" +"Xóa các %(objects_name)s sẽ bắt buộc xóa các đối tượng đã được bảo vệ sau " +"đây:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"Bạn chắc chắn muốn xóa những lựa chọn %(objects_name)s? Tất cả những đối " +"tượng sau và những đối tượng liên quan sẽ được xóa:" + +msgid "View" +msgstr "" + +msgid "Delete?" +msgstr "Bạn muốn xóa?" + +#, python-format +msgid " By %(filter_title)s " +msgstr "Bởi %(filter_title)s " + +msgid "Summary" +msgstr "" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "Các mô models trong %(name)s" + +msgid "Add" +msgstr "Thêm vào" + +msgid "You don't have permission to view or edit anything." +msgstr "" + +msgid "Recent actions" +msgstr "" + +msgid "My actions" +msgstr "" + +msgid "None available" +msgstr "Không có sẵn" + +msgid "Unknown content" +msgstr "Không biết nội dung" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Một vài lỗi với cơ sở dữ liệu cài đặt của bạn. Hãy chắc chắn bảng biểu dữ " +"liệu được tạo phù hợp và dữ liệu có thể được đọc bởi những người sử dụng phù " +"hợp." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"Bạn đã xác thực bằng tài khoản %(username)s, nhưng không đủ quyền để truy " +"cập trang này. Bạn có muốn đăng nhập bằng một tài khoản khác?" + +msgid "Forgotten your password or username?" +msgstr "Bạn quên mật khẩu hoặc tài khoản?" + +msgid "Date/time" +msgstr "Ngày/giờ" + +msgid "User" +msgstr "Người dùng" + +msgid "Action" +msgstr "Hành động" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Đối tượng này không có một lịch sử thay đổi. Nó có lẽ đã không được thêm vào " +"qua trang web admin." + +msgid "Show all" +msgstr "Hiện tất cả" + +msgid "Save" +msgstr "Lưu lại" + +msgid "Popup closing…" +msgstr "" + +msgid "Search" +msgstr "Tìm kiếm" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s kết quả" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "tổng số %(full_result_count)s" + +msgid "Save as new" +msgstr "Lưu mới" + +msgid "Save and add another" +msgstr "Lưu và thêm mới" + +msgid "Save and continue editing" +msgstr "Lưu và tiếp tục chỉnh sửa" + +msgid "Save and view" +msgstr "" + +msgid "Close" +msgstr "" + +#, python-format +msgid "Change selected %(model)s" +msgstr "" + +#, python-format +msgid "Add another %(model)s" +msgstr "Thêm %(model)s khác" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "Xóa %(model)s đã chọn" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Cảm ơn bạn đã dành thời gian với website này" + +msgid "Log in again" +msgstr "Đăng nhập lại" + +msgid "Password change" +msgstr "Thay đổi mật khẩu" + +msgid "Your password was changed." +msgstr "Mật khẩu của bạn đã được thay đổi" + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Hãy nhập lại mật khẩu cũ và sau đó nhập mật khẩu mới hai lần để chúng tôi có " +"thể kiểm tra lại xem bạn đã gõ chính xác hay chưa." + +msgid "Change my password" +msgstr "Thay đổi mật khẩu" + +msgid "Password reset" +msgstr "Lập lại mật khẩu" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "Mật khẩu của bạn đã được lập lại. Bạn hãy thử đăng nhập." + +msgid "Password reset confirmation" +msgstr "Xác nhận việc lập lại mật khẩu" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "" +"Hãy nhập mật khẩu mới hai lần để chúng tôi có thể kiểm tra xem bạn đã gõ " +"chính xác chưa" + +msgid "New password:" +msgstr "Mật khẩu mới" + +msgid "Confirm password:" +msgstr "Nhập lại mật khẩu:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" +"Liên kết đặt lại mật khẩu không hợp lệ, có thể vì nó đã được sử dụng. Xin " +"vui lòng yêu cầu đặt lại mật khẩu mới." + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" +"Nếu bạn không nhận được email, hãy kiểm tra lại địa chỉ email mà bạn dùng để " +"đăng kí hoặc kiểm tra trong thư mục spam/rác" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "" +"Bạn nhận được email này vì bạn đã yêu cầu làm mới lại mật khẩu cho tài khoản " +"của bạn tại %(site_name)s." + +msgid "Please go to the following page and choose a new password:" +msgstr "Hãy vào đường link dưới đây và chọn một mật khẩu mới" + +msgid "Your username, in case you've forgotten:" +msgstr "Tên đăng nhập của bạn, trường hợp bạn quên nó:" + +msgid "Thanks for using our site!" +msgstr "Cảm ơn bạn đã sử dụng website của chúng tôi!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "Đội của %(site_name)s" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" +"Quên mật khẩu? Nhập địa chỉ email vào ô dưới đây. Chúng tôi sẽ email cho bạn " +"hướng dẫn cách thiết lập mật khẩu mới." + +msgid "Email address:" +msgstr "Địa chỉ Email:" + +msgid "Reset my password" +msgstr "Làm lại mật khẩu" + +msgid "All dates" +msgstr "Tất cả các ngày" + +#, python-format +msgid "Select %s" +msgstr "Chọn %s" + +#, python-format +msgid "Select %s to change" +msgstr "Chọn %s để thay đổi" + +#, python-format +msgid "Select %s to view" +msgstr "" + +msgid "Date:" +msgstr "Ngày:" + +msgid "Time:" +msgstr "Giờ:" + +msgid "Lookup" +msgstr "Tìm" + +msgid "Currently:" +msgstr "Hiện nay:" + +msgid "Change:" +msgstr "Thay đổi:" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/vi/LC_MESSAGES/djangojs.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/vi/LC_MESSAGES/djangojs.po new file mode 100644 index 0000000..d2155ca --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/vi/LC_MESSAGES/djangojs.po @@ -0,0 +1,220 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Tran , 2011 +# Tran Van , 2013 +# Vuong Nguyen , 2011 +# xgenvn , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-17 23:12+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Vietnamese (http://www.transifex.com/django/django/language/" +"vi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: vi\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, javascript-format +msgid "Available %s" +msgstr "Có sẵn %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"Danh sách các lựa chọn đang có %s. Bạn có thể chọn bằng bách click vào mũi " +"tên \"Chọn\" nằm giữa hai hộp." + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "Bạn hãy nhập vào ô này để lọc các danh sách sau %s." + +msgid "Filter" +msgstr "Lọc" + +msgid "Choose all" +msgstr "Chọn tất cả" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "Click để chọn tất cả %s ." + +msgid "Choose" +msgstr "Chọn" + +msgid "Remove" +msgstr "Xóa" + +#, javascript-format +msgid "Chosen %s" +msgstr "Chọn %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"Danh sách bạn đã chọn %s. Bạn có thể bỏ chọn bằng cách click vào mũi tên " +"\"Xoá\" nằm giữa hai ô." + +msgid "Remove all" +msgstr "Xoá tất cả" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "Click để bỏ chọn tất cả %s" + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] " %(sel)s của %(cnt)s được chọn" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"Bạn chưa lưu những trường đã chỉnh sửa. Nếu bạn chọn hành động này, những " +"chỉnh sửa chưa được lưu sẽ bị mất." + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"Bạn đã lựa chọn một hành động, nhưng bạn không lưu thay đổi của bạn đến các " +"lĩnh vực cá nhân được nêu ra. Xin vui lòng click OK để lưu lại. Bạn sẽ cần " +"phải chạy lại các hành động." + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"Bạn đã lựa chọn một hành động, và bạn đã không thực hiện bất kỳ thay đổi nào " +"trên các trường. Có lẽ bạn đang tìm kiếm nút bấm Go thay vì nút bấm Save." + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "" +"Lưu ý: Hiện tại bạn đang thấy thời gian trước %s giờ so với thời gian máy " +"chủ." + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "" +"Lưu ý: Hiện tại bạn đang thấy thời gian sau %s giờ so với thời gian máy chủ." + +msgid "Now" +msgstr "Bây giờ" + +msgid "Choose a Time" +msgstr "" + +msgid "Choose a time" +msgstr "Chọn giờ" + +msgid "Midnight" +msgstr "Nửa đêm" + +msgid "6 a.m." +msgstr "6 giờ sáng" + +msgid "Noon" +msgstr "Buổi trưa" + +msgid "6 p.m." +msgstr "" + +msgid "Cancel" +msgstr "Hủy bỏ" + +msgid "Today" +msgstr "Hôm nay" + +msgid "Choose a Date" +msgstr "" + +msgid "Yesterday" +msgstr "Hôm qua" + +msgid "Tomorrow" +msgstr "Ngày mai" + +msgid "January" +msgstr "" + +msgid "February" +msgstr "" + +msgid "March" +msgstr "" + +msgid "April" +msgstr "" + +msgid "May" +msgstr "" + +msgid "June" +msgstr "" + +msgid "July" +msgstr "" + +msgid "August" +msgstr "" + +msgid "September" +msgstr "" + +msgid "October" +msgstr "" + +msgid "November" +msgstr "" + +msgid "December" +msgstr "" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "" + +msgctxt "one letter Monday" +msgid "M" +msgstr "" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "" + +msgctxt "one letter Friday" +msgid "F" +msgstr "" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "" + +msgid "Show" +msgstr "Hiện ra" + +msgid "Hide" +msgstr "Dấu đi" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/djangojs.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..2df69307e1760482b0905fec3089aa58ab27ee2e GIT binary patch literal 4245 zcmcJQU2GKB6~}KA+9pn#=A&uaCZV^a#&+?p*FXR*r7Ac$Kx#mETZ&Yv8t-23PBJ^Q zotd@0c_=Oc;}47jG57;Ju@e&Ho~V zHVar3sp_@w{^p*0?z!h{c0YP_)ftAd5%Vd`tDj@+dGIIq;sc{)6=R#h9QXzBJ;hn@ z^H|TT^>4rjvHpWv|5foH;Flm@Q2b2sUK}og{1Nbe@G0<{;977kSPR|V{7e2|}q zLGrT`Bs;xeFE{|60>d~2lk8U@+50WH75pPe=N^D?5PTe@bJJi3+=;dWL(@EY=dGHgekUNtzS?)06q%& zAw@&+u-ZQj;-3xR;|cI>@M-WmNcR2)(mlT7zZ5@J{I}vgXadr^U-4nZClpsJmVz6h zSE;ChbkA9}KcaX+aT3H8>;tv_wc_umIiOW>0aGln#?H!+x!9)uNHKR4$3I^IQsCzj`dDwvYBqq|q zDlj=FQoyP)>3g9RlSTyd8BD6t8cZ7BkYH6H)r#ID>R}qx+w@-3_%E=mG}<&H2a z9Bwu8((<_J;t>K7cSYikdz-ixPKVhho*`_{*t)^CXOmgSW!sxH-Ow5g!Al)hqnUAG zu$q)*IYNPJ{5j1nTE+Bq(aJ4e8Npdcn1L}vkH5rSi^l_VTr&)ax#n^Uw}e^E(!MRy zR+9+!p(;<`PTFq=<+_fkJ2ZBT?P`+5b$hcCkJ_W^CN_RN^-IU;l?jX~RTq`PYIEX*3 z<(6vVSZTo-Ar$PGJWfSZdVGy+lr_kx4W$O*HVf#` z?QXNhaa=gz6`fkH^9_$w7yOSN$rSxJkE{gRBW9&7@|(qS8G(?|sV?P@qQ-M$&}BSf zHOq)r%qKe}9P}cYqs~fc=;Ng~5=rA)+|@0!GRR*}DVSw0PiqM@yh(M?%%s2@ZNh_u z-lQk8nt{88k#K_Cl%ZKOw$*@FG{+6g3X*BDjVNF6@N;~!BiQEg{ z*)=HfV%Hp;OpwH0b`IIN%{iVEZkX>kgysm@6@1?dls7srJ;(cQ3fO|s79l$;J(DRZ zaw==eD_2g1Na$|x^|X|e-Hm~}WUeT|fxov}YS!UG16~Eoal_0q@g!W7i`UvZO17%D zSXO75B&#cy)oX5+io2@*CTTX%yh#>IWo?HvW5t@WthilxP$Wz#KFIdl){FT14((2a zek5!My%Ob#7ts<{$pMkEY&TTrB=tmSM>gq%Vpf!w?B5p))!0I#z6#M7bCj=-RBs7I zo()xR=GE2FXCvz(>mv~;h7O1(oowEuR~@R}$RnGh8>`nvFiL))Ic_LsYo=ppu4PC0 z4o&B~vYJ_g_dUtWcc8;9GgraC+oJyrZ@y(FU)H~$Oyg%G9JkWng8?&{)si9<6IwdT zYw*1%&=ckKpjGhllT6x}7(& zQXP(z)L5n~On8eIHp*Sm;#Or0O*gkvr`nEixBW0y8`^S1kFIMJc4(&=w-WF@%C|J= z?y|>G9^6&3-^kjU5vsN9v=ilKCRjS#s<(3axGl1^ge|sqD{>lk*QlT(^+@Bj`i-WHg`g#x&j$v>16&cQiTy@9;y@9a1-5VQX z{={1dp83BV_mB2`a&<6&ZN#5~LbumB>J5zheH2S!=9t&fO~1y7*qiQwlw7>?A%E_5 z@70sH9rED0^lstgv^O-)APD>k;#FbGM6mqjVcPQhuP=;UVTJhtzkkXLiV`HkYws(J zj>8i;4RL<%JnYFt`J-(p>*Da6h52)Z(Gybm$<-4JM`z%a%z1uxjO5U~+=U=v^5fPa zsrhm1@WSMTH+G4_l=os|xo8}^|BuUM&6h8izDprFlAr7J#@<0XP7)BSKQR^rI z_u}zx|Ln93l^hP@l#UeHx$})-?!A4)e|-pHFID7Sa!2KC*_$F4+wypmX5aM2-V3u@ NR>$h`7sKB{_8-*2)|LPO literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/djangojs.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/djangojs.po new file mode 100644 index 0000000..b37c864 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/djangojs.po @@ -0,0 +1,220 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Bai HuanCheng (Bestony) , 2018 +# Jannis Leidel , 2011 +# Kewei Ma , 2016 +# Lele Long , 2011,2015 +# Liping Wang , 2016 +# mozillazg , 2016 +# slene , 2011 +# spaceoi , 2016 +# Ziang Song , 2012 +# Kevin Sze , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:50+0200\n" +"PO-Revision-Date: 2018-01-14 07:41+0000\n" +"Last-Translator: Bai HuanCheng (Bestony) \n" +"Language-Team: Chinese (China) (http://www.transifex.com/django/django/" +"language/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, javascript-format +msgid "Available %s" +msgstr "可用 %s" + +#, javascript-format +msgid "" +"This is the list of available %s. You may choose some by selecting them in " +"the box below and then clicking the \"Choose\" arrow between the two boxes." +msgstr "" +"这是可用的%s列表。你可以在选择框下面进行选择,然后点击两选框之间的“选择”箭" +"头。" + +#, javascript-format +msgid "Type into this box to filter down the list of available %s." +msgstr "在此框中键入以过滤可用的%s列表" + +msgid "Filter" +msgstr "过滤" + +msgid "Choose all" +msgstr "全选" + +#, javascript-format +msgid "Click to choose all %s at once." +msgstr "点击选择全部%s。" + +msgid "Choose" +msgstr "选择" + +msgid "Remove" +msgstr "删除" + +#, javascript-format +msgid "Chosen %s" +msgstr "选中的 %s" + +#, javascript-format +msgid "" +"This is the list of chosen %s. You may remove some by selecting them in the " +"box below and then clicking the \"Remove\" arrow between the two boxes." +msgstr "" +"这是选中的 %s 的列表。你可以在选择框下面进行选择,然后点击两选框之间的“删" +"除”箭头进行删除。" + +msgid "Remove all" +msgstr "删除全部" + +#, javascript-format +msgid "Click to remove all chosen %s at once." +msgstr "删除所有已选择的%s。" + +msgid "%(sel)s of %(cnt)s selected" +msgid_plural "%(sel)s of %(cnt)s selected" +msgstr[0] "选中了 %(cnt)s 个中的 %(sel)s 个" + +msgid "" +"You have unsaved changes on individual editable fields. If you run an " +"action, your unsaved changes will be lost." +msgstr "" +"你尚未保存一个可编辑栏位的变更. 如果你进行别的动作, 未保存的变更将会丢失." + +msgid "" +"You have selected an action, but you haven't saved your changes to " +"individual fields yet. Please click OK to save. You'll need to re-run the " +"action." +msgstr "" +"你已选则执行一个动作, 但有一个可编辑栏位的变更尚未保存. 请点选确定进行保存. " +"再重新执行该动作." + +msgid "" +"You have selected an action, and you haven't made any changes on individual " +"fields. You're probably looking for the Go button rather than the Save " +"button." +msgstr "" +"你已选则执行一个动作, 但可编辑栏位沒有任何改变. 你应该尝试 '去' 按钮, 而不是 " +"'保存' 按钮." + +msgid "Now" +msgstr "现在" + +msgid "Midnight" +msgstr "午夜" + +msgid "6 a.m." +msgstr "上午6点" + +msgid "Noon" +msgstr "正午" + +msgid "6 p.m." +msgstr "下午6点" + +#, javascript-format +msgid "Note: You are %s hour ahead of server time." +msgid_plural "Note: You are %s hours ahead of server time." +msgstr[0] "注意:你比服务器时间超前 %s 个小时。" + +#, javascript-format +msgid "Note: You are %s hour behind server time." +msgid_plural "Note: You are %s hours behind server time." +msgstr[0] "注意:你比服务器时间滞后 %s 个小时。" + +msgid "Choose a Time" +msgstr "选择一个时间" + +msgid "Choose a time" +msgstr "选择一个时间" + +msgid "Cancel" +msgstr "取消" + +msgid "Today" +msgstr "今天" + +msgid "Choose a Date" +msgstr "选择一个日期" + +msgid "Yesterday" +msgstr "昨天" + +msgid "Tomorrow" +msgstr "明天" + +msgid "January" +msgstr "一月" + +msgid "February" +msgstr "二月" + +msgid "March" +msgstr "三月" + +msgid "April" +msgstr "四月" + +msgid "May" +msgstr "五月" + +msgid "June" +msgstr "六月" + +msgid "July" +msgstr "七月" + +msgid "August" +msgstr "八月" + +msgid "September" +msgstr "九月" + +msgid "October" +msgstr "十月" + +msgid "November" +msgstr "十一月" + +msgid "December" +msgstr "十二月" + +msgctxt "one letter Sunday" +msgid "S" +msgstr "S" + +msgctxt "one letter Monday" +msgid "M" +msgstr "M" + +msgctxt "one letter Tuesday" +msgid "T" +msgstr "T" + +msgctxt "one letter Wednesday" +msgid "W" +msgstr "W" + +msgctxt "one letter Thursday" +msgid "T" +msgstr "T" + +msgctxt "one letter Friday" +msgid "F" +msgstr "F" + +msgctxt "one letter Saturday" +msgid "S" +msgstr "S" + +msgid "Show" +msgstr "显示" + +msgid "Hide" +msgstr "隐藏" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/zh_Hant/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/zh_Hant/LC_MESSAGES/django.po new file mode 100644 index 0000000..a2a1d9a --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/zh_Hant/LC_MESSAGES/django.po @@ -0,0 +1,660 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Chen Chun-Chia , 2015 +# ilay , 2012 +# Jannis Leidel , 2011 +# mail6543210 , 2013-2014 +# ming hsien tzang , 2011 +# tcc , 2011 +# Tzu-ping Chung , 2016-2017 +# Yeh-Yung , 2013 +# Yeh-Yung , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Tzu-ping Chung \n" +"Language-Team: Chinese (Taiwan) (http://www.transifex.com/django/django/" +"language/zh_TW/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_TW\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "成功的刪除了 %(count)d 個 %(items)s." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "無法刪除 %(name)s" + +msgid "Are you sure?" +msgstr "你確定嗎?" + +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "刪除所選的 %(verbose_name_plural)s" + +msgid "Administration" +msgstr "管理" + +msgid "All" +msgstr "全部" + +msgid "Yes" +msgstr "是" + +msgid "No" +msgstr "否" + +msgid "Unknown" +msgstr "未知" + +msgid "Any date" +msgstr "任何日期" + +msgid "Today" +msgstr "今天" + +msgid "Past 7 days" +msgstr "過去 7 天" + +msgid "This month" +msgstr "本月" + +msgid "This year" +msgstr "今年" + +msgid "No date" +msgstr "沒有日期" + +msgid "Has date" +msgstr "有日期" + +#, python-format +msgid "" +"Please enter the correct %(username)s and password for a staff account. Note " +"that both fields may be case-sensitive." +msgstr "請輸入正確的工作人員%(username)s及密碼。請注意兩者皆區分大小寫。" + +msgid "Action:" +msgstr "動作:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "新增其它 %(verbose_name)s" + +msgid "Remove" +msgstr "移除" + +msgid "action time" +msgstr "動作時間" + +msgid "user" +msgstr "使用者" + +msgid "content type" +msgstr "內容類型" + +msgid "object id" +msgstr "物件 id" + +#. Translators: 'repr' means representation +#. (https://docs.python.org/3/library/functions.html#repr) +msgid "object repr" +msgstr "物件 repr" + +msgid "action flag" +msgstr "動作旗標" + +msgid "change message" +msgstr "變更訊息" + +msgid "log entry" +msgstr "紀錄項目" + +msgid "log entries" +msgstr "紀錄項目" + +#, python-format +msgid "Added \"%(object)s\"." +msgstr "\"%(object)s\" 已新增。" + +#, python-format +msgid "Changed \"%(object)s\" - %(changes)s" +msgstr "\"%(object)s\" - %(changes)s 已變更。" + +#, python-format +msgid "Deleted \"%(object)s.\"" +msgstr "\"%(object)s\" 已刪除。" + +msgid "LogEntry Object" +msgstr "紀錄項目" + +#, python-brace-format +msgid "Added {name} \"{object}\"." +msgstr "{name} \"{object}\" 已新增。" + +msgid "Added." +msgstr "已新增。" + +msgid "and" +msgstr "和" + +#, python-brace-format +msgid "Changed {fields} for {name} \"{object}\"." +msgstr "{name} \"{object}\" 的 {fields} 已變更。" + +#, python-brace-format +msgid "Changed {fields}." +msgstr "{fields} 已變更。" + +#, python-brace-format +msgid "Deleted {name} \"{object}\"." +msgstr "{name} \"{object}\" 已刪除。" + +msgid "No fields changed." +msgstr "沒有欄位被變更。" + +msgid "None" +msgstr "無" + +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "按住 \"Control\" 或 \"Command\" (Mac),可選取多個值" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may edit it again below." +msgstr "{name} \"{obj}\" 新增成功。你可以在下面再次編輯它。" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was added successfully. You may add another {name} " +"below." +msgstr "{name} \"{obj}\" 新增成功。你可以在下方加入其他 {name}。" + +#, python-brace-format +msgid "The {name} \"{obj}\" was added successfully." +msgstr "{name} \"{obj}\" 已成功新增。" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may edit it again below." +msgstr "{name} \"{obj}\" 變更成功。你可以在下方再次編輯。" + +#, python-brace-format +msgid "" +"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"below." +msgstr "{name} \"{obj}\" 變更成功。你可以在下方加入其他 {name}。" + +#, python-brace-format +msgid "The {name} \"{obj}\" was changed successfully." +msgstr "{name} \"{obj}\" 已成功變更。" + +msgid "" +"Items must be selected in order to perform actions on them. No items have " +"been changed." +msgstr "必須要有項目被選到才能對它們進行動作。沒有項目變更。" + +msgid "No action selected." +msgstr "沒有動作被選。" + +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "%(name)s \"%(obj)s\" 已成功刪除。" + +#, python-format +msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" +msgstr "不存在 ID 為「%(key)s」的 %(name)s。或許它已被刪除?" + +#, python-format +msgid "Add %s" +msgstr "新增 %s" + +#, python-format +msgid "Change %s" +msgstr "變更 %s" + +msgid "Database error" +msgstr "資料庫錯誤" + +#, python-format +msgid "%(count)s %(name)s was changed successfully." +msgid_plural "%(count)s %(name)s were changed successfully." +msgstr[0] "共 %(count)s %(name)s 已變更成功。" + +#, python-format +msgid "%(total_count)s selected" +msgid_plural "All %(total_count)s selected" +msgstr[0] "全部 %(total_count)s 個被選" + +#, python-format +msgid "0 of %(cnt)s selected" +msgstr "%(cnt)s 中 0 個被選" + +#, python-format +msgid "Change history: %s" +msgstr "變更歷史: %s" + +#. Translators: Model verbose name and instance representation, +#. suitable to be an item in a list. +#, python-format +msgid "%(class_name)s %(instance)s" +msgstr "%(class_name)s %(instance)s" + +#, python-format +msgid "" +"Deleting %(class_name)s %(instance)s would require deleting the following " +"protected related objects: %(related_objects)s" +msgstr "" +"刪除 %(class_name)s %(instance)s 將會同時刪除下面受保護的相關物件:" +"%(related_objects)s" + +msgid "Django site admin" +msgstr "Django 網站管理" + +msgid "Django administration" +msgstr "Django 管理" + +msgid "Site administration" +msgstr "網站管理" + +msgid "Log in" +msgstr "登入" + +#, python-format +msgid "%(app)s administration" +msgstr "%(app)s 管理" + +msgid "Page not found" +msgstr "頁面沒有找到" + +msgid "We're sorry, but the requested page could not be found." +msgstr "很抱歉,請求頁面無法找到。" + +msgid "Home" +msgstr "首頁" + +msgid "Server error" +msgstr "伺服器錯誤" + +msgid "Server error (500)" +msgstr "伺服器錯誤 (500)" + +msgid "Server Error (500)" +msgstr "伺服器錯誤 (500)" + +msgid "" +"There's been an error. It's been reported to the site administrators via " +"email and should be fixed shortly. Thanks for your patience." +msgstr "" +"存在一個錯誤。已透過電子郵件回報給網站管理員,並且應該很快就會被修正。謝謝你" +"的關心。" + +msgid "Run the selected action" +msgstr "執行選擇的動作" + +msgid "Go" +msgstr "去" + +msgid "Click here to select the objects across all pages" +msgstr "點選這裡可選取全部頁面的物件" + +#, python-format +msgid "Select all %(total_count)s %(module_name)s" +msgstr "選擇全部 %(total_count)s %(module_name)s" + +msgid "Clear selection" +msgstr "清除選擇" + +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "首先,輸入一個使用者名稱和密碼。然後你可以編輯更多使用者選項。" + +msgid "Enter a username and password." +msgstr "輸入一個使用者名稱和密碼。" + +msgid "Change password" +msgstr "變更密碼" + +msgid "Please correct the error below." +msgstr "請更正下面的錯誤。" + +msgid "Please correct the errors below." +msgstr "請修正以下錯誤" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "為使用者%(username)s輸入一個新的密碼。" + +msgid "Welcome," +msgstr "歡迎," + +msgid "View site" +msgstr "檢視網站" + +msgid "Documentation" +msgstr "文件" + +msgid "Log out" +msgstr "登出" + +#, python-format +msgid "Add %(name)s" +msgstr "新增 %(name)s" + +msgid "History" +msgstr "歷史" + +msgid "View on site" +msgstr "在網站上檢視" + +msgid "Filter" +msgstr "過濾器" + +msgid "Remove from sorting" +msgstr "從排序中移除" + +#, python-format +msgid "Sorting priority: %(priority_number)s" +msgstr "優先排序:%(priority_number)s" + +msgid "Toggle sorting" +msgstr "切換排序" + +msgid "Delete" +msgstr "刪除" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"刪除 %(object_name)s '%(escaped_object)s' 會把相關的物件也刪除,不過你的帳號" +"並沒有刪除以下型態物件的權限:" + +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"following protected related objects:" +msgstr "" +"要刪除 %(object_name)s '%(escaped_object)s', 將要求刪除下面受保護的相關物件:" + +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"你確定想要刪除 %(object_name)s \"%(escaped_object)s\"?以下所有的相關項目都會" +"被刪除:" + +msgid "Objects" +msgstr "物件" + +msgid "Yes, I'm sure" +msgstr "是的,我確定" + +msgid "No, take me back" +msgstr "不,請帶我回去" + +msgid "Delete multiple objects" +msgstr "刪除多個物件" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"要刪除所選的 %(objects_name)s, 結果會刪除相關物件, 但你的帳號無權刪除下面物件" +"型態:" + +#, python-format +msgid "" +"Deleting the selected %(objects_name)s would require deleting the following " +"protected related objects:" +msgstr "要刪除所選的 %(objects_name)s, 將要求刪除下面受保護的相關物件:" + +#, python-format +msgid "" +"Are you sure you want to delete the selected %(objects_name)s? All of the " +"following objects and their related items will be deleted:" +msgstr "" +"你是否確定要刪除已選的 %(objects_name)s? 下面全部物件及其相關項目都將被刪除:" + +msgid "Change" +msgstr "變更" + +msgid "Delete?" +msgstr "刪除?" + +#, python-format +msgid " By %(filter_title)s " +msgstr " 以 %(filter_title)s" + +msgid "Summary" +msgstr "總結" + +#, python-format +msgid "Models in the %(name)s application" +msgstr "%(name)s 應用程式中的Model" + +msgid "Add" +msgstr "新增" + +msgid "You don't have permission to edit anything." +msgstr "你沒有編輯任何東西的權限。" + +msgid "Recent actions" +msgstr "最近的動作" + +msgid "My actions" +msgstr "我的動作" + +msgid "None available" +msgstr "無可用的" + +msgid "Unknown content" +msgstr "未知內容" + +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"你的資料庫安裝有錯誤。確定資料庫表格已經建立,並確定資料庫可被合適的使用者讀" +"取。" + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"您已認證為 %(username)s,但並沒有瀏覽此頁面的權限。您是否希望以其他帳號登入?" + +msgid "Forgotten your password or username?" +msgstr "忘了你的密碼或是使用者名稱?" + +msgid "Date/time" +msgstr "日期/時間" + +msgid "User" +msgstr "使用者" + +msgid "Action" +msgstr "動作" + +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "這個物件沒有變更的歷史。它可能不是透過這個管理網站新增的。" + +msgid "Show all" +msgstr "顯示全部" + +msgid "Save" +msgstr "儲存" + +msgid "Popup closing..." +msgstr "關閉彈出視窗中⋯⋯" + +#, python-format +msgid "Change selected %(model)s" +msgstr "變更所選的 %(model)s" + +#, python-format +msgid "Add another %(model)s" +msgstr "新增其它 %(model)s" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "刪除所選的 %(model)s" + +msgid "Search" +msgstr "搜尋" + +#, python-format +msgid "%(counter)s result" +msgid_plural "%(counter)s results" +msgstr[0] "%(counter)s 結果" + +#, python-format +msgid "%(full_result_count)s total" +msgstr "總共 %(full_result_count)s" + +msgid "Save as new" +msgstr "儲存為新的" + +msgid "Save and add another" +msgstr "儲存並新增另一個" + +msgid "Save and continue editing" +msgstr "儲存並繼續編輯" + +msgid "Thanks for spending some quality time with the Web site today." +msgstr "感謝你今天花了重要的時間停留在本網站。" + +msgid "Log in again" +msgstr "重新登入" + +msgid "Password change" +msgstr "密碼變更" + +msgid "Your password was changed." +msgstr "你的密碼已變更。" + +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"為了安全上的考量,請輸入你的舊密碼,再輸入新密碼兩次,讓我們核驗你已正確地輸" +"入。" + +msgid "Change my password" +msgstr "變更我的密碼" + +msgid "Password reset" +msgstr "密碼重設" + +msgid "Your password has been set. You may go ahead and log in now." +msgstr "你的密碼已設置,現在可以繼續登入。" + +msgid "Password reset confirmation" +msgstr "密碼重設確認" + +msgid "" +"Please enter your new password twice so we can verify you typed it in " +"correctly." +msgstr "請輸入你的新密碼兩次, 這樣我們才能檢查你的輸入是否正確。" + +msgid "New password:" +msgstr "新密碼:" + +msgid "Confirm password:" +msgstr "確認密碼:" + +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "密碼重設連結無效,可能因為他已使用。請重新請求密碼重設。" + +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" +"若您提交的電子郵件地址存在對應帳號,我們已寄出重設密碼的相關指示。您應該很快" +"就會收到。" + +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" +"如果您未收到電子郵件,請確認您輸入的電子郵件地址與您註冊時輸入的一致,並檢查" +"您的垃圾郵件匣。" + +#, python-format +msgid "" +"You're receiving this email because you requested a password reset for your " +"user account at %(site_name)s." +msgstr "這封電子郵件來自 %(site_name)s,因為你要求為帳號重新設定密碼。" + +msgid "Please go to the following page and choose a new password:" +msgstr "請到該頁面選擇一個新的密碼:" + +msgid "Your username, in case you've forgotten:" +msgstr "你的使用者名稱,萬一你已經忘記的話:" + +msgid "Thanks for using our site!" +msgstr "感謝使用本網站!" + +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s 團隊" + +msgid "" +"Forgotten your password? Enter your email address below, and we'll email " +"instructions for setting a new one." +msgstr "" +"忘記你的密碼? 請在下面輸入你的電子郵件位址, 然後我們會寄出設定新密碼的操作指" +"示。" + +msgid "Email address:" +msgstr "電子信箱:" + +msgid "Reset my password" +msgstr "重設我的密碼" + +msgid "All dates" +msgstr "所有日期" + +#, python-format +msgid "Select %s" +msgstr "選擇 %s" + +#, python-format +msgid "Select %s to change" +msgstr "選擇 %s 來變更" + +msgid "Date:" +msgstr "日期" + +msgid "Time:" +msgstr "時間" + +msgid "Lookup" +msgstr "查詢" + +msgid "Currently:" +msgstr "目前:" + +msgid "Change:" +msgstr "變動:" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/locale/zh_Hant/LC_MESSAGES/djangojs.mo b/venv/lib/python3.7/site-packages/django/contrib/admin/locale/zh_Hant/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..9368f692a2e63dfb4e8736381543d660202c83aa GIT binary patch literal 4230 zcmb`IU2Igx6~`wDX^E4jO;Y-irs>2j*c5iX1`5eis!#_f&^RExEsa{Ky1P5xz4Y$A ztNUSN9va(Vu#F9BFdv3Z2&sXk#IZqXF#dqPG!OkyrM^X~qDtL+y<4fuORK(B{hvEy zdm$D@YDYWww`bTmz`i}8_=IZpSh2*7r`GtfCt*XWsGeCJHbzZR~0A0 z2O-~5@^8RLApc&;A1eL@{0zqD6#uFC02bF^{4ww$@G0kCB!-M>M z4J1DYK(aFo4ud1$&%r1b!6f@NNcKJeH-mo!Y2CvZJOi!(Y25^v2e)DJ3GjWz--0V3 zf28DpD0w-Y_&mm+2EPEV2hSl_JHW3({@cSc{>zaB%EJmg;2Nt{Tn)k$izzv-xD|XH z<1Z=xNYPaD-5{;&1D^q32kXH1)cBu4+9y!*-d{Xfl#d?tH ztwAvZ(*Ebv{AI-n#p@upU^kWgJH(qkjb*;b5!L zIXXhX8qw*!uo9hG4E^iq6uVkr`knIV6fg1#%hOK zZG2^Y%5?D;10v;$^j+sRaxI#RvW+}X*qXO>gKhOPp5wBu?V4_ANkj0J4r|iPlrUIR z*0LO-z%~AY=2l4wJy#{U)shjeb%YrjGxXF?xoh!MXpU=!fnlz>+`=wV)-*qFi=5Ri z!g;95)r)E`h?K}Bh0U5p()KjFlQrvx3;88IE!Ymt499kOMkm|hnS!-wb}EZ!Cu`Bu zrk=^V>=ny0@o+_)ziN40v+1xrYk4-;vO-H!JRM=T3!Bq%qD$+-^?O(5Ns-mf^gWqf zTD4uC`W35#?M%5AMPPRrCa}K}n8@l5$Is0QZs-mo-Nv=51V_X3=d{lG zoH$la@MNc|BHhf;(j3>#&_vSOhjSQK2iI^E%$PhyNmF{fRu)PvB5Fe^DclYL9opUP zusD_rC%U9l3wd7jNL9iA=#dQ3fAh#nqdXE;&LY2AqBAdWWK^n4@uO4Ye_L2(JZ*Kz z6D=7}_Ns7Di)4-}E32W7=Wir}#SQzRM7rBV<+Zo!_Il(R%4Q?z<^q3xl?Z*q-!EhNQ|V z&y-s(9SV`w-SG7^ACv8Ep}S~EQ`W=t+aBgTXRrNyCWlW&G-c(!gGFY>(=sBG5Lzw{O&v!Pygs4n9h$kC z*JoWfA8%;r=;(;LWLs|&`)Fx{Jl#ADWv5|(_9uxw4XbNfwzq6s3`Ju!R?}pet}x*u zZfTsmVxQZPH#FVcOyy}i!rk)yM04cXMLpWCP1uobX39$A9C7|^Qg;_zj`MJ@nq3AC zW<;7TJLkl?nGZ#0OXFrP|89wGuE9rDeq~FOWBB6AkFVc#r2O`kO7|oyO%C`&eS9OY zOuq@?$fDq%JsTAInBRLP#IfLTSsncU z>z49>i(5*Wwk%B#_@kFuaQY~rJTvL{Uhw-SDqSOsZj*~)-j|FB))r|kMdtc79HBII zNS3jG .select2-results__options { + max-height: 200px; + overflow-y: auto; +} + +.select2-container--admin-autocomplete .select2-results__option[role=group] { + padding: 0; +} + +.select2-container--admin-autocomplete .select2-results__option[aria-disabled=true] { + color: #999; +} + +.select2-container--admin-autocomplete .select2-results__option[aria-selected=true] { + background-color: #ddd; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option { + padding-left: 1em; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__group { + padding-left: 0; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option { + margin-left: -1em; + padding-left: 2em; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -2em; + padding-left: 3em; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -3em; + padding-left: 4em; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -4em; + padding-left: 5em; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -5em; + padding-left: 6em; +} + +.select2-container--admin-autocomplete .select2-results__option--highlighted[aria-selected] { + background-color: #79aec8; + color: white; +} + +.select2-container--admin-autocomplete .select2-results__group { + cursor: default; + display: block; + padding: 6px; +} diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/css/dashboard.css b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/css/dashboard.css new file mode 100644 index 0000000..1560c7b --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/css/dashboard.css @@ -0,0 +1,27 @@ +/* DASHBOARD */ + +.dashboard .module table th { + width: 100%; +} + +.dashboard .module table td { + white-space: nowrap; +} + +.dashboard .module table td a { + display: block; + padding-right: .6em; +} + +/* RECENT ACTIONS MODULE */ + +.module ul.actionlist { + margin-left: 0; +} + +ul.actionlist li { + list-style-type: none; + overflow: hidden; + text-overflow: ellipsis; + -o-text-overflow: ellipsis; +} diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/css/responsive_rtl.css b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/css/responsive_rtl.css new file mode 100644 index 0000000..f999cb1 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/css/responsive_rtl.css @@ -0,0 +1,84 @@ +/* TABLETS */ + +@media (max-width: 1024px) { + [dir="rtl"] .colMS { + margin-right: 0; + } + + [dir="rtl"] #user-tools { + text-align: right; + } + + [dir="rtl"] #changelist .actions label { + padding-left: 10px; + padding-right: 0; + } + + [dir="rtl"] #changelist .actions select { + margin-left: 0; + margin-right: 15px; + } + + [dir="rtl"] .change-list .filtered .results, + [dir="rtl"] .change-list .filtered .paginator, + [dir="rtl"] .filtered #toolbar, + [dir="rtl"] .filtered div.xfull, + [dir="rtl"] .filtered .actions { + margin-right: 0; + margin-left: 230px; + } + + [dir="rtl"] .inline-group ul.tools a.add, + [dir="rtl"] .inline-group div.add-row a, + [dir="rtl"] .inline-group .tabular tr.add-row td a { + padding: 8px 26px 8px 10px; + background-position: calc(100% - 8px) 9px; + } + + [dir="rtl"] .related-widget-wrapper-link + .selector { + margin-right: 0; + margin-left: 15px; + } + + [dir="rtl"] .selector .selector-filter label { + margin-right: 0; + margin-left: 8px; + } + + [dir="rtl"] .object-tools li { + float: right; + } + + [dir="rtl"] .object-tools li + li { + margin-left: 0; + margin-right: 15px; + } + + [dir="rtl"] .dashboard .module table td a { + padding-left: 0; + padding-right: 16px; + } +} + +/* MOBILE */ + +@media (max-width: 767px) { + [dir="rtl"] .change-list .filtered .results, + [dir="rtl"] .change-list .filtered .paginator, + [dir="rtl"] .filtered #toolbar, + [dir="rtl"] .filtered div.xfull, + [dir="rtl"] .filtered .actions { + margin-left: 0; + } + + [dir="rtl"] .aligned .add-another, + [dir="rtl"] .aligned .related-lookup, + [dir="rtl"] .aligned .datetimeshortcuts { + margin-left: 0; + margin-right: 15px; + } + + [dir="rtl"] .aligned ul { + margin-right: 0; + } +} diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/css/vendor/select2/select2.css b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/css/vendor/select2/select2.css new file mode 100644 index 0000000..447b2b8 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/css/vendor/select2/select2.css @@ -0,0 +1,484 @@ +.select2-container { + box-sizing: border-box; + display: inline-block; + margin: 0; + position: relative; + vertical-align: middle; } + .select2-container .select2-selection--single { + box-sizing: border-box; + cursor: pointer; + display: block; + height: 28px; + user-select: none; + -webkit-user-select: none; } + .select2-container .select2-selection--single .select2-selection__rendered { + display: block; + padding-left: 8px; + padding-right: 20px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } + .select2-container .select2-selection--single .select2-selection__clear { + position: relative; } + .select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered { + padding-right: 8px; + padding-left: 20px; } + .select2-container .select2-selection--multiple { + box-sizing: border-box; + cursor: pointer; + display: block; + min-height: 32px; + user-select: none; + -webkit-user-select: none; } + .select2-container .select2-selection--multiple .select2-selection__rendered { + display: inline-block; + overflow: hidden; + padding-left: 8px; + text-overflow: ellipsis; + white-space: nowrap; } + .select2-container .select2-search--inline { + float: left; } + .select2-container .select2-search--inline .select2-search__field { + box-sizing: border-box; + border: none; + font-size: 100%; + margin-top: 5px; + padding: 0; } + .select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button { + -webkit-appearance: none; } + +.select2-dropdown { + background-color: white; + border: 1px solid #aaa; + border-radius: 4px; + box-sizing: border-box; + display: block; + position: absolute; + left: -100000px; + width: 100%; + z-index: 1051; } + +.select2-results { + display: block; } + +.select2-results__options { + list-style: none; + margin: 0; + padding: 0; } + +.select2-results__option { + padding: 6px; + user-select: none; + -webkit-user-select: none; } + .select2-results__option[aria-selected] { + cursor: pointer; } + +.select2-container--open .select2-dropdown { + left: 0; } + +.select2-container--open .select2-dropdown--above { + border-bottom: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; } + +.select2-container--open .select2-dropdown--below { + border-top: none; + border-top-left-radius: 0; + border-top-right-radius: 0; } + +.select2-search--dropdown { + display: block; + padding: 4px; } + .select2-search--dropdown .select2-search__field { + padding: 4px; + width: 100%; + box-sizing: border-box; } + .select2-search--dropdown .select2-search__field::-webkit-search-cancel-button { + -webkit-appearance: none; } + .select2-search--dropdown.select2-search--hide { + display: none; } + +.select2-close-mask { + border: 0; + margin: 0; + padding: 0; + display: block; + position: fixed; + left: 0; + top: 0; + min-height: 100%; + min-width: 100%; + height: auto; + width: auto; + opacity: 0; + z-index: 99; + background-color: #fff; + filter: alpha(opacity=0); } + +.select2-hidden-accessible { + border: 0 !important; + clip: rect(0 0 0 0) !important; + height: 1px !important; + margin: -1px !important; + overflow: hidden !important; + padding: 0 !important; + position: absolute !important; + width: 1px !important; } + +.select2-container--default .select2-selection--single { + background-color: #fff; + border: 1px solid #aaa; + border-radius: 4px; } + .select2-container--default .select2-selection--single .select2-selection__rendered { + color: #444; + line-height: 28px; } + .select2-container--default .select2-selection--single .select2-selection__clear { + cursor: pointer; + float: right; + font-weight: bold; } + .select2-container--default .select2-selection--single .select2-selection__placeholder { + color: #999; } + .select2-container--default .select2-selection--single .select2-selection__arrow { + height: 26px; + position: absolute; + top: 1px; + right: 1px; + width: 20px; } + .select2-container--default .select2-selection--single .select2-selection__arrow b { + border-color: #888 transparent transparent transparent; + border-style: solid; + border-width: 5px 4px 0 4px; + height: 0; + left: 50%; + margin-left: -4px; + margin-top: -2px; + position: absolute; + top: 50%; + width: 0; } + +.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear { + float: left; } + +.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow { + left: 1px; + right: auto; } + +.select2-container--default.select2-container--disabled .select2-selection--single { + background-color: #eee; + cursor: default; } + .select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear { + display: none; } + +.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b { + border-color: transparent transparent #888 transparent; + border-width: 0 4px 5px 4px; } + +.select2-container--default .select2-selection--multiple { + background-color: white; + border: 1px solid #aaa; + border-radius: 4px; + cursor: text; } + .select2-container--default .select2-selection--multiple .select2-selection__rendered { + box-sizing: border-box; + list-style: none; + margin: 0; + padding: 0 5px; + width: 100%; } + .select2-container--default .select2-selection--multiple .select2-selection__rendered li { + list-style: none; } + .select2-container--default .select2-selection--multiple .select2-selection__placeholder { + color: #999; + margin-top: 5px; + float: left; } + .select2-container--default .select2-selection--multiple .select2-selection__clear { + cursor: pointer; + float: right; + font-weight: bold; + margin-top: 5px; + margin-right: 10px; } + .select2-container--default .select2-selection--multiple .select2-selection__choice { + background-color: #e4e4e4; + border: 1px solid #aaa; + border-radius: 4px; + cursor: default; + float: left; + margin-right: 5px; + margin-top: 5px; + padding: 0 5px; } + .select2-container--default .select2-selection--multiple .select2-selection__choice__remove { + color: #999; + cursor: pointer; + display: inline-block; + font-weight: bold; + margin-right: 2px; } + .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover { + color: #333; } + +.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice, .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder, .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline { + float: right; } + +.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice { + margin-left: 5px; + margin-right: auto; } + +.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove { + margin-left: 2px; + margin-right: auto; } + +.select2-container--default.select2-container--focus .select2-selection--multiple { + border: solid black 1px; + outline: 0; } + +.select2-container--default.select2-container--disabled .select2-selection--multiple { + background-color: #eee; + cursor: default; } + +.select2-container--default.select2-container--disabled .select2-selection__choice__remove { + display: none; } + +.select2-container--default.select2-container--open.select2-container--above .select2-selection--single, .select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple { + border-top-left-radius: 0; + border-top-right-radius: 0; } + +.select2-container--default.select2-container--open.select2-container--below .select2-selection--single, .select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; } + +.select2-container--default .select2-search--dropdown .select2-search__field { + border: 1px solid #aaa; } + +.select2-container--default .select2-search--inline .select2-search__field { + background: transparent; + border: none; + outline: 0; + box-shadow: none; + -webkit-appearance: textfield; } + +.select2-container--default .select2-results > .select2-results__options { + max-height: 200px; + overflow-y: auto; } + +.select2-container--default .select2-results__option[role=group] { + padding: 0; } + +.select2-container--default .select2-results__option[aria-disabled=true] { + color: #999; } + +.select2-container--default .select2-results__option[aria-selected=true] { + background-color: #ddd; } + +.select2-container--default .select2-results__option .select2-results__option { + padding-left: 1em; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__group { + padding-left: 0; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__option { + margin-left: -1em; + padding-left: 2em; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -2em; + padding-left: 3em; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -3em; + padding-left: 4em; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -4em; + padding-left: 5em; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -5em; + padding-left: 6em; } + +.select2-container--default .select2-results__option--highlighted[aria-selected] { + background-color: #5897fb; + color: white; } + +.select2-container--default .select2-results__group { + cursor: default; + display: block; + padding: 6px; } + +.select2-container--classic .select2-selection--single { + background-color: #f7f7f7; + border: 1px solid #aaa; + border-radius: 4px; + outline: 0; + background-image: -webkit-linear-gradient(top, white 50%, #eeeeee 100%); + background-image: -o-linear-gradient(top, white 50%, #eeeeee 100%); + background-image: linear-gradient(to bottom, white 50%, #eeeeee 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); } + .select2-container--classic .select2-selection--single:focus { + border: 1px solid #5897fb; } + .select2-container--classic .select2-selection--single .select2-selection__rendered { + color: #444; + line-height: 28px; } + .select2-container--classic .select2-selection--single .select2-selection__clear { + cursor: pointer; + float: right; + font-weight: bold; + margin-right: 10px; } + .select2-container--classic .select2-selection--single .select2-selection__placeholder { + color: #999; } + .select2-container--classic .select2-selection--single .select2-selection__arrow { + background-color: #ddd; + border: none; + border-left: 1px solid #aaa; + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + height: 26px; + position: absolute; + top: 1px; + right: 1px; + width: 20px; + background-image: -webkit-linear-gradient(top, #eeeeee 50%, #cccccc 100%); + background-image: -o-linear-gradient(top, #eeeeee 50%, #cccccc 100%); + background-image: linear-gradient(to bottom, #eeeeee 50%, #cccccc 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0); } + .select2-container--classic .select2-selection--single .select2-selection__arrow b { + border-color: #888 transparent transparent transparent; + border-style: solid; + border-width: 5px 4px 0 4px; + height: 0; + left: 50%; + margin-left: -4px; + margin-top: -2px; + position: absolute; + top: 50%; + width: 0; } + +.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear { + float: left; } + +.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow { + border: none; + border-right: 1px solid #aaa; + border-radius: 0; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; + left: 1px; + right: auto; } + +.select2-container--classic.select2-container--open .select2-selection--single { + border: 1px solid #5897fb; } + .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow { + background: transparent; + border: none; } + .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b { + border-color: transparent transparent #888 transparent; + border-width: 0 4px 5px 4px; } + +.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single { + border-top: none; + border-top-left-radius: 0; + border-top-right-radius: 0; + background-image: -webkit-linear-gradient(top, white 0%, #eeeeee 50%); + background-image: -o-linear-gradient(top, white 0%, #eeeeee 50%); + background-image: linear-gradient(to bottom, white 0%, #eeeeee 50%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); } + +.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single { + border-bottom: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + background-image: -webkit-linear-gradient(top, #eeeeee 50%, white 100%); + background-image: -o-linear-gradient(top, #eeeeee 50%, white 100%); + background-image: linear-gradient(to bottom, #eeeeee 50%, white 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0); } + +.select2-container--classic .select2-selection--multiple { + background-color: white; + border: 1px solid #aaa; + border-radius: 4px; + cursor: text; + outline: 0; } + .select2-container--classic .select2-selection--multiple:focus { + border: 1px solid #5897fb; } + .select2-container--classic .select2-selection--multiple .select2-selection__rendered { + list-style: none; + margin: 0; + padding: 0 5px; } + .select2-container--classic .select2-selection--multiple .select2-selection__clear { + display: none; } + .select2-container--classic .select2-selection--multiple .select2-selection__choice { + background-color: #e4e4e4; + border: 1px solid #aaa; + border-radius: 4px; + cursor: default; + float: left; + margin-right: 5px; + margin-top: 5px; + padding: 0 5px; } + .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove { + color: #888; + cursor: pointer; + display: inline-block; + font-weight: bold; + margin-right: 2px; } + .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover { + color: #555; } + +.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice { + float: right; } + +.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice { + margin-left: 5px; + margin-right: auto; } + +.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove { + margin-left: 2px; + margin-right: auto; } + +.select2-container--classic.select2-container--open .select2-selection--multiple { + border: 1px solid #5897fb; } + +.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple { + border-top: none; + border-top-left-radius: 0; + border-top-right-radius: 0; } + +.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple { + border-bottom: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; } + +.select2-container--classic .select2-search--dropdown .select2-search__field { + border: 1px solid #aaa; + outline: 0; } + +.select2-container--classic .select2-search--inline .select2-search__field { + outline: 0; + box-shadow: none; } + +.select2-container--classic .select2-dropdown { + background-color: white; + border: 1px solid transparent; } + +.select2-container--classic .select2-dropdown--above { + border-bottom: none; } + +.select2-container--classic .select2-dropdown--below { + border-top: none; } + +.select2-container--classic .select2-results > .select2-results__options { + max-height: 200px; + overflow-y: auto; } + +.select2-container--classic .select2-results__option[role=group] { + padding: 0; } + +.select2-container--classic .select2-results__option[aria-disabled=true] { + color: grey; } + +.select2-container--classic .select2-results__option--highlighted[aria-selected] { + background-color: #3875d7; + color: white; } + +.select2-container--classic .select2-results__group { + cursor: default; + display: block; + padding: 6px; } + +.select2-container--classic.select2-container--open .select2-dropdown { + border-color: #5897fb; } diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/fonts/LICENSE.txt b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/fonts/LICENSE.txt new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/fonts/LICENSE.txt @@ -0,0 +1,202 @@ + + 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. + + 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 + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/fonts/README.txt b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/fonts/README.txt new file mode 100644 index 0000000..b247bef --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/fonts/README.txt @@ -0,0 +1,3 @@ +Roboto webfont source: https://www.google.com/fonts/specimen/Roboto +WOFF files extracted using https://github.com/majodev/google-webfonts-helper +Weights used in this project: Light (300), Regular (400), Bold (700) diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/fonts/Roboto-Bold-webfont.woff b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/fonts/Roboto-Bold-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..6e0f56267035c2321ca6b590adcfc0fc93b7dc51 GIT binary patch literal 86184 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 z zpSkqZF1>npYSmS4Kz=4qeg7r5M>;d5D=#2A>(92!wr|+=`5GqMN@SMwH*IwkDz92} z_UMoVp~0$bXOme#X@t1Zc|&d{sZmSDvuS&5DLTF58RaHUJoAJ+Y16PvUl;`Der52? z*2~)AUVmMYM&6Pe-2JY3_s>>Ej+tJ+Lfe|DCo2u=RHIgK#TRD^uFss2gSZ(dm*ui; zpvTM|zHBc;0yTmFdtfeVB*J?G#la8eW6lq9ozu(?E-@8(9HDvLH|~=MVE!AI%ephT zcc5CX+bHZVfOY-U3)OuETh_69f$+Sx?iiV7ia?NghGl*CizQ( zXnOExZ7l<(FG1k%MI3EQCL54RZkX$GyHAe_Ia-j-saWuuqgz^y)=7ozr z{K0_;r%%G^6M@XZBOGa7XEijyrkxhp$mVPSYx2A4qm|C!05wwzbtfB})L925*41ld zoCrZnuK(Ka^Wr5o^}T$3iCmUEd$sE;utN*7jbt3$@-O(XxpkHN-ls>8J`fKv5Oo`2 zG?eZQ`|0@?f#Oj=)xepA9R}`+6K!Py5*2O;(X#6W*dR_FiBML^J zsEGSA#LQLEendVz7GPm+X?hh-7LKYiYvKL)Xd^edxGKU9aNO?e5{rA+t{qpVS|pud z=gFTDHOj=)tv+yGF`NyTCk+a@r_^+IAi;1SudAut3+X)sG0!WVSxfjy9ft;~p790r z)PxAZwim`iY_j`_t$La{bd4X-%nMB+tv+rh3I}*Q^6PuK>kKQELeFoYbl?VUDkgDN zG}*9ZT*=GngLjoo+&TD{%O!^xCX&T+V%EWua=jY6q4@3^^`t(FH_+|ikAA&-_k#iu zyl@ecXCu3ed}_!F*fHMja9k@T|-%X4YkxQuDlD8h!lxhRK5&Fo@tV72`W)(hxkvtiK~Sm3C8)H6Jbf{D z@}XnTj+~fC*9K;c+a6`PpU+Nxo1W1z`s@pF%`Xsq^6wKU*|<@RC}WH0ZZ)|Lgy>fa z^l{FyV7L{IPCb&7;AnxgmBjPjxNDrnXn z@Mx`&-X;)?2y;;EIA9+Q$e~vq)Z*R)#fpTgti4N4;CV0NJPi_^P?q-sHM(Ssx@R18 zfy96V*MuU^HoTolF28X8&b;MNL>l~L(5#t5q&m18@fiNw?2F{Bgj+ecC=REU6rJ3& z+e98gMo8Jm{n_nRKdVhdOXWGzjv%)c804Y#Ojv#>m!(u+Z!Tdk8?Acj;f}RcXI-7@O^bsHpC~xp0wW zV>+@xDv#^cc`!y8g^-oX4PMnC2&JikTE&P!jk^yLgeHqILf~f|7OZmJ%JZk1A}^p6 z@O}_cN=yz+G1Hc73s*T!9%X$>ZkzhG>KIT+I7q`Lzs)y!u zF!7R^W@LJYDUZ=eL=$ttda@VC%@C@8ox-77sVk^I+az10>o2z?I69nj0vTFsK$dBgcTPo zqT&{prnhLxxgASNG`S!gLaZ(CpFFHpk<^-`#d$u=KPQAS-cz=b0p91I1I|AeA8$?6 z`R6u)CsZR+!GRBYO2NsM>W9V>fKMcZ9hs@AC*-Gck#g;2KNiKzK5nS4Jl1nn>##D= z%;{~hdU0i!h39B&()uno=`GA6CM3HUn2coVJwLo@MBRi~RFwtUd1R6%oPh4F%+wy^({Iq1p_Lcr%4_dTs^D3p-GV*W_c}w;lIIsl# zcI}3sRrp&{`_PVc`|!8Us{7Y%`Bpm_)+<-}$xuGelOd18!0_%cNR-|k2B(6^{mc{E zVUStH>45g^_hurb_|V@AKs8k*(EQ#E6ZbEnD32ckPMSj*uiR%At9QuUQdXX8r1+2v zGnY_>?xqYyVfdmYGkL+k0^!f@z|W-g*nZ)7DbLtI$XG}}6@^9!zyo2y33J{(PHsr& zt;zilyI?VGzyc`prnxQ$ddsObGJ$L`KIHl1%{UU~e`o;T(m&Jyo;*X7n6S{2L`iJT z(IE2T&DZZ*lv&z&0NSxuVHARp@|S*EcT_<;t$}$fKQ>MrU4r!Enayx-A)_(R1Ka$; z13LsC$~~{IkwN$nKdjs;YE~*FTQqy%MFJz`W zuy2q>_cnsi2cg+QOTERG`h29N0lBUG!nKt`>x7m8sz~j$Ke?UOPO#IsUG47c7fymO zo=HWi1p0eY?ID9+1O>_L-b~FZvnS=)X~{^d*Jxr^Ts-vloilaOJa1A8&iE{wGh>D~ zxoCwFfW8LvVseDsCxrYE0JrCkK6d2!vBMMR{{ulg$afdplW)m%2)M^li!_%gk>?V{ zqEV_{s}p;OT?-Q}mFN%V4d}Ud$sF_Gj;k^zGDOuD z^7?c07B-1Cc&-MEubqeK$c;Gx#Xfh#R^ja12+0lk+76=mUnYxH*V(*; zh+Lj!;{v>N`U)Y7P=NrUHkRH&P5Yy1$@yu00^r9O4a3E}AaBSaNVy5YnOJgKhYvq@ z?r-ete2yuuL;3X~rYgymQT^a7&lRV6P6jIqL2;Zf^i{J0PIojM!(-g+AwonCIAH&VVA~7KGFxD}vnkXu9==l`66WtP`x%Uao9yNS~=DD=RVU z;aXzW`r#6@`P{0ay23Ri3uA1GkI$_zd;Hqt&h3Xxy>;dOgB71X`Eq%aW*grG}(3$-p&kH;ar8KR3m4j!rs*jd)zA8nTC!?=zC&98Z1& z724dyo)3EbbPzga?RK7r>f|6UhC59nzal{K2pJC0wp!36mn~Z$(iZ*P|3_Qwf3Uzf z*Rz?ckevKko-mnYOuS4sLNl@(y4~yr_C9|?H?jv>lGU(~^k+AmjAhaX7W13rJchKo zdD0&o6Ea1WbWDiANiBFCy+r%Vz^MtiBFKeG!t%0v{0XcvmEFFFnKz{LWeq0B6d=ZjCyM>4Vl0~}v; zlJYmGU1ulR^n#)U$V7}+N((2?vX>?t_@a?B_9?1ASx2g_ykxe~&8+nb6M`obE?t6nhTOM|v6SglOeq>q;k zmP5#OvVx5nZAmn&BOT~yH2~FR#)=5yp#Kwsn2yDDIzuz0UD{U6ZE=L8r~La%x_y7% zwIv;jOLtnSJ5xT_oWEYy&mK8v_LxN{A4CAM`Y&EcH{sbI9T%?hle>f7qD6F(!tv0 z!CtZMp-aE+uV0a5l&`z{qL)lr!}8hl#ccP>da*CgW)E%E0b4+UQsHop6ptWh$(@(v zWqX5XvsSXs&`(0byZt|`X^xxa(3!orG)0_Qm z9bE?W#*0L7WZe<~DK`4Z z7g?EAZVT3}a=(uvd^D@v>z!5ZBU4C1%5<6~wZqCJl&fkfZoWae{ zHgDUyCEa(9wc9;p$1ik`K0(emtX`vuuHza^eB}I5FzU~9W%*jx8OeiOEe-(!l6Sp5 zyMdj&6YQ{|hwvX-NAwEE)p$Qx^=J=G z^Yq|y7uzr7+90o-R{Dso^!->X13uJ3v1Pff0#qscF-J~CP|2Diqw-jvI!awEw8&wC zK_=ctlUTnvT+b2;XWChK!*HDDmTH^h0q0mSgNwGs4R(0bpe=ba^vtL`U>b32`RNy6 zN=t3g%ZDjB;Zm0twflYDja(wcyzb4+yGNV!9zAl;BZSd38oMt~`(s9tXs#L*W!Dka zJ|E3zf3K4wbDqhZ!*08G0jy(5w3Qi~Edmp`;Yqz||3wo$TpXk1{Ca&WYN>NWUBGF< z*3Y8A`;1=b>fr_QJZuH)EbJZ9r}q$E?rPPK5A*Cx1Nd z*z@^M%E?3ZJG5mh0fv!Tu%+nAPOE>Ai2(u|4XMX)AU~11ybhop%~JjJN*IxX6(*3y zh^RyLNF=1G3GCv}F7`;imDxoCDl7+ofL=xxLc0#cBj0vLq0aPK3kNEHfNDnPp~BM% zuPk_aFJ+u5TzaHdU+}Zfz)s}PZ?YPL1;0Db64~*ocC6B%{Q163n-BuVwjjOaHR>ku zdYk`!O;b6Knx<+9e{~FnYy_+GLtxO}e?qcDFvZS?B+xr`H+@Mx5&{GD1(_!M zWc@)bF9QR1?d*ZMks!sgena-}dgabwG%Pm@%_6MWylN08 zSlD7^mtcSHj}CTUtVZ5VQN=*qofT}-Aq?8;w7V@zma6$esP{Q<9@xQ0-t(7h(NB5L zzU9lg9=w9vHr}X)s0WK0nXp6Vp%S_)gG?bN2S^5?{u@mZBrBjhx9x^!KQfvX2g*ma zF9S!sh|v&%f=a-Fa z-camho1Qd$8*`Jq*{}f&x1_6CMY7S*2~tK@A;Rw19@ZuMk)bl}Nf_$L87YPKyE~`E zx<*3#1+&>0#M>Y6Ui+!@ROX8J|^89V|s;pWh)A>5? z@=I8-;Ke08%{lDq4SF5?+aGu~LOA;lLh>hu5EOty(GWE#ET66)NUkJHq3+@h&~(KB zx7o^HhQMNOmYGPl!k0-vUx-NBG^dM*o{ZY z2g7%)ZAOITPJFL532h7dAKHdJ^tOSA&^G@MwJk9|-iWW(KT)4wJY7e;t$1VirLu1rX4M7_E&fepe zgE)4giRU5)&ORK>hs(x?%f_`&5r3zKYVQbkM+RGY5#_izzMxsqmAU)!$ATTqc6s%` zPZc^|Jx8@67kf|Y3-mDn_>nn^mvi(XGDC{=xOSPWh86=mV&^4Xxbr}=4VvA(h4BLC z8t8*GjZhX`nmtBKJ?1_~#Nn1s2%QIaKvGFd7DJr~+ z77MG(pVLG7glg2RhcVK>-+fIopyfc4VeQ@wNCrM~octrlIsY1$i91+-J@VDz{%y$! zn9;7^p>L1?@YFJ## z9obzvI(4^|RzCL55lWOGlq5kYe43PcH%;jLz@HT$x44Nhl022;$Uk(tTyHjn&Xyj{ z0J@KT`_+UtWB}E4ioit@$L7nvfgSYuf`@7|#Yieks&NJ?fJ&g9YGlboow2$gl|``x zQP0WknxA{86@e#MjSWz8gNVgrE7RzqIw6+YU+ZEW^zokjuB9|Io{<2->96`zmQz{~ z&`~1YQG$|Um53}szoK9<9&jj>?kJR?MHi`0i(zJTq$f)?w;AcYVf^}x(aFxji^)lkm3<$h$PnkoWJ}KRIVdItC@!oB9dW<3uX0Po&U}O$yn;cxP&C`=#|CLr~ z$JmqiaNAC0_rx6ibj}J4T^nD0irY!0b4cAV%10VX%MA*OMa9q-H9Vm>&mS^5;;0M@ zi*}r7t>&8UOrWwDkByQ2xeQ~N`V`YJhN(|6H|U)Zf%VcRufLe-?q8USudvBcEZtFz zimzB?F)F^e!o@hHLAoQJi;o6h?be)1PevEvC34l7#b!&slUxZ{3j8arBcFtB(v`^opGSn*8z_zZ`S{ubR89Zq@BezQDL`=Q8Vyd^ck3>}qAE z?v*4iuTU=}q1IHxEJ^V_CS*eqjK4tRAq?jDYon}5^`NF7+<}>*`y=fjIX{&-P(c<$7xa|lVC8MF##1F)iSG(h#y zuq8emIY6&AcaN%|C&(iEVvy{^XGjp6Awdm;sAlaWI&Xs9m>A81YZ%3Y);US*DkBPg z2(}!O(CjvYeBmpmy%VR^Wvqvf=4e=-l#iJH3S%`Ll zg4o@~BlGIZ0rV>9L@dkAD4d>JdRq|IY7L*u{Q5j`tai_Z=f=_ghDfj)5^yupGp~=-A#p?PMxB=W+Co zy<4YxWMY{EcVg2zM&CQ4WnNFE6)C<%W)y>3YgRJHLI%0=th^TpkT~>#llTjHL6TdU zpmdG0g;#Lo{b49Dtk+)#noXJ0xggrLs`pNBIezcK>CGo^K#V@xaa>T`8}jh-!O>1OU{&W`VCnX-m!CO^72`^eh5k2dxVX#s1T}%YNBmw@mjT6 zUy5^JB)!&17ppOgs%{`x_`FR_I}a2+hu(s+M~hr?)jo#i4Y6=J`($#uBRRoQB%Ri1 z-BZ|wC%1^nQ8L|8GGR{{mlu;wj;iU7stJyo>5iHS8nLRYGm1K#EsVP-$g2CK_yg`~ zH(NByN(+@)DMndogJdRFy7Mc6x4@UYymM{j$g9k2<$J4DuU@UF=PJB++m^k1x9lI( zc-9X^tlg&GFVkn_s5;IoRitel$|(-=>H!J6MP4mi23~jI-W~9IK5{a#O&&RP0<AF}-@pDWfCA!T?`_-jSD<|pVXZb1b#4ndS|1Uf^aj;9b z{U`29|6Zuywtl505Y(tzrTS_0ehO~6d|6_l9#hBkZ31D#oY%SR<+`sfAHV$X;>9n1 z`RVe%5Bd-Penh_~E7y%0&~L=|!~4UVX$8v#^)ST_=s6t7!d!V{%}Z*`$1BK;)JdZB zok)bz3Z|-@uB~cTw!`2N^gaVJub0l8GL&$fJ)rYDCV^G?%Ac?&!bN`h`GU^de;S)) zx7n$XKI})$ikF69vh=Gw{i*k+P8~lUVa=zi>_K5D2F*~7+WutZHqifUVgE}nlq8}R3#Kp43=Xws-TvqzpF z%b;yERD2F`yTQDSWWAm_{@b18_f6jc0@R#Px3b)Taq_C3JSRW|WQq;+q*G38n)Usr zv5=b!-H0hMQBp|8H@|}4ogbc&C++G}j*-jz$Rg+%0ns-t|3Z;_N1ODb^djUWlUi?t z&Qxtwnl<0HZ3hcGWwXb&HBpEd!_D6EPHpJ}Tc^hKu zksFi{f5LY19n9M?VF&csF=+?XAiZ~t-;N+_u)HC=hT=p<6i7QQu#7W8s`wOpyv^dw zzXxzM>`|h|!QXx0D*fCD#g;wDU_pV5z0_A{x7~vTf_1iFiqS6s?qmuq3>Ozzc-gLmQm}b#3x#uZyJ|_!%AqiKI`WrkGI9i zaX6#w<~29tQ4*?(Qc+vf3ynu~Uv)G|aCAs;lui(QhI>5acYUnR)Ma|zQ_tl^n*H8{ z(h0EZp4Kj}$EG_vm>h-Kbx(Jf*Xi+E+O(&VEC5!MbBmN)z_nz##hm->y+4Vc`tVl> z-@yLl3?KaMkO7IsizUMKA!+T04ooUmB(c`ewDv;=B(+T>XNK@c#fm06Q*++vtUpA5 zM6Tz&F=;6OEPbE+ylIafO^c-@6(^6H_UPWML@D~nvsw2ZO-qzYDdv1b|H>bc+uHk5 ziYcMmBk_IBx@(_Bbesl|&ahiKiDcx7{J6I>98s%*As6il^i*b9QDF&`gYbQyl9fKO zT3r{hA6r9;jjkXmo-Q6pQ7o}^1tlqv5^GbysKm!g@luKzY-XcG278a{P@}95z2I

qKeC=lP*lYeHehI6Q)MS6&+vP#n675bfQ1FhUtH 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 I3*a(Q$S^tF@Bjb+ literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/img/gis/move_vertex_off.svg b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/img/gis/move_vertex_off.svg new file mode 100644 index 0000000..228854f --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/img/gis/move_vertex_off.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/img/gis/move_vertex_on.svg b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/img/gis/move_vertex_on.svg new file mode 100644 index 0000000..96b87fd --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/img/gis/move_vertex_on.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/img/icon-addlink.svg b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/img/icon-addlink.svg new file mode 100644 index 0000000..e004fb1 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/img/icon-addlink.svg @@ -0,0 +1,3 @@ + + + diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/img/icon-calendar.svg b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/img/icon-calendar.svg new file mode 100644 index 0000000..97910a9 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/img/icon-calendar.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/img/icon-changelink.svg b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/img/icon-changelink.svg new file mode 100644 index 0000000..bbb137a --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/img/icon-changelink.svg @@ -0,0 +1,3 @@ + + + diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/img/icon-deletelink.svg b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/img/icon-deletelink.svg new file mode 100644 index 0000000..4059b15 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/img/icon-deletelink.svg @@ -0,0 +1,3 @@ + + + diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/img/icon-unknown-alt.svg b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/img/icon-unknown-alt.svg new file mode 100644 index 0000000..1c6b99f --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/img/icon-unknown-alt.svg @@ -0,0 +1,3 @@ + + + diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/img/icon-viewlink.svg b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/img/icon-viewlink.svg new file mode 100644 index 0000000..a1ca1d3 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/img/icon-viewlink.svg @@ -0,0 +1,3 @@ + + + diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/img/inline-delete.svg b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/img/inline-delete.svg new file mode 100644 index 0000000..17d1ad6 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/img/inline-delete.svg @@ -0,0 +1,3 @@ + + + diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/img/search.svg b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/img/search.svg new file mode 100644 index 0000000..c8c69b2 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/img/search.svg @@ -0,0 +1,3 @@ + + + diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/img/tooltag-add.svg b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/img/tooltag-add.svg new file mode 100644 index 0000000..1ca64ae --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/img/tooltag-add.svg @@ -0,0 +1,3 @@ + + + diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/SelectBox.js b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/SelectBox.js new file mode 100644 index 0000000..2073f03 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/SelectBox.js @@ -0,0 +1,144 @@ +(function($) { + 'use strict'; + var SelectBox = { + cache: {}, + init: function(id) { + var box = document.getElementById(id); + var node; + SelectBox.cache[id] = []; + var cache = SelectBox.cache[id]; + var boxOptions = box.options; + var boxOptionsLength = boxOptions.length; + for (var i = 0, j = boxOptionsLength; i < j; i++) { + node = boxOptions[i]; + cache.push({value: node.value, text: node.text, displayed: 1}); + } + }, + redisplay: function(id) { + // Repopulate HTML select box from cache + var box = document.getElementById(id); + var node; + $(box).empty(); // clear all options + var new_options = box.outerHTML.slice(0, -9); // grab just the opening tag + var cache = SelectBox.cache[id]; + for (var i = 0, j = cache.length; i < j; i++) { + node = cache[i]; + if (node.displayed) { + var new_option = new Option(node.text, node.value, false, false); + // Shows a tooltip when hovering over the option + new_option.setAttribute("title", node.text); + new_options += new_option.outerHTML; + } + } + new_options += ''; + box.outerHTML = new_options; + }, + filter: function(id, text) { + // Redisplay the HTML select box, displaying only the choices containing ALL + // the words in text. (It's an AND search.) + var tokens = text.toLowerCase().split(/\s+/); + var node, token; + var cache = SelectBox.cache[id]; + for (var i = 0, j = cache.length; i < j; i++) { + node = cache[i]; + node.displayed = 1; + var node_text = node.text.toLowerCase(); + var numTokens = tokens.length; + for (var k = 0; k < numTokens; k++) { + token = tokens[k]; + if (node_text.indexOf(token) === -1) { + node.displayed = 0; + break; // Once the first token isn't found we're done + } + } + } + SelectBox.redisplay(id); + }, + delete_from_cache: function(id, value) { + var node, delete_index = null; + var cache = SelectBox.cache[id]; + for (var i = 0, j = cache.length; i < j; i++) { + node = cache[i]; + if (node.value === value) { + delete_index = i; + break; + } + } + cache.splice(delete_index, 1); + }, + add_to_cache: function(id, option) { + SelectBox.cache[id].push({value: option.value, text: option.text, displayed: 1}); + }, + cache_contains: function(id, value) { + // Check if an item is contained in the cache + var node; + var cache = SelectBox.cache[id]; + for (var i = 0, j = cache.length; i < j; i++) { + node = cache[i]; + if (node.value === value) { + return true; + } + } + return false; + }, + move: function(from, to) { + var from_box = document.getElementById(from); + var option; + var boxOptions = from_box.options; + var boxOptionsLength = boxOptions.length; + for (var i = 0, j = boxOptionsLength; i < j; i++) { + option = boxOptions[i]; + var option_value = option.value; + if (option.selected && SelectBox.cache_contains(from, option_value)) { + SelectBox.add_to_cache(to, {value: option_value, text: option.text, displayed: 1}); + SelectBox.delete_from_cache(from, option_value); + } + } + SelectBox.redisplay(from); + SelectBox.redisplay(to); + }, + move_all: function(from, to) { + var from_box = document.getElementById(from); + var option; + var boxOptions = from_box.options; + var boxOptionsLength = boxOptions.length; + for (var i = 0, j = boxOptionsLength; i < j; i++) { + option = boxOptions[i]; + var option_value = option.value; + if (SelectBox.cache_contains(from, option_value)) { + SelectBox.add_to_cache(to, {value: option_value, text: option.text, displayed: 1}); + SelectBox.delete_from_cache(from, option_value); + } + } + SelectBox.redisplay(from); + SelectBox.redisplay(to); + }, + sort: function(id) { + SelectBox.cache[id].sort(function(a, b) { + a = a.text.toLowerCase(); + b = b.text.toLowerCase(); + try { + if (a > b) { + return 1; + } + if (a < b) { + return -1; + } + } + catch (e) { + // silently fail on IE 'unknown' exception + } + return 0; + } ); + }, + select_all: function(id) { + var box = document.getElementById(id); + var boxOptions = box.options; + var boxOptionsLength = boxOptions.length; + for (var i = 0; i < boxOptionsLength; i++) { + boxOptions[i].selected = 'selected'; + } + } + }; + window.SelectBox = SelectBox; +})(django.jQuery); diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/actions.min.js b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/actions.min.js new file mode 100644 index 0000000..31e83c1 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/actions.min.js @@ -0,0 +1,7 @@ +(function(a){var f;a.fn.actions=function(e){var b=a.extend({},a.fn.actions.defaults,e),g=a(this),k=!1,l=function(){a(b.acrossClears).hide();a(b.acrossQuestions).show();a(b.allContainer).hide()},m=function(){a(b.acrossClears).show();a(b.acrossQuestions).hide();a(b.actionContainer).toggleClass(b.selectedClass);a(b.allContainer).show();a(b.counterContainer).hide()},n=function(){a(b.acrossClears).hide();a(b.acrossQuestions).hide();a(b.allContainer).hide();a(b.counterContainer).show()},p=function(){n(); +a(b.acrossInput).val(0);a(b.actionContainer).removeClass(b.selectedClass)},q=function(c){c?l():n();a(g).prop("checked",c).parent().parent().toggleClass(b.selectedClass,c)},h=function(){var c=a(g).filter(":checked").length,d=a(".action-counter").data("actionsIcnt");a(b.counterContainer).html(interpolate(ngettext("%(sel)s of %(cnt)s selected","%(sel)s of %(cnt)s selected",c),{sel:c,cnt:d},!0));a(b.allToggle).prop("checked",function(){if(c===g.length){var a=!0;l()}else a=!1,p();return a})};a(b.counterContainer).show(); +a(this).filter(":checked").each(function(c){a(this).parent().parent().toggleClass(b.selectedClass);h();1===a(b.acrossInput).val()&&m()});a(b.allToggle).show().on("click",function(){q(a(this).prop("checked"));h()});a("a",b.acrossQuestions).on("click",function(c){c.preventDefault();a(b.acrossInput).val(1);m()});a("a",b.acrossClears).on("click",function(c){c.preventDefault();a(b.allToggle).prop("checked",!1);p();q(0);h()});f=null;a(g).on("click",function(c){c||(c=window.event);var d=c.target?c.target: +c.srcElement;if(f&&a.data(f)!==a.data(d)&&!0===c.shiftKey){var e=!1;a(f).prop("checked",d.checked).parent().parent().toggleClass(b.selectedClass,d.checked);a(g).each(function(){if(a.data(this)===a.data(f)||a.data(this)===a.data(d))e=e?!1:!0;e&&a(this).prop("checked",d.checked).parent().parent().toggleClass(b.selectedClass,d.checked)})}a(d).parent().parent().toggleClass(b.selectedClass,d.checked);f=d;h()});a("form#changelist-form table#result_list tr").on("change","td:gt(0) :input",function(){k=!0}); +a('form#changelist-form button[name="index"]').on("click",function(a){if(k)return confirm(gettext("You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost."))});a('form#changelist-form input[name="_save"]').on("click",function(c){var d=!1;a("select option:selected",b.actionContainer).each(function(){a(this).val()&&(d=!0)});if(d)return k?confirm(gettext("You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action.")): +confirm(gettext("You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button."))})};a.fn.actions.defaults={actionContainer:"div.actions",counterContainer:"span.action-counter",allContainer:"div.actions span.all",acrossInput:"div.actions input.select-across",acrossQuestions:"div.actions span.question",acrossClears:"div.actions span.clear",allToggle:"#action-toggle",selectedClass:"selected"};a(document).ready(function(){var e= +a("tr input.action-select");0'+a.addText+""),l=d.find("tr:last a")):(c.filter(":last").after('

"),l=c.filter(":last").next().find("a")));l.on("click",function(d){d.preventDefault();d=b("#"+a.prefix+"-empty"); +var c=d.clone(!0);c.removeClass(a.emptyCssClass).addClass(a.formCssClass).attr("id",a.prefix+"-"+h);c.is("tr")?c.children(":last").append('"):c.is("ul")||c.is("ol")?c.append('
  • '+a.deleteText+"
  • "):c.children(":first").append(''+a.deleteText+"");c.find("*").each(function(){f(this,a.prefix,g.val())});c.insertBefore(b(d)); +b(g).val(parseInt(g.val(),10)+1);h+=1;""!==e.val()&&0>=e.val()-g.val()&&l.parent().hide();c.find("a."+a.deleteCssClass).on("click",function(d){d.preventDefault();c.remove();--h;a.removed&&a.removed(c);b(document).trigger("formset:removed",[c,a.prefix]);d=b("."+a.formCssClass);b("#id_"+a.prefix+"-TOTAL_FORMS").val(d.length);(""===e.val()||0 tr",b(d).tabularFormset(d,a.options)}})})})(django.jQuery); diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/popup_response.js b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/popup_response.js new file mode 100644 index 0000000..b4a07e7 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/popup_response.js @@ -0,0 +1,16 @@ +/*global opener */ +(function() { + 'use strict'; + var initData = JSON.parse(document.getElementById('django-admin-popup-response-constants').dataset.popupResponse); + switch(initData.action) { + case 'change': + opener.dismissChangeRelatedObjectPopup(window, initData.value, initData.obj, initData.new_value); + break; + case 'delete': + opener.dismissDeleteRelatedObjectPopup(window, initData.value); + break; + default: + opener.dismissAddRelatedObjectPopup(window, initData.value, initData.obj); + break; + } +})(); diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/timeparse.js b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/timeparse.js new file mode 100644 index 0000000..3cdc7ec --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/timeparse.js @@ -0,0 +1,106 @@ +(function() { + 'use strict'; + var timeParsePatterns = [ + // 9 + { + re: /^\d{1,2}$/i, + handler: function(bits) { + if (bits[0].length === 1) { + return '0' + bits[0] + ':00'; + } else { + return bits[0] + ':00'; + } + } + }, + // 13:00 + { + re: /^\d{2}[:.]\d{2}$/i, + handler: function(bits) { + return bits[0].replace('.', ':'); + } + }, + // 9:00 + { + re: /^\d[:.]\d{2}$/i, + handler: function(bits) { + return '0' + bits[0].replace('.', ':'); + } + }, + // 3 am / 3 a.m. / 3am + { + re: /^(\d+)\s*([ap])(?:.?m.?)?$/i, + handler: function(bits) { + var hour = parseInt(bits[1]); + if (hour === 12) { + hour = 0; + } + if (bits[2].toLowerCase() === 'p') { + if (hour === 12) { + hour = 0; + } + return (hour + 12) + ':00'; + } else { + if (hour < 10) { + return '0' + hour + ':00'; + } else { + return hour + ':00'; + } + } + } + }, + // 3.30 am / 3:15 a.m. / 3.00am + { + re: /^(\d+)[.:](\d{2})\s*([ap]).?m.?$/i, + handler: function(bits) { + var hour = parseInt(bits[1]); + var mins = parseInt(bits[2]); + if (mins < 10) { + mins = '0' + mins; + } + if (hour === 12) { + hour = 0; + } + if (bits[3].toLowerCase() === 'p') { + if (hour === 12) { + hour = 0; + } + return (hour + 12) + ':' + mins; + } else { + if (hour < 10) { + return '0' + hour + ':' + mins; + } else { + return hour + ':' + mins; + } + } + } + }, + // noon + { + re: /^no/i, + handler: function(bits) { + return '12:00'; + } + }, + // midnight + { + re: /^mid/i, + handler: function(bits) { + return '00:00'; + } + } + ]; + + function parseTimeString(s) { + for (var i = 0; i < timeParsePatterns.length; i++) { + var re = timeParsePatterns[i].re; + var handler = timeParsePatterns[i].handler; + var bits = re.exec(s); + if (bits) { + return handler(bits); + } + } + return s; + } + + window.parseTimeString = parseTimeString; +})(); diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/az.js b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/az.js new file mode 100644 index 0000000..2accb97 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/az.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/az",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return t+" simvol silin"},inputTooShort:function(e){var t=e.minimum-e.input.length;return t+" simvol daxil edin"},loadingMore:function(){return"Daha çox nəticə yüklənir…"},maximumSelected:function(e){return"Sadəcə "+e.maximum+" element seçə bilərsiniz"},noResults:function(){return"Nəticə tapılmadı"},searching:function(){return"Axtarılır…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/da.js b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/da.js new file mode 100644 index 0000000..501c51e --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/da.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/da",[],function(){return{errorLoading:function(){return"Resultaterne kunne ikke indlæses."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Angiv venligst "+t+" tegn mindre";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Angiv venligst "+t+" tegn mere";return n},loadingMore:function(){return"Indlæser flere resultater…"},maximumSelected:function(e){var t="Du kan kun vælge "+e.maximum+" emne";return e.maximum!=1&&(t+="r"),t},noResults:function(){return"Ingen resultater fundet"},searching:function(){return"Søger…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/es.js b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/es.js new file mode 100644 index 0000000..0a09650 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/es.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/es",[],function(){return{errorLoading:function(){return"La carga falló"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Por favor, elimine "+t+" car";return t==1?n+="ácter":n+="acteres",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Por favor, introduzca "+t+" car";return t==1?n+="ácter":n+="acteres",n},loadingMore:function(){return"Cargando más resultados…"},maximumSelected:function(e){var t="Sólo puede seleccionar "+e.maximum+" elemento";return e.maximum!=1&&(t+="s"),t},noResults:function(){return"No se encontraron resultados"},searching:function(){return"Buscando…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/fr.js b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/fr.js new file mode 100644 index 0000000..e4a6650 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/fr.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/fr",[],function(){return{errorLoading:function(){return"Les résultats ne peuvent pas être chargés."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Supprimez "+t+" caractère";return t!==1&&(n+="s"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Saisissez "+t+" caractère";return t!==1&&(n+="s"),n},loadingMore:function(){return"Chargement de résultats supplémentaires…"},maximumSelected:function(e){var t="Vous pouvez seulement sélectionner "+e.maximum+" élément";return e.maximum!==1&&(t+="s"),t},noResults:function(){return"Aucun résultat trouvé"},searching:function(){return"Recherche en cours…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/it.js b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/it.js new file mode 100644 index 0000000..7796b9f --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/it.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/it",[],function(){return{errorLoading:function(){return"I risultati non possono essere caricati."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Per favore cancella "+t+" caratter";return t!==1?n+="i":n+="e",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Per favore inserisci "+t+" o più caratteri";return n},loadingMore:function(){return"Caricando più risultati…"},maximumSelected:function(e){var t="Puoi selezionare solo "+e.maximum+" element";return e.maximum!==1?t+="i":t+="o",t},noResults:function(){return"Nessun risultato trovato"},searching:function(){return"Sto cercando…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/km.js b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/km.js new file mode 100644 index 0000000..8e94adc --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/km.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/km",[],function(){return{errorLoading:function(){return"មិនអាចទាញយកទិន្នន័យ"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="សូមលុបចេញ "+t+" អក្សរ";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="សូមបញ្ចូល"+t+" អក្សរ រឺ ច្រើនជាងនេះ";return n},loadingMore:function(){return"កំពុងទាញយកទិន្នន័យបន្ថែម..."},maximumSelected:function(e){var t="អ្នកអាចជ្រើសរើសបានតែ "+e.maximum+" ជម្រើសប៉ុណ្ណោះ";return t},noResults:function(){return"មិនមានលទ្ធផល"},searching:function(){return"កំពុងស្វែងរក..."}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ko.js b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ko.js new file mode 100644 index 0000000..4ed0321 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ko.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ko",[],function(){return{errorLoading:function(){return"결과를 불러올 수 없습니다."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="너무 깁니다. "+t+" 글자 지워주세요.";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="너무 짧습니다. "+t+" 글자 더 입력해주세요.";return n},loadingMore:function(){return"불러오는 중…"},maximumSelected:function(e){var t="최대 "+e.maximum+"개까지만 선택 가능합니다.";return t},noResults:function(){return"결과가 없습니다."},searching:function(){return"검색 중…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/lt.js b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/lt.js new file mode 100644 index 0000000..05f3a6e --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/lt.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/lt",[],function(){function e(e,t,n,r){return e%10===1&&(e%100<11||e%100>19)?t:e%10>=2&&e%10<=9&&(e%100<11||e%100>19)?n:r}return{inputTooLong:function(t){var n=t.input.length-t.maximum,r="Pašalinkite "+n+" simbol";return r+=e(n,"į","ius","ių"),r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Įrašykite dar "+n+" simbol";return r+=e(n,"į","ius","ių"),r},loadingMore:function(){return"Kraunama daugiau rezultatų…"},maximumSelected:function(t){var n="Jūs galite pasirinkti tik "+t.maximum+" element";return n+=e(t.maximum,"ą","us","ų"),n},noResults:function(){return"Atitikmenų nerasta"},searching:function(){return"Ieškoma…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/mk.js b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/mk.js new file mode 100644 index 0000000..319ecca --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/mk.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/mk",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Ве молиме внесете "+e.maximum+" помалку карактер";return e.maximum!==1&&(n+="и"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Ве молиме внесете уште "+e.maximum+" карактер";return e.maximum!==1&&(n+="и"),n},loadingMore:function(){return"Вчитување резултати…"},maximumSelected:function(e){var t="Можете да изберете само "+e.maximum+" ставк";return e.maximum===1?t+="а":t+="и",t},noResults:function(){return"Нема пронајдено совпаѓања"},searching:function(){return"Пребарување…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ms.js b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ms.js new file mode 100644 index 0000000..4258f12 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ms.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ms",[],function(){return{errorLoading:function(){return"Keputusan tidak berjaya dimuatkan."},inputTooLong:function(e){var t=e.input.length-e.maximum;return"Sila hapuskan "+t+" aksara"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Sila masukkan "+t+" atau lebih aksara"},loadingMore:function(){return"Sedang memuatkan keputusan…"},maximumSelected:function(e){return"Anda hanya boleh memilih "+e.maximum+" pilihan"},noResults:function(){return"Tiada padanan yang ditemui"},searching:function(){return"Mencari…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/nb.js b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/nb.js new file mode 100644 index 0000000..6770087 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/nb.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/nb",[],function(){return{errorLoading:function(){return"Kunne ikke hente resultater."},inputTooLong:function(e){var t=e.input.length-e.maximum;return"Vennligst fjern "+t+" tegn"},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vennligst skriv inn ";return t>1?n+=" flere tegn":n+=" tegn til",n},loadingMore:function(){return"Laster flere resultater…"},maximumSelected:function(e){return"Du kan velge maks "+e.maximum+" elementer"},noResults:function(){return"Ingen treff"},searching:function(){return"Søker…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ro.js b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ro.js new file mode 100644 index 0000000..788a263 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ro.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ro",[],function(){return{errorLoading:function(){return"Rezultatele nu au putut fi incărcate."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vă rugăm să ștergeți"+t+" caracter";return t!==1&&(n+="e"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vă rugăm să introduceți "+t+"sau mai multe caractere";return n},loadingMore:function(){return"Se încarcă mai multe rezultate…"},maximumSelected:function(e){var t="Aveți voie să selectați cel mult "+e.maximum;return t+=" element",e.maximum!==1&&(t+="e"),t},noResults:function(){return"Nu au fost găsite rezultate"},searching:function(){return"Căutare…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sk.js b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sk.js new file mode 100644 index 0000000..82f2941 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sk.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/sk",[],function(){var e={2:function(e){return e?"dva":"dve"},3:function(){return"tri"},4:function(){return"štyri"}};return{inputTooLong:function(t){var n=t.input.length-t.maximum;return n==1?"Prosím, zadajte o jeden znak menej":n>=2&&n<=4?"Prosím, zadajte o "+e[n](!0)+" znaky menej":"Prosím, zadajte o "+n+" znakov menej"},inputTooShort:function(t){var n=t.minimum-t.input.length;return n==1?"Prosím, zadajte ešte jeden znak":n<=4?"Prosím, zadajte ešte ďalšie "+e[n](!0)+" znaky":"Prosím, zadajte ešte ďalších "+n+" znakov"},loadingMore:function(){return"Loading more results…"},maximumSelected:function(t){return t.maximum==1?"Môžete zvoliť len jednu položku":t.maximum>=2&&t.maximum<=4?"Môžete zvoliť najviac "+e[t.maximum](!1)+" položky":"Môžete zvoliť najviac "+t.maximum+" položiek"},noResults:function(){return"Nenašli sa žiadne položky"},searching:function(){return"Vyhľadávanie…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sv.js b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sv.js new file mode 100644 index 0000000..bedac08 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sv.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/sv",[],function(){return{errorLoading:function(){return"Resultat kunde inte laddas."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vänligen sudda ut "+t+" tecken";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vänligen skriv in "+t+" eller fler tecken";return n},loadingMore:function(){return"Laddar fler resultat…"},maximumSelected:function(e){var t="Du kan max välja "+e.maximum+" element";return t},noResults:function(){return"Inga träffar"},searching:function(){return"Söker…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/tr.js b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/tr.js new file mode 100644 index 0000000..25d27a8 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/tr.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/tr",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n=t+" karakter daha girmelisiniz";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="En az "+t+" karakter daha girmelisiniz";return n},loadingMore:function(){return"Daha fazla…"},maximumSelected:function(e){var t="Sadece "+e.maximum+" seçim yapabilirsiniz";return t},noResults:function(){return"Sonuç bulunamadı"},searching:function(){return"Aranıyor…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/zh-CN.js b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/zh-CN.js new file mode 100644 index 0000000..2ed9597 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/zh-CN.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/zh-CN",[],function(){return{errorLoading:function(){return"无法载入结果。"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="请删除"+t+"个字符";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="请再输入至少"+t+"个字符";return n},loadingMore:function(){return"载入更多结果…"},maximumSelected:function(e){var t="最多只能选择"+e.maximum+"个项目";return t},noResults:function(){return"未找到结果"},searching:function(){return"搜索中…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/actions.html b/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/actions.html new file mode 100644 index 0000000..ef2232e --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/actions.html @@ -0,0 +1,23 @@ +{% load i18n %} +
    + {% block actions %} + {% block actions-form %} + {% for field in action_form %}{% if field.label %}{% endif %}{% endfor %} + {% endblock %} + {% block actions-submit %} + + {% endblock %} + {% block actions-counter %} + {% if actions_selection_counter %} + {{ selection_note }} + {% if cl.result_count != cl.result_list|length %} + {{ selection_note_all }} + + {% blocktrans with cl.result_count as total_count %}Select all {{ total_count }} {{ module_name }}{% endblocktrans %} + + {% trans "Clear selection" %} + {% endif %} + {% endif %} + {% endblock %} + {% endblock %} +
    diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/auth/user/add_form.html b/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/auth/user/add_form.html new file mode 100644 index 0000000..5c240d5 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/auth/user/add_form.html @@ -0,0 +1,10 @@ +{% extends "admin/change_form.html" %} +{% load i18n %} + +{% block form_top %} + {% if not is_popup %} +

    {% trans "First, enter a username and password. Then, you'll be able to edit more user options." %}

    + {% else %} +

    {% trans "Enter a username and password." %}

    + {% endif %} +{% endblock %} diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/base.html b/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/base.html new file mode 100644 index 0000000..2cf5137 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/base.html @@ -0,0 +1,93 @@ +{% load i18n static %} +{% get_current_language as LANGUAGE_CODE %}{% get_current_language_bidi as LANGUAGE_BIDI %} + + +{% block title %}{% endblock %} + +{% block extrastyle %}{% endblock %} +{% if LANGUAGE_BIDI %}{% endif %} +{% block extrahead %}{% endblock %} +{% block responsive %} + + + {% if LANGUAGE_BIDI %}{% endif %} +{% endblock %} +{% block blockbots %}{% endblock %} + +{% load i18n %} + + + + +
    + + {% if not is_popup %} + + + + {% block breadcrumbs %} + + {% endblock %} + {% endif %} + + {% block messages %} + {% if messages %} +
      {% for message in messages %} + {{ message|capfirst }} + {% endfor %}
    + {% endif %} + {% endblock messages %} + + +
    + {% block pretitle %}{% endblock %} + {% block content_title %}{% if title %}

    {{ title }}

    {% endif %}{% endblock %} + {% block content %} + {% block object-tools %}{% endblock %} + {{ content }} + {% endblock %} + {% block sidebar %}{% endblock %} +
    +
    + + + {% block footer %}{% endblock %} +
    + + + + diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/change_form.html b/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/change_form.html new file mode 100644 index 0000000..1d749f2 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/change_form.html @@ -0,0 +1,81 @@ +{% extends "admin/base_site.html" %} +{% load i18n admin_urls static admin_modify %} + +{% block extrahead %}{{ block.super }} + +{{ media }} +{% endblock %} + +{% block extrastyle %}{{ block.super }}{% endblock %} + +{% block coltype %}colM{% endblock %} + +{% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} change-form{% endblock %} + +{% if not is_popup %} +{% block breadcrumbs %} + +{% endblock %} +{% endif %} + +{% block content %}
    +{% block object-tools %} +{% if change %}{% if not is_popup %} +
      + {% block object-tools-items %} + {% change_form_object_tools %} + {% endblock %} +
    +{% endif %}{% endif %} +{% endblock %} +
    {% csrf_token %}{% block form_top %}{% endblock %} +
    +{% if is_popup %}{% endif %} +{% if to_field %}{% endif %} +{% if save_on_top %}{% block submit_buttons_top %}{% submit_row %}{% endblock %}{% endif %} +{% if errors %} +

    + {% if errors|length == 1 %}{% trans "Please correct the error below." %}{% else %}{% trans "Please correct the errors below." %}{% endif %} +

    + {{ adminform.form.non_field_errors }} +{% endif %} + +{% block field_sets %} +{% for fieldset in adminform %} + {% include "admin/includes/fieldset.html" %} +{% endfor %} +{% endblock %} + +{% block after_field_sets %}{% endblock %} + +{% block inline_field_sets %} +{% for inline_admin_formset in inline_admin_formsets %} + {% include inline_admin_formset.opts.template %} +{% endfor %} +{% endblock %} + +{% block after_related_objects %}{% endblock %} + +{% block submit_buttons_bottom %}{% submit_row %}{% endblock %} + +{% block admin_change_form_document_ready %} + +{% endblock %} + +{# JavaScript for prepopulated fields #} +{% prepopulated_fields_js %} + +
    +
    +{% endblock %} diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/change_list.html b/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/change_list.html new file mode 100644 index 0000000..768e581 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/change_list.html @@ -0,0 +1,82 @@ +{% extends "admin/base_site.html" %} +{% load i18n admin_urls static admin_list %} + +{% block extrastyle %} + {{ block.super }} + + {% if cl.formset %} + + {% endif %} + {% if cl.formset or action_form %} + + {% endif %} + {{ media.css }} + {% if not actions_on_top and not actions_on_bottom %} + + {% endif %} +{% endblock %} + +{% block extrahead %} +{{ block.super }} +{{ media.js }} +{% endblock %} + +{% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} change-list{% endblock %} + +{% if not is_popup %} +{% block breadcrumbs %} + +{% endblock %} +{% endif %} + +{% block coltype %}flex{% endblock %} + +{% block content %} +
    + {% block object-tools %} +
      + {% block object-tools-items %} + {% change_list_object_tools %} + {% endblock %} +
    + {% endblock %} + {% if cl.formset and cl.formset.errors %} +

    + {% if cl.formset.total_error_count == 1 %}{% trans "Please correct the error below." %}{% else %}{% trans "Please correct the errors below." %}{% endif %} +

    + {{ cl.formset.non_form_errors }} + {% endif %} +
    + {% block search %}{% search_form cl %}{% endblock %} + {% block date_hierarchy %}{% if cl.date_hierarchy %}{% date_hierarchy cl %}{% endif %}{% endblock %} + + {% block filters %} + {% if cl.has_filters %} +
    +

    {% trans 'Filter' %}

    + {% for spec in cl.filter_specs %}{% admin_list_filter cl spec %}{% endfor %} +
    + {% endif %} + {% endblock %} + +
    {% csrf_token %} + {% if cl.formset %} +
    {{ cl.formset.management_form }}
    + {% endif %} + + {% block result_list %} + {% if action_form and actions_on_top and cl.show_admin_actions %}{% admin_actions %}{% endif %} + {% result_list cl %} + {% if action_form and actions_on_bottom and cl.show_admin_actions %}{% admin_actions %}{% endif %} + {% endblock %} + {% block pagination %}{% pagination cl %}{% endblock %} +
    +
    +
    +{% endblock %} diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/change_list_results.html b/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/change_list_results.html new file mode 100644 index 0000000..9b97b5b --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/change_list_results.html @@ -0,0 +1,38 @@ +{% load i18n static %} +{% if result_hidden_fields %} +
    {# DIV for HTML validation #} +{% for item in result_hidden_fields %}{{ item }}{% endfor %} +
    +{% endif %} +{% if results %} +
    + + + +{% for header in result_headers %} +{% endfor %} + + + +{% for result in results %} +{% if result.form and result.form.non_field_errors %} + +{% endif %} +{% for item in result %}{{ item }}{% endfor %} +{% endfor %} + +
    + {% if header.sortable %} + {% if header.sort_priority > 0 %} +
    + + {% if num_sorted_fields > 1 %}{{ header.sort_priority }}{% endif %} + +
    + {% endif %} + {% endif %} +
    {% if header.sortable %}{{ header.text|capfirst }}{% else %}{{ header.text|capfirst }}{% endif %}
    +
    +
    {{ result.form.non_field_errors }}
    +
    +{% endif %} diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/date_hierarchy.html b/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/date_hierarchy.html new file mode 100644 index 0000000..65ae800 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/date_hierarchy.html @@ -0,0 +1,16 @@ +{% if show %} +
    +
    +
    +{% endif %} diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/edit_inline/stacked.html b/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/edit_inline/stacked.html new file mode 100644 index 0000000..8af4d54 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/edit_inline/stacked.html @@ -0,0 +1,25 @@ +{% load i18n admin_urls static %} +
    +
    +

    {{ inline_admin_formset.opts.verbose_name_plural|capfirst }}

    +{{ inline_admin_formset.formset.management_form }} +{{ inline_admin_formset.formset.non_form_errors }} + +{% for inline_admin_form in inline_admin_formset %}
    +

    {{ inline_admin_formset.opts.verbose_name|capfirst }}: {% if inline_admin_form.original %}{{ inline_admin_form.original }}{% if inline_admin_form.model_admin.show_change_link and inline_admin_form.model_admin.has_registered_model %} {% if inline_admin_formset.has_change_permission %}{% trans "Change" %}{% else %}{% trans "View" %}{% endif %}{% endif %} +{% else %}#{{ forloop.counter }}{% endif %} + {% if inline_admin_form.show_url %}{% trans "View on site" %}{% endif %} + {% if inline_admin_formset.formset.can_delete and inline_admin_form.original %}{{ inline_admin_form.deletion_field.field }} {{ inline_admin_form.deletion_field.label_tag }}{% endif %} +

    + {% if inline_admin_form.form.non_field_errors %}{{ inline_admin_form.form.non_field_errors }}{% endif %} + {% for fieldset in inline_admin_form %} + {% include "admin/includes/fieldset.html" %} + {% endfor %} + {% if inline_admin_form.needs_explicit_pk_field %}{{ inline_admin_form.pk_field.field }}{% endif %} + {% if inline_admin_form.fk_field %}{{ inline_admin_form.fk_field.field }}{% endif %} +
    {% endfor %} +
    +
    diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/filter.html b/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/filter.html new file mode 100644 index 0000000..cd88652 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/filter.html @@ -0,0 +1,8 @@ +{% load i18n %} +

    {% blocktrans with filter_title=title %} By {{ filter_title }} {% endblocktrans %}

    + diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/includes/fieldset.html b/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/includes/fieldset.html new file mode 100644 index 0000000..218fd5a --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/includes/fieldset.html @@ -0,0 +1,29 @@ +
    + {% if fieldset.name %}

    {{ fieldset.name }}

    {% endif %} + {% if fieldset.description %} +
    {{ fieldset.description|safe }}
    + {% endif %} + {% for line in fieldset %} +
    + {% if line.fields|length_is:'1' %}{{ line.errors }}{% endif %} + {% for field in line %} + + {% if not line.fields|length_is:'1' and not field.is_readonly %}{{ field.errors }}{% endif %} + {% if field.is_checkbox %} + {{ field.field }}{{ field.label_tag }} + {% else %} + {{ field.label_tag }} + {% if field.is_readonly %} +
    {{ field.contents }}
    + {% else %} + {{ field.field }} + {% endif %} + {% endif %} + {% if field.field.help_text %} +
    {{ field.field.help_text|safe }}
    + {% endif %} +
    + {% endfor %} + + {% endfor %} +
    diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/index.html b/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/index.html new file mode 100644 index 0000000..2b50015 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/index.html @@ -0,0 +1,86 @@ +{% extends "admin/base_site.html" %} +{% load i18n static %} + +{% block extrastyle %}{{ block.super }}{% endblock %} + +{% block coltype %}colMS{% endblock %} + +{% block bodyclass %}{{ block.super }} dashboard{% endblock %} + +{% block breadcrumbs %}{% endblock %} + +{% block content %} +
    + +{% if app_list %} + {% for app in app_list %} +
    + + + {% for model in app.models %} + + {% if model.admin_url %} + + {% else %} + + {% endif %} + + {% if model.add_url %} + + {% else %} + + {% endif %} + + {% if model.admin_url %} + {% if model.view_only %} + + {% else %} + + {% endif %} + {% else %} + + {% endif %} + + {% endfor %} +
    + {{ app.name }} +
    {{ model.name }}{{ model.name }}{% trans 'Add' %} {% trans 'View' %}{% trans 'Change' %} 
    +
    + {% endfor %} +{% else %} +

    {% trans "You don't have permission to view or edit anything." %}

    +{% endif %} +
    +{% endblock %} + +{% block sidebar %} + +{% endblock %} diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/login.html b/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/login.html new file mode 100644 index 0000000..396be27 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/login.html @@ -0,0 +1,66 @@ +{% extends "admin/base_site.html" %} +{% load i18n static %} + +{% block extrastyle %}{{ block.super }} +{{ form.media }} +{% endblock %} + +{% block bodyclass %}{{ block.super }} login{% endblock %} + +{% block usertools %}{% endblock %} + +{% block nav-global %}{% endblock %} + +{% block content_title %}{% endblock %} + +{% block breadcrumbs %}{% endblock %} + +{% block content %} +{% if form.errors and not form.non_field_errors %} +

    +{% if form.errors.items|length == 1 %}{% trans "Please correct the error below." %}{% else %}{% trans "Please correct the errors below." %}{% endif %} +

    +{% endif %} + +{% if form.non_field_errors %} +{% for error in form.non_field_errors %} +

    + {{ error }} +

    +{% endfor %} +{% endif %} + +
    + +{% if user.is_authenticated %} +

    +{% blocktrans trimmed %} + You are authenticated as {{ username }}, but are not authorized to + access this page. Would you like to login to a different account? +{% endblocktrans %} +

    +{% endif %} + +
    {% csrf_token %} +
    + {{ form.username.errors }} + {{ form.username.label_tag }} {{ form.username }} +
    +
    + {{ form.password.errors }} + {{ form.password.label_tag }} {{ form.password }} + +
    + {% url 'admin_password_reset' as password_reset_url %} + {% if password_reset_url %} + + {% endif %} +
    + +
    +
    + +
    +{% endblock %} diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/search_form.html b/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/search_form.html new file mode 100644 index 0000000..3bb5cba --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/search_form.html @@ -0,0 +1,16 @@ +{% load i18n static %} +{% if cl.search_fields %} +
    +{% endif %} diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/submit_line.html b/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/submit_line.html new file mode 100644 index 0000000..bb283fe --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/submit_line.html @@ -0,0 +1,14 @@ +{% load i18n admin_urls %} +
    +{% block submit-row %} +{% if show_save %}{% endif %} +{% if show_delete_link and original %} + {% url opts|admin_urlname:'delete' original.pk|admin_urlquote as delete_url %} + +{% endif %} +{% if show_save_as_new %}{% endif %} +{% if show_save_and_add_another %}{% endif %} +{% if show_save_and_continue %}{% endif %} +{% if show_close %}{% trans 'Close' %}{% endif %} +{% endblock %} +
    diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/widgets/clearable_file_input.html b/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/widgets/clearable_file_input.html new file mode 100644 index 0000000..80699d1 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/widgets/clearable_file_input.html @@ -0,0 +1,6 @@ +{% if widget.is_initial %}

    {{ widget.initial_text }}: {{ widget.value }}{% if not widget.required %} + + +{% endif %}
    +{{ widget.input_text }}:{% endif %} +{% if widget.is_initial %}

    {% endif %} diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/widgets/radio.html b/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/widgets/radio.html new file mode 100644 index 0000000..780899a --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/widgets/radio.html @@ -0,0 +1 @@ +{% include "django/forms/widgets/multiple_input.html" %} diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/widgets/split_datetime.html b/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/widgets/split_datetime.html new file mode 100644 index 0000000..7fc7bf6 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/templates/admin/widgets/split_datetime.html @@ -0,0 +1,4 @@ +

    + {{ date_label }} {% with widget=widget.subwidgets.0 %}{% include widget.template_name %}{% endwith %}
    + {{ time_label }} {% with widget=widget.subwidgets.1 %}{% include widget.template_name %}{% endwith %} +

    diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/templatetags/__init__.py b/venv/lib/python3.7/site-packages/django/contrib/admin/templatetags/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/templatetags/admin_list.py b/venv/lib/python3.7/site-packages/django/contrib/admin/templatetags/admin_list.py new file mode 100644 index 0000000..b03e4b6 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/templatetags/admin_list.py @@ -0,0 +1,485 @@ +import datetime + +from django.contrib.admin.templatetags.admin_urls import add_preserved_filters +from django.contrib.admin.utils import ( + display_for_field, display_for_value, label_for_field, lookup_field, +) +from django.contrib.admin.views.main import ( + ALL_VAR, ORDER_VAR, PAGE_VAR, SEARCH_VAR, +) +from django.core.exceptions import ObjectDoesNotExist +from django.db import models +from django.template import Library +from django.template.loader import get_template +from django.templatetags.static import static +from django.urls import NoReverseMatch +from django.utils import formats +from django.utils.html import format_html +from django.utils.safestring import mark_safe +from django.utils.text import capfirst +from django.utils.translation import gettext as _ + +from .base import InclusionAdminNode + +register = Library() + +DOT = '.' + + +@register.simple_tag +def paginator_number(cl, i): + """ + Generate an individual page index link in a paginated list. + """ + if i == DOT: + return '… ' + elif i == cl.page_num: + return format_html('{} ', i + 1) + else: + return format_html( + '{} ', + cl.get_query_string({PAGE_VAR: i}), + mark_safe(' class="end"' if i == cl.paginator.num_pages - 1 else ''), + i + 1, + ) + + +def pagination(cl): + """ + Generate the series of links to the pages in a paginated list. + """ + paginator, page_num = cl.paginator, cl.page_num + + pagination_required = (not cl.show_all or not cl.can_show_all) and cl.multi_page + if not pagination_required: + page_range = [] + else: + ON_EACH_SIDE = 3 + ON_ENDS = 2 + + # If there are 10 or fewer pages, display links to every page. + # Otherwise, do some fancy + if paginator.num_pages <= 10: + page_range = range(paginator.num_pages) + else: + # Insert "smart" pagination links, so that there are always ON_ENDS + # links at either end of the list of pages, and there are always + # ON_EACH_SIDE links at either end of the "current page" link. + page_range = [] + if page_num > (ON_EACH_SIDE + ON_ENDS): + page_range += [ + *range(0, ON_ENDS), DOT, + *range(page_num - ON_EACH_SIDE, page_num + 1), + ] + else: + page_range.extend(range(0, page_num + 1)) + if page_num < (paginator.num_pages - ON_EACH_SIDE - ON_ENDS - 1): + page_range += [ + *range(page_num + 1, page_num + ON_EACH_SIDE + 1), DOT, + *range(paginator.num_pages - ON_ENDS, paginator.num_pages) + ] + else: + page_range.extend(range(page_num + 1, paginator.num_pages)) + + need_show_all_link = cl.can_show_all and not cl.show_all and cl.multi_page + return { + 'cl': cl, + 'pagination_required': pagination_required, + 'show_all_url': need_show_all_link and cl.get_query_string({ALL_VAR: ''}), + 'page_range': page_range, + 'ALL_VAR': ALL_VAR, + '1': 1, + } + + +@register.tag(name='pagination') +def pagination_tag(parser, token): + return InclusionAdminNode( + parser, token, + func=pagination, + template_name='pagination.html', + takes_context=False, + ) + + +def result_headers(cl): + """ + Generate the list column headers. + """ + ordering_field_columns = cl.get_ordering_field_columns() + for i, field_name in enumerate(cl.list_display): + text, attr = label_for_field( + field_name, cl.model, + model_admin=cl.model_admin, + return_attr=True + ) + is_field_sortable = cl.sortable_by is None or field_name in cl.sortable_by + if attr: + field_name = _coerce_field_name(field_name, i) + # Potentially not sortable + + # if the field is the action checkbox: no sorting and special class + if field_name == 'action_checkbox': + yield { + "text": text, + "class_attrib": mark_safe(' class="action-checkbox-column"'), + "sortable": False, + } + continue + + admin_order_field = getattr(attr, "admin_order_field", None) + if not admin_order_field: + is_field_sortable = False + + if not is_field_sortable: + # Not sortable + yield { + 'text': text, + 'class_attrib': format_html(' class="column-{}"', field_name), + 'sortable': False, + } + continue + + # OK, it is sortable if we got this far + th_classes = ['sortable', 'column-{}'.format(field_name)] + order_type = '' + new_order_type = 'asc' + sort_priority = 0 + # Is it currently being sorted on? + is_sorted = i in ordering_field_columns + if is_sorted: + order_type = ordering_field_columns.get(i).lower() + sort_priority = list(ordering_field_columns).index(i) + 1 + th_classes.append('sorted %sending' % order_type) + new_order_type = {'asc': 'desc', 'desc': 'asc'}[order_type] + + # build new ordering param + o_list_primary = [] # URL for making this field the primary sort + o_list_remove = [] # URL for removing this field from sort + o_list_toggle = [] # URL for toggling order type for this field + + def make_qs_param(t, n): + return ('-' if t == 'desc' else '') + str(n) + + for j, ot in ordering_field_columns.items(): + if j == i: # Same column + param = make_qs_param(new_order_type, j) + # We want clicking on this header to bring the ordering to the + # front + o_list_primary.insert(0, param) + o_list_toggle.append(param) + # o_list_remove - omit + else: + param = make_qs_param(ot, j) + o_list_primary.append(param) + o_list_toggle.append(param) + o_list_remove.append(param) + + if i not in ordering_field_columns: + o_list_primary.insert(0, make_qs_param(new_order_type, i)) + + yield { + "text": text, + "sortable": True, + "sorted": is_sorted, + "ascending": order_type == "asc", + "sort_priority": sort_priority, + "url_primary": cl.get_query_string({ORDER_VAR: '.'.join(o_list_primary)}), + "url_remove": cl.get_query_string({ORDER_VAR: '.'.join(o_list_remove)}), + "url_toggle": cl.get_query_string({ORDER_VAR: '.'.join(o_list_toggle)}), + "class_attrib": format_html(' class="{}"', ' '.join(th_classes)) if th_classes else '', + } + + +def _boolean_icon(field_val): + icon_url = static('admin/img/icon-%s.svg' % {True: 'yes', False: 'no', None: 'unknown'}[field_val]) + return format_html('{}', icon_url, field_val) + + +def _coerce_field_name(field_name, field_index): + """ + Coerce a field_name (which may be a callable) to a string. + """ + if callable(field_name): + if field_name.__name__ == '': + return 'lambda' + str(field_index) + else: + return field_name.__name__ + return field_name + + +def items_for_result(cl, result, form): + """ + Generate the actual list of data. + """ + + def link_in_col(is_first, field_name, cl): + if cl.list_display_links is None: + return False + if is_first and not cl.list_display_links: + return True + return field_name in cl.list_display_links + + first = True + pk = cl.lookup_opts.pk.attname + for field_index, field_name in enumerate(cl.list_display): + empty_value_display = cl.model_admin.get_empty_value_display() + row_classes = ['field-%s' % _coerce_field_name(field_name, field_index)] + try: + f, attr, value = lookup_field(field_name, result, cl.model_admin) + except ObjectDoesNotExist: + result_repr = empty_value_display + else: + empty_value_display = getattr(attr, 'empty_value_display', empty_value_display) + if f is None or f.auto_created: + if field_name == 'action_checkbox': + row_classes = ['action-checkbox'] + boolean = getattr(attr, 'boolean', False) + result_repr = display_for_value(value, empty_value_display, boolean) + if isinstance(value, (datetime.date, datetime.time)): + row_classes.append('nowrap') + else: + if isinstance(f.remote_field, models.ManyToOneRel): + field_val = getattr(result, f.name) + if field_val is None: + result_repr = empty_value_display + else: + result_repr = field_val + else: + result_repr = display_for_field(value, f, empty_value_display) + if isinstance(f, (models.DateField, models.TimeField, models.ForeignKey)): + row_classes.append('nowrap') + if str(result_repr) == '': + result_repr = mark_safe(' ') + row_class = mark_safe(' class="%s"' % ' '.join(row_classes)) + # If list_display_links not defined, add the link tag to the first field + if link_in_col(first, field_name, cl): + table_tag = 'th' if first else 'td' + first = False + + # Display link to the result's change_view if the url exists, else + # display just the result's representation. + try: + url = cl.url_for_result(result) + except NoReverseMatch: + link_or_text = result_repr + else: + url = add_preserved_filters({'preserved_filters': cl.preserved_filters, 'opts': cl.opts}, url) + # Convert the pk to something that can be used in Javascript. + # Problem cases are non-ASCII strings. + if cl.to_field: + attr = str(cl.to_field) + else: + attr = pk + value = result.serializable_value(attr) + link_or_text = format_html( + '{}', + url, + format_html( + ' data-popup-opener="{}"', value + ) if cl.is_popup else '', + result_repr) + + yield format_html('<{}{}>{}', table_tag, row_class, link_or_text, table_tag) + else: + # By default the fields come from ModelAdmin.list_editable, but if we pull + # the fields out of the form instead of list_editable custom admins + # can provide fields on a per request basis + if (form and field_name in form.fields and not ( + field_name == cl.model._meta.pk.name and + form[cl.model._meta.pk.name].is_hidden)): + bf = form[field_name] + result_repr = mark_safe(str(bf.errors) + str(bf)) + yield format_html('{}', row_class, result_repr) + if form and not form[cl.model._meta.pk.name].is_hidden: + yield format_html('{}', form[cl.model._meta.pk.name]) + + +class ResultList(list): + """ + Wrapper class used to return items in a list_editable changelist, annotated + with the form object for error reporting purposes. Needed to maintain + backwards compatibility with existing admin templates. + """ + def __init__(self, form, *items): + self.form = form + super().__init__(*items) + + +def results(cl): + if cl.formset: + for res, form in zip(cl.result_list, cl.formset.forms): + yield ResultList(form, items_for_result(cl, res, form)) + else: + for res in cl.result_list: + yield ResultList(None, items_for_result(cl, res, None)) + + +def result_hidden_fields(cl): + if cl.formset: + for res, form in zip(cl.result_list, cl.formset.forms): + if form[cl.model._meta.pk.name].is_hidden: + yield mark_safe(form[cl.model._meta.pk.name]) + + +def result_list(cl): + """ + Display the headers and data list together. + """ + headers = list(result_headers(cl)) + num_sorted_fields = 0 + for h in headers: + if h['sortable'] and h['sorted']: + num_sorted_fields += 1 + return { + 'cl': cl, + 'result_hidden_fields': list(result_hidden_fields(cl)), + 'result_headers': headers, + 'num_sorted_fields': num_sorted_fields, + 'results': list(results(cl)), + } + + +@register.tag(name='result_list') +def result_list_tag(parser, token): + return InclusionAdminNode( + parser, token, + func=result_list, + template_name='change_list_results.html', + takes_context=False, + ) + + +def date_hierarchy(cl): + """ + Display the date hierarchy for date drill-down functionality. + """ + if cl.date_hierarchy: + field_name = cl.date_hierarchy + year_field = '%s__year' % field_name + month_field = '%s__month' % field_name + day_field = '%s__day' % field_name + field_generic = '%s__' % field_name + year_lookup = cl.params.get(year_field) + month_lookup = cl.params.get(month_field) + day_lookup = cl.params.get(day_field) + + def link(filters): + return cl.get_query_string(filters, [field_generic]) + + if not (year_lookup or month_lookup or day_lookup): + # select appropriate start level + date_range = cl.queryset.aggregate(first=models.Min(field_name), + last=models.Max(field_name)) + if date_range['first'] and date_range['last']: + if date_range['first'].year == date_range['last'].year: + year_lookup = date_range['first'].year + if date_range['first'].month == date_range['last'].month: + month_lookup = date_range['first'].month + + if year_lookup and month_lookup and day_lookup: + day = datetime.date(int(year_lookup), int(month_lookup), int(day_lookup)) + return { + 'show': True, + 'back': { + 'link': link({year_field: year_lookup, month_field: month_lookup}), + 'title': capfirst(formats.date_format(day, 'YEAR_MONTH_FORMAT')) + }, + 'choices': [{'title': capfirst(formats.date_format(day, 'MONTH_DAY_FORMAT'))}] + } + elif year_lookup and month_lookup: + days = getattr(cl.queryset, 'dates')(field_name, 'day') + return { + 'show': True, + 'back': { + 'link': link({year_field: year_lookup}), + 'title': str(year_lookup) + }, + 'choices': [{ + 'link': link({year_field: year_lookup, month_field: month_lookup, day_field: day.day}), + 'title': capfirst(formats.date_format(day, 'MONTH_DAY_FORMAT')) + } for day in days] + } + elif year_lookup: + months = getattr(cl.queryset, 'dates')(field_name, 'month') + return { + 'show': True, + 'back': { + 'link': link({}), + 'title': _('All dates') + }, + 'choices': [{ + 'link': link({year_field: year_lookup, month_field: month.month}), + 'title': capfirst(formats.date_format(month, 'YEAR_MONTH_FORMAT')) + } for month in months] + } + else: + years = getattr(cl.queryset, 'dates')(field_name, 'year') + return { + 'show': True, + 'back': None, + 'choices': [{ + 'link': link({year_field: str(year.year)}), + 'title': str(year.year), + } for year in years] + } + + +@register.tag(name='date_hierarchy') +def date_hierarchy_tag(parser, token): + return InclusionAdminNode( + parser, token, + func=date_hierarchy, + template_name='date_hierarchy.html', + takes_context=False, + ) + + +def search_form(cl): + """ + Display a search form for searching the list. + """ + return { + 'cl': cl, + 'show_result_count': cl.result_count != cl.full_result_count, + 'search_var': SEARCH_VAR + } + + +@register.tag(name='search_form') +def search_form_tag(parser, token): + return InclusionAdminNode(parser, token, func=search_form, template_name='search_form.html', takes_context=False) + + +@register.simple_tag +def admin_list_filter(cl, spec): + tpl = get_template(spec.template) + return tpl.render({ + 'title': spec.title, + 'choices': list(spec.choices(cl)), + 'spec': spec, + }) + + +def admin_actions(context): + """ + Track the number of times the action field has been rendered on the page, + so we know which value to use. + """ + context['action_index'] = context.get('action_index', -1) + 1 + return context + + +@register.tag(name='admin_actions') +def admin_actions_tag(parser, token): + return InclusionAdminNode(parser, token, func=admin_actions, template_name='actions.html') + + +@register.tag(name='change_list_object_tools') +def change_list_object_tools_tag(parser, token): + """Display the row of change list object tools.""" + return InclusionAdminNode( + parser, token, + func=lambda context: context, + template_name='change_list_object_tools.html', + ) diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/templatetags/admin_modify.py b/venv/lib/python3.7/site-packages/django/contrib/admin/templatetags/admin_modify.py new file mode 100644 index 0000000..60bc560 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/templatetags/admin_modify.py @@ -0,0 +1,111 @@ +import json + +from django import template +from django.template.context import Context + +from .base import InclusionAdminNode + +register = template.Library() + + +def prepopulated_fields_js(context): + """ + Create a list of prepopulated_fields that should render Javascript for + the prepopulated fields for both the admin form and inlines. + """ + prepopulated_fields = [] + if 'adminform' in context: + prepopulated_fields.extend(context['adminform'].prepopulated_fields) + if 'inline_admin_formsets' in context: + for inline_admin_formset in context['inline_admin_formsets']: + for inline_admin_form in inline_admin_formset: + if inline_admin_form.original is None: + prepopulated_fields.extend(inline_admin_form.prepopulated_fields) + + prepopulated_fields_json = [] + for field in prepopulated_fields: + prepopulated_fields_json.append({ + "id": "#%s" % field["field"].auto_id, + "name": field["field"].name, + "dependency_ids": ["#%s" % dependency.auto_id for dependency in field["dependencies"]], + "dependency_list": [dependency.name for dependency in field["dependencies"]], + "maxLength": field["field"].field.max_length or 50, + "allowUnicode": getattr(field["field"].field, "allow_unicode", False) + }) + + context.update({ + 'prepopulated_fields': prepopulated_fields, + 'prepopulated_fields_json': json.dumps(prepopulated_fields_json), + }) + return context + + +@register.tag(name='prepopulated_fields_js') +def prepopulated_fields_js_tag(parser, token): + return InclusionAdminNode(parser, token, func=prepopulated_fields_js, template_name="prepopulated_fields_js.html") + + +def submit_row(context): + """ + Display the row of buttons for delete and save. + """ + add = context['add'] + change = context['change'] + is_popup = context['is_popup'] + save_as = context['save_as'] + show_save = context.get('show_save', True) + show_save_and_continue = context.get('show_save_and_continue', True) + has_add_permission = context['has_add_permission'] + has_change_permission = context['has_change_permission'] + has_view_permission = context['has_view_permission'] + has_editable_inline_admin_formsets = context['has_editable_inline_admin_formsets'] + can_save = (has_change_permission and change) or (has_add_permission and add) or has_editable_inline_admin_formsets + can_save_and_continue = not is_popup and can_save and has_view_permission and show_save_and_continue + can_change = has_change_permission or has_editable_inline_admin_formsets + ctx = Context(context) + ctx.update({ + 'can_change': can_change, + 'show_delete_link': ( + not is_popup and context['has_delete_permission'] and + change and context.get('show_delete', True) + ), + 'show_save_as_new': not is_popup and has_change_permission and change and save_as, + 'show_save_and_add_another': ( + has_add_permission and not is_popup and + (not save_as or add) and can_save + ), + 'show_save_and_continue': can_save_and_continue, + 'show_save': show_save and can_save, + 'show_close': not(show_save and can_save) + }) + return ctx + + +@register.tag(name='submit_row') +def submit_row_tag(parser, token): + return InclusionAdminNode(parser, token, func=submit_row, template_name='submit_line.html') + + +@register.tag(name='change_form_object_tools') +def change_form_object_tools_tag(parser, token): + """Display the row of change form object tools.""" + return InclusionAdminNode( + parser, token, + func=lambda context: context, + template_name='change_form_object_tools.html', + ) + + +@register.filter +def cell_count(inline_admin_form): + """Return the number of cells used in a tabular inline.""" + count = 1 # Hidden cell with hidden 'id' field + for fieldset in inline_admin_form: + # Loop through all the fields (one per cell) + for line in fieldset: + for field in line: + count += 1 + if inline_admin_form.formset.can_delete: + # Delete checkbox + count += 1 + return count diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/templatetags/admin_urls.py b/venv/lib/python3.7/site-packages/django/contrib/admin/templatetags/admin_urls.py new file mode 100644 index 0000000..f817c25 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/templatetags/admin_urls.py @@ -0,0 +1,56 @@ +from urllib.parse import parse_qsl, unquote, urlparse, urlunparse + +from django import template +from django.contrib.admin.utils import quote +from django.urls import Resolver404, get_script_prefix, resolve +from django.utils.http import urlencode + +register = template.Library() + + +@register.filter +def admin_urlname(value, arg): + return 'admin:%s_%s_%s' % (value.app_label, value.model_name, arg) + + +@register.filter +def admin_urlquote(value): + return quote(value) + + +@register.simple_tag(takes_context=True) +def add_preserved_filters(context, url, popup=False, to_field=None): + opts = context.get('opts') + preserved_filters = context.get('preserved_filters') + + parsed_url = list(urlparse(url)) + parsed_qs = dict(parse_qsl(parsed_url[4])) + merged_qs = {} + + if opts and preserved_filters: + preserved_filters = dict(parse_qsl(preserved_filters)) + + match_url = '/%s' % unquote(url).partition(get_script_prefix())[2] + try: + match = resolve(match_url) + except Resolver404: + pass + else: + current_url = '%s:%s' % (match.app_name, match.url_name) + changelist_url = 'admin:%s_%s_changelist' % (opts.app_label, opts.model_name) + if changelist_url == current_url and '_changelist_filters' in preserved_filters: + preserved_filters = dict(parse_qsl(preserved_filters['_changelist_filters'])) + + merged_qs.update(preserved_filters) + + if popup: + from django.contrib.admin.options import IS_POPUP_VAR + merged_qs[IS_POPUP_VAR] = 1 + if to_field: + from django.contrib.admin.options import TO_FIELD_VAR + merged_qs[TO_FIELD_VAR] = to_field + + merged_qs.update(parsed_qs) + + parsed_url[4] = urlencode(merged_qs) + return urlunparse(parsed_url) diff --git a/venv/lib/python3.7/site-packages/django/contrib/admin/templatetags/log.py b/venv/lib/python3.7/site-packages/django/contrib/admin/templatetags/log.py new file mode 100644 index 0000000..08c2345 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admin/templatetags/log.py @@ -0,0 +1,59 @@ +from django import template +from django.contrib.admin.models import LogEntry + +register = template.Library() + + +class AdminLogNode(template.Node): + def __init__(self, limit, varname, user): + self.limit, self.varname, self.user = limit, varname, user + + def __repr__(self): + return "" + + def render(self, context): + if self.user is None: + entries = LogEntry.objects.all() + else: + user_id = self.user + if not user_id.isdigit(): + user_id = context[self.user].pk + entries = LogEntry.objects.filter(user__pk=user_id) + context[self.varname] = entries.select_related('content_type', 'user')[:int(self.limit)] + return '' + + +@register.tag +def get_admin_log(parser, token): + """ + Populate a template variable with the admin log for the given criteria. + + Usage:: + + {% get_admin_log [limit] as [varname] for_user [context_var_containing_user_obj] %} + + Examples:: + + {% get_admin_log 10 as admin_log for_user 23 %} + {% get_admin_log 10 as admin_log for_user user %} + {% get_admin_log 10 as admin_log %} + + Note that ``context_var_containing_user_obj`` can be a hard-coded integer + (user ID) or the name of a template context variable containing the user + object whose ID you want. + """ + tokens = token.contents.split() + if len(tokens) < 4: + raise template.TemplateSyntaxError( + "'get_admin_log' statements require two arguments") + if not tokens[1].isdigit(): + raise template.TemplateSyntaxError( + "First argument to 'get_admin_log' must be an integer") + if tokens[2] != 'as': + raise template.TemplateSyntaxError( + "Second argument to 'get_admin_log' must be 'as'") + if len(tokens) > 4: + if tokens[4] != 'for_user': + raise template.TemplateSyntaxError( + "Fourth argument to 'get_admin_log' must be 'for_user'") + return AdminLogNode(limit=tokens[1], varname=tokens[3], user=(tokens[5] if len(tokens) > 5 else None)) diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/ar/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/ar/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..556d2535d7632d67f174cb814342d834a6224446 GIT binary patch literal 7286 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 q%(pa^AO_E6)kqHRKlZ6uFMPM1p-ng8v!0 zjC?^>kgv#9&4>b&ptBPyo1 zb_u`ewlju{P(Snv`5~vZ9dNmowUxK`cP;s9o+|s)6y-R z2HpFrb$e3J%{|P~Wg|*p8HkG0ZRZ;+g{G@V-q$>i7mG#Dhmvv*r@h=%@$ylBMRoZx z_Kw%0>E3kr{QYS!iN;2I&^QLJaKgmvIYkFyEeJdX>_=3v>b&P^e8 z$?4{y^#2Cs6gx#T)mWj}#MsJls_WKuqyCUCkE2yhZ;xoYHjGHO%3OYUtI1eYbwe^M U4@J97+jPqeDr_#oKAlJT13ERj>;M1& literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/bg/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/bg/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..49fbe0aeed5ffab1d375a3d0c4071981574a7a2f GIT binary patch literal 7837 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/bg/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/bg/LC_MESSAGES/django.po new file mode 100644 index 0000000..aa3b1b9 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/bg/LC_MESSAGES/django.po @@ -0,0 +1,286 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Boris Chervenkov , 2012 +# Jannis Leidel , 2011 +# Lyuboslav Petrov , 2014 +# Todor Lubenov , 2011,2015 +# Venelin Stoykov , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Bulgarian (http://www.transifex.com/django/django/language/" +"bg/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "Административна Документация" + +msgid "Home" +msgstr "Начало" + +msgid "Documentation" +msgstr "Документация" + +msgid "Bookmarklets" +msgstr "Bookmarklets" + +msgid "Documentation bookmarklets" +msgstr "Bookmarklet-и за документация" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"За да инсталирате bookmarklet-и, задърпайте линка в лентата с отметки " +"(bookmarks toolbar), или щракнете с десния бутон и добавете линка в " +"отметките. Сега можете да изберете bookmarklet-а от която и да е страница на " +"сайта." + +msgid "Documentation for this page" +msgstr "Документация за тази страница" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Препраща Ви от която и да е страница към документацията за изгледа, който я " +"е генерирал." + +msgid "Tags" +msgstr "Етикети" + +msgid "List of all the template tags and their functions." +msgstr "Списък на всички етикети на шаблона и техните функции." + +msgid "Filters" +msgstr "Филтри" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Филтрите са действия, които могат да се използват към променливи в даден " +"шаблон, за да променят изхода." + +msgid "Models" +msgstr "Модели" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Моделите са описания на всички обекти в системата и свързаните с тях полета. " +"Всеки модел си има списък на полетата, които могат да бъдат достъпни както " +"шаблонни променливи" + +msgid "Views" +msgstr "Прегледи" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Всяка страница на публичния сайт се генерира от един изглед. Изгледа " +"определя кой шаблон се използва за генериране на страницата, и които обекти " +"са на разположение за този шаблон." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Инструменти за вашия браузър за бърз достъп до администраторската " +"функционалност." + +msgid "Please install docutils" +msgstr "Моля инсталирайте docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"Системата за администраторска документация изисква библиотеката за python docutils." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Моля, попитайте вашите администратори да инсталирате docutils ." + +#, python-format +msgid "Model: %(name)s" +msgstr "Модел: %(name)s" + +msgid "Fields" +msgstr "Полета" + +msgid "Field" +msgstr "Поле" + +msgid "Type" +msgstr "Тип" + +msgid "Description" +msgstr "Описание" + +msgid "Methods with arguments" +msgstr "Методи и аргументи" + +msgid "Method" +msgstr "Метод" + +msgid "Arguments" +msgstr "Аргументи" + +msgid "Back to Model documentation" +msgstr " Върни се в документацията на модела" + +msgid "Model documentation" +msgstr "Модел документация" + +msgid "Model groups" +msgstr "Модел групи" + +msgid "Templates" +msgstr "Шаблони" + +#, python-format +msgid "Template: %(name)s" +msgstr "Template: %(name)s" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "Шаблон: \"%(name)s\"" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "Път за търсене на шаблон \"%(name)s\"" + +msgid "(does not exist)" +msgstr "(Не съществува)" + +msgid "Back to Documentation" +msgstr "Назад към Документацията" + +msgid "Template filters" +msgstr "Шаблонни филтри" + +msgid "Template filter documentation" +msgstr "Документация за Шаблонни филтри" + +msgid "Built-in filters" +msgstr "Вградени филтри" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"За да използвате тези филтри, сложи %(code)s във вашия шаблон, " +"преди да използвате филтъра." + +msgid "Template tags" +msgstr "Шаблон тагове" + +msgid "Template tag documentation" +msgstr "Документация за шаблонни тагове" + +msgid "Built-in tags" +msgstr "Вградени в тагове" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"За да използвате тези тагове, сложи %(code)s във вашия шаблон, " +"преди да използвате етикет." + +#, python-format +msgid "View: %(name)s" +msgstr "Изглед: %(name)s" + +msgid "Context:" +msgstr "Контекст:" + +msgid "Templates:" +msgstr "Шаблони:" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "Документация за Изгледи" + +msgid "Jump to namespace" +msgstr "Направо към именни пространства" + +msgid "Empty namespace" +msgstr "Empty именни пространства" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "Прегледи на празна именни пространства" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "етикет:" + +msgid "filter:" +msgstr "филтър:" + +msgid "view:" +msgstr "изглед:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "Приложението %(app_label)r не е намерено" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Моделът %(model_name)r не е намерен в приложение %(app_label)r" + +msgid "model:" +msgstr "модел:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "свързания '%(app_label)s.%(data_type)s' обект" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "свързаните '%(app_label)s.%(object_name)s' обекти" + +#, python-format +msgid "all %s" +msgstr "всички %s" + +#, python-format +msgid "number of %s" +msgstr "брой %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s не прилича на обект от тип urlpattern" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/bn/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/bn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9ac735feb417e77b44919130aec61a8dac3039f3 GIT binary patch literal 3794 zcmbuATWl0n7{`x-3hNyK@qR!mEp>Lc^#V+(m(mg;R4OjKm{?|a&u#~1XC^aeDShzT zXhW3nV7NSxG)-WNfKsbbAO=FBkG}F^G?SQ^nCKHP`eOWlXJ)rEwM{XebmrIZT)z99 z{dw8qqYPs`o=5Rmw=mWPetRok7-tqS_B8k@xB|Qm-Ua>+-Ut2#-VJ6JGj=Dq3M6?g z_%PTBJ_7cG_kt#P8#n^q0lov`kB#B=I`}d83>bnBfXlI&?6rb){yFe=un&9?+yT=0 zGWZy1g5=j2NcK;F+n!dptP#zsD2b9jVJI>o+!rTpd91V zVNb@Blv5hiyVNfTpFNI;dTBi#*5dQBBYbW$X-LqUnO5xeuDee;` z$$E^^ep>EzO7)tsr6EnnW<8Fxzh-#*Eg^l@Q#UQCnKrM0!b?m@qw2F>;g>wqRp-)L zQW7sFb*7gp4qO~EeeN1n!TM^h9O1T66TWMd1lwu~tBiMK{1vAr*!FtO_4$ZX=M~SX zal;-_M=20FBoKZg7#?XC{D3Kjv1~|Q6}IpUi5w}BtY%riQx+C)X{`|l$$Xoqa#(Td zc9|o7Bopg+4_Zc1SZ!W>CS@+3t9nk|^&>&YDWxx#eKueT!xzx$OT)61ztXgPR-l9y zM9sC}U7YW9G_zL|+fj}A_NqcP^y+*~!=E)xbqOCE`({-8IxCF0g6*LUrlX~)#90!3 zMlrScEb14Xsf_B(uGfmf<4%RvJV7Cr`QBtg{cKBX)R$5I{k?IU`V0~1jA}dY!LlKZ zK?yh8n#UNGTxSEGL%ptTD{Fhuzi4osm-iWV)yeD;fwt*2h~wSuGb%)riq zw#5_bW6*lxsLng{9UHWKht{!)cRa5@yQw|jkA;a^9?A~42s%@OvN46@$)B5a^Q#S3Y&NmiK*>qFqMLRQK)jh+~wmM$T*SYN~ z(eLi;;?cj|tu|lX%{$tBU@8obguyh|6sNHCc^I4m&V-ZWEDR>X z;AlAc9!*c;5M~dD!MOVWYbB0h?>Qwy6&<_~23N3xv**>pqe>;Frqo%8(`q|uKOY8H zl}t+E0$EV{64OfE)cl*_3{FQ@k2kkLGyEYhE{4G+(lI%%jKThuxo7#!c#LFG#AlUP zry}1V&u!$KT1WE8D0U%xh!6?BsC+)F#EXm)I1}*1EE#UA#87cx#u0uH8T!-+PGI|LA&EY+2iM?1mL%WbWCB(H2PoHAR3&g{|BaJdp zRJeIl_qhssLK&Z?_6e@yM3lo%NV&?6QcePyWXU7gyg(n$-i} z2-E2enqHxFP&3y2v4Ah?JBVutcc(EG?Se7txKu~ZQcQ_dc9AA{7=H@TkZb`;2+U%3 z;jsUU!pOI|?Wdgnf0k3K=CzsnJ#5@5_%>3BNmXm^P;V;1s>gAKy^qU4S1wV8kqK&! znGa#%bjN#Be#LXM9KlD0u9&7@-8rip2BTO&z|HSsG`gE{5N;l8d{0-{LO<4x;LuO_ xrkdC6)#yI{KwYyZRo~%ez@~BDI6>)v6RCocU;nb0`ju~-zG-_f(ag~(`v>2i6C(fs literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/dsb/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/dsb/LC_MESSAGES/django.po new file mode 100644 index 0000000..5ead6ad --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/dsb/LC_MESSAGES/django.po @@ -0,0 +1,285 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Michael Wolf , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-23 00:02+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Lower Sorbian (http://www.transifex.com/django/django/" +"language/dsb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: dsb\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "Administrative Documentation" +msgstr "Administratiwna dokumentacija" + +msgid "Home" +msgstr "Startowy bok" + +msgid "Documentation" +msgstr "Dokumentacija" + +msgid "Bookmarklets" +msgstr "Skriptowe cytańske znamjenja" + +msgid "Documentation bookmarklets" +msgstr "Skriptowe cytańske znamjenja dokumentacije" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Aby skriptowe cytańske znamjenja instalěrował, śěgniśo wótkaz do swójeje " +"rědki cytańskich znamjenjow abo klikniśo z pšaweju tastu myški a pśidajśo " +"jen swójim cytańskim znamjenjam. Něnto móžośo skriptowe cytańske znamje z " +"drugego boka na sedle wubraś." + +msgid "Documentation for this page" +msgstr "Dokumentacija za toś ten bok" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Zmóžnja wam, z někakego boka do dokumentacije naglěda skócyś, kótaryž twóri " +"ten bok." + +msgid "Tags" +msgstr "Wobznamjenja" + +msgid "List of all the template tags and their functions." +msgstr "Lisćina wšych pśedłogowych wobznamjenjow a jich funkcijow." + +msgid "Filters" +msgstr "Filtry" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Filtry su akcije, kótarež daju se na wariable w pśedłoze nałožyś, aby wudaśe " +"změnili." + +msgid "Models" +msgstr "Modele" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Modele su wopisanja wšych objektow w systemje a jich pśisłušnych pólow. " +"Kuždy model ma lisćinu pólow, na kótarež maju pśistup ako pśedłogowe " +"wariable." + +msgid "Views" +msgstr "Naglědy" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Kuždy bok na zjawnem sedle twóri se pśez naglěd. Naglěd definěrujo, kótara " +"pśedłoga se wužywa, aby se bok napórał a kótare objekty su tej pśedłoze k " +"dispoziciji." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Rědy za waš wobglědowak za malsny pśistup na adminstratorowu funkcionalnosć." + +msgid "Please install docutils" +msgstr "Pšosym instalěrujśo docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"Administratorowy dokumentaciski system pomina se Pythonowu biblioteku docutils." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Pšosym pšosćo swóje administratory, docutils " +"instalěrowaś." + +#, python-format +msgid "Model: %(name)s" +msgstr "Model: %(name)s" + +msgid "Fields" +msgstr "Póla" + +msgid "Field" +msgstr "Pólo" + +msgid "Type" +msgstr "Typ" + +msgid "Description" +msgstr "Wopisanje" + +msgid "Methods with arguments" +msgstr "Metody z argumentami" + +msgid "Method" +msgstr "Metoda" + +msgid "Arguments" +msgstr "Argumenty" + +msgid "Back to Model documentation" +msgstr "Slědk k modelowej dokumentaciji" + +msgid "Model documentation" +msgstr "Modelowa dokumentacija" + +msgid "Model groups" +msgstr "Modelowe kupki" + +msgid "Templates" +msgstr "Pśedłogi" + +#, python-format +msgid "Template: %(name)s" +msgstr "Pśedłoga: %(name)s" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "Pśedłoga: „%(name)s“" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "Py´tańska sćažka za pśedłogu „%(name)s“:" + +msgid "(does not exist)" +msgstr "(njeeksistěrujo)" + +msgid "Back to Documentation" +msgstr "Slědk k dokumentaciji" + +msgid "Template filters" +msgstr "Pśedłogowe filtry" + +msgid "Template filter documentation" +msgstr "Dokumentacija za pśedłogowe filtry" + +msgid "Built-in filters" +msgstr "Zatwarjone filtry" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Aby toś te filtry wužywał, zasajźćo %(code)s do wójeje " +"pśedłogi, nježli až wužywaśo filter." + +msgid "Template tags" +msgstr "Pśedłogowe wobznamjenja" + +msgid "Template tag documentation" +msgstr "Dokumentacija za pśedłogowe wobznamjenja" + +msgid "Built-in tags" +msgstr "Zatworjone wobznamjenja" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Aby toś te wobznamjenja wužywał, zasajźćo %(code)s do wójeje " +"pśedłogi, nježli až wužywaśo wobznamjenje." + +#, python-format +msgid "View: %(name)s" +msgstr "Naglěd: %(name)s" + +msgid "Context:" +msgstr "Kontekst:" + +msgid "Templates:" +msgstr "Pśedłogi" + +msgid "Back to View documentation" +msgstr "Slědk k naglědowej dokumentaciji" + +msgid "View documentation" +msgstr "Naglědowa dokumentacija" + +msgid "Jump to namespace" +msgstr "K mjenjowemu rumoju skócyś" + +msgid "Empty namespace" +msgstr "Prozny mjenjowy rum" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Naglědy pó mjenjowem rumje %(name)s" + +msgid "Views by empty namespace" +msgstr "Naglědy pó proznem mjenjowem rumje" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +" Naglědowa funkcija: %(full_name)s. Mě: %(url_name)s.\n" + +msgid "tag:" +msgstr "wobznamjenje:" + +msgid "filter:" +msgstr "filter:" + +msgid "view:" +msgstr "naglěd:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "Nałoženje %(app_label)r njenamakane" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Model %(model_name)r njejo se w nałoženju %(app_label)r namakał" + +msgid "model:" +msgstr "model:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "pśisłušny objekt %(app_label)s.%(data_type)s“" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "pśisłušne objekty „%(app_label)s.%(object_name)s" + +#, python-format +msgid "all %s" +msgstr "wšykne %s" + +#, python-format +msgid "number of %s" +msgstr "ůicba %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "zda se, až %s njejo objekt urlpattern" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/el/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/el/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e98cc37a6ce030a3d88cb88f8e705f9afefb7133 GIT binary patch literal 8598 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/en_AU/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/en_AU/LC_MESSAGES/django.po new file mode 100644 index 0000000..4a97bca --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/en_AU/LC_MESSAGES/django.po @@ -0,0 +1,275 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2015-01-18 08:34+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: English (Australia) (http://www.transifex.com/projects/p/" +"django/language/en_AU/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: en_AU\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Bookmarklets" +msgstr "" + +msgid "Documentation bookmarklets" +msgstr "" + +msgid "" +"\n" +"

    To install bookmarklets, drag the link to your bookmarks\n" +"toolbar, or right-click the link and add it to your bookmarks. Now you can\n" +"select the bookmarklet from any page in the site. Note that some of these\n" +"bookmarklets require you to be viewing the site from a computer designated\n" +"as \"internal\" (talk to your system administrator if you aren't sure if\n" +"your computer is \"internal\").

    \n" +msgstr "" + +msgid "Documentation for this page" +msgstr "" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" + +msgid "Show object ID" +msgstr "" + +msgid "" +"Shows the content-type and unique ID for pages that represent a single " +"object." +msgstr "" + +msgid "Edit this object (current window)" +msgstr "" + +msgid "Jumps to the admin page for pages that represent a single object." +msgstr "" + +msgid "Edit this object (new window)" +msgstr "" + +msgid "As above, but opens the admin page in a new window." +msgstr "" + +msgid "Tags" +msgstr "" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Back to Model Documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "" + +msgid "Back to Views Documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "" + +msgid "tag:" +msgstr "" + +msgid "filter:" +msgstr "" + +msgid "view:" +msgstr "" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "" + +msgid "model:" +msgstr "" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "" + +#, python-format +msgid "all %s" +msgstr "" + +#, python-format +msgid "number of %s" +msgstr "" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/en_GB/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/en_GB/LC_MESSAGES/django.po new file mode 100644 index 0000000..e513e88 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/en_GB/LC_MESSAGES/django.po @@ -0,0 +1,260 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# jon_atkinson , 2011-2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: English (United Kingdom) (http://www.transifex.com/django/" +"django/language/en_GB/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: en_GB\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "Home" + +msgid "Documentation" +msgstr "Documentation" + +msgid "Bookmarklets" +msgstr "Bookmarklets" + +msgid "Documentation bookmarklets" +msgstr "Documentation bookmarklets" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +msgid "Documentation for this page" +msgstr "Documentation for this page" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Jumps you from any page to the documentation for the view that generates " +"that page." + +msgid "Tags" +msgstr "Tags" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "Filters" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "Models" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "Views" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Arguments" +msgstr "" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "Templates" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "tag:" + +msgid "filter:" +msgstr "filter:" + +msgid "view:" +msgstr "view:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Model %(model_name)r not found in app %(app_label)r" + +msgid "model:" +msgstr "model:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "the related `%(app_label)s.%(data_type)s` object" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "related `%(app_label)s.%(object_name)s` objects" + +#, python-format +msgid "all %s" +msgstr "all %s" + +#, python-format +msgid "number of %s" +msgstr "number of %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s does not appear to be a urlpattern object" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/es/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/es/LC_MESSAGES/django.po new file mode 100644 index 0000000..45cff1e --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/es/LC_MESSAGES/django.po @@ -0,0 +1,292 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Antoni Aloy , 2012-2013 +# Claude Paroz , 2014 +# Eduardo , 2017 +# Ernesto Avilés Vázquez , 2015 +# Herty Nava , 2013 +# Jannis Leidel , 2011 +# José Luis , 2016 +# Josue Naaman Nistal Guerra , 2014 +# Veronicabh , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Eduardo \n" +"Language-Team: Spanish (http://www.transifex.com/django/django/language/" +"es/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "Documentacion Administrativa" + +msgid "Home" +msgstr "Inicio" + +msgid "Documentation" +msgstr "Documentación" + +msgid "Bookmarklets" +msgstr "Bookmarklets" + +msgid "Documentation bookmarklets" +msgstr "Bookmarklets de documentación" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Para instalar bookmarklets, arrastre el enlace a su barra de favoritos, o " +"pulse con el botón derecho el enlace y añádalo a sus favoritos. Ahora puede " +"escoger el bookmarklet desde cualquier página del sitio. " + +msgid "Documentation for this page" +msgstr "Documentación para esta página" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Lleva desde cualquier página a la documentación de la vista que la genera." + +msgid "Tags" +msgstr "Etiquetas" + +msgid "List of all the template tags and their functions." +msgstr "Lista de todas la etiquetas de plantillas y sus funciones." + +msgid "Filters" +msgstr "Filtros" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Los filtros son accciones se pueden aplicar a variables en una plantilla " +"para alterar el resultado." + +msgid "Models" +msgstr "Modelos" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Los modelos son descripciones de todos los objetos en el sistema y sus " +"campos asociados. Cada modelo tienen una lista de campos a los que se puede " +"acceder como variables de plantilla" + +msgid "Views" +msgstr "Vistas" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Cada página en el sitio público se genera a través de una vista. La vista " +"define qué plantilla se usa para generar la página y qué objetos están " +"disponibles para esa plantilla." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Herramientas para tu navegador para acceder a funciones de administración " +"rápidamente." + +msgid "Please install docutils" +msgstr "Por favor instale docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"El sistema de documentación de la administración require la biblioteca docutils de Python." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Por favor pida al administrador que instale docutils." + +#, python-format +msgid "Model: %(name)s" +msgstr "Modelo: %(name)s" + +msgid "Fields" +msgstr "Campos" + +msgid "Field" +msgstr "Campo" + +msgid "Type" +msgstr "Tipo" + +msgid "Description" +msgstr "Descripción" + +msgid "Methods with arguments" +msgstr "Métodos con argumentos" + +msgid "Method" +msgstr "Método" + +msgid "Arguments" +msgstr "Argumentos" + +msgid "Back to Model documentation" +msgstr "Volver a la documentación del modelo" + +msgid "Model documentation" +msgstr "Documentación del modelo" + +msgid "Model groups" +msgstr "Grupo de modelos" + +msgid "Templates" +msgstr "Plantillas" + +#, python-format +msgid "Template: %(name)s" +msgstr "Plantilla: %(name)s" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "Plantilla: \"%(name)s\"" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "Buscar ruta para ejemplo \"%(name)s\":" + +msgid "(does not exist)" +msgstr "(no existe)" + +msgid "Back to Documentation" +msgstr "Volver a la documentación" + +msgid "Template filters" +msgstr "Filtros de plantilla" + +msgid "Template filter documentation" +msgstr "Documentación de los filtros de plantilla" + +msgid "Built-in filters" +msgstr "Filtros integrados" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Para utilizar estos filtros, incluya %(code)s en su plantilla " +"antes de usar el filtro." + +msgid "Template tags" +msgstr "Etiquetas de plantilla" + +msgid "Template tag documentation" +msgstr "Documentación de las etiquetas de plantilla" + +msgid "Built-in tags" +msgstr "Etiquetas integradas" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Para utilizar estas etiquetas, incluya %(code)s en su plantilla " +"antes de utilizar la etiqueta." + +#, python-format +msgid "View: %(name)s" +msgstr "Vista: %(name)s" + +msgid "Context:" +msgstr "Contexto:" + +msgid "Templates:" +msgstr "Plantillas:" + +msgid "Back to View documentation" +msgstr "Volver a la documentación de la vista" + +msgid "View documentation" +msgstr "Ver la documentación" + +msgid "Jump to namespace" +msgstr "Ir al espacio de nombres" + +msgid "Empty namespace" +msgstr "Espacio de nombres vacío" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Visualizaciones por espacio de nombres %(name)s" + +msgid "Views by empty namespace" +msgstr "Visualizaciones por espacio de nombres vacío" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +"Visualizar funcion: %(full_name)s. Nombre: %(url_name)s.\n" + +msgid "tag:" +msgstr "etiqueta:" + +msgid "filter:" +msgstr "filtro:" + +msgid "view:" +msgstr "vista:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "App %(app_label)r no encontrado" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "" +"El modelo %(model_name)r no se ha encontrado en la aplicación %(app_label)r" + +msgid "model:" +msgstr "modelo:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "el objeto relacionado `%(app_label)s.%(data_type)s`" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "los objetos relacionados `%(app_label)s.%(object_name)s`" + +#, python-format +msgid "all %s" +msgstr "todo %s" + +#, python-format +msgid "number of %s" +msgstr "número de %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s no parece ser un objeto urlpattern" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/es_AR/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/es_AR/LC_MESSAGES/django.po new file mode 100644 index 0000000..1693bcd --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/es_AR/LC_MESSAGES/django.po @@ -0,0 +1,286 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Federico Bond , 2013 +# Jannis Leidel , 2011 +# Ramiro Morales, 2012-2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Spanish (Argentina) (http://www.transifex.com/django/django/" +"language/es_AR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_AR\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "Documentación administrativa" + +msgid "Home" +msgstr "Inicio" + +msgid "Documentation" +msgstr "Documentación" + +msgid "Bookmarklets" +msgstr "Bookmarklets" + +msgid "Documentation bookmarklets" +msgstr "Bookmarklets de documentación" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Para instalar bookmarklets, arrastre el enlace a su barra\n" +"de favoritos, o pulse con el botón derecho el enlace y añádalo a sus " +"favoritos.\n" +"Ahora puede seleccionar el bookmarklet desde cualquier página en el sitio." + +msgid "Documentation for this page" +msgstr "Documentación de esta página" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Le lleva desde cualquier página a la documentación de la vista que la genera." + +msgid "Tags" +msgstr "Etiquetas" + +msgid "List of all the template tags and their functions." +msgstr "Lista de todas las etiquetas de plantilla y sus funciones." + +msgid "Filters" +msgstr "Filtros" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Los filtros son acciones que pueden ser aplicadas a variables en una " +"plantilla para alterar el resultado final." + +msgid "Models" +msgstr "Modelos" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Los modelos son descripciones de todos los objetos en el sistema y sus " +"campos asociados. Cada modelo contiene una lista de campos accesibles como " +"variables de plantilla" + +msgid "Views" +msgstr "Vistas" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Cada página en el sitio público es generada por una vista. La vista define " +"qué plantilla es utilizada para generar la página y qué objetos están " +"disponibles para esta plantilla." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Herramientas para su navegador para acceder rápidamente a la funcionalidad " +"de administración." + +msgid "Please install docutils" +msgstr "Por favor instale docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"El sistema de documentación de admin requiere la biblioteca Python docutils." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Por favor solicite a sus administradores de sistemas que instalen docutils." + +#, python-format +msgid "Model: %(name)s" +msgstr "Modelo: %(name)s" + +msgid "Fields" +msgstr "Campos" + +msgid "Field" +msgstr "Campo" + +msgid "Type" +msgstr "Tipo" + +msgid "Description" +msgstr "Descripción" + +msgid "Methods with arguments" +msgstr "Métodos con argumentos" + +msgid "Method" +msgstr "Método" + +msgid "Arguments" +msgstr "Argumentos" + +msgid "Back to Model documentation" +msgstr "Volver a documentación de modelos" + +msgid "Model documentation" +msgstr "Documentación de modelos" + +msgid "Model groups" +msgstr "Grupos de modelos" + +msgid "Templates" +msgstr "Plantillas" + +#, python-format +msgid "Template: %(name)s" +msgstr "Plantilla: %(name)s" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "Plantilla: \"%(name)s\"" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "Buscar ruta para la plantilla \"%(name)s\":" + +msgid "(does not exist)" +msgstr "(no existe)" + +msgid "Back to Documentation" +msgstr "Volver a la documentación" + +msgid "Template filters" +msgstr "Filtros de plantilla" + +msgid "Template filter documentation" +msgstr "Documentación de filtros de plantilla" + +msgid "Built-in filters" +msgstr "Filtros Django 'de fábrica'" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Para usar estos filtros, escriba %(code)s en su plantilla antes " +"de usar el filtro." + +msgid "Template tags" +msgstr "Etiquetas de plantilla" + +msgid "Template tag documentation" +msgstr "Documentación de etiquetas de plantilla" + +msgid "Built-in tags" +msgstr "Etiquetas Django 'de fábrica'" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Para usar estas etiquetas, escriba %(code)s en su plantilla " +"antes de usar la etiqueta." + +#, python-format +msgid "View: %(name)s" +msgstr "Vista: %(name)s" + +msgid "Context:" +msgstr "Contexto:" + +msgid "Templates:" +msgstr "Plantillas:" + +msgid "Back to View documentation" +msgstr "Volver a documentación de vistas" + +msgid "View documentation" +msgstr "Documentación de vistas" + +msgid "Jump to namespace" +msgstr "Ir a espacio de nombres" + +msgid "Empty namespace" +msgstr "Espacio de nombres vacío" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Vistas por espacio de nombres %(name)s" + +msgid "Views by empty namespace" +msgstr "Vistas por espacio de nombres vacío" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +"Función vista: %(full_name)s. Nombre: %(url_name)s.\n" + +msgid "tag:" +msgstr "etiqueta:" + +msgid "filter:" +msgstr "filtro:" + +msgid "view:" +msgstr "vista:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "Aplicación %(app_label)r no encontrada" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Modelo %(model_name)r no encontrado en aplicación %(app_label)r" + +msgid "model:" +msgstr "modelo:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "el objeto `%(app_label)s.%(data_type)s` relacionado" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "objetos `%(app_label)s.%(object_name)s` relacionados" + +#, python-format +msgid "all %s" +msgstr "todos los %s" + +#, python-format +msgid "number of %s" +msgstr "número de %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s no parece ser un objeto urlpattern" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/es_CO/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/es_CO/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b4ce79b05a26a2e47dedcd150466fa41da75cfe2 GIT binary patch literal 6476 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/es_MX/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/es_MX/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..164f0618fa3857984f72769a5153c3ceb3b15e95 GIT binary patch literal 1853 zcmaizJ!~9B6vqc}_&CB>_$UZOFNLK$nZ1t?h`q)rN^A>9KE+B7i_V$bojXsmJF}UY z^@kLwp+-oEjshXkfJ70A)}o`Kp-e{)Emi*Sc5R;(S&Vk}x3lx+y*F>>|LEMzHv;V~ z^mowzKz|qg!Bcpl{R6%S{tKQ3FFY;8OW+*%Hn;$u2M6GDU;)m6d*E&GbMSrePw-jr z%rn*eS?~pnUjxs8=Ruyo2(q7MJ??@W_X^knmqGR)z%IBC^7@~^ACTiO;4H?Q_{r-Y zfG>kzffvAUYd!=y&R-zMeFWYF{|2vuAK)j??|_`=7hnVY62v3E#*6)b2eRFdHGc-V zJ`cgm;O`)>{}1Fk%)prQp9i_bFQRi}-*2F^uh-GJu^&DcEER8}bK|{mTyC#csOpGs zq%O|Y|4?p$Qi$i#IUcuH_%-V(waSyRfn-rA=_ptlDw0&XtdJonXUGoksw9YO*51pd zyO*ip#j;JxT$vz)w&vuBhNl|R$RfhF_EgBR6015x053kVxe_CQnGD%~Tl8(JGMa7X%q=5x)pC=~j%;aC(uQ}9 zdAzqWIaFE8RcpK$$T40jFEVy2HWA1RnZcVEqeY{oPLJ{s7V8XGqU(RHULrxqlEdsm`vFX}B&@5A`=!d$o4?ZPm+ zrFJy?JYlzRXxE+VqBYi~57EF$C?e#G=FTz;YP|uD<-k2HshG) zhdLak9MdFLV|>FgqOL?A{Ay0jQ97lCYWhfvlOY=@A0!nA-;cGC6O}pZ#hTHHwqjjTmZ=>HI}g*O zl-d1KBdyvV+Rrd~D7Pb@_=)=fzxPXckhS1yjoBwfMhYb~IKR~56GF>$A}epx(x?T8 z{8oa7>ma?@z{v)kW%%6WkWh(Dt)~nf5@Y!}TgwkL2fyXYS>8BiS!V%;|0h7!8|q<@ apBJi*9SdCA%EOZmP6%;ox!6%I7LNh`9Qca> literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/es_MX/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/es_MX/LC_MESSAGES/django.po new file mode 100644 index 0000000..3242cb0 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/es_MX/LC_MESSAGES/django.po @@ -0,0 +1,260 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Abraham Estrada, 2011-2012 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Spanish (Mexico) (http://www.transifex.com/django/django/" +"language/es_MX/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_MX\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "Inicio" + +msgid "Documentation" +msgstr "Documentación" + +msgid "Bookmarklets" +msgstr "Bookmarklets" + +msgid "Documentation bookmarklets" +msgstr "Bookmarklets de documentación" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +msgid "Documentation for this page" +msgstr "Documentación de esta página" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Le lleva desde cualquier página a la documentación de la vista que la genera." + +msgid "Tags" +msgstr "Etiquetas" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "Filtros" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "Modelos" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "Vistas" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Arguments" +msgstr "" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "Plantillas" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "etiqueta:" + +msgid "filter:" +msgstr "filtro:" + +msgid "view:" +msgstr "ver:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Modelo %(model_name)r no encontrado en aplicación %(app_label)r" + +msgid "model:" +msgstr "modelo:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "el objeto `%(app_label)s.%(data_type)s` relacionado" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "objetos `%(app_label)s.%(object_name)s` relacionados" + +#, python-format +msgid "all %s" +msgstr "todos los %s" + +#, python-format +msgid "number of %s" +msgstr "número de %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s no parece ser un objeto urlpattern" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/et/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/et/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8efd5fb0ba4742ae5e8657b0df5e77a24f24d0e4 GIT binary patch literal 6402 zcmbuDON<;x8OJLR0&I9Cfe?}qDo&Q{63^_e$-^E$632ERj-4#_;y|Kc*G|{Y)J{+L zq^o<^iv(Oapd3OXfq>j13=ua#iVw&Fq*WvYNFfMC;*tYGAaMW*i35rd{J!e$dD)f^ zwA}ljs`~1y?_FQ}?HjNCw&FR&dpqxaS1a{J@YuEd;ra2ql=>X_6L2SZ&2>tB2wVh( z{vdc8_$BbY;FrOVfM2iXUj}bwd>(us_$Da(-v-|g{sVju_#g0k@Va-G^EZOBPlLjL zFZg}%De!~fJ0K#d>)Fg!bpyzhx&{0Ks6kO-3%mjRDtHon5!?m-8I*k=Md+KsJHSta z_k%Zq4itI60?K*MgF^o@_zL(6coaM|0}t>8@NV#jpq%>~@Z;d`K+*T_py=~oQ1reP zWj_qgfj5HtL0GC~5EAt?D1NZuYv3=cae+{x#~a{&@Gh9ic?J|dYv2dKEl}+94e%E5 z1yJnxDkyqvgJQ2=SL5GOe%a4M0E92Q0(+`@DA`TQ0((BkbmkXoFs8`Hz@M9K(WWk3ZDhV4;@hWZ-N^9 z9{3XYGZ2x~F^nK`J_Cw=ra}jvX8ar|dc6tCxo?5bf`0`c0gvE(vClU^k@uTm3w#xn zIQbJOcKSCc@?3`#<(!+rSHL^KgWxa0kAYXC)DG}=Q0N{4Meomm!pDN5PX>xS->UEj zpy+cR6nS0;W&dx%r@%jeuY)@g>KX8#;M3p}2rY5*BT)8TgE2+!8BpZC6O{QSP~_MR zegZrNk`ihIl=%A^D0I(P_!79l_`B8kSKz&j->Am#fLAfb4T0}oQ1d>>D{{*-%X<&6 z@E4m%%@LbR9l>0|-++36S7fc9ef$vFmUu-Mc_f$QS>(N%S8OM7CBB#E;qbTo^APZ< zYK+@Lo+ED1=NfP~ulTHf#2$o0h)0>*$ty7+{uG;xKjOQ)c;|Q}{`c_i;+2^HBrk3V zd3pep=YHNs_(iP+B`3v>@-%rRCL})PnJ*#am;97?P&1n6l(U<9tw`FrOOuw~*G?mQ zV0Lb;h~v|V>Dzg~Zz0Sz^%D$76h$^oFr#L@j#BG&lIGeB2G(RcPxY$RMngU@d2X{r zr>pC>ovXPasXgm_KCcc&eV6bnGr8Na`f%DV`ZmcKrHMK?80gtKn4XT!s*UHfaL8I( zB#}CpbpoYVkC=8(j-1?E&mKp&7zxMu)@#8IQ%h;u>zk|>+Z@h?i}Qv{^crZhv5DMt zygHO7xjmb=)M4w}nHvO|C#9Ge>D6)OlS^wUX6rhy2c~1y5!3F5Uph^gwt7&k#;&cs z%dLi}V-t(TY@}DWu=57~Z0Z&0}Iob%fAZ%LXgCcLL&!&B=ju!oaERTec8Lzj}La$|MAFZ}Z zGY0YPWEkku=9STccC}r6sjT>-sg4nzI$cAEIEXMbs02YU93FDnFrj=?9k+QmjVeH6 zmv=Ei9k69c&d&8EG|Pk=i|nBNbl|H?g>gC8$}8J)h=$gt(U-qa%j7uv(<8J zjVIK6PyCi?GpYz_#*P$&_*{&?&**Mu*Y@w2or_)4oA)~oNb=?`re2u?&6-tBUoWbY z6s3?*xFI;bP6;@b=GxIxE0WSH^-7uXlL0fmIz~WPUW?I;=3ySY`;&5)!LA>PK^3}I)@pW-`}zjbU< z|AN#MGTFi3sxWLk1ZU8XBztu zcBKuobkj>QOEqq5_hJfoNRZ0K^|fqbmy3tC23B3-o|37txRId`bY89mqIjYb6K4zWt68n&b;lptlHeIro9$-(>DYz~gE7tT|`iRfd z#1Y+d-8>((78W))H=8s$iFa%EY_pyA7fPjSh^zezHeZ;ZIsVx3BO~>fnu{}`*GLcx zo3$vTXY&Pab(ieb?XJnZ&G&zP<oHCeJF1cQg1+UmQy1u(&-)NoA>E#NY z#&(0|Vya*4(Ju~IlI6bfW6h$q8T`rq!)dST7lTadgy~rra$%2$YNj~}cjZN-mQ6;> zV)M*JQu2*=(@b1Ff4somj-oqp#&Eeb$VID1x6ftkwwpR}aKtGm9k-wDI-1%d3iV3P zo}BHoiRMGdAD6DO=V>b+cQA_4Mop_ZHFkRaqC;(r;bPmhz3mI}y0ktMTBw5?RG40& zy>XG#uEQN}yYx9p*&K?6Mcj?x^#L_3Z)!A-;1t?R)>i}n5xsb%=XKBc0$u4Hb)Vwm zbRuO|N<}Ysk?y;wT&M^cd1F>7b=w!ZLfp4mQS{ZR?Q^jUf7gxlm2q%cg`qFD9lIeN z?aq>?a4Aou)6t?feeHl;<+!5Ai*@1`o5=6JLCy{5h$>=wgOk>YLq}ivcp4SzIPLRL z5Eol@vM3Um=VZM0g;18Of3qp}f~U=P)aD zR^^SHGLbpe){DZYS4XO9QlZ%+%nO43d3=C$>|m6s5SZ|A6D6^cqYo%$%d-kbXT$wX+wB7)l^|b^4iW- z;fPZ{fOGkrrE46oXng#+RU_#|f(Sc_Z`*J5s9<>AQBmTu$`CM=69^`^Q-GWLq_r|j z;tCs%AEzPvwV^(3h|*G$>MYNz3MpAj4OB<+Vf2uU1b1*7KWG&VWh1zm4|R^bOgm~5 z$a)2t5DH~|C0vSk?PfV=jC=hbHj{1cMSSbsQrA|t&u^cXl#)9J@sdLG4M6oI-ZAI) zx$SeFOIFIalaGm<3)6M5$?$6|mU zs{g9W$jFF4A|qqwwOg+Hy5c&_{a)?|u2Je~@Z@#;aDDHMN<9g_1nvf}yeCBa@k`ZU*_JZUa9GYEWDlf;WSo2G4?D1NVS`0%hL2G5S{UPVj#4 zLGT@*1I6A?fwJD0K#_j|d=Y#RJPsb7K?nFecn|n(P}cng_&)I0p!oY&Q2hBfD1P6L zv+o4wz+1orAS%@gh=}?aC~>gh55ON+?*&GQA1{Lkz`Ic<>lsk=tb=a@hoJED1@JcT zc~E%#4k&(XgTmL(tM}i4;_n~81@JGR=)DzXi{Krg=sO91_62gSZ?P$J`Zf--MEDE59B6nmclMb9}< z@+<+r0e&77|L^8U^5At)=3kEyB6ll@3+jFl z73yg9{xm3g(F28#0z3nL2E2|q{1!aN`|n9&$(IF;J_3Fb6uW)}BBEXe#s1ep(f2R# z1KLG67roQ&`z;;zj+_G2Y5)S2B4 z4*?&n-i6!yxiLHB`L*C9+!C|;dOr`smGCClZf@~ico0q|ue*4;n|qF%EfaER4=6b& z{6cfsrw2i~gtJC?qSk_v8~0W3O;B=6_MKewC4~JYk8C-}(_H7AJ+Ie`xShKsZt4B) zq+<`x&aD?w^lWVUcHZw_2;Z9e30}t%MYdC5M$LNNNvzj#l53Nu)?_+Q^qSR1Bc7T( zw^^){wN2a3)!azbUT{92SIeEgi+RdS?gmyLN!mr<#yM|Etd`SM&(5Lr*~qNfXg&*z ztS3d>QOnszko4-1Y4>Ew>ACgSQ}`BP;iTSrEby>nC`o#Kll3B-qq%TV-f*#A2W>X- zAvYUd9ZurhUdUVOi1qEvrNQQDE2iG`+NAR7q4fmXy3Xs=Y*=;Fw7cO+Co!L`PK&k3 zwY7J-)d+3a*ut3Y=(Qm{4~S<|uOcT;x?|T}OhnFi9cpshPa|YyUg4PnRrUN*H!Err zcPjZZQeK;kuLI+tKC&_?@0xt1t*MUo(|o8UU3_ZVRvmLT>Xg48C<&{uR2I^$Hmhyo zkR)juxzebC$(*d^HH@3lO0u*OZNb>2$kQTks>hPPRmY2dD#K$Vv}&d&8EHOmb*k=eofor$k5m&WC{jVvirUkbF?F69O;->c7MFgxQc^^^Y8 z0f%)-H9z!tIN_J^K54sD zr6`3BMHoWR>n(w%lCE7XwJKYBwH_&V{B*+X9Gws+6|N*3N=2==rN>K-)J;UKmK&?~ zSVmL=E7MEVk;?2R3YW2MR)%C$N{)~4OMli`qLgAgq-2%)KE zBq~X?X0qLyvX!}wZr*59pOCDlNIfx~j&_ucowGSrlJjAcN``nFaWaINwSJ24j{RHb zCiO2^O(ByR{8puTHzhJ3on&%&jSex{P{I6B@~v62z)}reTzXk5*`Zki_y4IygXl~m zAJVSmFiXyRDQ1Z#Z0%k|0S_Cb3UPfbo5Vuq@BY`ZQs?A|o z21b=~TqtB`&3aW*&{APnw^Us8*RYbZ$5>|N0O{!GCJ$rZoSiF6N7XYtR~_YO9N*@BJxvY7CAE?z(kV0^?=;SFNvuWauWaf-blPqtX@*A$xI8i%SnT7MB`Jd-c*otq1nrx45*ph+yN49XQcBCAYVh zTfA?PYv!c!d1Ey*vB&KsYw2Z^#ZI3{d=DZRjyDQUhQ_Kj{gyuFVj7sPp6lj$+FDpR zfBt-vb|&_2-Ck(6lm0?!ehpDIePP`#%+H*9{M6C0qf5=jnb1|l7yvsh3g(4;f%DtN z`*gc&GH>$(A6Y%tcw{UmYpvU?aWp3F$>^4TWXOw>4*WPRV#aT;Fz zfj#?l`FLP1)^{DyOY{3?)XWpxTfJd_dy7=;(bJ6Ezsoj=uJ6VYS7;Ee)A9D!FyG$N zNn{7?`f+R6NFtZ0IYbzeyU&4R=G9{)Ce$LEbT_Td)!AfVqp094*wGX+HQK&7>TGJ*c(XLDR9DNWMkiEy`Cc&>a6qITiaW4W_mV` zZB7;PMUuPz<;U_uvLzRPPDuOM^SNtrK(X7cI*p?)Hzjs#tb02aTixCwF4RmnC`w*L z{CI+^G2-&s=d_ISAgyEVM69DC=^F}f<&{Rw_EzR-&LeAe-$`f!A-Dj+8a8H#nkDDu1@Sh|Q3pYvnr zT63!Ypdf56%czGVs|ZP~pl2wSNuGwJ8?7pPUkvIc%?WZ?z>G*1XQfxf5aUP=9%@Fb zpoeeJ6+0)eF}Fk(%c|t>dHY}Tzg$nYN2uaeYpG6MlIZ29 zY}h3Y^73WkFbVS2XFM(jhQQ^TC}x{1Z=;Zd;$+Ve?@<<%o^{EW$PuF9z`-NCg2=*+ z4pEm+DIMl;ScVI-Ln;!kGKVI4t0L%P_*oeaJIozM(e_p<>AESZ=p6ZDv2O_SRlCE} zl$Y+1)Q}98iLnU{mGqBlC5hNkf))YFfml-a3xyr z^~(y^gA{^Fe5yAbeXBdvT52qB`O9-$B&Qb9gp7?_b%X@uD&#amp^?(jRLdnZlch&$ zOJ+>hm_9+0Za*gUQ`Je*dANPCXQCoC5u+@c8_K>(y^(D)Ig=11u4hf07Swyns3`5S zBhivl%1ErTmJq0cG(w(3L1ZS3vaU?DP<{L8h@1K>^U2bP*|8oZ^qyh%)I5=-enn&u z26j0+%W5~Oo006s6Qe>PJ1(4Fp+uIY-BFFa)cq(5XIlLals73IChnv>~&@!I~iM>iQ~VN~s>Esgo*r>Crd( zI#DQU!F)7G#SZ13qi0lErPTF{9(!~`Y;H}Ez)|*b|aNz8dEX5#lM>xy`)Q7 y6tz*o*&a?ZP7@;9mAYRQA2}Va(y*4A*ikgBsJ=wOrSm8IR+-(gDz4aSss8|WRGP>D literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/fi/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/fi/LC_MESSAGES/django.po new file mode 100644 index 0000000..d04b102 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/fi/LC_MESSAGES/django.po @@ -0,0 +1,278 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Aarni Koskela, 2015,2017 +# Elias Luttinen , 2015 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Aarni Koskela\n" +"Language-Team: Finnish (http://www.transifex.com/django/django/language/" +"fi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "Hallinnan ohjeet" + +msgid "Home" +msgstr "Etusivu" + +msgid "Documentation" +msgstr "Ohjeita" + +msgid "Bookmarklets" +msgstr "Kirjanmerkkiset" + +msgid "Documentation bookmarklets" +msgstr "Ohjeiden kirjanmerkkiset" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Asenna kirjanmerkkinen raahaamalla linkki kirjanmerkkien työkalupalkkiin tai " +"napsauttamalla linkkiä oikeanpuoleisella hiiren painikkeella ja valitsemalla " +"kirjanmerkkeihin lisäämisen. Sen jälkeen voit valita kirjanmerkkisen miltä " +"tahansa sivuston sivulta." + +msgid "Documentation for this page" +msgstr "Tämän sivun ohjeita" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "Näyttää ohjeet, jotka koskevat ko. sivun luonutta näkymää." + +msgid "Tags" +msgstr "Tagit" + +msgid "List of all the template tags and their functions." +msgstr "Lista kaikista mallinetunnisteista ja niiden toiminnasta." + +msgid "Filters" +msgstr "Suodattimet" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Suotimet ovat toimintoja, jotka käsittelevät mallineessa käytettävän " +"muuttujan ulostuloa." + +msgid "Models" +msgstr "Mallit" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Mallit kuvaavat järjestelmän kaikkia objekteja ja niihin liittyviä kenttiä. " +"Kenttiä pystyy käyttämään mallineista mallinemuuttujina." + +msgid "Views" +msgstr "Näkymät" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Jokainen sivuston sivu on näkymän luoma. Näkymä määrittelee mitä mallinetta " +"sivun luontiin käytetään ja mitä objekteja mallineella on käytössä." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "Selaintyökaluja, joilla pääset nopeasti hallinnointitoimintoihin." + +msgid "Please install docutils" +msgstr "Ole hyvä ja asenna docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"Hallinnan dokumentaatio vaatii Pythonin docutils-" +"kirjaston." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "Pyydä ylläpitäjiä asentamaan docutils." + +#, python-format +msgid "Model: %(name)s" +msgstr "Malli: %(name)s" + +msgid "Fields" +msgstr "Kentät" + +msgid "Field" +msgstr "Kenttä" + +msgid "Type" +msgstr "Tyyppi" + +msgid "Description" +msgstr "Selite" + +msgid "Methods with arguments" +msgstr "Metodit argumentteineen" + +msgid "Method" +msgstr "Metodi" + +msgid "Arguments" +msgstr "Argumentit" + +msgid "Back to Model documentation" +msgstr "Takaisin mallidokumentaatioon" + +msgid "Model documentation" +msgstr "Mallidokumentaatio" + +msgid "Model groups" +msgstr "Malliryhmät" + +msgid "Templates" +msgstr "Mallineet" + +#, python-format +msgid "Template: %(name)s" +msgstr "Malline: %(name)s" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "Malline: \"%(name)s\"" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "Polun \"%(name)s\" hakupolku:" + +msgid "(does not exist)" +msgstr "(ei ole olemassa)" + +msgid "Back to Documentation" +msgstr "Takaisin dokumentaatioon" + +msgid "Template filters" +msgstr "Mallinesuotimet" + +msgid "Template filter documentation" +msgstr "Mallinesuodindokumentaatio" + +msgid "Built-in filters" +msgstr "Sisäänrakennetut suotimet" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Käyttääksesi näitä suotimia, sisällytä %(code)s mallineesi " +"alkuun." + +msgid "Template tags" +msgstr "Mallinetunnisteet" + +msgid "Template tag documentation" +msgstr "Mallinetunnistedokumentaatio" + +msgid "Built-in tags" +msgstr "Sisäänrakennetut tunnisteet" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Käyttääksesi näitä tunnisteita, sisällytä %(code)s mallineesi " +"alkuun." + +#, python-format +msgid "View: %(name)s" +msgstr "Näkymä: %(name)s" + +msgid "Context:" +msgstr "Konteksti:" + +msgid "Templates:" +msgstr "Mallineet:" + +msgid "Back to View documentation" +msgstr "Takaisin näkymädokumentaatioon" + +msgid "View documentation" +msgstr "Näkymädokumentaatio" + +msgid "Jump to namespace" +msgstr "Siirry nimiavaruuteen" + +msgid "Empty namespace" +msgstr "Tyhjä nimiavaruus" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Näkymät nimiavaruuden %(name)s mukaan" + +msgid "Views by empty namespace" +msgstr "Näkymät tyhjän nimiavaruuden mukaan" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +"Näkymäfunktio: %(full_name)s. Nimi: %(url_name)s.\n" + +msgid "tag:" +msgstr "tagi:" + +msgid "filter:" +msgstr "suodatin:" + +msgid "view:" +msgstr "näkymä:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "Sovellusta %(app_label)r ei löydy" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Sovelluksesta %(app_label)r ei löydy mallia %(model_name)r" + +msgid "model:" +msgstr "malli:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "tähän liittyvä `%(app_label)s.%(data_type)s`-kohde" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "tähän liittyvät `%(app_label)s.%(object_name)s`-kohteet" + +#, python-format +msgid "all %s" +msgstr "kaikki %s" + +#, python-format +msgid "number of %s" +msgstr "%s-kohteiden lukumäärä" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s ei näytä olevan urlpattern-olio" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/fr/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/fr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a5d776c6a5c4758eab3e3bd401aac99d13ea0862 GIT binary patch literal 6786 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 PDI=c=7s%*&52*hE=&b#w literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/fr/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/fr/LC_MESSAGES/django.po new file mode 100644 index 0000000..7cae936 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/fr/LC_MESSAGES/django.po @@ -0,0 +1,285 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Claude Paroz , 2013-2016,2018 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2018-10-19 16:29+0000\n" +"Last-Translator: Claude Paroz \n" +"Language-Team: French (http://www.transifex.com/django/django/language/fr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Administrative Documentation" +msgstr "Documentation technique" + +msgid "Home" +msgstr "Accueil" + +msgid "Documentation" +msgstr "Documentation" + +msgid "Bookmarklets" +msgstr "Signets" + +msgid "Documentation bookmarklets" +msgstr "Documentation des signets" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Pour installer des signets, faites glisser le lien vers votre barre de " +"marques-pages, ou effectuez un clic droit sur le lien et ajoutez-le. " +"Maintenant, vous pouvez le sélectionner depuis n'importe quelle page du site." + +msgid "Documentation for this page" +msgstr "Documentation pour cette page" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Vous envoie de n'importe quelle page vers la documentation de la vue qui a " +"généré cette page." + +msgid "Tags" +msgstr "Balises" + +msgid "List of all the template tags and their functions." +msgstr "Liste de toutes les balises de gabarit et leur fonction." + +msgid "Filters" +msgstr "Filtres" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Les filtres sont des actions qui peuvent être appliquées à des variables " +"dans un gabarit pour modifier leur valeur affichée." + +msgid "Models" +msgstr "Modèles" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Les modèles sont des descriptions de tous les objets du système avec leurs " +"champs associés. Chaque modèle possède une liste de champs auxquels on peut " +"accéder comme pour les variables de gabarit" + +msgid "Views" +msgstr "Vues" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Chaque page du site public est générée par une vue. La vue détermine le " +"gabarit utilisé pour générer la page ainsi que les objets qui sont " +"disponibles dans le gabarit." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Outils permettant au navigateur d'accéder rapidement aux fonctionnalités de " +"l'interface d'administration." + +msgid "Please install docutils" +msgstr "Veuillez installer docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"Le système de documentation de l'interface d'administration nécessite la " +"bibliothèque Python docutils." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Demandez à votre administrateur système d'installer docutils." + +#, python-format +msgid "Model: %(name)s" +msgstr "Modèle : %(name)s" + +msgid "Fields" +msgstr "Champs" + +msgid "Field" +msgstr "Champ" + +msgid "Type" +msgstr "Type" + +msgid "Description" +msgstr "Description" + +msgid "Methods with arguments" +msgstr "Méthodes avec paramètres" + +msgid "Method" +msgstr "Méthode" + +msgid "Arguments" +msgstr "Paramètres" + +msgid "Back to Model documentation" +msgstr "Retour à la documentation des modèles" + +msgid "Model documentation" +msgstr "Documentation des modèles" + +msgid "Model groups" +msgstr "Groupes de modèles" + +msgid "Templates" +msgstr "Gabarits" + +#, python-format +msgid "Template: %(name)s" +msgstr "Gabarit : %(name)s" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "Gabarit : « %(name)s »" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "Chemin de recherche du gabarit « %(name)s » :" + +msgid "(does not exist)" +msgstr "(n'existe pas)" + +msgid "Back to Documentation" +msgstr "Retour à la documentation" + +msgid "Template filters" +msgstr "Filtres de gabarit" + +msgid "Template filter documentation" +msgstr "Documentation des filtres de gabarit" + +msgid "Built-in filters" +msgstr "Filtres intégrés" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Pour utiliser ces filtres, placez %(code)s dans votre gabarit " +"avant d'utiliser un des filtres." + +msgid "Template tags" +msgstr "Balises de gabarit" + +msgid "Template tag documentation" +msgstr "Documentation des balises de gabarit" + +msgid "Built-in tags" +msgstr "Balises intégrées" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Pour utiliser ces balises, placez %(code)s dans le gabarit " +"avant d'utiliser une des balises." + +#, python-format +msgid "View: %(name)s" +msgstr "Vue : %(name)s" + +msgid "Context:" +msgstr "Contexte :" + +msgid "Templates:" +msgstr "Gabarits :" + +msgid "Back to View documentation" +msgstr "Retour à la documentation des vues" + +msgid "View documentation" +msgstr "Documentation des vues" + +msgid "Jump to namespace" +msgstr "Aller à l'espace de noms" + +msgid "Empty namespace" +msgstr "Espace de noms vide" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Vues par espace de noms %(name)s" + +msgid "Views by empty namespace" +msgstr "Vues par espace de noms vide" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +"Fonction de vue : %(full_name)s. Nom : %(url_name)s.\n" + +msgid "tag:" +msgstr "mot-clé :" + +msgid "filter:" +msgstr "filtre :" + +msgid "view:" +msgstr "vue :" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "L'application %(app_label)r n'a pas été trouvée" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "" +"Le modèle %(model_name)r n'a pas été trouvé dans l'application %(app_label)r" + +msgid "model:" +msgstr "modèle :" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "l'objet « %(app_label)s.%(data_type)s » en relation" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "les objets « %(app_label)s.%(object_name)s » en relation" + +#, python-format +msgid "all %s" +msgstr "tous les %s" + +#, python-format +msgid "number of %s" +msgstr "nombre de %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s ne semble pas être un objet urlpattern" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/ga/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/ga/LC_MESSAGES/django.po new file mode 100644 index 0000000..d786e70 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/ga/LC_MESSAGES/django.po @@ -0,0 +1,262 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Luke Blaney , 2019 +# Michael Thornhill , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2019-06-22 21:37+0000\n" +"Last-Translator: Luke Blaney \n" +"Language-Team: Irish (http://www.transifex.com/django/django/language/ga/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ga\n" +"Plural-Forms: nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : " +"4);\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "Baile" + +msgid "Documentation" +msgstr "Doiciméadúchán" + +msgid "Bookmarklets" +msgstr "Leabharmharcín" + +msgid "Documentation bookmarklets" +msgstr "Leabharmharcín doiciméadúchán" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +msgid "Documentation for this page" +msgstr "Doiciméadúchán le hadhaigh an leathanach seo" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Tógann se tusa ón aon leathanach go dtí an doiciméadúchán le hadhaigh an " +"radharc a rinne an leathanach." + +msgid "Tags" +msgstr "Clibeanna" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "Scagairí" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "Samhla" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "Radharcanna" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Type" +msgstr "Cineál" + +msgid "Description" +msgstr "" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Arguments" +msgstr "" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "Teimpléid" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "clib:" + +msgid "filter:" +msgstr "scag:" + +msgid "view:" +msgstr "radharc:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Ní bhfuarthas samhail %(model_name)r i bhfeidhmclár %(app_label)r" + +msgid "model:" +msgstr "samhail:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "An oibiacht gaolmhara `%(app_label)s.%(data_type)s`" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "Oibiachtí gaolmhara `%(app_label)s.%(object_name)s`" + +#, python-format +msgid "all %s" +msgstr "gach %s" + +#, python-format +msgid "number of %s" +msgstr "líon %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "Feiceann sé nach bhfuil %s oibiacht urlpattern" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/gd/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/gd/LC_MESSAGES/django.po new file mode 100644 index 0000000..6f2a746 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/gd/LC_MESSAGES/django.po @@ -0,0 +1,288 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# GunChleoc, 2015-2016 +# GunChleoc, 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-22 17:29+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Gaelic, Scottish (http://www.transifex.com/django/django/" +"language/gd/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: gd\n" +"Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : " +"(n > 2 && n < 20) ? 2 : 3;\n" + +msgid "Administrative Documentation" +msgstr "Docamaideadh na rianachd" + +msgid "Home" +msgstr "Dhachaigh" + +msgid "Documentation" +msgstr "Docamaideadh" + +msgid "Bookmarklets" +msgstr "Bookmarklets" + +msgid "Documentation bookmarklets" +msgstr "Bookmarklets an docamaididh" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Gus bookmarklet a stàladh, slaodaich an ceangal gu bàr-inneal nan comharran-" +"lìn agad no dèan briogadh deas air a’ cheangal is cuir e ris na comharran-" +"lìn agad. ’S urrainn dhut am bookmarklet a thaghadh o duilleag sam bith san " +"làrach an uairsin." + +msgid "Documentation for this page" +msgstr "Docamaideadh airson na duilleige seo" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Gearraidh tu leum o duilleag sam bith dhan docamaideadh airson an t-" +"seallaidh a ghineas an duilleag sin." + +msgid "Tags" +msgstr "Tagaichean" + +msgid "List of all the template tags and their functions." +msgstr "" +"Liosta dhe thagaichean nan ùrlaran uile ’s dhe na foincseanan a th’ aca." + +msgid "Filters" +msgstr "Criathragan" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"’S e gnìomhan a tha sna criathragan as urrainn dhut cur an sàs air " +"caochladairean ann an teamplaid gus an t-às-chur atharrachadh." + +msgid "Models" +msgstr "Modailean" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"’S e tuairisgeulan air a h-uile oibseact san t-siostam ’s air na raointean " +"co-cheangailte riutha-san a tha sna modailean. Tha liosta dhe raointean aig " +"gach modail as urrainn dhut inntrigeadh mar chaochladairean teamplaide." + +msgid "Views" +msgstr "Seallaidhean" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Thèid gach duilleag air an làrach phoblach a ghintinn le sealladh. Mìnichidh " +"an sealladh dè an teamplaid a thèid a chleachdadh gus an duilleag a ghintinn " +"agus dè na h-oibseactan as urrainn dhan teamplaid ud a chleachdadh." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Innealan airson a’ bhrabhsair agad gus gnìomhan nan rianairean inntrigeadh " +"gu luath." + +msgid "Please install docutils" +msgstr "Stàlaich docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"Tha siostam docamaideadh na rianachd feumach air an leabharlann docutils aig Python." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Iarr air na rianairean agad gun stàlaich iad docutils." + +#, python-format +msgid "Model: %(name)s" +msgstr "Modail: %(name)s" + +msgid "Fields" +msgstr "Raointean" + +msgid "Field" +msgstr "Raoin" + +msgid "Type" +msgstr "Seòrsa" + +msgid "Description" +msgstr "Tuairisgeul" + +msgid "Methods with arguments" +msgstr "Modhan le argamaidean" + +msgid "Method" +msgstr "Modh" + +msgid "Arguments" +msgstr "Argamaidean" + +msgid "Back to Model documentation" +msgstr "Till gu docamaideadh modail" + +msgid "Model documentation" +msgstr "Docamaideadh modail" + +msgid "Model groups" +msgstr "Buidhnean modail" + +msgid "Templates" +msgstr "Teamplaidean" + +#, python-format +msgid "Template: %(name)s" +msgstr "Teamplaid: %(name)s" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "Teamplaid: “%(name)s”" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "Slighe-luirg airson teamplaid “%(name)s”:" + +msgid "(does not exist)" +msgstr "(chan eil e ann)" + +msgid "Back to Documentation" +msgstr "Till gun docamaideadh" + +msgid "Template filters" +msgstr "Criathragan teamplaid" + +msgid "Template filter documentation" +msgstr "Docamaideadh air criathragan teamplaid" + +msgid "Built-in filters" +msgstr "Criathragan ’na bhroinn" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Gus na criathragan seo a chleachdadh, cuir %(code)s san " +"teamplaid agad mus cleachd thu a’ chriathrag." + +msgid "Template tags" +msgstr "Tagaichean teamplaid" + +msgid "Template tag documentation" +msgstr "Docamaideadh air tagaichean teamplaid" + +msgid "Built-in tags" +msgstr "Tagaichean ’na bhroinn" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Gus na tagaichean seo a chleachdadh, cuir %(code)s san " +"teamplaid agad mus cleachd thu an taga." + +#, python-format +msgid "View: %(name)s" +msgstr "Sealladh: %(name)s" + +msgid "Context:" +msgstr "Co-theacsa:" + +msgid "Templates:" +msgstr "Teamplaidean:" + +msgid "Back to View documentation" +msgstr "Till gu docamaideadh nan seallaidhean" + +msgid "View documentation" +msgstr "Docamaideadh nan seallaidhean" + +msgid "Jump to namespace" +msgstr "Gearr leum dhan ainm-spàs" + +msgid "Empty namespace" +msgstr "Ainm-spàs falamh" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Seallaidhean a-rèir ainm-spàs %(name)s" + +msgid "Views by empty namespace" +msgstr "Seallaidhean a-rèir an ainm-spàis fhalaimh" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +" Foincsean seallaidh: %(full_name)s. Ainm: " +"%(url_name)s.\n" + +msgid "tag:" +msgstr "taga:" + +msgid "filter:" +msgstr "criathrag:" + +msgid "view:" +msgstr "sealladh:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "Cha deach aplacaid %(app_label)r a lorg" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Cha deach modail %(model_name)r a lorg ann an aplacaid %(app_label)r" + +msgid "model:" +msgstr "modail:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "an t-oibseact `%(app_label)s.%(data_type)s` dàimheach" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "na h-oibseactan `%(app_label)s.%(object_name)s` dàimheach" + +#, python-format +msgid "all %s" +msgstr "a h-uile %s" + +#, python-format +msgid "number of %s" +msgstr "àireamh dhe %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "Chan eil coltas oibseact urlpattern air %s" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/gl/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/gl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e126f35535116fb19a67f6db2e2d27a801f1f4ad GIT binary patch literal 2265 zcmai!OK)5?7=}%02@K&DS_&-`vk1&k&Ro(9$q7Lyx00x%M(s2b0x9*(cqXUuu@AOS zE^Lrk@C&HeA@vtXfj@yyfg^bN2zVAe3tj*z{wf}ifzyNW0{A4x%OK7F9!Pm> zAg$9Ij5SDlbFc<}0^-BI!J`g-2U7lT;OD5ppI{l|Pca$geF;7f{xBH-43dstLE85p zAnEuAya0}1aSpx;(!AF|($mBPA?!9d34Q?1g7-kG?=K)e?DxU=Z;;kGfg)3#NAZ9( zb_S$6odapU*Fn7l(-qq{=)<^^=RkJO$+ zr`m=#?s(To$F=cXWSJC}d&Aq33!Yn*3Gb!V+_dk?j%VflP`RBrUtzPNvqACmrjw^q zd*KtK*{m@esjwSLddKFB_Hx_DY+kyKO|lSiIR4Oxw}-P2zv>yNTTdL%L|?MSM5->H z3KAWA*QAmy=V|8nj>&n?nv@H@6GBO%UzgbFkW608Ci!L}xA0nc-j`Zh;Zcq-q*bb{ zX}VJJ@p4LB(;}4>8_Lx)x$g2rQ{C_$&ow35QdMk`6XVAa?uxNvD@qC{k>b2iD#-DP za;zo#c*rzUv^Z<+WRk5y)zAzybd0jb9qWZX$1F&Sna@ZCUk6XK@EoQs4%Q1x@X=- zj_&6;+o&Z)8uM#HC7ncQUS9V;i)*#5t*xr3DU+Vuu69gXD>k(UHOQ~^RjpELE;Sbp zw%@4MOX13E$U@CxPPe~?lTGwA@2m^!q@TInT8t(S;%Kd&w9$g@m~Nu`F`sNFeqU$I z`>M2}aw}A{Xl&|YuCp+7GZWLi_&QV8{FNErs7#j_Os$RPPNq^R0a~7uiMMfBX2{p9 zOku&xvcgu4+C=2;{R5wLlHG5Q_p{kEbP=-e)1w)@J7m1$qG3@hxP&KowtIg&(Sps1 zG&8~4);PALaXyCK5(*(l@awF!6(q*1>7#YMfu?81e;kUc|#L~G3;l$#&LXLU9z=B yVGFhJ_3rnnw1x_Zw-i>KpbK6_NwlEk|8Y8#14S`2dov7Aa5R6|@NhcmX8!_usZaU< literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/hr/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/hr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e789b5ab64857bc89d020809d5566564ebbed793 GIT binary patch literal 2550 zcma)+&yN&E6vs=&U*m67{DoQ|i?e~==>b$|b`X|jBZQR=j+l6Xnwgr}n(3};tEy*V zMGty2F~$QIqX+*2uNo6$4BR}Ln3yOr@gNByFo^7`=Rs(n5jtS#Wa3^>Ld>GtxN1^v3_zdJl@Nw`Act1D9qk$e@Tc>e||UsA>^3&9Y42_*Y2rpu^F3~qyb9Gj5cJK(e6 z`(PFP9DEAAH2QuSr2VdfRENJns_(xb*=@e3*gqQaAc#+F3B-@Rj!A%Tfd{~EK+5AE zFyCh+Z${Fau>Jx_^@u>q{{%?q@HUv|0g`sc-yO*xfRy(~AjSPH7=Yi8zFz}T zhI~AT`B6M{p3{TQnFjf#L3z_asFOi4($yj#PvW6mC?2W_#RoU}eR>Fd4i62wcT`&% zTMFd!Bbezrj?tzwj&<`AL@bXmVmeD&(sI+KZ&s3z4nH$}fNpN4THJ&pA9rSSF&y)v z7cr{UEe$)ui_`vGDrYBVj7k`>6>I2r1xGuJ?puUgSUykmWJ1My&-i*rhM%>mfxUWTI%no=YYKWq)+5t>(5 zy-%ZBZEbCB4u1^oR9BvzYn!B2BsE4nvahY$+H7U{=<<>4>DTAN%3-5D{!2jHzd~ZwnNt_X1wUw1Pvmy?bj7?m` zb()K=v3ox+UK@I*9yS_vzI{8V*KkXtUgxj!kV6~tfyS=!r}@SndadSa^YxIQKVO(Y zC!B>%9X7l6SD0Gw#j+zfe&{w@_2rGNWq{VAB~Oj>rmt>jD;kz&Q1q3y>I?LhSPcZd zmj6D*)~PjGT>MmO!B)%=e@ijoH*AryQlmMMDs-EYi;`68Fo7tm@^!(@Fyqt%wQ6T@ z8uw*Bi&2wNkS=~KJw;??=90d&3J1!a;4Kv!KEVASZy;|9mOOaT=cz^3>%2;Tnpv_@ zMdMLcjE%EfwH>PYq%b@~>lu|$l}lK3AO*xKF{2Iy2Yp0KU2xon%n(Ug*@?}i@5G?g zil&z*&1kgvWqV?V*Ks>?Lqu^?J8GdT&~j>qavi1pU#)21RndxWZFN&0!sRPU8?pZY D>)W36 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/hr/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/hr/LC_MESSAGES/django.po new file mode 100644 index 0000000..0b70aa7 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/hr/LC_MESSAGES/django.po @@ -0,0 +1,264 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# aljosa , 2012 +# Filip Cuk , 2016 +# Jannis Leidel , 2011 +# Mislav Cimperšak , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Croatian (http://www.transifex.com/django/django/language/" +"hr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hr\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +msgid "Administrative Documentation" +msgstr "Administrativna dokumentacija" + +msgid "Home" +msgstr "Početna" + +msgid "Documentation" +msgstr "Dokumentacija" + +msgid "Bookmarklets" +msgstr "Bookmarklets" + +msgid "Documentation bookmarklets" +msgstr "Dokumentacija bookmarklets-a" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +msgid "Documentation for this page" +msgstr "Dokumentacija za ovu stranicu" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Preusmjeri te sa bilo koje stranice na dokumentaciju za taj prikaz (view) " +"koji generira stranicu." + +msgid "Tags" +msgstr "Tagovi" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "Filteri" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "Modeli" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "Views" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "Molimo instalirajte docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Fields" +msgstr "Polja" + +msgid "Field" +msgstr "Polje" + +msgid "Type" +msgstr "" + +msgid "Description" +msgstr "Opis" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Arguments" +msgstr "" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "Predlošci" + +#, python-format +msgid "Template: %(name)s" +msgstr "Predložak: %(name)s" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "Predložak: \"%(name)s\"" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "(ne postoji)" + +msgid "Back to Documentation" +msgstr "Povratak na dokumentaciju" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "Predlošci:" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "tag:" + +msgid "filter:" +msgstr "filter:" + +msgid "view:" +msgstr "prikaz:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "Aplikacija %(app_label)r nije pronađena" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Model %(model_name)r nije pronađen u aplikaciji %(app_label)r" + +msgid "model:" +msgstr "model:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "povezani `%(app_label)s.%(data_type)s` objekt" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "povezani `%(app_label)s.%(object_name)s` objekti" + +#, python-format +msgid "all %s" +msgstr "svi %s" + +#, python-format +msgid "number of %s" +msgstr "broj %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "izgleda da %s nije urlpattern objekt" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/hsb/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/hsb/LC_MESSAGES/django.po new file mode 100644 index 0000000..a3a639e --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/hsb/LC_MESSAGES/django.po @@ -0,0 +1,286 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Michael Wolf , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-23 00:02+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Upper Sorbian (http://www.transifex.com/django/django/" +"language/hsb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hsb\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "Administrative Documentation" +msgstr "Administratiwna dokumentacija" + +msgid "Home" +msgstr "Startowa strona" + +msgid "Documentation" +msgstr "Dokumentacija" + +msgid "Bookmarklets" +msgstr "Skriptowe zapołožki" + +msgid "Documentation bookmarklets" +msgstr "Skriptowe zapołožki dokumentacije" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Zo byšće skriptowe zapołožki instalował, ćehńće wotkaz do swojeje lajsty " +"zapołožkow abo klikńće z prawej tastu myški na wotkaz a přidajće jón k " +"swojim zapołožkam. Móžeće skriptowu zapołožku nětko z kóždeje strony na " +"sydle wubrać." + +msgid "Documentation for this page" +msgstr "Dokumentacija za tutu stronu" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Zmóžnja wam, wot někajkeje strony do dokumentacije napohlada skočić, kotryž " +"je tu stronu wutworił." + +msgid "Tags" +msgstr "Znački" + +msgid "List of all the template tags and their functions." +msgstr "Lisćina wšěch předłohowych značkow a jich funkcijow." + +msgid "Filters" +msgstr "Filtry" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Filtry su akcije, kotrež dadźa so na wariable w předłoze nałožić, zo bychu " +"wudaće změnili." + +msgid "Models" +msgstr "Modele" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Modele su wopisanja wšěch objektow w systemje a jich přisłušnych polow. " +"Kóždy model ma lisćinu polow, na kotrež maja přistup jako předłohowe " +"wariable." + +msgid "Views" +msgstr "Napohlady" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Kóžda strona na zjawnym sydle so přez napohlad twori. Napohlad definuje, " +"kotra předłoha so wužiwa, zo by stronu wutworiła a kotre objekty su tej " +"přełoze k dispoziciji." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Nastroje za waš wobhladowak za spěšny přistup na administratorowu " +"funkcionalnosć." + +msgid "Please install docutils" +msgstr "Prošu instalujće docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"Administratorowy dokumentaciski system sej Pythonowu biblioteku docutils wužaduje." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Prošu prošće swojich administratorow, docutils " +"instalować." + +#, python-format +msgid "Model: %(name)s" +msgstr "Model: %(name)s" + +msgid "Fields" +msgstr "Pola" + +msgid "Field" +msgstr "Polo" + +msgid "Type" +msgstr "Typ" + +msgid "Description" +msgstr "Wopisanje" + +msgid "Methods with arguments" +msgstr "Metody z argumentami" + +msgid "Method" +msgstr "Metoda" + +msgid "Arguments" +msgstr "Argumenty" + +msgid "Back to Model documentation" +msgstr "Wróćo k modelowej dokumentaciji" + +msgid "Model documentation" +msgstr "Modelowa dokumentacija" + +msgid "Model groups" +msgstr "Modelowe skupiny" + +msgid "Templates" +msgstr "Předłohi" + +#, python-format +msgid "Template: %(name)s" +msgstr "Předłoha: %(name)s" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "Předłoha: „%(name)s“" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "Pytanska šćežka za předłohu „%(name)s“:" + +msgid "(does not exist)" +msgstr "(njeeksistuje)" + +msgid "Back to Documentation" +msgstr "Wróćo k dokumentaciji" + +msgid "Template filters" +msgstr "Předłohowe filtry" + +msgid "Template filter documentation" +msgstr "Dokumentacija předłohowych filtrow" + +msgid "Built-in filters" +msgstr "Zatwarjene filtry" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Zo byšće tute filtry wužiwał, zasadźće %(code)s do swojeje " +"předłohi, prjedy hač filter wužiwaće." + +msgid "Template tags" +msgstr "Předłohowe znački" + +msgid "Template tag documentation" +msgstr "Dokumentacija předłohowych značkow" + +msgid "Built-in tags" +msgstr "Zatwarjene znački" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Zo byšće tute znački wužiwał, zasadźće %(code)s do swojeje " +"předłohi, prjedy hač značku wužiwaće." + +#, python-format +msgid "View: %(name)s" +msgstr "Napohlad: %(name)s" + +msgid "Context:" +msgstr "Kontekst:" + +msgid "Templates:" +msgstr "Předłohi:" + +msgid "Back to View documentation" +msgstr "Wróćo k napohladowej dokumentaciji" + +msgid "View documentation" +msgstr "Napohladowa dokumentacija" + +msgid "Jump to namespace" +msgstr "K mjenowemu rumej skočić" + +msgid "Empty namespace" +msgstr "Prózdny mjenowy rum" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Napohlady po mjenowym rumje %(name)s" + +msgid "Views by empty namespace" +msgstr "Napohlady po prózdnym mjenowym rumje" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +" Napohladowa funkcija: %(full_name)s. Mjeno: " +"%(url_name)s.\n" + +msgid "tag:" +msgstr "značka:" + +msgid "filter:" +msgstr "filter:" + +msgid "view:" +msgstr "napohlad:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "Nałoženje %(app_label)r njenamakane" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Model %(model_name)r njeje so w nałoženju %(app_label)r namakał" + +msgid "model:" +msgstr "model:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "přisłušny objekt %(app_label)s.%(data_type)s“" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "přisłušne objekty %(app_label)s.%(object_name)s“" + +#, python-format +msgid "all %s" +msgstr "wšě %s" + +#, python-format +msgid "number of %s" +msgstr "ličba %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "zda so, zo %s objekt urlpattern njeje" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/hu/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/hu/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..318768a6c1e38bcaa1f5ed8781b2be3ebeb84e03 GIT binary patch literal 6660 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 i=pB<4_gzi;j*051@;t67BI&, 2012 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: János R (Hangya)\n" +"Language-Team: Hungarian (http://www.transifex.com/django/django/language/" +"hu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "Adminisztrációs dokumentáció" + +msgid "Home" +msgstr "Kezdőlap" + +msgid "Documentation" +msgstr "Dokumentáció" + +msgid "Bookmarklets" +msgstr "Könyvjelzők" + +msgid "Documentation bookmarklets" +msgstr "Dokumentum könyvjelzők" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"A könyvjelzők felvételéhez húzza a könyvjelzők linkjét az eszköztárra, vagy " +"kattintson rájuk jobb egérgombbal és úgy adja hozzá. Ezután már ki tudja " +"választani a könyvjelzőt a honlap bármely oldaláról." + +msgid "Documentation for this page" +msgstr "Az oldal dokumentációja" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Bármely oldalról annak a nézetnek a dokumentációjára ugrik, amely a kérdéses " +"oldalt generálta." + +msgid "Tags" +msgstr "Címkék" + +msgid "List of all the template tags and their functions." +msgstr "" +"Az összes sablon címke (template tags) és a hozzá tartozó függvények listája" + +msgid "Filters" +msgstr "Szűrők" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"A szűrők olyan műveletek, amelyeket változókon végrehajtva a sablon kimenete " +"módosul." + +msgid "Models" +msgstr "Modellek" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"A modellek a rendszerben található objektumok és a hozzá tartozó mezők " +"leírásai. Minden modell rendelkezik mezőkkel, amelyek a sablonokban " +"változóként érhetők el." + +msgid "Views" +msgstr "Nézetek" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"A honlapon minden oldalt egy nézet generál. A nézet definiálja, melyik " +"sablonból készül az oldal, és milyen objektumok állnak az adott nézet " +"rendelkezésére." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "Segédeszközök a böngészőjébe az admin funkciók gyors eléréséhez." + +msgid "Please install docutils" +msgstr "Kérem telepítse a docutils-t" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"Az adminisztrációs dokumentáció működéséhez szükség van a Python docutils könyvtárára." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Kérje meg a rendszergazdát, hogy telepítse a docutils-t." + +#, python-format +msgid "Model: %(name)s" +msgstr "%(name)s modell" + +msgid "Fields" +msgstr "Mezők" + +msgid "Field" +msgstr "Mező" + +msgid "Type" +msgstr "Típus" + +msgid "Description" +msgstr "Leírás" + +msgid "Methods with arguments" +msgstr "Metódusok és paramétereik" + +msgid "Method" +msgstr "Metódus" + +msgid "Arguments" +msgstr "Paraméterek" + +msgid "Back to Model documentation" +msgstr "Vissza a modell dokumentációhoz" + +msgid "Model documentation" +msgstr "Modell dokumentáció" + +msgid "Model groups" +msgstr "Modell csoportok" + +msgid "Templates" +msgstr "Sablonok" + +#, python-format +msgid "Template: %(name)s" +msgstr "%(name)s sablon" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "%(name)s sablon" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "\"%(name)s\" sablon keresési útvonala:" + +msgid "(does not exist)" +msgstr "(nem létezik)" + +msgid "Back to Documentation" +msgstr "Vissza a dokumentációhoz" + +msgid "Template filters" +msgstr "Sablon szűrők" + +msgid "Template filter documentation" +msgstr "Sablon szűrő dokumentáci" + +msgid "Built-in filters" +msgstr "Beépített szűrők" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Ezen szűrők használatához a %(code)s kódrészletnek kell " +"szerepelnie használat előtt a sablonban." + +msgid "Template tags" +msgstr "Sablon címkék" + +msgid "Template tag documentation" +msgstr "Sablon címke dokumentáció" + +msgid "Built-in tags" +msgstr "Beépített címkék" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Ezen címkék használatához a %(code)s kódrészletnek kell " +"szerepelnie használat előtt a sablonban." + +#, python-format +msgid "View: %(name)s" +msgstr "%(name)s nézet" + +msgid "Context:" +msgstr "Környezet:" + +msgid "Templates:" +msgstr "Sablonok:" + +msgid "Back to View documentation" +msgstr "Vissza a nézetek dokumentációhoz" + +msgid "View documentation" +msgstr "Nézet dokumentáció" + +msgid "Jump to namespace" +msgstr "Ugrás a névtérhez" + +msgid "Empty namespace" +msgstr "Üres névtér" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "%(name)s névtérhez tartozó nézetek" + +msgid "Views by empty namespace" +msgstr "Névtér nélküli nézetek" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +" Nézet függvény: %(full_name)s. Név: %(url_name)s.\n" + +msgid "tag:" +msgstr "címke:" + +msgid "filter:" +msgstr "szűrő:" + +msgid "view:" +msgstr "nézet:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "%(app_label)r alkalmazás nem található" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "" +"%(model_name)r modell nem található a következő alkalmazásban: %(app_label)r" + +msgid "model:" +msgstr "modell:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "a kapcsolódó '%(app_label)s.%(data_type)s' objektum" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "kapcsolódó '%(app_label)s.%(object_name)s' objektumok" + +#, python-format +msgid "all %s" +msgstr "minden %s" + +#, python-format +msgid "number of %s" +msgstr "%s mennyisége" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s nem tűnik egy urlpattern objektumnak." diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/ia/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/ia/LC_MESSAGES/django.po new file mode 100644 index 0000000..f20e8b6 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/ia/LC_MESSAGES/django.po @@ -0,0 +1,260 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Martijn Dekker , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Interlingua (http://www.transifex.com/django/django/language/" +"ia/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ia\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "Initio" + +msgid "Documentation" +msgstr "Documentation" + +msgid "Bookmarklets" +msgstr "Bookmarklets" + +msgid "Documentation bookmarklets" +msgstr "Documentation bookmarklets" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +msgid "Documentation for this page" +msgstr "Documentation pro iste pagina" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Transporta vos ab omne pagina al documentation pro le visualisation que " +"genera ille pagina." + +msgid "Tags" +msgstr "Etiquettas" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "Filtros" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "Modellos" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "Visualisationes" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Arguments" +msgstr "" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "Patronos" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "etiquetta:" + +msgid "filter:" +msgstr "filtro:" + +msgid "view:" +msgstr "visualisation:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Modello %(model_name)r non trovate in application %(app_label)r" + +msgid "model:" +msgstr "modello:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "le objecto `%(app_label)s.%(data_type)s` connexe" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "objectos `%(app_label)s.%(object_name)s` connexe" + +#, python-format +msgid "all %s" +msgstr "tote le %s" + +#, python-format +msgid "number of %s" +msgstr "numero de %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s non pare esser un objecto urlpattern" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/id/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/id/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9813d7c8e97b1a50dc508d1a8aaab2a030e25034 GIT binary patch literal 6367 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, 2015-2016 +# Jannis Leidel , 2011 +# rodin , 2011-2012 +# rodin , 2013-2014,2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Indonesian (http://www.transifex.com/django/django/language/" +"id/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: id\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Administrative Documentation" +msgstr "Dokumentasi Administrasi" + +msgid "Home" +msgstr "Beranda" + +msgid "Documentation" +msgstr "Dokumentasi" + +msgid "Bookmarklets" +msgstr "Bookmarklet" + +msgid "Documentation bookmarklets" +msgstr "Bookmarklet dokumentasi" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Untuk memasang bookmarklet, tarik tautan ke bilah markah, atau klik kanan " +"tautan dan tambahkan ke markah Anda. Sekarang Anda dapat memilih bookmarklet " +"dari semua halaman di situs." + +msgid "Documentation for this page" +msgstr "Dokumentasi untuk laman ini" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Buka dari laman apa saja ke laman dokumentasi untuk view yang menghasilkan " +"laman tersebut." + +msgid "Tags" +msgstr "Tag" + +msgid "List of all the template tags and their functions." +msgstr "Daftar seluruh tag templat dan fungsinya." + +msgid "Filters" +msgstr "Filter" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Filter merupakan tindakan yang dapat diterapkan pada variabel dalam sebuah " +"templat untuk mengubah keluaran." + +msgid "Models" +msgstr "Model" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Model merupakan deskripsi semua objek dalam sistem dan bidang yang terkait. " +"Setiap model memiliki beberapa bidang yang dapat diakses sebagai variabel " +"templat" + +msgid "Views" +msgstr "View" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Setiap laman pada situs publik dihasilkan oleh sebuah 'view'. 'View' " +"mendefinisikan templat mana yang digunakan untuk menghasilkan laman dan " +"objek mana yang tersedia untuk templat tersebut." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Alat untuk peramban Anda untuk mempercepat akses fungsionalitas admin. " + +msgid "Please install docutils" +msgstr "Instal docutils." + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"Sistem dokumentasi admin membutuhkan pustaka docutils dari Python." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Ajukan permintaan kepada administrator Anda untuk menginstal docutils." + +#, python-format +msgid "Model: %(name)s" +msgstr "Model: %(name)s" + +msgid "Fields" +msgstr "Bidang" + +msgid "Field" +msgstr "Bidang" + +msgid "Type" +msgstr "Tipe" + +msgid "Description" +msgstr "Deskripsi" + +msgid "Methods with arguments" +msgstr "Metode dengan argumen" + +msgid "Method" +msgstr "Metode" + +msgid "Arguments" +msgstr "Argumen" + +msgid "Back to Model documentation" +msgstr "Kembali ke Dokumentasi Model" + +msgid "Model documentation" +msgstr "Dokumentasi model" + +msgid "Model groups" +msgstr "Grup model" + +msgid "Templates" +msgstr "Templat" + +#, python-format +msgid "Template: %(name)s" +msgstr "Templat: %(name)s" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "Templat: \"%(name)s\"" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "Cari lokasi untuk templat \"%(name)s\":" + +msgid "(does not exist)" +msgstr "(tidak ada)" + +msgid "Back to Documentation" +msgstr "Kembali ke Dokumentasi" + +msgid "Template filters" +msgstr "Filter templat" + +msgid "Template filter documentation" +msgstr "Dokumentasi filter templat" + +msgid "Built-in filters" +msgstr "Filter bawaan" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Untuk menggunakan filter ini, sertakan %(code)s pada templat " +"Anda sebelum menggunakan filternya." + +msgid "Template tags" +msgstr "Tag templat" + +msgid "Template tag documentation" +msgstr "Dokumentasi tag templat" + +msgid "Built-in tags" +msgstr "Tag bawaan" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Untuk menggunakan tag ini, sertakan %(code)s pada templat Anda " +"sebelum menggunakan tagnya." + +#, python-format +msgid "View: %(name)s" +msgstr "View: %(name)s" + +msgid "Context:" +msgstr "Konteks:" + +msgid "Templates:" +msgstr "Templat:" + +msgid "Back to View documentation" +msgstr "Kembali ke dokumentasi Tampilan" + +msgid "View documentation" +msgstr "Dokumentasi view" + +msgid "Jump to namespace" +msgstr "Loncat ke namespace" + +msgid "Empty namespace" +msgstr "Namespace kosong" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "View berdasarkan namespace %(name)s" + +msgid "Views by empty namespace" +msgstr "View berdasarkan namespace kosong" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +" Fungsi view: %(full_name)s. Nama: %(url_name)s.\n" + +msgid "tag:" +msgstr "tag:" + +msgid "filter:" +msgstr "filter:" + +msgid "view:" +msgstr "view:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "Aplikasi %(app_label)r tidak ditemukan" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Model %(model_name)r tidak ditemukan di aplikasi %(app_label)r" + +msgid "model:" +msgstr "model:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "objek `%(app_label)s.%(data_type)s` yang terkait" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "obyek `%(app_label)s.%(object_name)s` yang terkait" + +#, python-format +msgid "all %s" +msgstr "semua %s" + +#, python-format +msgid "number of %s" +msgstr "jumlah %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s bukan berupa objek urlpattern" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/kab/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/kab/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2b4eb430598a8ef0acde2381f0f75f486afd404a GIT binary patch literal 1289 zcmY+Czi%8x6vu}UejVXgAXFet3M5<6_;xLblW~l2;utJAVZu66s%Y-^c|E?_*<)rd zXB#RCL800iOU*oDkx1@D%tYcm{k5JPSSo_Q6NN*TBcXOW;Xxt@Cem z_9n=BTVM~o+4*vaS}dN1eTIFQyoU$ET3yb;`S}ibJa>$CeI6@oJ%h=$aos##I7WM?oEt4^ zb8}zCT-i{RzDbhyY)tcFHB{4@e2U^q;}h*AE!HTGf}JGWc(K-u+P_U}ty^-XXx9k1 zL?Mc|nwrFb(oR!~!c*xde>;ugro+svZcB_t)eO#Eqj~q7V1i%ws5tE za5E5!FjeZ&bChZei5auVbgLrlulQkg2tN+YI*|$+?}B zCc59B&1MUUW$iZY@rM5K!S2F!yZd7^?9cZG8-uI&dXO(JC#@M*7MJDm z=gORyXIErCzuXgZQ)iU4cus}AeQ1LbtI;HbD_pIdsqrk(9cPo+3d!_KTO z@(7~c60X98VD=M4j(+}z#$$V6;k2G^ABO4ngWq^jW)>m&{+PT>cM}x0rlViJ2zDRg bW<2IsWxGtgrPE4yTf+levs(NIHR~*L literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/kab/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/kab/LC_MESSAGES/django.po new file mode 100644 index 0000000..f404ac2 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/kab/LC_MESSAGES/django.po @@ -0,0 +1,258 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Muḥend Belqasem , 2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-10-06 12:00+0000\n" +"Last-Translator: Muḥend Belqasem \n" +"Language-Team: Kabyle (http://www.transifex.com/django/django/language/" +"kab/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kab\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "Agejdan" + +msgid "Documentation" +msgstr "Tasemlit" + +msgid "Bookmarklets" +msgstr "" + +msgid "Documentation bookmarklets" +msgstr "" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +msgid "Documentation for this page" +msgstr "" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" + +msgid "Tags" +msgstr "Tiṛekkizin" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "Imzizdigen" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "Timeẓriyin" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Fields" +msgstr "Urtan" + +msgid "Field" +msgstr "Urti" + +msgid "Type" +msgstr "Tawsit" + +msgid "Description" +msgstr "Aglam" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "Tarrayt" + +msgid "Arguments" +msgstr "Tiɣira" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "Tineɣrufin" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "(ula- it)" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "Asatal:" + +msgid "Templates:" +msgstr "Tineɣrufin:" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "Sken tasemlit" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "tabzimt:" + +msgid "filter:" +msgstr "imzizdig:" + +msgid "view:" +msgstr "wali:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "" + +msgid "model:" +msgstr "Taneɣruft" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "" + +#, python-format +msgid "all %s" +msgstr "akk %s" + +#, python-format +msgid "number of %s" +msgstr "" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/km/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/km/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8440d726253fbff5c6c0facce0eae01a2d166bc9 GIT binary patch literal 1476 zcmcJOO^*~s7{^OR!SRIzF1{vZA_)e1rpFlA?RAY=7Q*6g*sOyG8?Nz{!h8kC+r6z)!$||5Ljwtcl*Nr21D+*YozT>i%=r zwr?25^O&z-eulXl^FAhxqmMDRADjZ81sA~Qz_Z{>;0pLM_#?Ot{0)2`{2hD>eC=_@ zwu5^?vSX0)90bXK5_}Sz0zXI0aqvUfcb{0#I|8Sjuv_2(unUfYSHTy+KR~MY7x*GL zfn=|PAAwZwH25m`DM-400G|eLf+!b84NvNc2Au;9>X~#>4!E)%m^9E{h(~*2JcB1n zGq$JXT`fzlwB@2Gq%hoS-j-bOp~(titu%`3_DR{XY(ne#T$uSx+LBG`&M=qC3Y%)R z)#B}cb>uyb3WK!dh3HFmROgZ%8|FpHm-LYLjLx}GOJS25u>*_0kLi5|-<(%o3)Cd0QH;d$eaoKVg(6VY5b)z-X!)eIQK< zK?(1k6soUlbF$FJMl)qU?M4&Bei^lN!fUg~ThSpSgZO9?)f4_^+&mb?&8Rubn+KA& zM)$?dIEG_1Cl^x6xy5gE(=Xl^W7MWaX`_}As?3DdCgI0~QaGk*nWA<6HoAfNZWhdX zs(Shz#Hjuda-)_MdBWct(1JVxoNmv@YNabuHIXQ+n2uj+Pf>>{o>tskC=$M=G}^~PP35lTyXlB za#dJ=L6xd=*trD5JDkMz(B{QEYxpmyvyHRIaeg0mu(%dZ8op4ny!k_Ip5dx@ gx4l~p*8n+Zu?U%@~ literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/km/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/km/LC_MESSAGES/django.po new file mode 100644 index 0000000..f606425 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/km/LC_MESSAGES/django.po @@ -0,0 +1,259 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Khmer (http://www.transifex.com/django/django/language/km/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: km\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "គេហទំព័រ" + +msgid "Documentation" +msgstr "ឯកសារ" + +msgid "Bookmarklets" +msgstr "កំរងចំណាំ" + +msgid "Documentation bookmarklets" +msgstr "កំរងចំណាំអំពីឯកសារ" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +msgid "Documentation for this page" +msgstr "ឯកសារសំរាប់ទំព័រនេះ" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Jumps you from any page to the documentation for the view that generates " +"that page." + +msgid "Tags" +msgstr "" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Arguments" +msgstr "" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "ប្រភេទ:" + +msgid "filter:" +msgstr "ពាក្យស្វែងរក" + +msgid "view:" +msgstr "មើល" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "" + +msgid "model:" +msgstr "model:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "" + +#, python-format +msgid "all %s" +msgstr "ទាំងអស់ %s" + +#, python-format +msgid "number of %s" +msgstr "ចំនួន​នៃ​%s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s ហាក់បីដូចជា URL ដែល​ត្រឹមត្រូវទេ" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/kn/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/kn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1c112d5364747c4a5b875f6c1d70f5a3de208d7e GIT binary patch literal 1656 zcmbVL&uQ{H$atpKnjA{ovjcMhg1~=MAAe==~Agj@2+<+@J-+(@JGa41x~|$v7fQiz*BJg5Ga9Dz^{O3fX{%WYafFD1=fIv zfd`R<^c?|G9V0-h>-^CE5?Fzq0g)~YvPlyS>H`hZOgwN4`rZc8fIRjNCgg>22rHy8 zcD&$iqYAE#<1){cwA>lqR9y0&O>^m-vYMObb=7k0f-wu3v$U6oZ=97Zwva8q?lPNaU%kqLRn;!32lX0n+!zBrE^9uTQBpSvmzL=;bTuaBh zN-HZJiU=n0R+&swe!O6vBt-#&Wu~oC!E`TcD$7lW?wsrjMl^!WT0;d!lkMmWWeXG} zc>B84T~nD;xv?&qDY{8Jy3p$uQNsvcnZ4SGE?O0ek0y{^@Q>sA*(k0@^-*3wBTkQ= zjO%d>$7oJ1Cd9eRZ*vK98keJUul*=jN7?9-ZkcwXyMmu< zCT?4%;0wAkoA#_sqszu-h2T05W-(qLP-r)ot-9!)^@jy5wmc6Cy$ToZ;Xoeq*+o7yq!)7BeV7 zVZ(g+!}dd?2>Po-S|ob{0s(7~4HRf6eG-B`uE9G4;Dy?L+M-@Tz`da{_`WD$Tfbnh E0Am-u\n" +"Language-Team: Luxembourgish (http://www.transifex.com/projects/p/django/" +"language/lb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "Bookmarklets" +msgstr "" + +msgid "Documentation bookmarklets" +msgstr "" + +msgid "" +"\n" +"

    To install bookmarklets, drag the link to your bookmarks\n" +"toolbar, or right-click the link and add it to your bookmarks. Now you can\n" +"select the bookmarklet from any page in the site. Note that some of these\n" +"bookmarklets require you to be viewing the site from a computer designated\n" +"as \"internal\" (talk to your system administrator if you aren't sure if\n" +"your computer is \"internal\").

    \n" +msgstr "" + +msgid "Documentation for this page" +msgstr "" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" + +msgid "Show object ID" +msgstr "" + +msgid "" +"Shows the content-type and unique ID for pages that represent a single " +"object." +msgstr "" + +msgid "Edit this object (current window)" +msgstr "" + +msgid "Jumps to the admin page for pages that represent a single object." +msgstr "" + +msgid "Edit this object (new window)" +msgstr "" + +msgid "As above, but opens the admin page in a new window." +msgstr "" + +msgid "Tags" +msgstr "" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Back to Model Documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "" + +msgid "Back to Views Documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "Boolean (Either True or False)" +msgstr "" + +#, python-format +msgid "Field of type: %(field_type)s" +msgstr "" + +msgid "tag:" +msgstr "" + +msgid "filter:" +msgstr "" + +msgid "view:" +msgstr "" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "" + +msgid "model:" +msgstr "" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "" + +#, python-format +msgid "all %s" +msgstr "" + +#, python-format +msgid "number of %s" +msgstr "" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/mk/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/mk/LC_MESSAGES/django.po new file mode 100644 index 0000000..128e463 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/mk/LC_MESSAGES/django.po @@ -0,0 +1,286 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Vasil Vangelovski , 2016-2017 +# Vasil Vangelovski , 2013-2014 +# Vasil Vangelovski , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Vasil Vangelovski \n" +"Language-Team: Macedonian (http://www.transifex.com/django/django/language/" +"mk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mk\n" +"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n" + +msgid "Administrative Documentation" +msgstr "Административна документација" + +msgid "Home" +msgstr "Дома" + +msgid "Documentation" +msgstr "Документација" + +msgid "Bookmarklets" +msgstr "Обележувачи" + +msgid "Documentation bookmarklets" +msgstr "Обележувачи на документација" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"За да инсталирате букмарклети повлечете го линкот во траката со bookmarks, " +"или кликенете со десното копче и додадете го во bookmarks. Така ќе можете да " +"го одберете букмарклетот од било која страна на сајтот." + +msgid "Documentation for this page" +msgstr "Документација за оваа страница" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Ве носи од било која страница од документацијата до погледот кој ја генерира " +"таа страница." + +msgid "Tags" +msgstr "Тагови" + +msgid "List of all the template tags and their functions." +msgstr "Листа на сите шаблонски тагови и нивните функции." + +msgid "Filters" +msgstr "Филтри" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Филтри се акции кои може да се применат на променливи во шаблон за менување " +"на излезниот резултат." + +msgid "Models" +msgstr "Модели" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Модели се описи на сите објекти во системот и нивните полиња. Секој модел " +"има листа на полиња до кои може да се пристапи со променливи во шаблони." + +msgid "Views" +msgstr "Погледи (вјуа)" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Секоја страна на јавниот сајт се генерира од поглед. Подгледот дефинира кој " +"шаблон се користи за да се генерира страната и кој објекти се достапни за " +"тој шаблон." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Алатки за вашиот веб прегледувач за брз пристап до администраторските " +"функционалности." + +msgid "Please install docutils" +msgstr "Ве молиме инсталирајте docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"На админ документацискиот систем му е потребна docutils Python библиотеката." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Ве молиме побарајте од вашите администратори да инсталираат docutils." + +#, python-format +msgid "Model: %(name)s" +msgstr "Модел %(name)s" + +msgid "Fields" +msgstr "Полиња" + +msgid "Field" +msgstr "Поле" + +msgid "Type" +msgstr "Тип" + +msgid "Description" +msgstr "Опис" + +msgid "Methods with arguments" +msgstr "Методи со аргументи" + +msgid "Method" +msgstr "Метод" + +msgid "Arguments" +msgstr "Аргументи" + +msgid "Back to Model documentation" +msgstr "Назад до документација за модели." + +msgid "Model documentation" +msgstr "Документација за модели" + +msgid "Model groups" +msgstr "Групи на модели" + +msgid "Templates" +msgstr "Шаблони (темплејти)" + +#, python-format +msgid "Template: %(name)s" +msgstr "Шаблон: %(name)s" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "Шаблон: \"%(name)s\"" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "Пребарај ја патеката за шаблонот \"%(name)s\":" + +msgid "(does not exist)" +msgstr "(не постои)" + +msgid "Back to Documentation" +msgstr "Назад во документација" + +msgid "Template filters" +msgstr "Шаблонски филтри" + +msgid "Template filter documentation" +msgstr "Документација за шаблонски филтер" + +msgid "Built-in filters" +msgstr "Вградени филтри" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"За да ги користите овие филтри, внесете %(code)s во вашиот " +"шаблон пред да го користите филтерот." + +msgid "Template tags" +msgstr "Шаблонски тагови" + +msgid "Template tag documentation" +msgstr "Документација за шаблонски таг" + +msgid "Built-in tags" +msgstr "Вградени тагови" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"За да ги користите овие тагови, внесете %(code)s во вашиот " +"шаблон пред да го користите тагот." + +#, python-format +msgid "View: %(name)s" +msgstr "Поглед: %(name)s" + +msgid "Context:" +msgstr "Контекст:" + +msgid "Templates:" +msgstr "Шаблони:" + +msgid "Back to View documentation" +msgstr "Назад до документација за погледи" + +msgid "View documentation" +msgstr "Документација за поглед" + +msgid "Jump to namespace" +msgstr "Скокни до именски простор" + +msgid "Empty namespace" +msgstr "Празен именски простор" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Погледи по именски простор %(name)s" + +msgid "Views by empty namespace" +msgstr "Погледи по празен именски простор" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +" Погледска функција (вју функција): %(full_name)s. Име: " +"%(url_name)s.\n" + +msgid "tag:" +msgstr "таг:" + +msgid "filter:" +msgstr "филтер:" + +msgid "view:" +msgstr "поглед:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "Апликацијата %(app_label)r не е пронајдена" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Моделот %(model_name)r не е најден во апликацијата %(app_label)r" + +msgid "model:" +msgstr "модел:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "поврзаниот `%(app_label)s.%(data_type)s` објект" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "поврзани `%(app_label)s.%(object_name)s` објекти" + +#, python-format +msgid "all %s" +msgstr "сите %s" + +#, python-format +msgid "number of %s" +msgstr "број на %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s не изгледа дека е url објект" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/ml/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/ml/LC_MESSAGES/django.po new file mode 100644 index 0000000..a73c318 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/ml/LC_MESSAGES/django.po @@ -0,0 +1,268 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Emil Joseph , 2019 +# Jannis Leidel , 2011 +# MUHAMMED RAMEEZ , 2019 +# Rag sagar , 2016 +# Rajeesh Nair , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2019-03-10 07:17+0000\n" +"Last-Translator: Emil Joseph \n" +"Language-Team: Malayalam (http://www.transifex.com/django/django/language/" +"ml/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ml\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "കാര്യനിർവ്വാഹകർക്കായുള്ള ഡോക്യൂമെന്റേഷൻ " + +msgid "Home" +msgstr "ഹോം " + +msgid "Documentation" +msgstr "സഹായക്കുറിപ്പുകള്‍" + +msgid "Bookmarklets" +msgstr "ബുക്ക് മാര്‍ക്കുകള്‍" + +msgid "Documentation bookmarklets" +msgstr "സഹായക്കുറിപ്പുകളുടെ ബുക്ക്മാര്‍ക്കുകള്‍" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"ബുക്ക്മാർക്കുകൾ ഇൻസ്റ്റാൾ ചെയ്യാൻ, നിങ്ങളുടെ ബുക്ക്മാർക്കുകൾ ടൂൾബാറിലേക്ക് ലിങ്ക് ഇഴയ്ക്കുക, " +"അല്ലെങ്കിൽ ലിങ്കിൽ വലത് ക്ലിക്കുചെയ്ത് നിങ്ങളുടെ ബുക്ക്മാർക്കുകളിൽ ചേർക്കുക. ഇപ്പോൾ നിങ്ങൾക്ക് " +"സൈറ്റിലെ ഏത് പേജിൽ നിന്നും ബുക്മാർക്കറ്റ് തിരഞ്ഞെടുക്കാം." + +msgid "Documentation for this page" +msgstr "ഈ പേജിന്റെ സഹായക്കുറിപ്പുകള്‍" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "ഏതു പേജില്‍ നിന്നും അതിന്റെ ഉദ്ഭവമായ വ്യൂവിന്റെ സഹായക്കുറിപ്പിലേക്കു ചാടാന്‍" + +msgid "Tags" +msgstr "ടാഗുകള്‍" + +msgid "List of all the template tags and their functions." +msgstr "എല്ലാ ടെംപ്ലേറ്റുകളും അവയുടെ ഫംഗ്ഷനുകളുടെ പട്ടിക" + +msgid "Filters" +msgstr "ഫില്‍ട്ടറുകള്‍" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"ഫിൽറ്ററുകൾ എന്നാൽ ഔട്പുട്ടിനു മാറ്റം വരുത്തുവാൻ ടെംപ്ലേറ്റുകൾക്കു ഉള്ളില്ലേ വാരിയബിലിസിന് " +"(variables) നൽകുന്ന ആക്ഷൻസ്സാണ് " + +msgid "Models" +msgstr "മോഡലുകള്‍" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "വ്യൂകള്‍" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"അഡ്മിൻ ഫങ്ക്ഷണാലിറ്റിയിലേക്കു പെട്ടെന്നു പ്രവേശിക്കുവാൻ നിങ്ങളുടെ ബ്രൗസെറിനുള്ള ടൂളുകൾ ." + +msgid "Please install docutils" +msgstr "ദയവായി ഡോക്യൂട്ടിൽസ്‌ ഇൻസ്റ്റാൾ ചെയ്യുക." + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Fields" +msgstr "ഫീൽഡുകൾ " + +msgid "Field" +msgstr "ഫീൽഡ്." + +msgid "Type" +msgstr "ടൈപ്പ് " + +msgid "Description" +msgstr "വിവരണം" + +msgid "Methods with arguments" +msgstr "മെതോടുകൾ ഉള്ള ആർഗുമെന്റ്സ് " + +msgid "Method" +msgstr "രീതി" + +msgid "Arguments" +msgstr "വാദങ്ങൾ" + +msgid "Back to Model documentation" +msgstr "മോഡൽ ഡോക്യൂമെന്റന്റഷനിലേക്ക് തിരികെ പോവുക ." + +msgid "Model documentation" +msgstr "മോഡൽ ഡോക്യൂമെന്റേഷൻ." + +msgid "Model groups" +msgstr "മോഡൽ ഗ്രൂപ്സ്" + +msgid "Templates" +msgstr "ടെമ്പ്‌ലേറ്റുകള്‍" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "(എക്സിസ്റ് ചെയ്യുന്നില്ല )" + +msgid "Back to Documentation" +msgstr "ഡോക്യൂമെന്റഷനിലേക്കു തിരികെ പോവുക ." + +msgid "Template filters" +msgstr "ടെമ്പ്ലേറ്റ് ഫിൽറ്ററുകൾ " + +msgid "Template filter documentation" +msgstr "ടെമ്പ്ലേറ്റ് ഫിൽറ്റർ ഡോക്യൂമെന്റേഷൻ " + +msgid "Built-in filters" +msgstr "ബിൽട്ടിൻ ഫിൽറ്ററുകൾ " + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "ടെമ്പ്ലേറ്റ് റ്റാഗുകൾ " + +msgid "Template tag documentation" +msgstr "ടെമ്പ്ലേറ്റ് ടാഗിന്റെ ഡോക്യൂമെന്റേഷൻ " + +msgid "Built-in tags" +msgstr "ബിൽട്ടിൻ റ്റാഗുകൾ " + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "കോണ്ടെക്സ്റ് :" + +msgid "Templates:" +msgstr "ടെമ്പ്‌ലേറ്റുകള്‍" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "ഡോക്യൂമെന്റെഷൻ കാണുക " + +msgid "Jump to namespace" +msgstr "നെയിംസ്പേസിലേക്ക് ചാടുക ." + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "ടാഗ്:" + +msgid "filter:" +msgstr "അരിപ്പ:" + +msgid "view:" +msgstr "വ്യൂ" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "%(app_label)r എന്ന Appല്‍ %(model_name)r എന്ന മാത്രുക കണ്ടില്ല." + +msgid "model:" +msgstr "മാത്രുക:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "ബന്ധപ്പെട്ട `%(app_label)s.%(data_type)s` വസ്തു" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "ബന്ധപ്പെട്ട `%(app_label)s.%(object_name)s` വസ്തുക്കള്‍" + +#, python-format +msgid "all %s" +msgstr "%s എല്ലാം" + +#, python-format +msgid "number of %s" +msgstr "%sന്റെ എണ്ണം" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s വിലാസ മാത്രുക (urlpattern object) ആണെന്ന് തോന്നുന്നില്ല." diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/my/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/my/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..fa8a6a56cebdf66ca164a03b8b3a84bada6675ed GIT binary patch literal 1721 zcmb7^&u<(x6vquMPzET!1O>GRBQ+vXJG--hAaMvnO`A4VBBE&9YwGNJHxtd+%h;PA z2PC)r5cE=7HA4JqRVl{;;zC1P_%}ctKqGPH)EgZ5+D^JjlL}$U{`igG_xZgyv-|rq zyH^Ot)0hV^S26ct9)17|#>e0j;3wcC;Ah}&@GAH!xC%ZD{<{AB5Aadge}WHzf32V2 z0iFKub$i!?ggg#A0;}LY(8WCtCg23<^zVTepm`tM5Bpg-9R#bO)7QZzkb^IQzkx4+ z|9~%p&moA*a|CqH-vwU;&x6l{tDuW}3v7VDfUe$Q6m<$52c7>_5NVKIm^%%m=X>}V z_!Oq=f$Pg2OjoxXdodB-=k4x@FrUOks)QU>jczWa;U-m*jHQ_og(fFdF36;6ij4O4 z=Z-Uy=VG9sQW@G(UD>3mq`cF?Io6qs&x&lI2pUc5yp2WVos1iy$>~%qYQi%_)1>9^ zV8n-IM0WF8QBc)#XN7QrCOxw`s;>0)tJ!(cFd+$jh6Ym;!`qCQIYI9$Y;wbA%yLHz z+?A09q{GNmp7*C6Z)WzK5H?-lG97-^v39e0CFSyhwTNR9+ zR#zjn9 zVyV(lc{S9ufoxq~&6leK(d78#v0nAHN)nAKY4AD3b+n98BbH1RFEN$Fv@ypEEzHQN z`dB>J^K*B#L=hj84b@C#o6*79)Z9&z(R?|Y%DM&5;xSd^no-&DrXHyc)36;$h9gqi zYo$F~+FPZyrM>CRufiT@AC~r8zhZ;4&rADrX}|Lu2(FiQ4Nfbi{U98Z%^y%feK4Ft ziS^6Ue&faG{2sCJ{L|9@6y*1Q^8S+V{Uz|bRN61R08x+vZiYUH;d297z~1hShrK*e zDD3kg)y)S;?gyV4s>BB7?NFQ-^a5Ca5CYurMTBmkeGr5mtZmWs>Cgn%snVja;U3qu zom, 2013,2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Burmese (http://www.transifex.com/django/django/language/" +"my/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: my\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "ပင်မ" + +msgid "Documentation" +msgstr "အချက်အလက်" + +msgid "Bookmarklets" +msgstr "" + +msgid "Documentation bookmarklets" +msgstr "" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +msgid "Documentation for this page" +msgstr "" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" + +msgid "Tags" +msgstr "အမည်များ" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "စီစစ်မှုများ" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "မော်ဒယ်များ" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "ကြည့်ရှုခြင်းများ" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Arguments" +msgstr "" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "ပံုစံပြားများ" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "အမည်:" + +msgid "filter:" +msgstr "စီစစ်မှု:" + +msgid "view:" +msgstr "ကြည့်ရှု:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "%(app_label)r အပ်ပရိုဂရမ်တွင် %(model_name)r မော်ဒယ်ရှာမတွေ့" + +msgid "model:" +msgstr "မော်ဒယ်:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "ဆက်နွယ်သော `%(app_label)s.%(data_type)s` အရာဝတ္ထု" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "ဆက်နွယ်သော `%(app_label)s.%(object_name)s` အရာဝတ္ထုများ" + +#, python-format +msgid "all %s" +msgstr "%s အားလံုး" + +#, python-format +msgid "number of %s" +msgstr "%s အရေအတွက်" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/ne/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/ne/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..05b0d908e185c4a99d2ad0c10edfd7ca03301ab8 GIT binary patch literal 1505 zcma)*PizxM6vhV{Xfc73N-aX=FdQPqLTj&61Y|?nsw5H61OhUgDuszXwim5uRy$*y z+zLIkYE|_B0dC2VMie0B?cY!KYpS-{3ab&%6E?UA_eS z;eQ1d!PlUxlix~+4;Da|Hw!M}jDw%T{_g`qz5)jjoCD8---6$P`@p+hKI!rw(CPgb z902=J)am{VoCJr#J>UX34*m?fxMv`)ed~f8@)5Sv;1*=1eeVW8bPg=nAIhY&+zIZ$ zc3L0>m&r=2$%SS*l%m(7HJMP|2o;T4os$!?$;q^=@`w%&H63RKYw~|$D@3b7uVNNg~1^? zcZpYYcBQ&VGgA@G>H*OWPT!hXWtz?Eg_!48)5vAW2*^w#T}|&~)w{qGg#iS#dWng; z%$?)0Otd$x>S5LUrd3y7Sq3yWbEfPaPk1^kZyZ7cI_#H@cz($%jnLBJ;LylHzvTM} z^v?0ip{v;wH?k7vAM~+uQ%q^EoG_u#woC$giV1;!KTNQW9)$3d~!Znq2C6%1>9zEF|PV%E|MqHcCk@M1nUeR6tYt@%>H z&mEUS<9+bTm{>qHpV!4WVxbtNl?F=`*JJ0)lity_ICoc#C*Fjp$Z9C+0X;ew>Q$8i z6+AZ+wGtM2lQL;4IO5b)W5c5~`#Clw=z%d>%8%xVHNV@=uh#r&%|qMy(V839+=cgn z?fgR1!yl}9l!n~4W-;?Vv}W0wo3`_P7P3h`4w3knk_~S!s$27i?OaKJEcd>=?sayj zW|>k{zMl$OvgR*qe#>O_B%{6)-nl}FHA|_+2VG_BPwu2rvL0~0F6WUo_iX1U>OO^y z!U8g=RvSj(RW}+pDR%{V*9YTf=2GsZ&pT-g1}(wPgqY1_2mi0z^F6(H)t;7VK;8gG C!V-A^ literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/ne/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/ne/LC_MESSAGES/django.po new file mode 100644 index 0000000..305a11b --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/ne/LC_MESSAGES/django.po @@ -0,0 +1,257 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Paras Nath Chaudhary , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Nepali (http://www.transifex.com/django/django/language/ne/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ne\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "गृह " + +msgid "Documentation" +msgstr "प्रलेखन" + +msgid "Bookmarklets" +msgstr "" + +msgid "Documentation bookmarklets" +msgstr "" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +msgid "Documentation for this page" +msgstr "यो पृस्ठको लागी प्रलेखन" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" + +msgid "Tags" +msgstr "ट्यागहरु " + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "नमुनाहरु " + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "धृस्यहरु " + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Arguments" +msgstr "" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "ट्याग:" + +msgid "filter:" +msgstr "" + +msgid "view:" +msgstr "धृस्य :" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "%(model_name)r नमुना %(app_label)r appमा भेटिएन" + +msgid "model:" +msgstr "नमुना :" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "`%(app_label)s.%(data_type)s` संबंधित बस्तु " + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "`%(app_label)s.%(object_name)s` संबंधित बस्तु " + +#, python-format +msgid "all %s" +msgstr "सबै %s" + +#, python-format +msgid "number of %s" +msgstr "%sको संख्या" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/nl/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/nl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f4d86cfe00397af801d1b66c4bd59f4d48240a44 GIT binary patch literal 6349 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, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Norwegian Nynorsk (http://www.transifex.com/django/django/" +"language/nn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "Heim" + +msgid "Documentation" +msgstr "Dokumentasjon" + +msgid "Bookmarklets" +msgstr "Bokmerke" + +msgid "Documentation bookmarklets" +msgstr "Dokumentasjonsbokmerke" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +msgid "Documentation for this page" +msgstr "Dokumentasjon for denne sida" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Hopp frå kva som helst side til dokumentasjonen for visingsfunksjonen som " +"genererte sida." + +msgid "Tags" +msgstr "" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Arguments" +msgstr "" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "tag:" + +msgid "filter:" +msgstr "filter:" + +msgid "view:" +msgstr "view:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "" +"Kunne ikkje finne modellen %(model_name)r i applikasjonen %(app_label)r" + +msgid "model:" +msgstr "modell:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "det relaterte `%(app_label)s.%(data_type)s`-objektet" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "relaterte `%(app_label)s.%(object_name)s`-objekt" + +#, python-format +msgid "all %s" +msgstr "alle %s" + +#, python-format +msgid "number of %s" +msgstr "tal på %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s ser ikkje ut til å vere eit urlpattern-objekt" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/pa/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/pa/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8be0a2c6254642bcd0494e34bc061723e3aec950 GIT binary patch literal 1275 zcma))OKTKC5XalMt_qr)k3$Ovc9Geg4Wg!FRE!BK2`*t3JjLGK-p$0B?qQ}k(VH(! zK*3XthhP*%XYhdvf`aHb@Cyjic<`j(!GF&tNc4>NKm$I2 zeTVIVKfQ*KyAaH{!wrfcplsa)_JC3dIj+>jfJYa7p<{AF)!TuPnrlzVs($^-LHOWhpd^E|cZ2!h2 zpG>j<#Y2, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Panjabi (Punjabi) (http://www.transifex.com/django/django/" +"language/pa/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pa\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "ਘਰ" + +msgid "Documentation" +msgstr "ਡੌਕੂਮੈਂਟੇਸ਼ਨ" + +msgid "Bookmarklets" +msgstr "ਬੁੱਕਮਾਰਕਲਿਟ" + +msgid "Documentation bookmarklets" +msgstr "ਡੌਕੂਮੈਟੇਸ਼ਨ ਬੁੱਕਮਾਰਕਲਿਟ" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +msgid "Documentation for this page" +msgstr "ਇਹ ਸਫ਼ੇ ਲਈ ਡੌਕੂਮੈਂਟੇਸ਼ਨ" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" + +msgid "Tags" +msgstr "" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Arguments" +msgstr "" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "ਟੈਗ:" + +msgid "filter:" +msgstr "ਫਿਲਟਰ:" + +msgid "view:" +msgstr "ਵੇਖੋ:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "" + +msgid "model:" +msgstr "ਮਾਡਲ:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "ਸਬੰਧਿਤ `%(app_label)s.%(object_name)s` ਆਬਜੈਕਟ" + +#, python-format +msgid "all %s" +msgstr "ਸਭ %s" + +#, python-format +msgid "number of %s" +msgstr "%s ਦੀ ਗਿਣਤੀ" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/pt/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/pt/LC_MESSAGES/django.po new file mode 100644 index 0000000..7c0ce19 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/pt/LC_MESSAGES/django.po @@ -0,0 +1,286 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Bruno Miguel Custódio , 2012 +# Jannis Leidel , 2011 +# Nuno Mariz , 2011-2013,2015,2017 +# Raúl Pedro Fernandes Santos, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Portuguese (http://www.transifex.com/django/django/language/" +"pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "Documentação Administrativa" + +msgid "Home" +msgstr "Início" + +msgid "Documentation" +msgstr "Documentação" + +msgid "Bookmarklets" +msgstr "Bookmarklets" + +msgid "Documentation bookmarklets" +msgstr "Documentação dos bookmarklets" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Para instalar bookmarklets, arraste o link da barra dos bookmarks, ou " +"pressione do lado direito no link e adicione aos bookmarks.\n" +"Agora poderá selecionar o bookmarklet de qualquer página do site." + +msgid "Documentation for this page" +msgstr "Documentação desta página" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Vai de qualquer página para a documentação da view que gera essa página." + +msgid "Tags" +msgstr "Tags" + +msgid "List of all the template tags and their functions." +msgstr "Lista de todas as template tags e suas funções." + +msgid "Filters" +msgstr "Filtros" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Os filtros são as acções que podem ser aplicadas às variáveis ​​de uma " +"template para alterar o output." + +msgid "Models" +msgstr "Models" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Models são descrições de todos os objetos no sistema e seus campos " +"associados. Cada model tem uma lista de campos que podem ser acedidos como " +"variáveis ​​de template" + +msgid "Views" +msgstr "Views" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Cada página no site público é gerada por uma view. A view define qual " +"template será usado para gerar a página e quais objetos estarão disponíveis " +"para esse template." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Ferramentas para o seu navegador para aceder rapidamente a funcionalidade de " +"administração." + +msgid "Please install docutils" +msgstr "Por favor, instale o docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"A documentação do sistema de admin requer a biblioteca docutils do Python." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Por favor, peça aos seu administradores para instalar o docutils." + +#, python-format +msgid "Model: %(name)s" +msgstr "Model: %(name)s" + +msgid "Fields" +msgstr "Campos" + +msgid "Field" +msgstr "Campo" + +msgid "Type" +msgstr "Tipo" + +msgid "Description" +msgstr "Descrição" + +msgid "Methods with arguments" +msgstr "Métodos com argumentos" + +msgid "Method" +msgstr "Métodos" + +msgid "Arguments" +msgstr "Argumentos" + +msgid "Back to Model documentation" +msgstr "Voltar para a documentação dos Models" + +msgid "Model documentation" +msgstr "Documentação dos Models" + +msgid "Model groups" +msgstr "Grupos de Models" + +msgid "Templates" +msgstr "Templates" + +#, python-format +msgid "Template: %(name)s" +msgstr "Template: %(name)s" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "Template: \"%(name)s\"" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "Caminho de pesquisa para o template \"%(name)s\":" + +msgid "(does not exist)" +msgstr "(Não existe)" + +msgid "Back to Documentation" +msgstr "Voltar para a Documentação" + +msgid "Template filters" +msgstr "Filtros de template" + +msgid "Template filter documentation" +msgstr "Documentação de filtros de template" + +msgid "Built-in filters" +msgstr "Filtros built-in" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Para utilizar estes filtros, coloque %(code)s na sua template " +"antes de utilizar o filtro." + +msgid "Template tags" +msgstr "Tags de template" + +msgid "Template tag documentation" +msgstr "Documentação de tags de template" + +msgid "Built-in tags" +msgstr "Tags built-in" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Para utilizar estas tags, coloque %(code)s na sua template " +"antes de usar a tag." + +#, python-format +msgid "View: %(name)s" +msgstr "View: %(name)s" + +msgid "Context:" +msgstr "Contexto:" + +msgid "Templates:" +msgstr "Templates:" + +msgid "Back to View documentation" +msgstr "Voltar para a documentação das Views" + +msgid "View documentation" +msgstr "Ver documentação" + +msgid "Jump to namespace" +msgstr "Saltar para namespace" + +msgid "Empty namespace" +msgstr "Namespace vazio" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Views por namespace %(name)s" + +msgid "Views by empty namespace" +msgstr "Views por namespace vazio" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +" Função de view: %(full_name)s. Nome: %(url_name)s.\n" + +msgid "tag:" +msgstr "tag:" + +msgid "filter:" +msgstr "filtro:" + +msgid "view:" +msgstr "view:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "A aplicação %(app_label)r não foi encontrada" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "O Model %(model_name)r não foi encontrado na aplicação %(app_label)r" + +msgid "model:" +msgstr "model:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "o objeto `%(app_label)s.%(data_type)s` relacionado" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "os objetos `%(app_label)s.%(object_name)s` relacionados" + +#, python-format +msgid "all %s" +msgstr "todos %s" + +#, python-format +msgid "number of %s" +msgstr "número de %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s não parece ser um objeto urlpattern" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/pt_BR/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/pt_BR/LC_MESSAGES/django.po new file mode 100644 index 0000000..3b45274 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/pt_BR/LC_MESSAGES/django.po @@ -0,0 +1,290 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Allisson Azevedo , 2014 +# andrewsmedina , 2016 +# Carlos Leite , 2016 +# Filipe Cifali Stangler , 2016 +# Eduardo Cereto Carvalho, 2016 +# Elyézer Rezende , 2013 +# semente, 2012 +# Jannis Leidel , 2011 +# Lucas Infante , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/django/django/" +"language/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Administrative Documentation" +msgstr "Documentação Administrativa" + +msgid "Home" +msgstr "Início" + +msgid "Documentation" +msgstr "Documentação" + +msgid "Bookmarklets" +msgstr "Itens de bookmark" + +msgid "Documentation bookmarklets" +msgstr "Documentação de itens de bookmark" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Para instalar bookmarklets, arraste o link para a sua barra de favoritos, ou " +"clique com o botão direito no link e o adicione aos seus favoritos. Agora " +"você pode selecionar o bookmarklet a partir de qualquer página do site." + +msgid "Documentation for this page" +msgstr "Documentação para esta página" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Leva você de qualquer página para a documentação da view que gera tal página." + +msgid "Tags" +msgstr "Tags" + +msgid "List of all the template tags and their functions." +msgstr "Lista de todas as tags de template e suas funções." + +msgid "Filters" +msgstr "Filtros" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Os filtros são ações que podem ser aplicadas às variáveis ​​em um template " +"para alterar a saída." + +msgid "Models" +msgstr "Models" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Modelos são descrições de todos os objetos no sistema e seus campos " +"associados. Cada modelo tem uma lista de campos que podem ser acessados ​​como " +"variáveis ​​no template" + +msgid "Views" +msgstr "Views" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Cada página no site público é gerada por uma view. A view define qual " +"template será usado para gerar a página e quais objetos estarão disponíveis " +"para este template." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Ferramentas para o seu navegador para acessar rapidamente a funcionalidade " +"de administração." + +msgid "Please install docutils" +msgstr "Por favor, instale o docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"O sistema de documentação de administração exige a biblioteca docutils do Python." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Por favor, peça para os seus administradores para instalar o docutils." + +#, python-format +msgid "Model: %(name)s" +msgstr "Model: %(name)s" + +msgid "Fields" +msgstr "Campos" + +msgid "Field" +msgstr "Campo" + +msgid "Type" +msgstr "Tipo" + +msgid "Description" +msgstr "Descrição" + +msgid "Methods with arguments" +msgstr "Métodos com argumentos" + +msgid "Method" +msgstr "Método" + +msgid "Arguments" +msgstr "Argumentos" + +msgid "Back to Model documentation" +msgstr "Voltar para Documentação do Model" + +msgid "Model documentation" +msgstr "Documentação do model" + +msgid "Model groups" +msgstr "Grupos de models" + +msgid "Templates" +msgstr "Templates" + +#, python-format +msgid "Template: %(name)s" +msgstr "Template: %(name)s" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "Template: \"%(name)s\"" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "Caminho de busca para o template \"%(name)s\":" + +msgid "(does not exist)" +msgstr "(não existe)" + +msgid "Back to Documentation" +msgstr "Voltar para Documentação" + +msgid "Template filters" +msgstr "Filtros do template" + +msgid "Template filter documentation" +msgstr "Documentação do filtro do template" + +msgid "Built-in filters" +msgstr "Filtros built-in" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Para usar esses filtros, coloque %(code)s no seu template antes " +"de usar o filtro." + +msgid "Template tags" +msgstr "Tags de template" + +msgid "Template tag documentation" +msgstr "Documentação da tag de template" + +msgid "Built-in tags" +msgstr "Tags built-in" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Para usar estas tags, coloque o código %(code)s no seu template " +"antes de usar a tag." + +#, python-format +msgid "View: %(name)s" +msgstr "View: %(name)s" + +msgid "Context:" +msgstr "Contexto:" + +msgid "Templates:" +msgstr "Templates:" + +msgid "Back to View documentation" +msgstr "Voltar para a Documentação das Views" + +msgid "View documentation" +msgstr "Ver documentação" + +msgid "Jump to namespace" +msgstr "Ir para namespace" + +msgid "Empty namespace" +msgstr "Namespace vazio" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Views por namespace %(name)s" + +msgid "Views by empty namespace" +msgstr "Views por namespace vazio" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +"View função: %(full_name)s. Nome: %(url_name)s.\n" + +msgid "tag:" +msgstr "tag:" + +msgid "filter:" +msgstr "filtro:" + +msgid "view:" +msgstr "view:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "App %(app_label)r não encontrado" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Model %(model_name)r não encontrado na aplicação %(app_label)r" + +msgid "model:" +msgstr "model:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "o objeto `%(app_label)s.%(data_type)s` relacionado" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "objetos `%(app_label)s.%(object_name)s` relacionados" + +#, python-format +msgid "all %s" +msgstr "todos %s" + +#, python-format +msgid "number of %s" +msgstr "número de %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s não aparenta ser um objeto urlpattern" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/ru/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b338b84323a0da291029d93099574c03c680d7b8 GIT binary patch literal 8569 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/sl/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/sl/LC_MESSAGES/django.po new file mode 100644 index 0000000..1cb6abc --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/sl/LC_MESSAGES/django.po @@ -0,0 +1,285 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Primož Verdnik , 2017 +# zejn , 2013,2016 +# zejn , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Primož Verdnik \n" +"Language-Team: Slovenian (http://www.transifex.com/django/django/language/" +"sl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sl\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "Administrative Documentation" +msgstr "Dokumentacija o administraciji" + +msgid "Home" +msgstr "Domov" + +msgid "Documentation" +msgstr "Dokumentacija" + +msgid "Bookmarklets" +msgstr "Apleti zaznamkov" + +msgid "Documentation bookmarklets" +msgstr "Dokumentacijski apleti zaznamkov" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Aplete zaznamkov je mogoče namestiti z vleko povezave v orodno vrstico z " +"zaznamki, ali pa z desnim klikom na povezavo. Zaznamek je mogoče izbrati s " +"katerekoli strani tega spletnega mesta." + +msgid "Documentation for this page" +msgstr "Dokumentacija te strani" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "Skok na stran z dokumentacijo za pogled, ki gustvarja trenutno stran." + +msgid "Tags" +msgstr "Oznake" + +msgid "List of all the template tags and their functions." +msgstr "Izpiši vse značke za predloge in njihov opis." + +msgid "Filters" +msgstr "Filtri" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Filtri so opravila, ki jih lahko uporabite na spremenljivkah v predlogah, da " +"spremenite izpis." + +msgid "Models" +msgstr "Modeli" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Modeli so opisi vseh objektov v sistemu in njihovih pripadajočih polj. Vsak " +"model ima seznam polj, do katerih lahko dostopate v predlogi" + +msgid "Views" +msgstr "Pogledi" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Vsaka stran na javni strani je zgenerirana iz pogleda. Pogled definira " +"katera predloga je uporabljena za generiranje strani in kateri objekti so " +"dostopni ti predlogi." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Orodja za vaš brskalnik, da lahko hitro dostopate do administracijskih " +"funkcij." + +msgid "Please install docutils" +msgstr "Prosimo namestite paket docutils" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"Dokumentcijski sistem administracijskega vmesnika zahteva knjižnico docutils za Python." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Prosimo povprašajte administratorja, da namesti docutils." + +#, python-format +msgid "Model: %(name)s" +msgstr "Model: %(name)s" + +msgid "Fields" +msgstr "Polja" + +msgid "Field" +msgstr "Polje" + +msgid "Type" +msgstr "Tip" + +msgid "Description" +msgstr "Opis" + +msgid "Methods with arguments" +msgstr "Metode z argumenti" + +msgid "Method" +msgstr "Metoda" + +msgid "Arguments" +msgstr "Argumenti" + +msgid "Back to Model documentation" +msgstr "Nazaj na dokumentacijo modelov" + +msgid "Model documentation" +msgstr "Dokumentacija modelov" + +msgid "Model groups" +msgstr "Skupine modelov" + +msgid "Templates" +msgstr "Predloge" + +#, python-format +msgid "Template: %(name)s" +msgstr "Predloga: %(name)s" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "Predloga: \"%(name)s\"" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "Poti iskanja za predlogo \"%(name)s\":" + +msgid "(does not exist)" +msgstr "(ne obstaja)" + +msgid "Back to Documentation" +msgstr "Nazaj na dokumentacijo" + +msgid "Template filters" +msgstr "Filtri v predlogah" + +msgid "Template filter documentation" +msgstr "Dokumentacija filtrov v predlogah" + +msgid "Built-in filters" +msgstr "Vgrajeni filtri" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Če želite uporabiti te filtre, dodajte %(code)s v vašo predlogo " +"preden uporabite filter." + +msgid "Template tags" +msgstr "Značke v predlogah" + +msgid "Template tag documentation" +msgstr "Dokumentacija značk v predlogah" + +msgid "Built-in tags" +msgstr "Vgrajene značke" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Če želite uporabiti te značke, dodajte %(code)s v vašo predlogo " +"preden uporabite značko." + +#, python-format +msgid "View: %(name)s" +msgstr "Pogled: %(name)s" + +msgid "Context:" +msgstr "Kontekst:" + +msgid "Templates:" +msgstr "Predloge:" + +msgid "Back to View documentation" +msgstr "Nazaj na dokumentacijo pogledov" + +msgid "View documentation" +msgstr "Dokumentacija pogledov" + +msgid "Jump to namespace" +msgstr "Skoči na imenski prostor" + +msgid "Empty namespace" +msgstr "Prazen imenski prostor" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "Pogledi v imenskem prostoru %(name)s" + +msgid "Views by empty namespace" +msgstr "Pogledi brez imenskega prostora" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +" Funkcija pogleda: %(full_name)s. Ime: %(url_name)s.\n" + +msgid "tag:" +msgstr "oznaka:" + +msgid "filter:" +msgstr "filter:" + +msgid "view:" +msgstr "pogled:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "Applikacije %(app_label)r ni bilo mogoče najti" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Modela %(model_name)r ni v programu %(app_label)r" + +msgid "model:" +msgstr "model:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "povezani predmet `%(app_label)s.%(data_type)s`" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "povezani predmeti `%(app_label)s.%(object_name)s`" + +#, python-format +msgid "all %s" +msgstr "vse %s" + +#, python-format +msgid "number of %s" +msgstr "število %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "Predmet %s ni videti veljaven predmet urlpattern" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/sr_Latn/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/sr_Latn/LC_MESSAGES/django.po new file mode 100644 index 0000000..04a4758 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/sr_Latn/LC_MESSAGES/django.po @@ -0,0 +1,262 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Janos Guljas , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Serbian (Latin) (http://www.transifex.com/django/django/" +"language/sr%40latin/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sr@latin\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "Početna" + +msgid "Documentation" +msgstr "Dokumentacija" + +msgid "Bookmarklets" +msgstr "Bukmarkleti" + +msgid "Documentation bookmarklets" +msgstr "Bukmarkleti dokumentacije" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +msgid "Documentation for this page" +msgstr "Dokumentacija za ovu stranicu" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Vodi od bilo koje stranice do dokumentaicje pogleda koji je generisao tu " +"stranicu." + +msgid "Tags" +msgstr "Tagovi" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "Filteri" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "Modeli" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "Vjuevi" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Arguments" +msgstr "" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "Šabloni" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "tag:" + +msgid "filter:" +msgstr "filter:" + +msgid "view:" +msgstr "vju:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Model %(model_name)r nije pronađen u aplikaciji %(app_label)r" + +msgid "model:" +msgstr "model:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "povezani objekti klase `%(app_label)s.%(data_type)s`" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "klase `%(app_label)s.%(object_name)s`" + +#, python-format +msgid "all %s" +msgstr "svi povezani objekti %s" + +#, python-format +msgid "number of %s" +msgstr "broj povezanih objekata %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s ne izgleda kao „urlpattern“ objekat" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/sw/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/sw/LC_MESSAGES/django.po new file mode 100644 index 0000000..3a9e2fd --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/sw/LC_MESSAGES/django.po @@ -0,0 +1,259 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Swahili (http://www.transifex.com/django/django/language/" +"sw/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sw\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "Sebule" + +msgid "Documentation" +msgstr "Waraka" + +msgid "Bookmarklets" +msgstr "Vialamisho" + +msgid "Documentation bookmarklets" +msgstr "Vialamisho vya waraka" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +msgid "Documentation for this page" +msgstr "Nyaraka kwa ajili ya ukurasa huu" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Inakurusha kutoka ukurasa wowote hadi kwenye waraka wa mounekano unaozalisha " +"ukurasa huo." + +msgid "Tags" +msgstr "Tagi" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "Chujio" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "Modeli" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "Mionekano" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Arguments" +msgstr "" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "Templeti" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "tagi" + +msgid "filter:" +msgstr "chujio" + +msgid "view:" +msgstr "muonekano" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "Modeli %(model_name)r haijapatikana katika programu %(app_label)r" + +msgid "model:" +msgstr "modeli" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "`%(app_label)s.%(data_type)s` kinachohusiana" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "`%(app_label)s.%(object_name)s` vinavyohusiana" + +#, python-format +msgid "all %s" +msgstr "kila %s" + +#, python-format +msgid "number of %s" +msgstr "idadi ya %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s haionekani kuwa ni kitu cha urlpattern" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/ta/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/ta/LC_MESSAGES/django.po new file mode 100644 index 0000000..c0ca3d9 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/ta/LC_MESSAGES/django.po @@ -0,0 +1,258 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Tamil (http://www.transifex.com/django/django/language/ta/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ta\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "வீடு" + +msgid "Documentation" +msgstr "ஆவனமாக்கம்" + +msgid "Bookmarklets" +msgstr "புத்தகக்குறிகள்" + +msgid "Documentation bookmarklets" +msgstr "ஆவணமாக்கக் குறியீடுகள்" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +msgid "Documentation for this page" +msgstr "இந்த பக்கத்திற்கான ஆவணம்" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"எந்த ஒரு பக்கத்திலிருந்தும் ஆவணப்பக்கத்தை பார்வையிடுதல், அந்த பக்கத்தை உருவாக்குகிறது." + +msgid "Tags" +msgstr "" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Arguments" +msgstr "" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "ஒட்டு:" + +msgid "filter:" +msgstr "வடிகட்டி:" + +msgid "view:" +msgstr "நோற்றமிடு:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "" + +msgid "model:" +msgstr "மாதிரி:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "" + +#, python-format +msgid "all %s" +msgstr "அனைத்து %s " + +#, python-format +msgid "number of %s" +msgstr "எண்ணிக்கை %s" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s -ல் urlpattern தோன்றுவதில்லை" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/te/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/te/LC_MESSAGES/django.po new file mode 100644 index 0000000..b03f0b3 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/te/LC_MESSAGES/django.po @@ -0,0 +1,258 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# bhaskar teja yerneni , 2011 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Telugu (http://www.transifex.com/django/django/language/te/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: te\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "నివాసము" + +msgid "Documentation" +msgstr "పత్రికీకరణ" + +msgid "Bookmarklets" +msgstr "నిర్దుష్ట గుర్తులు " + +msgid "Documentation bookmarklets" +msgstr "పత్రికీకరణ యొక్క నిర్దుష్ట గుర్తులు " + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +msgid "Documentation for this page" +msgstr "ఈ పొరటుకు పత్రికీకరణ" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" + +msgid "Tags" +msgstr "" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Arguments" +msgstr "" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "టాగ్:" + +msgid "filter:" +msgstr "వడపోత:" + +msgid "view:" +msgstr "దర్శనం:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "" + +msgid "model:" +msgstr "మొడల్:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "సంబంధించిన `%(app_label)s.%(data_type)s` అంశము" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "సంబంధించిన `%(app_label)s.%(object_name)s` వస్తువులు" + +#, python-format +msgid "all %s" +msgstr "ఆన్నీ %s" + +#, python-format +msgid "number of %s" +msgstr "%s సంఖ్య" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s యు ఆర్ యల్ నిర్మాణక్రమ అంశము లా లేదు " diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/tr/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/tr/LC_MESSAGES/django.po new file mode 100644 index 0000000..b939921 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/tr/LC_MESSAGES/django.po @@ -0,0 +1,287 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ahmet Emre Aladağ , 2013 +# BouRock, 2015-2016 +# BouRock, 2014 +# Jannis Leidel , 2011 +# Murat Çorlu , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: BouRock\n" +"Language-Team: Turkish (http://www.transifex.com/django/django/language/" +"tr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Administrative Documentation" +msgstr "Yönetimsel Belgeler" + +msgid "Home" +msgstr "Giriş" + +msgid "Documentation" +msgstr "Belgeler" + +msgid "Bookmarklets" +msgstr "Bookmarklet'ler" + +msgid "Documentation bookmarklets" +msgstr "Belge bookmarklet'leri" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" +"Bookmarklet'leri yüklemek için, bağlantıyı yer imleri araç çubuğuna " +"sürükleyin ya da bağlantıya sağ tıklayın ve yer imlerinize ekleyin. Artık " +"sitedeki herhangi bir sayfadan bookmarklet seçebilirsiniz." + +msgid "Documentation for this page" +msgstr "Bu sayfa için belgeler" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Sizi, bu sayfayı oluşturan görünüm için herhangi bir sayfadan belgelere " +"atlatır." + +msgid "Tags" +msgstr "Etiketler" + +msgid "List of all the template tags and their functions." +msgstr "Tüm şablon etiketlerinin ve işlevlerinin listesi." + +msgid "Filters" +msgstr "Süzgeçler" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" +"Süzgeçler, çıktıyı değiştirmek için bir şablondaki değişkenlere " +"uygulanabilen eylemlerdir." + +msgid "Models" +msgstr "Modeller" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" +"Modeller, sistemdeki nesnelerin ve ilişkilendirilmiş alanlarının tümünün " +"tanımlarıdır. Her model, şablon değişkenleri olarak erişilebilen alanların " +"bir listesine sahiptir." + +msgid "Views" +msgstr "Görünümler" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" +"Ortak sitedeki her sayfa, bir görünüm tarafından oluşturulur. Görünüm, " +"sayfayı oluşturmak için hangi şablonun kullanılacağını ve bu şablon için " +"hangi nesnelerin kullanılabilir olacağını tanımlar." + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" +"Tarayıcınızın yönetici işlevselliğine hızlıca erişebilmesi için araçlar" + +msgid "Please install docutils" +msgstr "Lütfen docutils'i yükleyin" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" +"Yönetici belge sistemi, Python'un docutils " +"kütüphanesini gerektirir." + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" +"Lütfen yöneticilerinizden docutils yüklemesini " +"isteyin." + +#, python-format +msgid "Model: %(name)s" +msgstr "Model: %(name)s" + +msgid "Fields" +msgstr "Alanlar" + +msgid "Field" +msgstr "Alan" + +msgid "Type" +msgstr "Tür" + +msgid "Description" +msgstr "Açıklama" + +msgid "Methods with arguments" +msgstr "Bağımsız değişkenleri olan yöntemler" + +msgid "Method" +msgstr "Yöntem" + +msgid "Arguments" +msgstr "Bağımsız değişkenler" + +msgid "Back to Model documentation" +msgstr "Model belgelerine geri dön" + +msgid "Model documentation" +msgstr "Model belgeleri" + +msgid "Model groups" +msgstr "Model grupları" + +msgid "Templates" +msgstr "Şablonlar" + +#, python-format +msgid "Template: %(name)s" +msgstr "Şablon: %(name)s" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "Şablon: \"%(name)s\"" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "\"%(name)s\" şablonu için arama yolu:" + +msgid "(does not exist)" +msgstr "(mevcut değil)" + +msgid "Back to Documentation" +msgstr "Belgelere Geri Dön" + +msgid "Template filters" +msgstr "Şablon süzgeçleri" + +msgid "Template filter documentation" +msgstr "Şablon süzgeci belgeleri" + +msgid "Built-in filters" +msgstr "Yerleşik süzgeçler" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" +"Bu süzgeçleri kullanmak için, süzgeci kullanmadan önce şablonunuzun içine " +"%(code)s yerleştirin." + +msgid "Template tags" +msgstr "Şablon etiketleri" + +msgid "Template tag documentation" +msgstr "Şablon etiketi belgeleri" + +msgid "Built-in tags" +msgstr "Yerleşik etiketler" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" +"Bu etiketleri kullanmak için, etiketi kullanmadan önce şablonunuzun içine " +"%(code)s yerleştirin." + +#, python-format +msgid "View: %(name)s" +msgstr "Görünüm: %(name)s" + +msgid "Context:" +msgstr "Bağlam:" + +msgid "Templates:" +msgstr "Şablonlar:" + +msgid "Back to View documentation" +msgstr "Görünüm belgelerine geri dön" + +msgid "View documentation" +msgstr "Belgeleri görüntüle" + +msgid "Jump to namespace" +msgstr "İsim alanına atla" + +msgid "Empty namespace" +msgstr "Boş isim alanı" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "%(name)s isim alanına göre görünümler" + +msgid "Views by empty namespace" +msgstr "Boş isim alanına göre görünümler" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" +"\n" +" Görünüm işlevi: %(full_name)s. Adı: %(url_name)s.\n" + +msgid "tag:" +msgstr "etiket:" + +msgid "filter:" +msgstr "süzgeç:" + +msgid "view:" +msgstr "görünüm:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "%(app_label)r uygulaması bulunamadı" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "%(app_label)r uygulamasında %(model_name)r modeli bulunamadı" + +msgid "model:" +msgstr "model:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "İlgili `%(app_label)s.%(data_type)s` nesnesi" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "ilgili `%(app_label)s.%(object_name)s` nesneleri" + +#, python-format +msgid "all %s" +msgstr "tüm %s" + +#, python-format +msgid "number of %s" +msgstr "%s sayısı" + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s, bir urlpattern nesnesi olarak görünmüyor" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/tt/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/admindocs/locale/tt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..83b6d941f885d9f9ff260e16b0618cb6a569dc1a GIT binary patch literal 1869 zcma)+O>Y}T7{>=FPz>cw;vJzm5H(S|_8JgvHUy!zsc6)QsJL)U$M)FSc6Y|ij+^EJ zPEsI{RtSj-1vsHfP;nq32~CqG7rwwuedol11N{ITkoeEqX>7m}BR%``>^$$!j(>f8 z&lQ68802}#RmfA2gLmP9H4h#HKLH;Ce+Kt~zkttz7JLr;1Kb1dy_=A?!F}M%AOr6M zuYmW1-?aBvLFexWFbA%K&i;4M2XBM-f-l@d$YuC`5zJ%%6O^6?e{1tE(8YNY%8sL; z^YcFF3Y!Dp1)o6@F7Nl+{GiRt;DdPoH8=u(*WTX-hq3#=Y1cF z-YI@QbUwTE26y!Q13p&fBulhcP)sB!TdIJLG9fU#lRR|oeGS=Q`$m**v!STS*I^^7 zb?~e>WY+CxJr5|f|I?LSAm(#B zN9{~=(S8UY7n_T;c@2@^n3~ldahl(o8^nAIrA^qumZE}n$f{ZI@?}<=i*RITpn4tW zYZO^;cB`asXPeic0OMJ-0oA$&w618cBvPMS2z~2IgkDA-jpkyO{Nu)=MceRzL=n65 z&MDWEIXjQ$-%L9=la65(gK%3+X8|@H!&pXJX4AId8rzGAxoIz9IE{ep2C)9mTRE=uM^BIrdd*An- z$A26-aED>Miuo4i66WieC!WFsqYa(_zXV?de*q7JzkzRnzk_dr|9}U;Lr*jIDR>xs z7v$hU@DBJK_}%t;33Ty(1PkDO(E0xb7QuhPXThV-Fm?;EkAbJ09gJQB{{vl~2VvxN zj)L!iQ=qHmbMSlcYj7MaB8eA313nLa0lK`t!s7_|4LAlafrr39!C~-k(B*v$52TR| zgv^HP!_IKIJ6)&o3MSIe2HY7^&&Er5I&D|C)5u}IjOpUDftYGa#3Yp=-fRl4$tbD_ z;*{vH$&C?OlB!%0Rl`mzbv5GpYA8(1&Zue<32C?ql-#?b%D#qFS5TM~bU zunS4ljA>3KRM#pZF6XjMmx!4W$gfXm+h5SNK+IyB8)^tCG&d+BTe`S;Hlb=Fq=CW6 zaa!_74C$=Mx=Lh?0_m#7KAzJduZVC+GakYtX7wOM(LT#ueI}ErA~dPG+tVV1QjIS6 zd&c>J!Cr@YLhcWXG;}yoiyz$YbM`HJ35UR@$cvTuPkXMG?66et>MS{3y(p`9Rjy zhwzb&1ZUut1&@5Xq-zNc&KT453x(O)*}QS#g1We#ud1lfD`*Gdwr?TPg`wQU`H8a+ zOE2Y%xp5^8emSp`-hV&R`)Q}! z!Z&-f+v+ZE{Yu@IZBx3AkDcyqmM(9tkX=YS>AHKF?=ITSbc3b$V6kX#5H>c_)pXOD z*!lgw)7DD&Tj)PN7D7<^vu&k6!DwqG?a;pAdsZ!b8^X5j1UvSYeE=^cjqD(D7b&eG z2Fl5zZFCo%@&kt*k#xgZKE4K*D@?IzTUmKz+bFf&tHI8vKV&MdNslD%J}ujuefnsi zYs?lhee_17yNgJ?|2AqgIy-{hv#<-$>#%e+Ywv=)$F^nXaRlqTw|pS(C5%Hz*Py*d rPSYL9yuHzFJ@LZ3M&i%73+0vUZ0#mq*T{cDnEva(HwNo9%xC`tK, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Urdu (http://www.transifex.com/django/django/language/ur/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ur\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Administrative Documentation" +msgstr "" + +msgid "Home" +msgstr "صفحۂ اول" + +msgid "Documentation" +msgstr "طریق استعمال" + +msgid "Bookmarklets" +msgstr "بک مارک لیٹس" + +msgid "Documentation bookmarklets" +msgstr "طریق استعمال کے بک مارک لیٹس" + +msgid "" +"To install bookmarklets, drag the link to your bookmarks toolbar, or right-" +"click the link and add it to your bookmarks. Now you can select the " +"bookmarklet from any page in the site." +msgstr "" + +msgid "Documentation for this page" +msgstr "اس صفحے کا طریق استعمال" + +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"آپ کو لے جاتا ہے کسی بھی صفحے سے طریق استعمال کی طرف اس ویو کے لئے جو اس " +"صفحے کو بناتا ہے۔" + +msgid "Tags" +msgstr "" + +msgid "List of all the template tags and their functions." +msgstr "" + +msgid "Filters" +msgstr "" + +msgid "" +"Filters are actions which can be applied to variables in a template to alter " +"the output." +msgstr "" + +msgid "Models" +msgstr "" + +msgid "" +"Models are descriptions of all the objects in the system and their " +"associated fields. Each model has a list of fields which can be accessed as " +"template variables" +msgstr "" + +msgid "Views" +msgstr "" + +msgid "" +"Each page on the public site is generated by a view. The view defines which " +"template is used to generate the page and which objects are available to " +"that template." +msgstr "" + +msgid "Tools for your browser to quickly access admin functionality." +msgstr "" + +msgid "Please install docutils" +msgstr "" + +#, python-format +msgid "" +"The admin documentation system requires Python's docutils library." +msgstr "" + +#, python-format +msgid "" +"Please ask your administrators to install docutils." +msgstr "" + +#, python-format +msgid "Model: %(name)s" +msgstr "" + +msgid "Fields" +msgstr "" + +msgid "Field" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Methods with arguments" +msgstr "" + +msgid "Method" +msgstr "" + +msgid "Arguments" +msgstr "" + +msgid "Back to Model documentation" +msgstr "" + +msgid "Model documentation" +msgstr "" + +msgid "Model groups" +msgstr "" + +msgid "Templates" +msgstr "" + +#, python-format +msgid "Template: %(name)s" +msgstr "" + +#, python-format +msgid "Template: \"%(name)s\"" +msgstr "" + +#. Translators: Search is not a verb here, it qualifies path (a search path) +#, python-format +msgid "Search path for template \"%(name)s\":" +msgstr "" + +msgid "(does not exist)" +msgstr "" + +msgid "Back to Documentation" +msgstr "" + +msgid "Template filters" +msgstr "" + +msgid "Template filter documentation" +msgstr "" + +msgid "Built-in filters" +msgstr "" + +#, python-format +msgid "" +"To use these filters, put %(code)s in your template before " +"using the filter." +msgstr "" + +msgid "Template tags" +msgstr "" + +msgid "Template tag documentation" +msgstr "" + +msgid "Built-in tags" +msgstr "" + +#, python-format +msgid "" +"To use these tags, put %(code)s in your template before using " +"the tag." +msgstr "" + +#, python-format +msgid "View: %(name)s" +msgstr "" + +msgid "Context:" +msgstr "" + +msgid "Templates:" +msgstr "" + +msgid "Back to View documentation" +msgstr "" + +msgid "View documentation" +msgstr "" + +msgid "Jump to namespace" +msgstr "" + +msgid "Empty namespace" +msgstr "" + +#, python-format +msgid "Views by namespace %(name)s" +msgstr "" + +msgid "Views by empty namespace" +msgstr "" + +#, python-format +msgid "" +"\n" +" View function: %(full_name)s. Name: %(url_name)s.\n" +msgstr "" + +msgid "tag:" +msgstr "ٹیگ :" + +msgid "filter:" +msgstr "فلٹر:" + +msgid "view:" +msgstr "ویو:" + +#, python-format +msgid "App %(app_label)r not found" +msgstr "" + +#, python-format +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "ماڈل %(model_name)r ایپ %(app_label)r میں نہیں ملا" + +msgid "model:" +msgstr "model:" + +#, python-format +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "متعلقہ `%(app_label)s.%(data_type)s`اوبجیکٹ" + +#, python-format +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "متعلقہ `%(app_label)s.%(object_name)s` اوبجیکٹس" + +#, python-format +msgid "all %s" +msgstr "تمام %s" + +#, python-format +msgid "number of %s" +msgstr "%sکی تعداد " + +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s بطور urlpattern ظاہر نہیں ہو رہا۔" diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/templates/admin_doc/index.html b/venv/lib/python3.7/site-packages/django/contrib/admindocs/templates/admin_doc/index.html new file mode 100644 index 0000000..aa86a4b --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admindocs/templates/admin_doc/index.html @@ -0,0 +1,34 @@ +{% extends "admin/base_site.html" %} +{% load i18n %} + +{% block breadcrumbs %} + +{% endblock %} +{% block title %}{% trans 'Documentation' %}{% endblock %} + +{% block content %} + +

    {% trans 'Documentation' %}

    + +
    +

    {% trans 'Tags' %}

    +

    {% trans 'List of all the template tags and their functions.' %}

    + +

    {% trans 'Filters' %}

    +

    {% trans 'Filters are actions which can be applied to variables in a template to alter the output.' %}

    + +

    {% trans 'Models' %}

    +

    {% trans 'Models are descriptions of all the objects in the system and their associated fields. Each model has a list of fields which can be accessed as template variables' %}.

    + +

    {% trans 'Views' %}

    +

    {% trans 'Each page on the public site is generated by a view. The view defines which template is used to generate the page and which objects are available to that template.' %}

    + +

    {% trans 'Bookmarklets' %}

    +

    {% trans 'Tools for your browser to quickly access admin functionality.' %}

    +
    + +{% endblock %} + diff --git a/venv/lib/python3.7/site-packages/django/contrib/admindocs/urls.py b/venv/lib/python3.7/site-packages/django/contrib/admindocs/urls.py new file mode 100644 index 0000000..bc9c3df --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/admindocs/urls.py @@ -0,0 +1,50 @@ +from django.contrib.admindocs import views +from django.urls import path, re_path + +urlpatterns = [ + path( + '', + views.BaseAdminDocsView.as_view(template_name='admin_doc/index.html'), + name='django-admindocs-docroot', + ), + path( + 'bookmarklets/', + views.BookmarkletsView.as_view(), + name='django-admindocs-bookmarklets', + ), + path( + 'tags/', + views.TemplateTagIndexView.as_view(), + name='django-admindocs-tags', + ), + path( + 'filters/', + views.TemplateFilterIndexView.as_view(), + name='django-admindocs-filters', + ), + path( + 'views/', + views.ViewIndexView.as_view(), + name='django-admindocs-views-index', + ), + path( + 'views//', + views.ViewDetailView.as_view(), + name='django-admindocs-views-detail', + ), + path( + 'models/', + views.ModelIndexView.as_view(), + name='django-admindocs-models-index', + ), + re_path( + r'^models/(?P[^\.]+)\.(?P[^/]+)/$', + views.ModelDetailView.as_view(), + name='django-admindocs-models-detail', + ), + path( + 'templates//', + views.TemplateDetailView.as_view(), + name='django-admindocs-templates', + ), +] diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/__init__.py b/venv/lib/python3.7/site-packages/django/contrib/auth/__init__.py new file mode 100644 index 0000000..6aa900f --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/auth/__init__.py @@ -0,0 +1,225 @@ +import inspect +import re + +from django.apps import apps as django_apps +from django.conf import settings +from django.core.exceptions import ImproperlyConfigured, PermissionDenied +from django.middleware.csrf import rotate_token +from django.utils.crypto import constant_time_compare +from django.utils.module_loading import import_string +from django.utils.translation import LANGUAGE_SESSION_KEY + +from .signals import user_logged_in, user_logged_out, user_login_failed + +SESSION_KEY = '_auth_user_id' +BACKEND_SESSION_KEY = '_auth_user_backend' +HASH_SESSION_KEY = '_auth_user_hash' +REDIRECT_FIELD_NAME = 'next' + + +def load_backend(path): + return import_string(path)() + + +def _get_backends(return_tuples=False): + backends = [] + for backend_path in settings.AUTHENTICATION_BACKENDS: + backend = load_backend(backend_path) + backends.append((backend, backend_path) if return_tuples else backend) + if not backends: + raise ImproperlyConfigured( + 'No authentication backends have been defined. Does ' + 'AUTHENTICATION_BACKENDS contain anything?' + ) + return backends + + +def get_backends(): + return _get_backends(return_tuples=False) + + +def _clean_credentials(credentials): + """ + Clean a dictionary of credentials of potentially sensitive info before + sending to less secure functions. + + Not comprehensive - intended for user_login_failed signal + """ + SENSITIVE_CREDENTIALS = re.compile('api|token|key|secret|password|signature', re.I) + CLEANSED_SUBSTITUTE = '********************' + for key in credentials: + if SENSITIVE_CREDENTIALS.search(key): + credentials[key] = CLEANSED_SUBSTITUTE + return credentials + + +def _get_user_session_key(request): + # This value in the session is always serialized to a string, so we need + # to convert it back to Python whenever we access it. + return get_user_model()._meta.pk.to_python(request.session[SESSION_KEY]) + + +def authenticate(request=None, **credentials): + """ + If the given credentials are valid, return a User object. + """ + for backend, backend_path in _get_backends(return_tuples=True): + try: + inspect.getcallargs(backend.authenticate, request, **credentials) + except TypeError: + # This backend doesn't accept these credentials as arguments. Try the next one. + continue + try: + user = backend.authenticate(request, **credentials) + except PermissionDenied: + # This backend says to stop in our tracks - this user should not be allowed in at all. + break + if user is None: + continue + # Annotate the user object with the path of the backend. + user.backend = backend_path + return user + + # The credentials supplied are invalid to all backends, fire signal + user_login_failed.send(sender=__name__, credentials=_clean_credentials(credentials), request=request) + + +def login(request, user, backend=None): + """ + Persist a user id and a backend in the request. This way a user doesn't + have to reauthenticate on every request. Note that data set during + the anonymous session is retained when the user logs in. + """ + session_auth_hash = '' + if user is None: + user = request.user + if hasattr(user, 'get_session_auth_hash'): + session_auth_hash = user.get_session_auth_hash() + + if SESSION_KEY in request.session: + if _get_user_session_key(request) != user.pk or ( + session_auth_hash and + not constant_time_compare(request.session.get(HASH_SESSION_KEY, ''), session_auth_hash)): + # To avoid reusing another user's session, create a new, empty + # session if the existing session corresponds to a different + # authenticated user. + request.session.flush() + else: + request.session.cycle_key() + + try: + backend = backend or user.backend + except AttributeError: + backends = _get_backends(return_tuples=True) + if len(backends) == 1: + _, backend = backends[0] + else: + raise ValueError( + 'You have multiple authentication backends configured and ' + 'therefore must provide the `backend` argument or set the ' + '`backend` attribute on the user.' + ) + else: + if not isinstance(backend, str): + raise TypeError('backend must be a dotted import path string (got %r).' % backend) + + request.session[SESSION_KEY] = user._meta.pk.value_to_string(user) + request.session[BACKEND_SESSION_KEY] = backend + request.session[HASH_SESSION_KEY] = session_auth_hash + if hasattr(request, 'user'): + request.user = user + rotate_token(request) + user_logged_in.send(sender=user.__class__, request=request, user=user) + + +def logout(request): + """ + Remove the authenticated user's ID from the request and flush their session + data. + """ + # Dispatch the signal before the user is logged out so the receivers have a + # chance to find out *who* logged out. + user = getattr(request, 'user', None) + if not getattr(user, 'is_authenticated', True): + user = None + user_logged_out.send(sender=user.__class__, request=request, user=user) + + # remember language choice saved to session + language = request.session.get(LANGUAGE_SESSION_KEY) + + request.session.flush() + + if language is not None: + request.session[LANGUAGE_SESSION_KEY] = language + + if hasattr(request, 'user'): + from django.contrib.auth.models import AnonymousUser + request.user = AnonymousUser() + + +def get_user_model(): + """ + Return the User model that is active in this project. + """ + try: + return django_apps.get_model(settings.AUTH_USER_MODEL, require_ready=False) + except ValueError: + raise ImproperlyConfigured("AUTH_USER_MODEL must be of the form 'app_label.model_name'") + except LookupError: + raise ImproperlyConfigured( + "AUTH_USER_MODEL refers to model '%s' that has not been installed" % settings.AUTH_USER_MODEL + ) + + +def get_user(request): + """ + Return the user model instance associated with the given request session. + If no user is retrieved, return an instance of `AnonymousUser`. + """ + from .models import AnonymousUser + user = None + try: + user_id = _get_user_session_key(request) + backend_path = request.session[BACKEND_SESSION_KEY] + except KeyError: + pass + else: + if backend_path in settings.AUTHENTICATION_BACKENDS: + backend = load_backend(backend_path) + user = backend.get_user(user_id) + # Verify the session + if hasattr(user, 'get_session_auth_hash'): + session_hash = request.session.get(HASH_SESSION_KEY) + session_hash_verified = session_hash and constant_time_compare( + session_hash, + user.get_session_auth_hash() + ) + if not session_hash_verified: + request.session.flush() + user = None + + return user or AnonymousUser() + + +def get_permission_codename(action, opts): + """ + Return the codename of the permission for the specified action. + """ + return '%s_%s' % (action, opts.model_name) + + +def update_session_auth_hash(request, user): + """ + Updating a user's password logs out all sessions for the user. + + Take the current request and the updated user object from which the new + session hash will be derived and update the session hash appropriately to + prevent a password change from logging out the session from which the + password was changed. + """ + request.session.cycle_key() + if hasattr(user, 'get_session_auth_hash') and request.user == user: + request.session[HASH_SESSION_KEY] = user.get_session_auth_hash() + + +default_app_config = 'django.contrib.auth.apps.AuthConfig' diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/checks.py b/venv/lib/python3.7/site-packages/django/contrib/auth/checks.py new file mode 100644 index 0000000..ec133e8 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/auth/checks.py @@ -0,0 +1,166 @@ +from itertools import chain +from types import MethodType + +from django.apps import apps +from django.conf import settings +from django.core import checks + +from .management import _get_builtin_permissions + + +def check_user_model(app_configs=None, **kwargs): + if app_configs is None: + cls = apps.get_model(settings.AUTH_USER_MODEL) + else: + app_label, model_name = settings.AUTH_USER_MODEL.split('.') + for app_config in app_configs: + if app_config.label == app_label: + cls = app_config.get_model(model_name) + break + else: + # Checks might be run against a set of app configs that don't + # include the specified user model. In this case we simply don't + # perform the checks defined below. + return [] + + errors = [] + + # Check that REQUIRED_FIELDS is a list + if not isinstance(cls.REQUIRED_FIELDS, (list, tuple)): + errors.append( + checks.Error( + "'REQUIRED_FIELDS' must be a list or tuple.", + obj=cls, + id='auth.E001', + ) + ) + + # Check that the USERNAME FIELD isn't included in REQUIRED_FIELDS. + if cls.USERNAME_FIELD in cls.REQUIRED_FIELDS: + errors.append( + checks.Error( + "The field named as the 'USERNAME_FIELD' " + "for a custom user model must not be included in 'REQUIRED_FIELDS'.", + obj=cls, + id='auth.E002', + ) + ) + + # Check that the username field is unique + if not cls._meta.get_field(cls.USERNAME_FIELD).unique: + if (settings.AUTHENTICATION_BACKENDS == + ['django.contrib.auth.backends.ModelBackend']): + errors.append( + checks.Error( + "'%s.%s' must be unique because it is named as the 'USERNAME_FIELD'." % ( + cls._meta.object_name, cls.USERNAME_FIELD + ), + obj=cls, + id='auth.E003', + ) + ) + else: + errors.append( + checks.Warning( + "'%s.%s' is named as the 'USERNAME_FIELD', but it is not unique." % ( + cls._meta.object_name, cls.USERNAME_FIELD + ), + hint='Ensure that your authentication backend(s) can handle non-unique usernames.', + obj=cls, + id='auth.W004', + ) + ) + + if isinstance(cls().is_anonymous, MethodType): + errors.append( + checks.Critical( + '%s.is_anonymous must be an attribute or property rather than ' + 'a method. Ignoring this is a security issue as anonymous ' + 'users will be treated as authenticated!' % cls, + obj=cls, + id='auth.C009', + ) + ) + if isinstance(cls().is_authenticated, MethodType): + errors.append( + checks.Critical( + '%s.is_authenticated must be an attribute or property rather ' + 'than a method. Ignoring this is a security issue as anonymous ' + 'users will be treated as authenticated!' % cls, + obj=cls, + id='auth.C010', + ) + ) + return errors + + +def check_models_permissions(app_configs=None, **kwargs): + if app_configs is None: + models = apps.get_models() + else: + models = chain.from_iterable(app_config.get_models() for app_config in app_configs) + + Permission = apps.get_model('auth', 'Permission') + permission_name_max_length = Permission._meta.get_field('name').max_length + errors = [] + + for model in models: + opts = model._meta + builtin_permissions = dict(_get_builtin_permissions(opts)) + # Check builtin permission name length. + max_builtin_permission_name_length = ( + max(len(name) for name in builtin_permissions.values()) + if builtin_permissions else 0 + ) + if max_builtin_permission_name_length > permission_name_max_length: + verbose_name_max_length = ( + permission_name_max_length - (max_builtin_permission_name_length - len(opts.verbose_name_raw)) + ) + errors.append( + checks.Error( + "The verbose_name of model '%s.%s' must be at most %d characters " + "for its builtin permission names to be at most %d characters." % ( + opts.app_label, opts.object_name, verbose_name_max_length, permission_name_max_length + ), + obj=model, + id='auth.E007', + ) + ) + codenames = set() + for codename, name in opts.permissions: + # Check custom permission name length. + if len(name) > permission_name_max_length: + errors.append( + checks.Error( + "The permission named '%s' of model '%s.%s' is longer than %d characters." % ( + name, opts.app_label, opts.object_name, permission_name_max_length + ), + obj=model, + id='auth.E008', + ) + ) + # Check custom permissions codename clashing. + if codename in builtin_permissions: + errors.append( + checks.Error( + "The permission codenamed '%s' clashes with a builtin permission " + "for model '%s.%s'." % ( + codename, opts.app_label, opts.object_name + ), + obj=model, + id='auth.E005', + ) + ) + elif codename in codenames: + errors.append( + checks.Error( + "The permission codenamed '%s' is duplicated for model '%s.%s'." % ( + codename, opts.app_label, opts.object_name + ), + obj=model, + id='auth.E006', + ) + ) + codenames.add(codename) + + return errors diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/common-passwords.txt.gz b/venv/lib/python3.7/site-packages/django/contrib/auth/common-passwords.txt.gz new file mode 100644 index 0000000000000000000000000000000000000000..e758dbe9a7b12572843ad4973f3d864d5165f2ac GIT binary patch literal 81355 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 F0s!mBNTmP( literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/decorators.py b/venv/lib/python3.7/site-packages/django/contrib/auth/decorators.py new file mode 100644 index 0000000..53f62e8 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/auth/decorators.py @@ -0,0 +1,73 @@ +from functools import wraps +from urllib.parse import urlparse + +from django.conf import settings +from django.contrib.auth import REDIRECT_FIELD_NAME +from django.core.exceptions import PermissionDenied +from django.shortcuts import resolve_url + + +def user_passes_test(test_func, login_url=None, redirect_field_name=REDIRECT_FIELD_NAME): + """ + Decorator for views that checks that the user passes the given test, + redirecting to the log-in page if necessary. The test should be a callable + that takes the user object and returns True if the user passes. + """ + + def decorator(view_func): + @wraps(view_func) + def _wrapped_view(request, *args, **kwargs): + if test_func(request.user): + return view_func(request, *args, **kwargs) + path = request.build_absolute_uri() + resolved_login_url = resolve_url(login_url or settings.LOGIN_URL) + # If the login url is the same scheme and net location then just + # use the path as the "next" url. + login_scheme, login_netloc = urlparse(resolved_login_url)[:2] + current_scheme, current_netloc = urlparse(path)[:2] + if ((not login_scheme or login_scheme == current_scheme) and + (not login_netloc or login_netloc == current_netloc)): + path = request.get_full_path() + from django.contrib.auth.views import redirect_to_login + return redirect_to_login( + path, resolved_login_url, redirect_field_name) + return _wrapped_view + return decorator + + +def login_required(function=None, redirect_field_name=REDIRECT_FIELD_NAME, login_url=None): + """ + Decorator for views that checks that the user is logged in, redirecting + to the log-in page if necessary. + """ + actual_decorator = user_passes_test( + lambda u: u.is_authenticated, + login_url=login_url, + redirect_field_name=redirect_field_name + ) + if function: + return actual_decorator(function) + return actual_decorator + + +def permission_required(perm, login_url=None, raise_exception=False): + """ + Decorator for views that checks whether a user has a particular permission + enabled, redirecting to the log-in page if necessary. + If the raise_exception parameter is given the PermissionDenied exception + is raised. + """ + def check_perms(user): + if isinstance(perm, str): + perms = (perm,) + else: + perms = perm + # First check if the user has the permission (even anon users) + if user.has_perms(perms): + return True + # In case the 403 handler should be called raise the exception + if raise_exception: + raise PermissionDenied + # As the last resort, show the login form + return False + return user_passes_test(check_perms, login_url=login_url) diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/handlers/__init__.py b/venv/lib/python3.7/site-packages/django/contrib/auth/handlers/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/ar/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/ar/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..92fa4fda7c4963a9404b48d395016736abc8feb6 GIT binary patch literal 8705 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 Jv*zWe`Y*`3cg+9* literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/ast/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/ast/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e5f1ace201e93b9eee3cbfaa463c19a020e2d223 GIT binary patch literal 2250 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/bg/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/bg/LC_MESSAGES/django.po new file mode 100644 index 0000000..8277d9d --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/bg/LC_MESSAGES/django.po @@ -0,0 +1,304 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Boris Chervenkov , 2012 +# Georgi Kostadinov , 2012 +# Jannis Leidel , 2011 +# Lyuboslav Petrov , 2014 +# Todor Lubenov , 2015 +# Venelin Stoykov , 2015-2016 +# vestimir , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-09-24 14:24+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Bulgarian (http://www.transifex.com/django/django/language/" +"bg/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "Лична информация" + +msgid "Permissions" +msgstr "Права" + +msgid "Important dates" +msgstr "Важни дати" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "%(name)s обект с първичен ключ %(key)r не съществува." + +msgid "Password changed successfully." +msgstr "Паролата беше променена успешно. " + +#, python-format +msgid "Change password: %s" +msgstr "Промени парола: %s" + +msgid "Authentication and Authorization" +msgstr "Аутентикация и оторизация" + +msgid "password" +msgstr "парола" + +msgid "last login" +msgstr "последно вписване" + +msgid "No password set." +msgstr "Не е запазена парола." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Невалиден формат за парола или неизвестен алгоритъм за хеширане." + +msgid "The two password fields didn't match." +msgstr "Двете полета за паролата не съвпадат. " + +msgid "Password" +msgstr "Парола" + +msgid "Password confirmation" +msgstr "Потвърждение на паролата" + +msgid "Enter the same password as before, for verification." +msgstr "Въведете същата парола като преди, за да потвърдите." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Моля, въведете правилните %(username)s и парола. Имайте предвид, че и двете " +"полета могат да бъдат малки или главни букви." + +msgid "This account is inactive." +msgstr "Този профил е неактивен." + +msgid "Email" +msgstr "Email" + +msgid "New password" +msgstr "Нова парола" + +msgid "New password confirmation" +msgstr "Потвърждение на новата парола" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Въвели сте погрешна стара парола. Въведете я отново. " + +msgid "Old password" +msgstr "Стара парола" + +msgid "Password (again)" +msgstr "Парола (отново)" + +msgid "algorithm" +msgstr "алгоритъм" + +msgid "iterations" +msgstr "повторения" + +msgid "salt" +msgstr "'salt'" + +msgid "hash" +msgstr "хеш" + +msgid "variety" +msgstr "" + +msgid "version" +msgstr "версия" + +msgid "memory cost" +msgstr "" + +msgid "time cost" +msgstr "" + +msgid "parallelism" +msgstr "" + +msgid "work factor" +msgstr "работен фактор" + +msgid "checksum" +msgstr "чексума" + +msgid "name" +msgstr "име" + +msgid "content type" +msgstr "тип на съдържанието" + +msgid "codename" +msgstr "код" + +msgid "permission" +msgstr "право" + +msgid "permissions" +msgstr "права" + +msgid "group" +msgstr "група" + +msgid "groups" +msgstr "групи" + +msgid "superuser status" +msgstr "статут на супер-потребител" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Указва, че този потребител има всички права (без да има нужда да се " +"изброяват изрично)." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Групите на които този потребител принадлежи. Потребителят ще получи всички " +"разрешения, дадени на всяка една от своите групи." + +msgid "user permissions" +msgstr "права на потребител" + +msgid "Specific permissions for this user." +msgstr "Специфични права за този потребител" + +msgid "username" +msgstr "потребител" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "Задължително. 150 знака или по-малко. Букви, цифри и @/./+/-/_ ." + +msgid "A user with that username already exists." +msgstr "Потребител с това потребителско име вече съществува. " + +msgid "first name" +msgstr "собствено име" + +msgid "last name" +msgstr "фамилно име" + +msgid "email address" +msgstr "имейл адрес" + +msgid "staff status" +msgstr "статус на персонал" + +msgid "Designates whether the user can log into this admin site." +msgstr "Указва дали този потребител има достъп до административния панел." + +msgid "active" +msgstr "активен" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Указва дали този потребител трябва да се третира като активен. Премахнете на " +"избора на това, вместо да триете профила." + +msgid "date joined" +msgstr "дата на регистриране" + +msgid "user" +msgstr "потребител" + +msgid "users" +msgstr "потребители" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Паролата е прекелно къса. Трябва да съдържа поне %(min_length)d символ." +msgstr[1] "" +"Паролата е прекелно къса. Трябва да съдържа поне %(min_length)d символа." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Вашата парола трябва да съдържа поне %(min_length)d символ." +msgstr[1] "Вашата парола трябва да съдържа поне %(min_length)d символа." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Паролата е много подобна на %(verbose_name)s." + +msgid "Your password can't be too similar to your other personal information." +msgstr "Вашата парола не може да прилича на останалата Ви лична информация." + +msgid "This password is too common." +msgstr "Тази парола е често срещана." + +msgid "Your password can't be a commonly used password." +msgstr "Вашата парола не може да бъде често срещана." + +msgid "This password is entirely numeric." +msgstr "Тази парола е изцяло от цифри." + +msgid "Your password can't be entirely numeric." +msgstr "Вашата парола не може да бъде само от цифри." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Променена парола на %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Въведете валидно потребителско име. То може да съдържа само букви на " +"латиница, цифри и @/./+/-/_ символи." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Въведете валидно потребителско име. То може да съдържа само букви, цифри и " +"@/./+/-/_ символи." + +msgid "Logged out" +msgstr "Извън системата" + +msgid "Password reset" +msgstr "Забравена парола" + +msgid "Password reset sent" +msgstr "Нулиране на паролата изпратено" + +msgid "Enter new password" +msgstr "Въведете нова парола" + +msgid "Password reset unsuccessful" +msgstr "Неуспешна промяна на паролата " + +msgid "Password reset complete" +msgstr "Промяната на парола завърши" + +msgid "Password change" +msgstr "Промяна на парола" + +msgid "Password change successful" +msgstr "Паролата е сменена успешно" diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/bn/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/bn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9bb6607f4a6a6e07dfbbe29cd393b31a8896ffb9 GIT binary patch literal 5455 zcmbW3TZ|k>6^1JzKv+mfLV!SmQ@QWPnc0gsV2^Qxy>TKVUlwPBKnf4NGc_~q^mLEA zdpx!P2^`2p7Rm#%BL$PSWxF?ujcpd>i-c?;5%Cc5f{=JHvgQFKKp-BF5E3tZr>f`T zWq0k++UkF*>eRXX=bY-jde6bOyaIk2{401bc=Lyq`Y5;xybXLDd2&Z{P;(X{{}_hO)QGO+dzruUXak#qoACB0)!H^Cf{G1;}j@*x99s`1Nl?m;3ayh zpy=NX%K2}D!qa|G_<22FKa$T+fc&X*yu|)x@DMqB7u>=81(c41r@&e8D!2#Sh>`ce z3*ZF!J&a6(=fOkZ-@qdH5uB)5M;~#ZcunW0*-;d07cK=!R_FKByAJ8 z8+;1KlNi?xT1av%DG>HV*mFbe@fl$?A#4XoU1_bvy|g= zpyVe2rJnYIli(aEdVdG52mc7lIgJsqvyK;OvX8XZ1Y?XLy+vrY#-)xW2GJ`Il&S*b ze#WDWH4N!d(I+vDGoZ`*Sp=V82q%v-9$?5LKHX}6xi~2Y`$(P%_S0aWMi~nHu*P}QC=M!Y*9~j2Y&ex=FVsO)(|(vn ztYXQlH2hE}erlFE+4Ux=N3EcuXN^t?Dm4`hYphU z4LNnIH>gE1%oF(5s8+)*=uz7TwGU2oISQ-3D1%P5J?fiCOj=Ysh_IU-HJzua_d^eR zHO~)6`U_>7(8Y6|w8~|ZB-K{1c&jq77wjtzY!CX?wX9=jk#7Pu-0co#B>ba&V`&GYuORQO!^=X?uX3s&9fyqAPwSd@R+_SFVec z6p%}-=BFR#^`O2UwPGC&kg3~Li;>KeAwMifaZI_ufSwMFml(IF{Zw0ui^^$IUN^m} zTsP$xlU75Oql%I4Qc^2=SLBDLqD;f{1B$rC%e$eGI`Jcpp%{HWN&w}OP%a=XI}OYIoQb#v$|N2`OBT` zM~KOh6US92d&izc-48qSbN2UHtMn+cr>v0$yNZREH3k}*UiAxutM#g1-qvP-|+XFVzZL9jfv-2LYW9fbbhoTUf?T*3!3GBNa&bPu31x|pgiac7fUO%A z#6?#a=d1IN9E2YO(n^5Hr3r~UBGn3%eR6C*1rb50;h>=csg5l9fem-TMhLu}B96p>spLV%4_I_Em-@-ABb ze79hvLNKw!J-9?JQP=Od>v-TO$P@W~WS!58%azsl6aO{VoyI{HZ581Zjo7`VZ3)?C zl2rAs8%maLksI80oOCCX6RtrKdR=|E+vvRA zlNxu0LJWL7u*(&21K+L8USY06q!(b2u2`_|e$(XsE^#sUu3A#;+;(@CWZe2o_1V6A z**b_yk+R<2cpoBu#KwfypI8krCj|DsO)@8BmTaksk$!*M5^&Vn?@KR#+~Rl(V|*J1 zFK^Ou5LHxoZq}MwzUcGsf(tbN1}do&QGdody!h&6`%UXJ{&E6;PqQRnZ#y|^Q=PA# z>8^5lW2zUM&`4P^cZDn87>>IXN*384^xz#z{L{#~tiWDlj*bzF9qMpG#T?qC!`_}uvmc9Ep*~_Af7Z&hZ zY%jZkQxrDd&mrYLcFy&aS|ZFncKH&XofNltud|4Q|4Hab;e3Td;)*kH#wr<@TQcPA W(r&VG4c$!ox&~9UXoJ!?rv3{_S@k*q literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/bs/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/bs/LC_MESSAGES/django.po new file mode 100644 index 0000000..7656fb3 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/bs/LC_MESSAGES/django.po @@ -0,0 +1,292 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-09-24 14:24+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Bosnian (http://www.transifex.com/django/django/language/" +"bs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bs\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +msgid "Personal info" +msgstr "Lični podaci" + +msgid "Permissions" +msgstr "Dozvole" + +msgid "Important dates" +msgstr "Važni datumi" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "" + +msgid "Password changed successfully." +msgstr "Lozinka uspješno izmjenjena." + +#, python-format +msgid "Change password: %s" +msgstr "Izmjeni lozinku: %s" + +msgid "Authentication and Authorization" +msgstr "" + +msgid "password" +msgstr "lozinka" + +msgid "last login" +msgstr "posljednja prijava" + +msgid "No password set." +msgstr "" + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "" + +msgid "The two password fields didn't match." +msgstr "Dva polja za lozinku se nisu poklopila." + +msgid "Password" +msgstr "Lozinka" + +msgid "Password confirmation" +msgstr "Potvrda lozinke" + +msgid "Enter the same password as before, for verification." +msgstr "" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" + +msgid "This account is inactive." +msgstr "Ovaj nalog je neaktivan." + +msgid "Email" +msgstr "" + +msgid "New password" +msgstr "Nova lozinka" + +msgid "New password confirmation" +msgstr "Potvrda nove lozinke" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Vaša stara lozinka nije pravilno unesena. Unesite je ponovo." + +msgid "Old password" +msgstr "Stara lozinka" + +msgid "Password (again)" +msgstr "Lozinka (ponovite)" + +msgid "algorithm" +msgstr "" + +msgid "iterations" +msgstr "" + +msgid "salt" +msgstr "" + +msgid "hash" +msgstr "" + +msgid "variety" +msgstr "" + +msgid "version" +msgstr "" + +msgid "memory cost" +msgstr "" + +msgid "time cost" +msgstr "" + +msgid "parallelism" +msgstr "" + +msgid "work factor" +msgstr "" + +msgid "checksum" +msgstr "" + +msgid "name" +msgstr "ime" + +msgid "content type" +msgstr "" + +msgid "codename" +msgstr "šifra dozvole" + +msgid "permission" +msgstr "dozvola" + +msgid "permissions" +msgstr "dozvole" + +msgid "group" +msgstr "grupa" + +msgid "groups" +msgstr "grupe" + +msgid "superuser status" +msgstr "status administratora" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Označava da li korisnik ima sve dozvole bez dodjeljivanja pojedinačnih " +"dozvola." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" + +msgid "user permissions" +msgstr "korisničke dozvole" + +msgid "Specific permissions for this user." +msgstr "" + +msgid "username" +msgstr "korisničko ime" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +msgid "A user with that username already exists." +msgstr "Korisnik sa tim korisničkim imenom već postoji." + +msgid "first name" +msgstr "ime" + +msgid "last name" +msgstr "prezime" + +msgid "email address" +msgstr "" + +msgid "staff status" +msgstr "status člana uredništva" + +msgid "Designates whether the user can log into this admin site." +msgstr "" +"Označava da li korisnik može da se prijavi na ovaj sajt za administraciju." + +msgid "active" +msgstr "aktivan" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Označava da li se korisnik smatra aktivnim. Uklnote izbor sa ovog polja " +"umjesto da brišete nalog." + +msgid "date joined" +msgstr "datum registracije" + +msgid "user" +msgstr "korisnik" + +msgid "users" +msgstr "korisnici" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "" + +msgid "Your password can't be too similar to your other personal information." +msgstr "" + +msgid "This password is too common." +msgstr "" + +msgid "Your password can't be a commonly used password." +msgstr "" + +msgid "This password is entirely numeric." +msgstr "" + +msgid "Your password can't be entirely numeric." +msgstr "" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" + +msgid "Logged out" +msgstr "Odjavljen" + +msgid "Password reset" +msgstr "" + +msgid "Password reset sent" +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Password reset unsuccessful" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgid "Password change" +msgstr "" + +msgid "Password change successful" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/cs/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/cs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c8eb06dbec9c73c0602b5b2d76be4d9e5b010a6c GIT binary patch literal 7805 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 T8M)C7tXjt#{C7yUPwepDq6WLr literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/cs/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/cs/LC_MESSAGES/django.po new file mode 100644 index 0000000..eb8c14e --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/cs/LC_MESSAGES/django.po @@ -0,0 +1,306 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jan Munclinger , 2013 +# Jannis Leidel , 2011 +# Tomáš Ehrlich , 2015 +# Vláďa Macek , 2013-2014 +# Vláďa Macek , 2015-2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-11-16 12:22+0000\n" +"Last-Translator: Vláďa Macek \n" +"Language-Team: Czech (http://www.transifex.com/django/django/language/cs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cs\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n " +"<= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" + +msgid "Personal info" +msgstr "Osobní údaje" + +msgid "Permissions" +msgstr "Oprávnění" + +msgid "Important dates" +msgstr "Důležitá data" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "Položka \"%(name)s\" s primárním klíčem \"%(key)r\" neexistuje." + +msgid "Password changed successfully." +msgstr "Změna hesla byla úspěšná." + +#, python-format +msgid "Change password: %s" +msgstr "Heslo pro uživatele %s: změnit" + +msgid "Authentication and Authorization" +msgstr "Autentizace a autorizace" + +msgid "password" +msgstr "heslo" + +msgid "last login" +msgstr "poslední přihlášení" + +msgid "No password set." +msgstr "Heslo nenastaveno." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Neplatný formát hesla nebo neplatný hashovací algoritmus." + +msgid "The two password fields didn't match." +msgstr "Hesla se neshodují." + +msgid "Password" +msgstr "Heslo" + +msgid "Password confirmation" +msgstr "Potvrzení hesla" + +msgid "Enter the same password as before, for verification." +msgstr "Zadejte pro ověření stejné heslo jako předtím." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" +"Hesla se neukládají přímo a tak je nelze zobrazit. Je ale možné je změnit " +"pomocí tohoto formuláře." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Zadejte správnou hodnotu pole %(username)s a heslo. Pozor, obě pole mohou " +"rozlišovat malá a velká písmena." + +msgid "This account is inactive." +msgstr "Tento účet je neaktivní." + +msgid "Email" +msgstr "E-mail" + +msgid "New password" +msgstr "Nové heslo" + +msgid "New password confirmation" +msgstr "Potvrzení nového hesla" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Vaše současné heslo nebylo zadáno správně. Zkuste to znovu." + +msgid "Old password" +msgstr "Současné heslo" + +msgid "Password (again)" +msgstr "Heslo (znovu)" + +msgid "algorithm" +msgstr "algoritmus" + +msgid "iterations" +msgstr "iterace" + +msgid "salt" +msgstr "hodnota salt" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "varieta" + +msgid "version" +msgstr "verze" + +msgid "memory cost" +msgstr "spotřeba paměti" + +msgid "time cost" +msgstr "doba" + +msgid "parallelism" +msgstr "paralelismus" + +msgid "work factor" +msgstr "faktor práce" + +msgid "checksum" +msgstr "kontrolní součet" + +msgid "name" +msgstr "název" + +msgid "content type" +msgstr "typ obsahu" + +msgid "codename" +msgstr "kódový název" + +msgid "permission" +msgstr "oprávnění" + +msgid "permissions" +msgstr "oprávnění" + +msgid "group" +msgstr "skupina" + +msgid "groups" +msgstr "skupiny" + +msgid "superuser status" +msgstr "superuživatel" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Určuje, že uživatel má veškerá oprávnění bez jejich explicitního přiřazení." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Skupiny, do kterých tento uživatel patří. Uživatel dostane všechna oprávnění " +"udělená každé z jeho skupin." + +msgid "user permissions" +msgstr "uživatelská oprávnění" + +msgid "Specific permissions for this user." +msgstr "Konkrétní oprávnění tohoto uživatele." + +msgid "username" +msgstr "uživatelské jméno" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"Požadováno. 150 znaků nebo méně. Pouze písmena, číslice a znaky @/./+/-/_." + +msgid "A user with that username already exists." +msgstr "Uživatel s tímto jménem již existuje." + +msgid "first name" +msgstr "křestní jméno" + +msgid "last name" +msgstr "příjmení" + +msgid "email address" +msgstr "e-mailová adresa" + +msgid "staff status" +msgstr "administrační přístup" + +msgid "Designates whether the user can log into this admin site." +msgstr "Určuje, zda se uživatel může přihlásit do správy tohoto webu." + +msgid "active" +msgstr "aktivní" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Určuje, zda bude uživatel považován za aktivního. Použijte tuto možnost " +"místo odstranění účtů." + +msgid "date joined" +msgstr "datum registrace" + +msgid "user" +msgstr "uživatel" + +msgid "users" +msgstr "uživatelé" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "Heslo je příliš krátké. Musí mít délku aspoň %(min_length)d znak." +msgstr[1] "Heslo je příliš krátké. Musí mít délku aspoň %(min_length)d znaky." +msgstr[2] "Heslo je příliš krátké. Musí mít délku aspoň %(min_length)d znaků." +msgstr[3] "Heslo je příliš krátké. Musí mít délku aspoň %(min_length)d znaků." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Heslo musí mít délku aspoň %(min_length)d znak." +msgstr[1] "Heslo musí mít délku aspoň %(min_length)d znaky." +msgstr[2] "Heslo musí mít délku aspoň %(min_length)d znaků." +msgstr[3] "Heslo musí mít délku aspoň %(min_length)d znaků." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Heslo je příliš podobné obsahu pole %(verbose_name)s." + +msgid "Your password can't be too similar to your other personal information." +msgstr "Heslo nemůže být příliš podobné jinému údaji ve vašem účtu." + +msgid "This password is too common." +msgstr "Heslo je příliš běžné." + +msgid "Your password can't be a commonly used password." +msgstr "Vaše heslo nemůže být takové, které je často používané." + +msgid "This password is entirely numeric." +msgstr "Heslo se skládá pouze z čísel." + +msgid "Your password can't be entirely numeric." +msgstr "Vaše heslo nemůže být čistě číselné." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Obnovení hesla na webu %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Zadejte platné uživatelské jméno. Hodnota může obsahovat pouze písmena bez " +"diakritiky, tj. háčků a čárek, číslice a znaky @/./+/-/_." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Zadejte platné uživatelské jméno. Hodnota může obsahovat pouze písmena, " +"číslice a znaky @/./+/-/_." + +msgid "Logged out" +msgstr "Odhlášeno" + +msgid "Password reset" +msgstr "Obnovení hesla" + +msgid "Password reset sent" +msgstr "Zpráva s obnovením hesla byla odeslána" + +msgid "Enter new password" +msgstr "Zadejte nové heslo" + +msgid "Password reset unsuccessful" +msgstr "Obnovení hesla bylo neúspěšné" + +msgid "Password reset complete" +msgstr "Heslo bylo obnoveno" + +msgid "Password change" +msgstr "Změna hesla" + +msgid "Password change successful" +msgstr "Změna hesla byla úspěšná" diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/de/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/de/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..110c5c7ecf2741c89bfb31f871b274a3a36f24cd GIT binary patch literal 7514 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 U!8e^MP9tj8PnR|cU5+dN1Ljw`jQ{`u literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/dsb/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/dsb/LC_MESSAGES/django.po new file mode 100644 index 0000000..abe465c --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/dsb/LC_MESSAGES/django.po @@ -0,0 +1,315 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Michael Wolf , 2016-2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-10-02 10:01+0000\n" +"Last-Translator: Michael Wolf \n" +"Language-Team: Lower Sorbian (http://www.transifex.com/django/django/" +"language/dsb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: dsb\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "Personal info" +msgstr "Wósobinske informacije" + +msgid "Permissions" +msgstr "Pšawa" + +msgid "Important dates" +msgstr "Wažne daty" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "Objekt %(name)s z primarnym klucom %(key)r njeeksistěrujo." + +msgid "Password changed successfully." +msgstr "Gronidło jo se změniło." + +#, python-format +msgid "Change password: %s" +msgstr "Gronidło změniś: %s" + +msgid "Authentication and Authorization" +msgstr "Awtentifikacija a awtorizacija" + +msgid "password" +msgstr "gronidło" + +msgid "last login" +msgstr "slědne pśizjawjenje" + +msgid "No password set." +msgstr "Žedno gronidło nastajone." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Njepłaśiwy gronidłowy format abo njeznaty kontrolny algoritmus." + +msgid "The two password fields didn't match." +msgstr "Gronidle njejstej jadnak." + +msgid "Password" +msgstr "Gronidło" + +msgid "Password confirmation" +msgstr "Gronidłowe wobkšuśenje" + +msgid "Enter the same password as before, for verification." +msgstr "Zapódajśo to samske gronidło, za pśespytanje." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" +"Grube gronidła se njeskładuju, togodla njejo móžno, gronidło wužywarja " +"wiźeś, ale móžośo gronidło z pomocu toś togo formulara " +"změniś." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Pšosym zapódajśo pšawe %(username)s a gronidło. Źiwajśo na to, až wobej póli " +"móžotej mjazy wjeliko- a małopisanim rozeznawaś." + +msgid "This account is inactive." +msgstr "Toś to konto jo inaktiwne." + +msgid "Email" +msgstr "E-mail" + +msgid "New password" +msgstr "Nowe gronidło" + +msgid "New password confirmation" +msgstr "Wobkšuśenje nowego gronidła" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" +"Wašo stare gronidło jo se wopak zapódało. Pšosym zapódajśo jo hyšći raz." + +msgid "Old password" +msgstr "Stare gronidło" + +msgid "Password (again)" +msgstr "Gronidło (znowego)" + +msgid "algorithm" +msgstr "algoritmus" + +msgid "iterations" +msgstr "wóspjetowanja" + +msgid "salt" +msgstr "sol" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "warianta" + +msgid "version" +msgstr "wersija" + +msgid "memory cost" +msgstr "składowa pśetrjeba" + +msgid "time cost" +msgstr "casowa pśetrjeba" + +msgid "parallelism" +msgstr "paralelizm" + +msgid "work factor" +msgstr "źěłowy faktor" + +msgid "checksum" +msgstr "kontrolna suma" + +msgid "name" +msgstr "mě" + +msgid "content type" +msgstr "wopśimjeśowy typ" + +msgid "codename" +msgstr "kodowe mě" + +msgid "permission" +msgstr "pšawo" + +msgid "permissions" +msgstr "pšawa" + +msgid "group" +msgstr "kupka" + +msgid "groups" +msgstr "kupki" + +msgid "superuser status" +msgstr "status superwužywarja" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Wóznamjenijo, lěc toś ten wužywaŕ ma wšykne pšawa bźez togo, aby mógał je " +"pśipokazaś." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Kupki, ku kótarymž toś ten wužywaŕ słuša. Wužywaŕ dóstanjo wšykne pšawa, " +"kótarež jomu kupki dawaju." + +msgid "user permissions" +msgstr "wužywarske pšawa" + +msgid "Specific permissions for this user." +msgstr "Wěste pšawa za toś togo wužywarja." + +msgid "username" +msgstr "wužywarske mě" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "Trěbne. 150 znamuškow abo mjenjej. Jano pismiki, cyfry a @/./+/-/_." + +msgid "A user with that username already exists." +msgstr "Wužywaŕ z toś tym wužywarskim mjenim južo eksistěrujo." + +msgid "first name" +msgstr "pśedmě" + +msgid "last name" +msgstr "familijowe mě" + +msgid "email address" +msgstr "e-mailowa adresa" + +msgid "staff status" +msgstr "personalny status" + +msgid "Designates whether the user can log into this admin site." +msgstr "" +"Wóznamjenijo, lěc wužywaŕ móžo se pla administratorowego sedła pśizjawiś." + +msgid "active" +msgstr "aktiwny" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Wóznamjenijo, lěc deje z toś tym wužywarjom ako z aktiwnym wobchadás. " +"Znjemóžniśo to město togo, aby konta wulašował." + +msgid "date joined" +msgstr "cłonk wót" + +msgid "user" +msgstr "wužywaŕ" + +msgid "users" +msgstr "wužywarje" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Toś to gronidło jo pśekrotke. Musy nanejmjenjej %(min_length)d znamuško " +"wopśimowaś." +msgstr[1] "" +"Toś to gronidło jo pśekrotke. Musy nanejmjenjej %(min_length)d znamušce " +"wopśimowaś." +msgstr[2] "" +"Toś to gronidło jo pśekrotke. Musy nanejmjenjej %(min_length)d znamuška " +"wopśimowaś." +msgstr[3] "" +"Toś to gronidło jo pśekrotke. Musy nanejmjenjej %(min_length)d znamuškow " +"wopśimowaś." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Wašo gronidło musy nanejmjenjej %(min_length)d znamuško wopśimowaś." +msgstr[1] "Wašo gronidło musy nanejmjenjej %(min_length)d znamušce wopśimowaś." +msgstr[2] "Wašo gronidło musy nanejmjenjej %(min_length)d znamuška wopśimowaś." +msgstr[3] "" +"Wašo gronidło musy nanejmjenjej %(min_length)d znamuškow wopśimowaś." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Gronidło jo na %(verbose_name)s pśepódobne." + +msgid "Your password can't be too similar to your other personal information." +msgstr "Wašo gronidło njesmějo na waše druge wósobinske daty pśepódobne byś." + +msgid "This password is too common." +msgstr "Toś to gronidło jo pśepowšykne." + +msgid "Your password can't be a commonly used password." +msgstr "Wašo gronidło njesmějo cesto wužywane gronidło byś." + +msgid "This password is entirely numeric." +msgstr "Toś to gronidło jo cele numeriske." + +msgid "Your password can't be entirely numeric." +msgstr "Wašo gronidło njesmějo cele numeriske byś." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Slědkstajenje gronidła na %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Zapódajśo płaśiwe wužywarske mě. Toś ta gódnota smějo jano engelske pismiki, " +"licby a znamuška @/./+/-/_ wopśimowaś." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Zapódajśo płaśiwe wužywarske mě. Toś ta gódnota smějo jano pismiki, licby a " +"znamuška @/./+/-/_ wopśimowaś." + +msgid "Logged out" +msgstr "Wótzjawjony" + +msgid "Password reset" +msgstr "Slědkstajenje gronidła" + +msgid "Password reset sent" +msgstr "Slědkstajenje gronidła wótpósłane" + +msgid "Enter new password" +msgstr "Zapódajśo nowe gronidło" + +msgid "Password reset unsuccessful" +msgstr "Slědkstajenje gronidła njejo se raźiło" + +msgid "Password reset complete" +msgstr "Slědkstajenje gronidła dokóńcone" + +msgid "Password change" +msgstr "Změnjenje gronidła" + +msgid "Password change successful" +msgstr "Gronidło jo se wuspěšnje změniło" diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/el/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/el/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..18a8b2a3d4da216c6f46520a94838ad3aea79ce7 GIT binary patch literal 10150 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 K$(*52-~R;`8M|fx literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/en/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/en/LC_MESSAGES/django.po new file mode 100644 index 0000000..e9488ac --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/en/LC_MESSAGES/django.po @@ -0,0 +1,369 @@ +# This file is distributed under the same license as the Django package. +# +msgid "" +msgstr "" +"Project-Id-Version: Django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2010-05-13 15:35+0200\n" +"Last-Translator: Django team\n" +"Language-Team: English \n" +"Language: en\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: contrib/auth/admin.py:49 +msgid "Personal info" +msgstr "" + +#: contrib/auth/admin.py:50 +msgid "Permissions" +msgstr "" + +#: contrib/auth/admin.py:52 +msgid "Important dates" +msgstr "" + +#: contrib/auth/admin.py:136 +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "" + +#: contrib/auth/admin.py:146 +msgid "Password changed successfully." +msgstr "" + +#: contrib/auth/admin.py:165 +#, python-format +msgid "Change password: %s" +msgstr "" + +#: contrib/auth/apps.py:12 +msgid "Authentication and Authorization" +msgstr "" + +#: contrib/auth/base_user.py:50 +msgid "password" +msgstr "" + +#: contrib/auth/base_user.py:51 +msgid "last login" +msgstr "" + +#: contrib/auth/forms.py:30 +msgid "No password set." +msgstr "" + +#: contrib/auth/forms.py:36 +msgid "Invalid password format or unknown hashing algorithm." +msgstr "" + +#: contrib/auth/forms.py:69 contrib/auth/forms.py:268 +#: contrib/auth/forms.py:332 +msgid "The two password fields didn't match." +msgstr "" + +#: contrib/auth/forms.py:71 contrib/auth/forms.py:102 +#: contrib/auth/forms.py:130 contrib/auth/forms.py:336 +msgid "Password" +msgstr "" + +#: contrib/auth/forms.py:73 +msgid "Password confirmation" +msgstr "" + +#: contrib/auth/forms.py:75 contrib/auth/forms.py:343 +msgid "Enter the same password as before, for verification." +msgstr "" + +#: contrib/auth/forms.py:103 +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" + +#: contrib/auth/forms.py:133 +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" + +#: contrib/auth/forms.py:135 +msgid "This account is inactive." +msgstr "" + +#: contrib/auth/forms.py:198 +msgid "Email" +msgstr "" + +#: contrib/auth/forms.py:270 +msgid "New password" +msgstr "" + +#: contrib/auth/forms.py:273 +msgid "New password confirmation" +msgstr "" + +#: contrib/auth/forms.py:306 +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" + +#: contrib/auth/forms.py:309 +msgid "Old password" +msgstr "" + +#: contrib/auth/forms.py:341 +msgid "Password (again)" +msgstr "" + +#: contrib/auth/hashers.py:251 contrib/auth/hashers.py:334 +#: contrib/auth/hashers.py:386 contrib/auth/hashers.py:414 +#: contrib/auth/hashers.py:447 contrib/auth/hashers.py:480 +#: contrib/auth/hashers.py:514 +msgid "algorithm" +msgstr "" + +#: contrib/auth/hashers.py:252 +msgid "iterations" +msgstr "" + +#: contrib/auth/hashers.py:253 contrib/auth/hashers.py:336 +#: contrib/auth/hashers.py:387 contrib/auth/hashers.py:415 +#: contrib/auth/hashers.py:515 +msgid "salt" +msgstr "" + +#: contrib/auth/hashers.py:254 contrib/auth/hashers.py:388 +#: contrib/auth/hashers.py:416 contrib/auth/hashers.py:448 +#: contrib/auth/hashers.py:481 contrib/auth/hashers.py:516 +msgid "hash" +msgstr "" + +#: contrib/auth/hashers.py:347 +msgid "variety" +msgstr "" + +#: contrib/auth/hashers.py:348 +msgid "version" +msgstr "" + +#: contrib/auth/hashers.py:349 +msgid "memory cost" +msgstr "" + +#: contrib/auth/hashers.py:350 +msgid "time cost" +msgstr "" + +#: contrib/auth/hashers.py:351 +msgid "parallelism" +msgstr "" + +#: contrib/auth/hashers.py:445 +msgid "work factor" +msgstr "" + +#: contrib/auth/hashers.py:337 +msgid "checksum" +msgstr "" + +#: contrib/auth/models.py:61 contrib/auth/models.py:116 +msgid "name" +msgstr "" + +#: contrib/auth/models.py:65 +msgid "content type" +msgstr "" + +#: contrib/auth/models.py:67 +msgid "codename" +msgstr "" + +#: contrib/auth/models.py:71 +msgid "permission" +msgstr "" + +#: contrib/auth/models.py:72 contrib/auth/models.py:119 +msgid "permissions" +msgstr "" + +#: contrib/auth/models.py:126 +msgid "group" +msgstr "" + +#: contrib/auth/models.py:127 contrib/auth/models.py:222 +msgid "groups" +msgstr "" + +#: contrib/auth/models.py:213 +msgid "superuser status" +msgstr "" + +#: contrib/auth/models.py:216 +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" + +#: contrib/auth/models.py:225 +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" + +#: contrib/auth/models.py:233 +msgid "user permissions" +msgstr "" + +#: contrib/auth/models.py:235 +msgid "Specific permissions for this user." +msgstr "" + +#: contrib/auth/models.py:305 +msgid "username" +msgstr "" + +#: contrib/auth/models.py:313 +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +#: contrib/auth/models.py:316 +msgid "A user with that username already exists." +msgstr "" + +#: contrib/auth/models.py:320 +msgid "first name" +msgstr "" + +#: contrib/auth/models.py:321 +msgid "last name" +msgstr "" + +#: contrib/auth/models.py:322 +msgid "email address" +msgstr "" + +#: contrib/auth/models.py:324 +msgid "staff status" +msgstr "" + +#: contrib/auth/models.py:326 +msgid "Designates whether the user can log into this admin site." +msgstr "" + +#: contrib/auth/models.py:329 +msgid "active" +msgstr "" + +#: contrib/auth/models.py:332 +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" + +#: contrib/auth/models.py:336 +msgid "date joined" +msgstr "" + +#: contrib/auth/models.py:344 +msgid "user" +msgstr "" + +#: contrib/auth/models.py:345 +msgid "users" +msgstr "" + +#: contrib/auth/password_validation.py:101 +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +msgstr[1] "" + +#: contrib/auth/password_validation.py:111 +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" +msgstr[1] "" + +#: contrib/auth/password_validation.py:147 +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "" + +#: contrib/auth/password_validation.py:153 +msgid "Your password can't be too similar to your other personal information." +msgstr "" + +#: contrib/auth/password_validation.py:180 +msgid "This password is too common." +msgstr "" + +#: contrib/auth/password_validation.py:185 +msgid "Your password can't be a commonly used password." +msgstr "" + +#: contrib/auth/password_validation.py:195 +msgid "This password is entirely numeric." +msgstr "" + +#: contrib/auth/password_validation.py:200 +msgid "Your password can't be entirely numeric." +msgstr "" + +#: contrib/auth/templates/registration/password_reset_subject.txt:2 +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "" + +#: contrib/auth/validators.py:13 +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" + +#: contrib/auth/validators.py:23 +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" + +#: contrib/auth/views.py:133 +msgid "Logged out" +msgstr "" + +#: contrib/auth/views.py:211 +msgid "Password reset" +msgstr "" + +#: contrib/auth/views.py:224 +msgid "Password reset sent" +msgstr "" + +#: contrib/auth/views.py:261 +msgid "Enter new password" +msgstr "" + +#: contrib/auth/views.py:272 +msgid "Password reset unsuccessful" +msgstr "" + +#: contrib/auth/views.py:290 +msgid "Password reset complete" +msgstr "" + +#: contrib/auth/views.py:325 +msgid "Password change" +msgstr "" + +#: contrib/auth/views.py:339 +msgid "Password change successful" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/en_AU/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/en_AU/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..cd7c3adb002a0c6ef4357e0e7d0347725d17bf10 GIT binary patch literal 3650 zcmeH|&yN&E6vsYmbivxCuAUcaVffMdJ1}~#;$5+ z_rk>(FGfy8FC?0HkOXetJa{o06Mq~$$iaA!c-;$$@u1P~>*<+U68#ILGOs`N^VO^O zUe)}vWy2+bG6i`Oa`g@&=DWGRxbPuJPO$ksX;ggxUdiQLO2)lGE13LDfP5(lW$9(H;wEll1Zv$ zv`T74JMSuDt}RWhs4Jc8*)*!txD!W|)3K3Wx&C6`)~>IxEgdu@)KzImJEyI2`6f2= z(AZ6MsC}|ZPzD9s#8|I7mGugHZH2y+2l^^QX(+KVY2z(=v6GBC+K|&;{m06IHLh*5 zB%(8lJPzemgpEmtUY}PLI%%9rROtIUwQ(NjCflM2-JWfeVQ4eMPMGgVorr}_*QQXUq2|OZ>tKM+&Ee#5- zX=zpl4~pYMP!B*D$7`EGcoE2^B6|tvM^N6wX!5xt*jefzu7$WceGa>zm`3!F08oZ}^$NC@9s=Za!_q$9J(W0eovJc|>gA2>o) zn!qLcxha zXRS6W5{i=s$r{0vP9U7lQ$8t9ZPpd}*9p!L0sp3Xter?CrXk<8=~wd=`DYmM(d81O zsuNBoUN|pXEyCAl=*cjiU-Y7b>mu)1zi<$re8dS{^K;a~VQnfJsXdDz1`APe3c*G; z)+suR7r~ZJD83EBqKkDDypqK(XxciJ8cWS!j&B?021nqII!)CkUkYjmf~jeme4#$Q zZ*Og?R>Q>LggUQT=fBLGu1`(xt)Y~T!6892mBu9!Ce`URX$&HJOljOyIs|LbJe=gs z3TNWWSYzT$#wutk*{RdKi4*PGRG!V8PjP4E1eM#~ck9(^uh*-f4{6p?E0xf8s{Qi~ zkQAz_$}G>GtWJ~`7Z&G7&X}y!N^=$|Z(!tV7pL`V#aFutZs0+}#Y=IEW==Mb2Kz_z zc)ONLgLx!fgy*47`_E`Uw7QP0#9pOFlEK*EC|(s;C)3TFZf5Er^{X>wL%U{Za^he~ c+G_`T|$W7lzn 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, 2012-2013 +# Baptiste Darthenay , 2013-2019 +# Robin van der Vliet , 2019 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2019-02-13 19:03+0000\n" +"Last-Translator: Baptiste Darthenay \n" +"Language-Team: Esperanto (http://www.transifex.com/django/django/language/" +"eo/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: eo\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "Personaj informoj" + +msgid "Permissions" +msgstr "Permesoj" + +msgid "Important dates" +msgstr "Gravaj datoj" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "%(name)s objekto kun ĉefŝlosilo %(key)r ne ekzistas." + +msgid "Password changed successfully." +msgstr "Pasvorto suksese ŝanĝita." + +#, python-format +msgid "Change password: %s" +msgstr "Ŝanĝi pasvorton: %s" + +msgid "Authentication and Authorization" +msgstr "Aŭtentigo kaj rajtigo" + +msgid "password" +msgstr "pasvorto" + +msgid "last login" +msgstr "lasta ensaluto" + +msgid "No password set." +msgstr "Neniu pasvorto agordita." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Nevalida pasvorta formato, aŭ nekonata haketa algoritmo." + +msgid "The two password fields didn't match." +msgstr "La du pasvotaj kampoj ne kongruas." + +msgid "Password" +msgstr "Pasvorto" + +msgid "Password confirmation" +msgstr "Pasvorta konfirmo" + +msgid "Enter the same password as before, for verification." +msgstr "Entajpu la saman pasvorton kiel supre, por konfirmo." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" +"Krudaj pasvortoj ne estas entenitaj, do ne eblas vidi la pasvorton de tiu " +"uzanto, sed vi povas ŝanĝi la pasvorton uzante tiun " +"formalaron." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Bonvolu enigi ĝustan %(username)sn kaj pasvorton. Notu, ke ambaŭ kampoj " +"povas esti usklecodistingaj." + +msgid "This account is inactive." +msgstr "Ĉi-tiu konto ne estas aktiva." + +msgid "Email" +msgstr "Retpoŝto" + +msgid "New password" +msgstr "Nova pasvorto" + +msgid "New password confirmation" +msgstr "Nova pasvorto por konfirmo" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" +"Via malnova pasvorto estis tajpita malĝuste. Bonvolu denove entajpi ĝin." + +msgid "Old password" +msgstr "Malnova pasvorto" + +msgid "Password (again)" +msgstr "Pasvorto (denove)" + +msgid "algorithm" +msgstr "algoritmo" + +msgid "iterations" +msgstr "iteracioj" + +msgid "salt" +msgstr "salo" + +msgid "hash" +msgstr "haketo" + +msgid "variety" +msgstr "diverseco" + +msgid "version" +msgstr "versio" + +msgid "memory cost" +msgstr "memoria kosto" + +msgid "time cost" +msgstr "tempa kosto" + +msgid "parallelism" +msgstr "paralelismo" + +msgid "work factor" +msgstr "laborfaktoro" + +msgid "checksum" +msgstr "kontrolsumo" + +msgid "name" +msgstr "nomo" + +msgid "content type" +msgstr "enhava tipo" + +msgid "codename" +msgstr "kodnomo" + +msgid "permission" +msgstr "permeso" + +msgid "permissions" +msgstr "permesoj" + +msgid "group" +msgstr "grupo" + +msgid "groups" +msgstr "grupoj" + +msgid "superuser status" +msgstr "ĉefuzanta statuso" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Indikas ke tiu uzanto havas ĉiujn permesojn, sen eksplicite asigni ilin." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"La grupoj en kiu tiu uzanto apartenas. Uzanto akiros ĉiuj permesoj donita al " +"ĉiuj de iliaj grupoj." + +msgid "user permissions" +msgstr "uzantaj permesoj" + +msgid "Specific permissions for this user." +msgstr "Specifaj permesoj por tiu ĉi uzanto." + +msgid "username" +msgstr "salutnomo" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "Petita. 150 signoj aŭ malpli. Nur literoj, ciferoj kaj @/./+/-/_." + +msgid "A user with that username already exists." +msgstr "Uzanto kun sama salutnomo jam ekzistas." + +msgid "first name" +msgstr "persona nomo" + +msgid "last name" +msgstr "familia nomo" + +msgid "email address" +msgstr "retpoŝta adreso" + +msgid "staff status" +msgstr "personara statuso" + +msgid "Designates whether the user can log into this admin site." +msgstr "Indikas ĉu la uzanto povas saluti en ĉi-tiu administranta retejo." + +msgid "active" +msgstr "aktiva" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Indikas ĉu tiu uzanto devus esti traktita kiel aktiva. Malselekti tion ĉi " +"anstataŭ forigi kontojn." + +msgid "date joined" +msgstr "dato aliĝita" + +msgid "user" +msgstr "uzanto" + +msgid "users" +msgstr "uzantoj" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Tiu pasvorto estas tro mallonga. Ĝi devas enhavi almenaŭ %(min_length)d " +"signon." +msgstr[1] "" +"Tiu pasvorto estas tro mallonga. Ĝi devas enhavi almenaŭ %(min_length)d " +"signojn." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Via pasvorto devas enhavi almenaŭ %(min_length)d signon." +msgstr[1] "Via pasvorto devas enhavi almenaŭ %(min_length)d signojn." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "La pasvorto estas tro simila al la %(verbose_name)s." + +msgid "Your password can't be too similar to your other personal information." +msgstr "" +"Via pasvorto ne povas esti tro similaj al viaj aliaj personaj informoj." + +msgid "This password is too common." +msgstr "Tiu pasvorto estas tro kutima." + +msgid "Your password can't be a commonly used password." +msgstr "Via pasvorto ne povas esti kutime uzata pasvorto." + +msgid "This password is entirely numeric." +msgstr "Tiu pasvorto estas tute cefera." + +msgid "Your password can't be entirely numeric." +msgstr "Via pasvorto ne povas esti tute cifera." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Pasvorta rekomencigo ĉe %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Enigu validan uzantnomon. Ĉi tiu valoro povas enhavi nur sensupersignajn " +"literojn, ciferojn kaj la signojn @/./+/-/_." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Enigu validan uzantnomon. Ĉi tiu valoro povas enhavi nur literojn, ciferojn " +"kaj la signojn @/./+/-/_." + +msgid "Logged out" +msgstr "Adiaŭita" + +msgid "Password reset" +msgstr "Pasvorta rekomencigo" + +msgid "Password reset sent" +msgstr "Pasvorta rekomencigo sendita" + +msgid "Enter new password" +msgstr "Enigu novan pasvorton" + +msgid "Password reset unsuccessful" +msgstr "Pasvorta rekomencigo malsuksesis" + +msgid "Password reset complete" +msgstr "Pasvorta rekomencigo plenumita" + +msgid "Password change" +msgstr "Pasvorta ŝanĝo" + +msgid "Password change successful" +msgstr "Pasvorto sukcese ŝanĝita" diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/es/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/es/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..08624041eac449569b529077f882600e36175d39 GIT binary patch literal 7766 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, 2011 +# Ramiro Morales, 2013-2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-10-29 17:25+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Spanish (Argentina) (http://www.transifex.com/django/django/" +"language/es_AR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_AR\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "Información personal" + +msgid "Permissions" +msgstr "Permisos" + +msgid "Important dates" +msgstr "Fechas importantes" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "No existe un objeto %(name)s con una clave primaria %(key)r." + +msgid "Password changed successfully." +msgstr "Cambio de contraseña exitoso" + +#, python-format +msgid "Change password: %s" +msgstr "Cambiar contraseña: %s" + +msgid "Authentication and Authorization" +msgstr "Autenticación y Autorización" + +msgid "password" +msgstr "contraseña" + +msgid "last login" +msgstr "último ingreso" + +msgid "No password set." +msgstr "No se ha establecido una contraseña." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Formato de contraseña inválido o algoritmo de hashing desconocido." + +msgid "The two password fields didn't match." +msgstr "Los dos campos de contraseñas no coinciden entre si." + +msgid "Password" +msgstr "Contraseña" + +msgid "Password confirmation" +msgstr "Confirmación de contraseña" + +msgid "Enter the same password as before, for verification." +msgstr "" +"Introduzca la misma contraseña nuevamente, para poder verificar la misma." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" +"El sistema no almacena las contraseñas originales por lo cual no es posible " +"visualizar la contraseña de este usuario, pero puede modificarla usando este formulario." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Por favor introduzca un %(username)s y una contraseña correctos. Tenga en " +"cuenta que ambos campos son sensibles a mayúsculas/minúsculas." + +msgid "This account is inactive." +msgstr "Esta cuenta está inactiva." + +msgid "Email" +msgstr "Email" + +msgid "New password" +msgstr "Contraseña nueva" + +msgid "New password confirmation" +msgstr "Confirmación de contraseña nueva" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" +"La antigua contraseña introducida es incorrecta. Por favor introdúzcala " +"nuevamente." + +msgid "Old password" +msgstr "Contraseña antigua" + +msgid "Password (again)" +msgstr "Contraseña (de nuevo)" + +msgid "algorithm" +msgstr "algoritmo" + +msgid "iterations" +msgstr "iteraciones" + +msgid "salt" +msgstr "salt" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "variedad" + +msgid "version" +msgstr "versión" + +msgid "memory cost" +msgstr "costo en memoria" + +msgid "time cost" +msgstr "costo en tiempo" + +msgid "parallelism" +msgstr "paralelismo" + +msgid "work factor" +msgstr "work factor" + +msgid "checksum" +msgstr "suma de verificación" + +msgid "name" +msgstr "nombre" + +msgid "content type" +msgstr "tipo de contenido" + +msgid "codename" +msgstr "nombre en código" + +msgid "permission" +msgstr "permiso" + +msgid "permissions" +msgstr "permisos" + +msgid "group" +msgstr "grupo" + +msgid "groups" +msgstr "grupos" + +msgid "superuser status" +msgstr "es superusuario" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Indica que este usuario posee todos los permisos sin que sea necesario " +"asignarle los mismos en forma explícita." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Grupos a los cuales pertenece este usuario. Un usuario obtiene todos los " +"permisos otorgados a cada uno de los grupos a los cuales pertenece." + +msgid "user permissions" +msgstr "permisos de usuario" + +msgid "Specific permissions for this user." +msgstr "Permisos específicos de este usuario" + +msgid "username" +msgstr "nombre de usuario" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"Obligatorio. Longitud máxima de 150 caracteres. Solo puede estar formado por " +"letras, números y los caracteres @/./+/-/_." + +msgid "A user with that username already exists." +msgstr "Ya existe un usuario con ese nombre." + +msgid "first name" +msgstr "nombre" + +msgid "last name" +msgstr "apellido" + +msgid "email address" +msgstr "Dirección de email" + +msgid "staff status" +msgstr "es staff" + +msgid "Designates whether the user can log into this admin site." +msgstr "Indica si el usuario puede ingresar a este sitio de administración." + +msgid "active" +msgstr "activo" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Indica si el usuario debe ser tratado como un usuario activo. Desactive este " +"campo en lugar de eliminar usuarios." + +msgid "date joined" +msgstr "fecha de creación" + +msgid "user" +msgstr "usuario" + +msgid "users" +msgstr "usuarios" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"La contraseña es demasiado corta. Debe contener por lo menos %(min_length)d " +"caracter." +msgstr[1] "" +"La contraseña es demasiado corta. Debe contener por lo menos %(min_length)d " +"caracteres." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Su contraseña debe contener por lo menos %(min_length)d caracter." +msgstr[1] "Su contraseña debe contener por lo menos %(min_length)d caracteres." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "La contraseña es muy similar a %(verbose_name)s." + +msgid "Your password can't be too similar to your other personal information." +msgstr "" +"Su contraseña no puede ser similar a otros componentes de su información " +"personal." + +msgid "This password is too common." +msgstr "La contraseña tiene un valor demasiado común." + +msgid "Your password can't be a commonly used password." +msgstr "Su contraseña no puede ser una contraseña muy comunmente usada." + +msgid "This password is entirely numeric." +msgstr "La contraseña está formada completamente por dígitos." + +msgid "Your password can't be entirely numeric." +msgstr "Su contraseña no puede estar formada exclusivamente por números." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Reinicio de contraseña en %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Introduzca un nombre de usuario válido. Este valor solo puede contener " +"letras del alfabeto inglés, números y los caracteres @/./+/-/_." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Introduzca un nombre de usuario válido. Este valor solo puede contener " +"letras, números y los caracteres @/./+/-/_." + +msgid "Logged out" +msgstr "Sesión cerrada" + +msgid "Password reset" +msgstr "Reinicio de contraseña" + +msgid "Password reset sent" +msgstr "Se ha enviado un email de reinicialización de contraseña" + +msgid "Enter new password" +msgstr "Introduzca nueva contraseña" + +msgid "Password reset unsuccessful" +msgstr "Reinicio de contraseña fallido" + +msgid "Password reset complete" +msgstr "Reinicio de contraseña completado" + +msgid "Password change" +msgstr "Cambio de contraseña" + +msgid "Password change successful" +msgstr "Cambio de contraseña exitoso" diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/es_VE/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/es_VE/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..11f27e404e6524352ca9d9e1104b144256c6f772 GIT binary patch literal 7415 zcmb`LYm8l0700)V0wW@VCR7%VX{xnBtJ^#u|i5yUSlJ`xBaCMNh>`<(llX@e!4 z6k;1u{8sKKkx zSL!lwJGcPe1>Ouk23qispoqBb0;O8uo!}AhN8qL4B^N5S1zZPy7`z9(0c?X4;7RZz z@Coor@TcG<;BTw;KZA%;|Ek*G1VzpT4E_Xo1^6lOdhl}aAb2s@20soigP#T;0%aXf zfmeY&@Ppt>;D^9h!TZ7gfV;qZ__z*y1TM`_!;oKpxE{2;7RcJ z;H}^a!e_u|!AbBRpvb=*CBF)O3B=UucOXksFN3n)zgPG=h$!`6Q1rc!#f!d|gQ%+3 zfnxtUC~~%d=YiX*?>j2o1B(2^pvd_$DE;E<{Q*$s{Te88zfrY63`)Q6fuhG_p!nx0 zP~`oh`u=>?{u@x_ybOw7e*>Y2`getIf-?VG;1A!!Gs1*-Klw;$*MEZI&&wc>_-`|K z2;2?s1W$s(vsXaz=Wc$!4&D!Tz`uavhr2$i)Qw;Q(p5bU-U2=YGKG4h!t)``HN0O5 z%Dme^k$WE~dM4nd%$_{LGYX4^PuqM5W>Wd_kp5M2#S49RQN4W_;wN$J3R@?xL!8HPTcF6l5~s-bb)e@dDE+oocn2svIRuJ*z6c8MLQv+9K(X&K2zAs$p!9zP z6o35y6uqAXW&E!ye6hlpKtf3U6@+&FdLO^nSI;t5cp?{F{9IyhnOp28*Uj8wBe`zm z7QYB*_HZBImg|-h)aOA`tiNQP!rdL*Gu)$>u3lsFj$1DA zo8&~f#O89{&JA_dZQR0-?cDpg@8te0_kM2S<1DxEKrZo*)W z}QCb#6l@)+WfKC0o~bCz*}K zs$OQ4WI2Y>uBk(sbJ5KNfh&?6E6sIG6sx%;M=_(9OdN#+lh*a3C`Dsob;qpez$Ljs zL6@-7xug|GSz9BL!P!Qg6rF~D5L54%u1{~6u1z1&LEEHg#usLL2lJe}{KPH~yjo2u zHqV45eQ%4s8n)?DyHWG2muwm}E3VYle5dQu+$6aUg$rsvDJ?S?&5#b{V_=aSOWbmz z;YZt>Hf}+&yp8Yox>gI%z!0^6RHe}uv1v0BVK7SVcS8j;3*8UkiMsWZ zLgpi7u&*AM5uU5tieyyRVXUbI2;>qI6D>`r7Gi5Ms}bON8@MzT!mpo{>`zDOC6V-OqIc=Bws6XQ|dEsreYxwyK$71kA6hQb{qvs;Idr#hAw+q99uTNj_R9O4NHQN z$4q4=&Q+G1W>fQ<7qk>~_4P~DkVkAuUb?g@|7j>K^9_Dp`I4z6lSVdQQ3R_LAd0f( zm~LV#m#T%-NhMXA4{L|Z&$Bu_%5LB$4qDmGYWuQQ6xMDlT3Kz;&FYDT1Boxwd(W-gN!!mK!(BY@V5+W9^__ie$<&^xHDKdCP_wu8F;vu(n7# z%3^~`vwF8l60*Wx8&P@aThNBr9kG9{OCJ9`W0F>3TDG=mO=ngg>KeMV_2glj*b{|~ z&6J*O=XrN_dU|?}D` zTZA*SI=9F3>26FoZu7Z0*_7@z)gv_r$)SJ@k}nf+PBay1fiI|e{kz&}I*o|L zFVT~->-BzYeBnEvgpAP-Q0aMbeffEWBiJTFmk}LVwUhCXQ3o2Sb$gGdl$*3j72G>T z8BBB%np9Dx%q-HZxi7F=*wAm>DO%V{dD(XzcZj# zcERGMfn{`mDNDUaDVLdXP8^WAnC;T9PK=A$n81pWrS4|iZkmR89X%jYY^7rEon|k@ zbSvJrK~*So_!yMW@0t?--)wVPkVXw7mPrb`B)idoCzNU_M}(?SPB+Rjq|lSj9Emz( zovDY&t&vOXYL}%dr8el-)HYKRD5MB6X36`(j_EXxEVF*cf0sN>zYIlOAl6ogIHL)* zk>XO$2Zk% ze~BHUxib6kJAHlqP9Tkm$G3gUV5QZy{M!k&$x8gxc zc0*sAs0As#&64xH8;#4cnxDPe=h4c%F01PU4Kf9(RT2W$C)zM<7x1ylX&Y<#(jO8~ z%*v6VcRC9S3WD+=0F5Qc{YhXLp-z+KL_P-rVtk_xd#5-E_+TDHuOx*k8|uLVVI1dz z-YE_SqJ;z%mL8-PIX7k$?}g|{B=Re&V+hG9!FYa_!~P&2@jXm?kDe)8`%H~HL}Eb5 zkkEW|Wkr7~rX43C#^@9)qMyWuVc^6&wd!K(5P#+em;=TfQMEKx>EE4&ufhAg>L5)Nh>9wpFrBm|ZyjmXZ1?>-iSD2*}A zDi`8_azhf17sgl&{3W+d5~JHs>T`;0hk1CD%WBbR0!HI~&I8Z+t#4sj3Hs#;PGM>x5QJJpwSv6B~y6~U;Stc@-=A2%rSp7l9(Py|>l*bQOon%PI{uo2R z$_YjeGR>yyzp;+$NaKsq;apUWq*zrIN&{J9i+P0cplYDD7VrAhi_|t)N1D zzVFQJ?(I1diAvQ;-uu4u&ig*k^FGh_dER&Zy&GQsNy9TmdkgJT*BNtI{a@t|&sSez z%ntBt;23z_D~++>7VtO0{h-!*;GN(F&9e*}L6e6AS(PY_Y&XT|s{StL1c1b+t{1%DUZ4Za?n27etq z3jQ{@2)+$`0@Oa91>X#Q3w$;B@8GY2KLtMsUeDmi!6x_s_}}2$!FOV$2i8FC=O4gL z;7>r=Z4q)KI0?$X9{@iMJ__Coz6qly!1sfr;Av3uFM)py{tt-j%{-f9tL8CK`~I^6 zKLMi3dv>gETwAkAb& z^P`~n@?~%@_+9XI;7yQ3@!J8u13Um$z&TJn`5Z`S%$JMze*!iChoE@ziZ|wbz6I3y zhd{}B6dVJe04Kn&75Ecy3-6nmEdB2V5oHd6-vEz;Blu$qV?WIM`!PcHd;`?}ehNMa zei4$1SFgf3H-q~??Y9GN13w8?kn>gWFz-JmNyN8llHqpn4CsT;f!_fiuz9@R@_Tt) zH-XBR+d;)?A1Hg@1IpfJ@%=GSe0v;Jy#Eq}TIRE$_;3*vk1m6f_Z3jH88WdH)Q`zJDq3 z`=IRn5%@At&#%xFQ$5lN<=mrumd%Qra&8|@&m>JXN6#I!?KJ6De5Po6R4eqnlXji! z<^H^%{=KxV#aIcp=qOjJMPGi=UiHWachff0pt{?$cy=dE&raIAXydf~G(GayJ?ij4 z2lr_2;-!3Z3vCAtSD4?YiT8T$qltU+uQ;VV7I(xWJ&M~qTrc;vx_fA(mdj;AYj)8d zqABM#(H^G#0qri@^)x+-3pDIKH_^L|CVq(9dPZ|V$Y|)b{ju0a(}(<8V&{USX=gh@ z+w08R!~VS8G|Jzxj;%+2Y{MwA{?Q;#s^(tXjr~qOKWTc2dzCEfwK~36pU)@8%OB&~UiFa!i)gY|y9Iw)|i=`+^Rhg@XM3vDZE*dR^jJmD5o%U_Qt`onGV(ZnC;D}$f?+#u-l$?9l83R@#^^I@yhrkw$}7ISjHE$y#zfkUViA$^`cs+l+RQ%w zHSNzt9e<1EuRY>-f|-IVRkOD}8+8&dOl)0TFnhz?GriR;X+u61cEiJAG#6U<(R8kD zHK171B=!$RjRui{A?Be$lLlYp)0sfRV3c_%>KhpQ(EVY8Tq-qF1yg$+JL)xv$5?*= zXT#~?cN=$WH9wALx~<_)^?`4#`Rc&uLAy%Lw&P<~f0BD;3+-8=G@v#gC+jwiip-DX z$v(U;COwD8y5XR${aiCs5GV@07TGcrnW>iV#lA&=<83YKbVT?~qpA)?X%P)e-&O5H zQ9`n)VoXQWnwh|F)nmtMlBkBT3g%#}GRPe8`V1nkI=(AGaROcHTWqXs^%*2N!pP2% z86?NwlkVZ%>06vak|yn*((#P@1V)g5*lbPB1thTh)M zkVH5yXa_A1L!4`gBl$QT#U*p{MakSidK3Yy2lepggg7R(re-0pC~k^Q5EeBt|1zi* z>fll87-fsxuN8|2r^qn4-HyWN`A8M+Bvrc?{oOd}l}9)xdWw#e^G8~K*hrdV^?uy` zm&H+7-xqZ|HX0}vurkimgHQxvksy%3u1lSO_^E^x5_-Fbs(6*m@Cpy$C{k-6p>mZQ z7i{#avu)$Vp|F!6>_B-XcJ@=fD2>AgzF3E^H{!*u#=kj@j8_(SQ)~LQ!*RE5YEj)+ z!Jz}~IWdy?S>Nc`u!o``^y|jg5zEnDrz*yVVh=Oi3YTUkPd20T!%!Y1nHkI9q{~Q`sqQ{i z3?uad-`S5e1Ibt2vDDtqgd_vD`^ zZT%3%FB&=E>vXN`j~hX~a$mO*R}My#c4X?|gO%O7%^<3BKMtI<+a|W&QJJ{2vh7y8 zb^GM4w{M=Vdtx1NB|K^jZkMRVC+lu{dmWy@p>o=zHx+JEc8Pzek%%GCMgw zJ~ua4O(Z&)@sDc7c)qz3TE+758E<@SWdGj%d-`tJTAdi#owKEK5VlO(#6Oyh&$h7U zE>|TuWOu&%-~*K%{dv+g<98~1$mKfc#iZRa9V9(7C-M8pRI3XeDi3gO#FI9hb+7Tx zZFkwcyK^+OyX@AnyGBfU@#^XHuc%N8=U8mh<#fqjIg_1Wc-5v$=_Pgfo?pYWQ|VdS zs?AQOt9)HcSF7gA8P{7**O=)9q)%oiHDxJVK-j?7-unJ(7Oe5#(^`u<)|^OJY<5a- zXK5F*#eaS5bhel-nRF%n!qwAQwq~!arcb47h+Dey7ulk_v!m}Kt5Ljg^)yS;RTiyk zGmFT&dYUhNTWq$NEzlm{sK#Q=k}VC?hE}svEY_xSVat+uNz>AE*qXZcrQGE67|ABm zOSuGWu$bil*Q#4JFKFqL><{%D4K8-IqD{;F_y~bSpq$M6GJaV?Wwwy6%1<=xyU3SS zo69|~;g@Iv>WYZqx9nJY8C@a@Dp2c88B|g@h9!#ax%8>**kA;TEv741PhUAxI9*(D zqL725+!XemoiJ|FH7T`#9V;m-`wk&YC!K_zYZkKOxnReRbij$n`0|Wm1X;5avJ+Zi zsrJSm37TUjv0rtYg{Y~c>SZTzl@~?+GPFekZde)k(WB*g%>S?Let+(q&gSH2E4~Q6|F|R-Z3&8;LF-7fc~5 z4|OlJOjS~3Cx`+XcwM2krJ$9{M))YDd!*DwWF1+Sv0Kz2Q|@QdUQK z3+`?(!V*5>u^@tH$K^!DapNimuk8(&k*)~5ke@c}yrhpy$6~p>B|1^zWp28RL)R}< zRaxWc8T{!;*pD;$^En5_1AJZbk1cbMVEj^EaHV0r$N?%3+LFgk^~M=Dc;qal&nUB1 z>!j!+(Y{0g8G8nGOPHrSP;q)v2-fSDm=YH&E8jv5vKcWOl9- zd>vJbl*}b^0U+PBb!bk?xjM+XiVVEZYkAso$ViyQGf&|c(O3B*J$c2TM5xHJHq*Jg zUZ(LL)9hZBHQtn*j?j2I+cDMegbRk|G$rki;dXW0ENfJZ>HgJKz zq-p*$ySOwgfh#zhY3_!!ptmZ=AhEs1`SADl^yS$)zx)}G38X7M$AwOD98(90D)wm@Uf?g^c*n7h1}(=T%_{D zHXx4+xpcY9Vqs=pL;EKNa&@pmD&-ipfE^A0`tOAt8U$EVU6$K%0rNm=SpT^zN=wGf|Rxhsa}l%3geU1lh*xN+UT zKDY}G*PE5}qUwZZ73Wspt^YsG+E6iwXK|pqLcpe7U8Hj2bU6+0dT>0v!zy<1(w<)ls84K?^cGpO_&c73+H1 z%OG>5aV4);YzGV}vqfdyaTnd!IXWX!sUk0OwlcLzrFF{qAy5!^f+oIv8 zD=|{FJPAYAlwpRhsvgy8l|JFUtU&UsE<43n?$ewii-zPPP*kgYrujM8;CSKy literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/fa/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/fa/LC_MESSAGES/django.po new file mode 100644 index 0000000..c0c36f8 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/fa/LC_MESSAGES/django.po @@ -0,0 +1,308 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ali Nikneshan , 2015 +# Eric Hamiter , 2013 +# Jannis Leidel , 2011 +# Kaveh Karimi, 2015 +# MJafar Mashhadi , 2018 +# Pouya Abbassi, 2016 +# Reza Mohammadi , 2013-2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2018-06-23 23:12+0000\n" +"Last-Translator: MJafar Mashhadi \n" +"Language-Team: Persian (http://www.transifex.com/django/django/language/" +"fa/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fa\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Personal info" +msgstr "اطلاعات شخصی" + +msgid "Permissions" +msgstr "اجازه‌ها" + +msgid "Important dates" +msgstr "تاریخ‌های مهم" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "شیء %(name)s با کلید اصلی %(key)r وجود ندارد." + +msgid "Password changed successfully." +msgstr "گذرواژه با موفقیت تغییر یافت." + +#, python-format +msgid "Change password: %s" +msgstr "تغییر گذرواژه: %s" + +msgid "Authentication and Authorization" +msgstr "بررسی اصالت و اجازه‌ها" + +msgid "password" +msgstr "گذرواژه" + +msgid "last login" +msgstr "آخرین ورود" + +msgid "No password set." +msgstr "هیچ رمزی انتخاب نشده است." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "رمز نامعتبر یا الگوریتم رمزنگاری ناشناس" + +msgid "The two password fields didn't match." +msgstr "دو فیلد گذرواژه با هم مطابقت ندارند." + +msgid "Password" +msgstr "گذرواژه" + +msgid "Password confirmation" +msgstr "تأیید گذرواژه" + +msgid "Enter the same password as before, for verification." +msgstr "برای تائید، رمز عبور قبلی را وارد کنید." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" +"گذرواژه‌ها به صورت خام نگهداری نمی‌شوند لذا راهی برای مشاهدهٔ گذرواژهٔ این کاربر " +"وجود ندارد، اما می‌توانید آن را با این فرم تغییر دهید." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"لطفا %(username)s و گذرواژه‌ای قابل قبول وارد کنید.\n" +"توجه داشته باشید که ممکن است هر دو به کوچکی و بزرگی حروف حساس باشند." + +msgid "This account is inactive." +msgstr "این حساب غیر فعال است." + +msgid "Email" +msgstr "ایمیل" + +msgid "New password" +msgstr "گذرواژهٔ جدید" + +msgid "New password confirmation" +msgstr "تأیید گذرواژهٔ جدید" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "گذرواژهٔ قدیمی‌تان اشتباه وارد شد. لطفاً دوباره وارد کنید." + +msgid "Old password" +msgstr "گذرواژهٔ قدیمی" + +msgid "Password (again)" +msgstr "گذرواژه (تکرار)" + +msgid "algorithm" +msgstr "الگوریتم" + +msgid "iterations" +msgstr "تکرار" + +msgid "salt" +msgstr "salt" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "تنوع" + +msgid "version" +msgstr "نسخه" + +msgid "memory cost" +msgstr "هزینه‌ی حافظه" + +msgid "time cost" +msgstr "هزینه‌ی زمان" + +msgid "parallelism" +msgstr "موازات" + +msgid "work factor" +msgstr "عامل کار" + +msgid "checksum" +msgstr "جمع کنترلی" + +msgid "name" +msgstr "نام" + +msgid "content type" +msgstr "نوع محتوی" + +msgid "codename" +msgstr "نام کد" + +msgid "permission" +msgstr "اجازه" + +msgid "permissions" +msgstr "اجازه‌ها" + +msgid "group" +msgstr "گروه" + +msgid "groups" +msgstr "گروه‌ها" + +msgid "superuser status" +msgstr "ابرکاربر" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"نشان می‌دهد که این کاربر همهٔ اجازه‌ها را دارد بدون آنکه به صراحت به او اختصاص " +"داده شده باشد." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"گروه‌هایی که این کاربر به آنها تعلق دارد. کاربر تمام اجازه‌های مرتبط با این " +"گروه‌ها را دریافت خواهد کرد." + +msgid "user permissions" +msgstr "اجازه‌های کاربر" + +msgid "Specific permissions for this user." +msgstr "اجازه‌های خاص این کاربر." + +msgid "username" +msgstr "نام کاربری" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "الزامی. 150 کاراکتر یا کمتر. فقط شامل حروف، اعداد، و علامات @/./+/-/_" + +msgid "A user with that username already exists." +msgstr "کاربری با آن نام کاربری وجود دارد." + +msgid "first name" +msgstr "نام" + +msgid "last name" +msgstr "نام خانوادگی" + +msgid "email address" +msgstr "آدرس ایمیل" + +msgid "staff status" +msgstr "وضعیت کارمندی" + +msgid "Designates whether the user can log into this admin site." +msgstr "نشان می‌دهد که آیا این کاربر می‌تواند وارد این وبگاه مدیریت شود یا خیر." + +msgid "active" +msgstr "فعال" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"نشان می‌دهد که آیا این کاربر اجازهٔ فعالیت دارد یا خیر. به جای حذف کاربر این " +"تیک را بردارید." + +msgid "date joined" +msgstr "تاریخ پیوستن" + +msgid "user" +msgstr "کاربر" + +msgid "users" +msgstr "کاربرها" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"این رمز عبور خیلی کوتاه است. رمز عبور می‌بایست حداقل از %(min_length)d حرف " +"تشکیل شده باشد." +msgstr[1] "" +"این رمز عبور خیلی کوتاه است. رمز عبور می‌بایست حداقل از %(min_length)d حرف " +"تشکیل شده باشد." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "رمز عبور شما می‌بایست حداقل از %(min_length)d حرف تشکیل شده باشد." +msgstr[1] "رمز عبور شما می‌بایست حداقل از %(min_length)d حرف تشکیل شده باشد." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "این رمز عبور بسیار شبیه %(verbose_name)s می‌باشد." + +msgid "Your password can't be too similar to your other personal information." +msgstr "رمز عبور شما نمی‌تواند شبیه سایر اطلاعات شخصی شما باشد." + +msgid "This password is too common." +msgstr "این رمز عبور بسیار رایج است." + +msgid "Your password can't be a commonly used password." +msgstr "رمز شما نمی تواند از عبارات معروف باشد." + +msgid "This password is entirely numeric." +msgstr "رمز شما کلا عدد است" + +msgid "Your password can't be entirely numeric." +msgstr "رمز شما نمی تواند کلا عدد باشد" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "بازیابی گذرواژه در %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"یک نام کاربری معتبر وارد کنید. این مقدار میتواند فقط شامل حروف الفبای " +"انگلیسی، اعداد، و علامات @/./+/-/_ باشد." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"یک نام کاربری معتبر وارد کنید. این مقدار میتواند فقط شامل حروف، اعداد، و " +"علامات @/./+/-/_ باشد." + +msgid "Logged out" +msgstr "خارج شدید" + +msgid "Password reset" +msgstr "ایجاد گذرواژهٔ جدید" + +msgid "Password reset sent" +msgstr "تقاضای ریست رمز فرستاده شد" + +msgid "Enter new password" +msgstr "ورود گذرواژهٔ جدید" + +msgid "Password reset unsuccessful" +msgstr "گذرواژهٔ جدید ایجاد نشد." + +msgid "Password reset complete" +msgstr "گذرواژهٔ جدید ایجاد شد" + +msgid "Password change" +msgstr "تغییر گذرواژه" + +msgid "Password change successful" +msgstr "گذرواژه تغییر یافت." diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/fr/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/fr/LC_MESSAGES/django.po new file mode 100644 index 0000000..1e31edb --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/fr/LC_MESSAGES/django.po @@ -0,0 +1,315 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Claude Paroz , 2013-2018 +# Claude Paroz , 2013 +# Jannis Leidel , 2011 +# mlorant , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2018-02-27 13:36+0000\n" +"Last-Translator: Claude Paroz \n" +"Language-Team: French (http://www.transifex.com/django/django/language/fr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Personal info" +msgstr "Informations personnelles" + +msgid "Permissions" +msgstr "Permissions" + +msgid "Important dates" +msgstr "Dates importantes" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "L'objet %(name)s avec la clef primaire %(key)r n'existe pas." + +msgid "Password changed successfully." +msgstr "Mot de passe modifié avec succès" + +#, python-format +msgid "Change password: %s" +msgstr "Modifier le mot de passe : %s" + +msgid "Authentication and Authorization" +msgstr "Authentification et autorisation" + +msgid "password" +msgstr "mot de passe" + +msgid "last login" +msgstr "dernière connexion" + +msgid "No password set." +msgstr "Aucun mot de passe défini." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "" +"Format de mot de passe non valide ou algorithme de hachage non reconnu." + +msgid "The two password fields didn't match." +msgstr "Les deux mots de passe ne correspondent pas." + +msgid "Password" +msgstr "Mot de passe" + +msgid "Password confirmation" +msgstr "Confirmation du mot de passe" + +msgid "Enter the same password as before, for verification." +msgstr "Saisissez le même mot de passe que précédemment, pour vérification." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" +"Les mots de passe ne sont pas enregistrés en clair, ce qui ne permet pas " +"d'afficher le mot de passe de cet utilisateur, mais il est possible de le " +"changer en utilisant ce formulaire. " + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Saisissez un %(username)s et un mot de passe valides. Remarquez que chacun " +"de ces champs est sensible à la casse (différenciation des majuscules/" +"minuscules)." + +msgid "This account is inactive." +msgstr "Ce compte est inactif." + +msgid "Email" +msgstr "Courriel" + +msgid "New password" +msgstr "Nouveau mot de passe" + +msgid "New password confirmation" +msgstr "Confirmation du nouveau mot de passe" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Votre ancien mot de passe est incorrect. Veuillez le rectifier." + +msgid "Old password" +msgstr "Ancien mot de passe" + +msgid "Password (again)" +msgstr "Mot de passe (à nouveau)" + +msgid "algorithm" +msgstr "algorithme" + +msgid "iterations" +msgstr "itérations" + +msgid "salt" +msgstr "salage" + +msgid "hash" +msgstr "empreinte" + +msgid "variety" +msgstr "variété" + +msgid "version" +msgstr "version" + +msgid "memory cost" +msgstr "coût mémoire" + +msgid "time cost" +msgstr "coût temps" + +msgid "parallelism" +msgstr "parallélisme" + +msgid "work factor" +msgstr "facteur travail" + +msgid "checksum" +msgstr "somme de contrôle" + +msgid "name" +msgstr "nom" + +msgid "content type" +msgstr "type de contenu" + +msgid "codename" +msgstr "nom de code" + +msgid "permission" +msgstr "permission" + +msgid "permissions" +msgstr "permissions" + +msgid "group" +msgstr "groupe" + +msgid "groups" +msgstr "groupes" + +msgid "superuser status" +msgstr "statut super-utilisateur" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Précise que l'utilisateur possède toutes les permissions sans les assigner " +"explicitement." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Les groupes dont fait partie cet utilisateur. Celui-ci obtient tous les " +"droits de tous les groupes auxquels il appartient." + +msgid "user permissions" +msgstr "permissions de l'utilisateur" + +msgid "Specific permissions for this user." +msgstr "Permissions spécifiques à cet utilisateur." + +msgid "username" +msgstr "nom d'utilisateur" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"Requis. 150 caractères maximum. Uniquement des lettres, nombres et les " +"caractères « @ », « . », « + », « - » et « _ »." + +msgid "A user with that username already exists." +msgstr "Un utilisateur avec ce nom existe déjà." + +msgid "first name" +msgstr "prénom" + +msgid "last name" +msgstr "nom" + +msgid "email address" +msgstr "adresse électronique" + +msgid "staff status" +msgstr "statut équipe" + +msgid "Designates whether the user can log into this admin site." +msgstr "Précise si l'utilisateur peut se connecter à ce site d'administration." + +msgid "active" +msgstr "actif" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Précise si l'utilisateur doit être considéré comme actif. Décochez ceci " +"plutôt que de supprimer le compte." + +msgid "date joined" +msgstr "date d'inscription" + +msgid "user" +msgstr "utilisateur" + +msgid "users" +msgstr "utilisateurs" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Ce mot de passe est trop court. Il doit contenir au minimum %(min_length)d " +"caractère." +msgstr[1] "" +"Ce mot de passe est trop court. Il doit contenir au minimum %(min_length)d " +"caractères." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" +"Votre mot de passe doit contenir au minimum %(min_length)d caractère." +msgstr[1] "" +"Votre mot de passe doit contenir au minimum %(min_length)d caractères." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Le mot de passe est trop semblable au champ « %(verbose_name)s »." + +msgid "Your password can't be too similar to your other personal information." +msgstr "" +"Votre mot de passe ne peut pas trop ressembler à vos autres informations " +"personnelles." + +msgid "This password is too common." +msgstr "Ce mot de passe est trop courant." + +msgid "Your password can't be a commonly used password." +msgstr "" +"Votre mot de passe ne peut pas être un mot de passe couramment utilisé." + +msgid "This password is entirely numeric." +msgstr "Ce mot de passe est entièrement numérique." + +msgid "Your password can't be entirely numeric." +msgstr "Votre mot de passe ne peut pas être entièrement numérique." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Réinitialisation du mot de passe sur %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Saisissez un nom d'utilisateur valide. Il ne peut contenir que des lettres " +"non accentuées, des nombres ou les caractères « @ », « . », « + », « - » et " +"« _ »." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Saisissez un nom d'utilisateur valide. Il ne peut contenir que des lettres, " +"des nombres ou les caractères « @ », « . », « + », « - » et « _ »." + +msgid "Logged out" +msgstr "Déconnecté" + +msgid "Password reset" +msgstr "Réinitialisation du mot de passe" + +msgid "Password reset sent" +msgstr "Message de réinitialisation du mot de passe envoyé" + +msgid "Enter new password" +msgstr "Saisissez un nouveau mot de passe" + +msgid "Password reset unsuccessful" +msgstr "Échec lors de la mise à jour du mot de passe" + +msgid "Password reset complete" +msgstr "Mise à jour du mot de passe terminée" + +msgid "Password change" +msgstr "Modification du mot de passe" + +msgid "Password change successful" +msgstr "Mot de passe modifié avec succès" diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/fy/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/fy/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2331e0ea34a956870aca9d3de47c7090a697d31e GIT binary patch literal 476 zcmZWl%T59@6xHZzmabh~6BiII?PxSZ5o1J1Fc66ubzPY|W6jV`+9L2F{(v9mw|EDP zEIi3cd(v|sr{4$rpF4zI;vw;vxJNuC)<}q7^w_4e_WWVu>^n{a8)oboo!8b#$ljGH zZ1jkgb%Bk2p)+)-rcEIsdDY=>WeNEznv`>= dN;a@=<|UYFEq(W_1Dk8NVc@6>akCTc`~cP7jJ5y( literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/ga/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/ga/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3221b186d7cfddf0fe5e445a43f8d304e407d182 GIT binary patch literal 3572 zcmZ{lOKc=Z8GwtB1TZ0x<*|_PC=!;~+06K{8?rl&A&b{58STT`I3N^6RPL_nE~mR| z)K!z&71AEK!6gC-BqW4nDFsLL9h+Qw|7;11BEh#DVYcX?tdqP@3wm zo`3zXs(Jg=y+2WuRqAJ{uf9*IP59*d`A{z0tJD&_2tN)JxC1BfBK$qH@SgjW;-_*x zAB7cMfOp^n@CWcS@TXn>SMY=Me*-@Te+xek--4fn|A7y}2kuwu3-A#r=dZ&L!yE7; z@CA4VIwKv5)7a=C9XS?~W zjyq7~zR=BEDDwBa`2a=FJKg*bq4?nyDE9um8$ay&zlO5EfpY#IpzQw>JR&Aa$)icBfui#}C+Cq;CXBDzZvour8G z&$O+npKyoLUH=hy4^`|J-JhgN`65+(w@5upmHQ*Q_oz}%PtktA#8>>Y(v8Vof1HY0 zt$pGnDRS+_FOnmYZxU-M62m8`k`ryYq{qS5dg5ZPV{T&GtxRdPDQaud+uGi8A%?!% z%uSV9Ju)Foe4P&TnV>G);Ihg@8>X9M?!r`HZUPbtJ+gJ_LU6tc?IC^~kvJ+`;$m@I zBMbqq%Ghtq{=C3RZW*g(Vk$B*l`edyT@^i}oMh6{RXVt6|If~2Z9?wHMXL9#ju;hf z%E8(s(Y+VNAoPR*X^-6}|6WWm9D(Vq{8+`9TqZ5OupKtNnPS z+HX*#Yp!rg-G(Qq!mx~FbJeuj?r1+JQJZD9nl*z8ridy;GaPEZam>h=`SzA|1JYLQ z!2CuTXitzvP~5SX^blixt#)d^k5hWvY44lNkw62T?sFae!c8lw*t-@om-fCs&O&e3 z5A?#$josd+q&jPRmvP5HudS>;-CMcXTRX2;&kfFhDKM3@Q!uH%wI#*{jxZP4qKpL-*OD?e-;AzRI2|8=K7bcC9G~db@TZ z*Nb_Kqrvj>WHRYTk>`f?RzLCO^3Z@i(5|z0$idTPJ4?ZQa`<$5L+fKwsE%@kGgi&dkD2F|JL~yW;CI z40JVWyJ6$0bv%Dw9CaW`( zyGS{^;HB&5O%=)SDslGGuwB|L;#Go=4UGz1y@>yQBwu|b>K|L!5r&foA z@Fo#K`Pbqx$(tkoFXqoqIXAC3S03JB-fG1< z{-KhZLE_&w-%043CT@t?)KSSs+7$kPqe9HUvG11 z>$_5^c@4{OVqeX&LEd(jo06x~m12`iY;#Z;bxH0^(!8D?2VBxI9_OV(PcdHCJ+cA~ z6d6?NJtNBS(l%K!iX literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/ga/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/ga/LC_MESSAGES/django.po new file mode 100644 index 0000000..a91375a --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/ga/LC_MESSAGES/django.po @@ -0,0 +1,298 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Michael Thornhill , 2012,2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-09-24 14:24+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Irish (http://www.transifex.com/django/django/language/ga/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ga\n" +"Plural-Forms: nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : " +"4);\n" + +msgid "Personal info" +msgstr "Eolas pearsantach" + +msgid "Permissions" +msgstr "Ceada" + +msgid "Important dates" +msgstr "Dáta tábhactach" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "" + +msgid "Password changed successfully." +msgstr "Focal faire aithraithe rathúil" + +#, python-format +msgid "Change password: %s" +msgstr "Athraigh focal faire: %s" + +msgid "Authentication and Authorization" +msgstr "" + +msgid "password" +msgstr "focal faire" + +msgid "last login" +msgstr "logáil deirneach" + +msgid "No password set." +msgstr "" + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "" + +msgid "The two password fields didn't match." +msgstr "Níl an dá focla faire comhoiriúnigh" + +msgid "Password" +msgstr "Focal faire" + +msgid "Password confirmation" +msgstr "Focal faire deimhniú" + +msgid "Enter the same password as before, for verification." +msgstr "" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" + +msgid "This account is inactive." +msgstr "Tá an cuntas seo neamhghníomhach." + +msgid "Email" +msgstr "Ríomhphost" + +msgid "New password" +msgstr "Focal faire nua" + +msgid "New password confirmation" +msgstr "Deimnhiú focal faire nua" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" +"Cuireadh do sean-focal faire isteach go mícheart. Iontráil isteach é arís." + +msgid "Old password" +msgstr "Sean-focal faire " + +msgid "Password (again)" +msgstr "Focal faire (arís)" + +msgid "algorithm" +msgstr "algartam" + +msgid "iterations" +msgstr "atriallta" + +msgid "salt" +msgstr "salann" + +msgid "hash" +msgstr "haiseáil" + +msgid "variety" +msgstr "" + +msgid "version" +msgstr "" + +msgid "memory cost" +msgstr "" + +msgid "time cost" +msgstr "" + +msgid "parallelism" +msgstr "" + +msgid "work factor" +msgstr "fachtóir oibre" + +msgid "checksum" +msgstr "suim sheiceála" + +msgid "name" +msgstr "ainm" + +msgid "content type" +msgstr "" + +msgid "codename" +msgstr "Ainm cód" + +msgid "permission" +msgstr "cead" + +msgid "permissions" +msgstr "ceada" + +msgid "group" +msgstr "grúpa" + +msgid "groups" +msgstr "grúpa" + +msgid "superuser status" +msgstr "stádas forúsáideoir" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Sainíonn go bhfuil gach ceada ag an úsáideoir seo gan iad a cur le go " +"díreach." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" + +msgid "user permissions" +msgstr "ceada úsáideoira" + +msgid "Specific permissions for this user." +msgstr "" + +msgid "username" +msgstr "Ainm úsáideoir" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +msgid "A user with that username already exists." +msgstr "In ann do úsáideoir leis an ainm úsáideora." + +msgid "first name" +msgstr "ainm baiste" + +msgid "last name" +msgstr "sloinne" + +msgid "email address" +msgstr "seoladh r-phoist" + +msgid "staff status" +msgstr "stádas foirne" + +msgid "Designates whether the user can log into this admin site." +msgstr "" +"Sainigh an bhfuil cead ag an úsáideoir logáil isteach go dtí an suíomh " +"riaracháin seo." + +msgid "active" +msgstr "gníomhach" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Sainíonn an bhfuil an úsáideoir gníomhach. Míroghnaigh seo in aineonn de " +"scriseadh cuntasí." + +msgid "date joined" +msgstr "Dáta teacht isteach" + +msgid "user" +msgstr "úsáideoir" + +msgid "users" +msgstr "úsáideora" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "" + +msgid "Your password can't be too similar to your other personal information." +msgstr "" + +msgid "This password is too common." +msgstr "" + +msgid "Your password can't be a commonly used password." +msgstr "" + +msgid "This password is entirely numeric." +msgstr "" + +msgid "Your password can't be entirely numeric." +msgstr "" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Athshocraigh focal faire ar %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" + +msgid "Logged out" +msgstr "Logáilte amach" + +msgid "Password reset" +msgstr "Pasfhocal athshocrú" + +msgid "Password reset sent" +msgstr "Pasfhocal athshocrú sheoladh" + +msgid "Enter new password" +msgstr "" + +msgid "Password reset unsuccessful" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgid "Password change" +msgstr "" + +msgid "Password change successful" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/gd/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/gd/LC_MESSAGES/django.po new file mode 100644 index 0000000..7155f24 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/gd/LC_MESSAGES/django.po @@ -0,0 +1,333 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# GunChleoc, 2015-2017 +# GunChleoc, 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-10-04 18:25+0000\n" +"Last-Translator: GunChleoc\n" +"Language-Team: Gaelic, Scottish (http://www.transifex.com/django/django/" +"language/gd/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: gd\n" +"Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : " +"(n > 2 && n < 20) ? 2 : 3;\n" + +msgid "Personal info" +msgstr "Fiosrachadh pearsanta" + +msgid "Permissions" +msgstr "Ceadan" + +msgid "Important dates" +msgstr "Cinn-là chudromach" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "Chan eil oibseact %(name)s air a bheil prìomh-iuchair %(key)r ann." + +msgid "Password changed successfully." +msgstr "Chaidh am facal-faire atharrachadh gu soirbheachail." + +#, python-format +msgid "Change password: %s" +msgstr "Atharraich am facal-faire: %s" + +msgid "Authentication and Authorization" +msgstr "Dearbhadh is ùghdarrachadh" + +msgid "password" +msgstr "facal-faire" + +msgid "last login" +msgstr "an clàradh a-steach mu dheireadh" + +msgid "No password set." +msgstr "Cha deach facal-faire a shuidheachadh." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "" +"Tha fòrmat mì-dhligheach air an fhacal-fhaire no chan aithne dhuinn algairim " +"a’ hais." + +msgid "The two password fields didn't match." +msgstr "Cha robh an dà fhacal-faire co-ionnann." + +msgid "Password" +msgstr "Facal-faire" + +msgid "Password confirmation" +msgstr "Dearbhadh an fhacail-fhaire" + +msgid "Enter the same password as before, for verification." +msgstr "Cuir an t-aon fhacal-faire a-steach a-rithist gus a dhearbhadh." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" +"Cha dèid faclan-faire amh a shàbhaladh ’s mar sin chan eil dòigh ann gus " +"facal-faire a’ chleachdaiche seo a shealltainn. ’S urrainn dhut am facal-" +"faire atharrachadh co-dhiù leis an fhoirm seo." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Cuir a-steach %(username)s agus facal-faire ceart. Thoir an aire gum bi aire " +"do litrichean mòra ’s beaga air an dà raon, ma dh’fhaoidte." + +msgid "This account is inactive." +msgstr "Chan eil an cunntas seo gnìomhach." + +msgid "Email" +msgstr "Post-d" + +msgid "New password" +msgstr "Facal-faire ùr" + +msgid "New password confirmation" +msgstr "Dearbhadh an fhacail-fhaire ùir" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" +"Cha do chuir thu an seann fhacal-faire a-steach mar bu chòir. Cuir a-steach " +"e a-rithist." + +msgid "Old password" +msgstr "An seann fhacal-faire" + +msgid "Password (again)" +msgstr "Facal-faire (a-rithist)" + +msgid "algorithm" +msgstr "algairim" + +msgid "iterations" +msgstr "ath-thriallan" + +msgid "salt" +msgstr "salann" + +msgid "hash" +msgstr "hais" + +msgid "variety" +msgstr "eug-samhail" + +msgid "version" +msgstr "tionndadh" + +msgid "memory cost" +msgstr "cosgais cuimhne" + +msgid "time cost" +msgstr "cosgais ùine" + +msgid "parallelism" +msgstr "co-shìneadh" + +msgid "work factor" +msgstr "factar obrachaidh" + +msgid "checksum" +msgstr "àireamh dhearbhaidh" + +msgid "name" +msgstr "ainm" + +msgid "content type" +msgstr "seòrsa susbainte" + +msgid "codename" +msgstr "ainm-còd" + +msgid "permission" +msgstr "cead" + +msgid "permissions" +msgstr "ceadan" + +msgid "group" +msgstr "buidheann" + +msgid "groups" +msgstr "buidhnean" + +msgid "superuser status" +msgstr "staid superuser" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Iomruinidh seo gu bheil a h-uile aig a’ chleachdaiche seo gun a bhith ’gan " +"iomruineadh fa leth." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Am buidheann ris a bhuineas an cleachdaiche seo. Gheibh cleachdaiche a h-" +"uile cead a chaidh a thoirt dha ghin dhe na buidhnean aige." + +msgid "user permissions" +msgstr "ceadan a’ chleachdaiche" + +msgid "Specific permissions for this user." +msgstr "Ceadan sònraichte airson a’ chleachdaiche seo." + +msgid "username" +msgstr "ainm-cleachdaiche" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"Riatanach. 150 caractar air a char as motha. Litrichean, àireamhan agus @/./" +"+/-/_ a-mhàin." + +msgid "A user with that username already exists." +msgstr "Tha cleachdaiche air a bheil an t-ainm-cleachdaiche seo ann mar-tha." + +msgid "first name" +msgstr "ainm" + +msgid "last name" +msgstr "sloinneadh" + +msgid "email address" +msgstr "seòladh puist-d" + +msgid "staff status" +msgstr "inbhe luchd-obrach" + +msgid "Designates whether the user can log into this admin site." +msgstr "" +"Iomruinidh seo an urrainn dhan chleachdaiche seo clàradh a-steach gu làrach " +"nan rianairean gus nach urrainn." + +msgid "active" +msgstr "staid ghnìomhach" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Iomruinidh seo an dèid dèiligeadh ris a’ cleachdaiche seo mar fhear " +"gnìomhach gus nach dèid. Neo-thagh seo seach an cunntas a sguabadh às." + +msgid "date joined" +msgstr "fhuair e ballrachd" + +msgid "user" +msgstr "cleachdaiche" + +msgid "users" +msgstr "cleachdaichean" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Tha am facal-faire seo ro ghoirid. Feumaidh %(min_length)d charactar a bhith " +"ann air a char as lugha." +msgstr[1] "" +"Tha am facal-faire seo ro ghoirid. Feumaidh %(min_length)d charactar a bhith " +"ann air a char as lugha." +msgstr[2] "" +"Tha am facal-faire seo ro ghoirid. Feumaidh %(min_length)d caractaran a " +"bhith ann air a char as lugha." +msgstr[3] "" +"Tha am facal-faire seo ro ghoirid. Feumaidh %(min_length)d caractar a bhith " +"ann air a char as lugha." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" +"Feumaidh %(min_length)d charactar a bhith san fhacal-fhaire agad air a char " +"as lugha." +msgstr[1] "" +"Feumaidh %(min_length)d charactar a bhith san fhacal-fhaire agad air a char " +"as lugha." +msgstr[2] "" +"Feumaidh %(min_length)d caractaran a bhith san fhacal-fhaire agad air a char " +"as lugha." +msgstr[3] "" +"Feumaidh %(min_length)d caractar a bhith san fhacal-fhaire agad air a char " +"as lugha." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Tha am facal-faire agad ro choltach ri %(verbose_name)s." + +msgid "Your password can't be too similar to your other personal information." +msgstr "" +"Chan fhaod am facal-faire agad a bhith ro choltach ris an fhiosrachadh " +"phearsanta eile agad." + +msgid "This password is too common." +msgstr "Tha am facal-faire seo ro chumanta." + +msgid "Your password can't be a commonly used password." +msgstr "" +"Chan fhaod thu facal-faire a chleachdadh a chleachd mòran daoine mar-thà." + +msgid "This password is entirely numeric." +msgstr "Chan eil ach àireamhan san fhacal-fhaire seo.ac" + +msgid "Your password can't be entirely numeric." +msgstr "" +"Feumaidh caractaran a bhith san fhacal-fhaire agad nach eil ’nan àireamhan." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Ath-shuidheachadh an fhacail-fhaire air %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Cuir a-steach ainm-cleachdaiche dligheach. Chan fhaod ach litrichean gun " +"sràcan, àireamhan is caractaran @/./+/-/_ a bhith ’na bhroinn." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Cuir a-steach ainm-cleachdaiche dligheach. Chan fhaod ach litrichean, " +"àireamhan is caractaran @/./+/-/_ a bhith ’na bhroinn." + +msgid "Logged out" +msgstr "Air a clàradh a-mach" + +msgid "Password reset" +msgstr "Ath-shuidheachadh an fhacail-fhaire" + +msgid "Password reset sent" +msgstr "Chaidh ath-shuidheachadh an fhacail-fhaire a chur" + +msgid "Enter new password" +msgstr "Cuir a-steach facal-faire ùr" + +msgid "Password reset unsuccessful" +msgstr "Cha deach le ath-shuidheachadh an facail-faire" + +msgid "Password reset complete" +msgstr "Tha ath-shuidheachadh an fhacail-fhaire deiseil" + +msgid "Password change" +msgstr "Atharrachadh an facail-fhaire" + +msgid "Password change successful" +msgstr "Chaidh am facal-faire atharrachadh gu soirbheachail" diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/gl/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/gl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..770942be31c9ddc247fdadacfcd228dad4003563 GIT binary patch literal 4022 zcmZ{m&yO5O6~_xOfh-|`gn$VFDj3JR#54ONwquXu2xB|eO0m7N)(8*;)ppm+l-*M` zban4~EiMrUKnNrxBOwG5QBE9)6!}18kw|EWa*IJ+xIn}ofVd(NBtEaYXLmLZrK$dQ zRlj=me!uzqgZqA_7)P0pGXMBKrOt!J2Y4`kuurK4@Q2_-;4N?sd=oqY?*E`t7Q77d zQ?K%P0DK)3o^OG3;J$m5x(|E+{51F|_%ZNUyMG@1FzfYp|6AbaSbOkc@WUj@#Am6kAts) z=fFGd`eB3-ISzr3fycqe!Eb;Mf-iuOs+-`az+boDUj-$8-fq|LfQY0HVAM~5hryqK zr@_PEpTI}J|AJ@0{r5L^{w65)%s}z`2o!z42Z~%j0woT935xxG4~kv>0E(a9Z1>*+ zMb5u~5|3|#BG11-;qz}$&fm*Np}W7uM?ksnaZu>Hprpc6pxEmqD0*K2h0cOv&k@K^ zy}(1x{j|kjfMU0oK-`pu@LOUYVG559Q^seQ^Gvb33`A5UW)D_*OSaHQ^pEYd?-U~f(z9Fruac>faou=B|~gJ z9k?+0>`=QQc`M_yO!2V{&6GG0--*3syuX2zx9YU6qb>E8tA@H7nkp^58Ch+L(wcl* z+v_e?v8&DujUQM&HZg96GVkewQJuBX4ZNvrYz|jL7aN8{6X8(ku`Nd~Mi+ccmxQ{4 z(>mm%a^HpG%n@m1(UPo8i|8sIGO&o^0 z$n}QR6-re$=VEQL%5B=NzT%@TY*sZqosSiI>(JLZ+m*;>vMkhIjBsvbT%lG+<4{({ zS2`En)vDh#h0Awrqx+#8VarhJ+F$cw%WLd0OstAQC^0s=J{JZ9B*7x;qTSj#yl0`a z;QLOPVL^2<>`>`wtFF3)Qd5VhwbnB`FM8e#jPnb-8(H#Uu4A2LHpYHk6x-dI&$E|J z+3C`9mkwSZoEKAnTcTqjs+5!B>~bn zPV?$~>u>e-P?tK)SWa&d4M|$u;e0DEmeG4Oag|Q??5c*7GE-lwY-qDxiYQCoe&~C`PN*l8Wr+!OcqT0mU z5{{ICYr2myLaElua1|$aR`bqRo6kL+U!`J%xyx3vrE?(;T;BOgJ&2w4(9?5km)1LH zBpYGXIg7b^dSz+(sm{`g&dL$J{ABOQu_u;RmX;vwT(+A|uH2dk%wj)=T4KVGyZ@Xp!U!`ssec5q`H{9*8r#Sr|RT0Y9kCz;@QH8TIseayWAo znfYN=jeCoWTU%S*O8B|Hy)H)<8;zz=wC5KG#p1%;h1Cn^c6DFwF3p_@WPnGe?J>$# z_IkBAE=b6enmjB?s#90ipY0sqrIWk*w(OiE26L)KPaofK)sCD!Jt*eZiW-l1o~6RX zp7!IkjHgyk>gM&-yw{JN(#s1c=hW9sQ@tsmo*G)4(gmp~nvB*yP~>x|t!bYEZ$=x= zkQzdQ-jS3kQkh@%xyy|HPEAr%9j8Z7$?GcQA!>e2!0v@u>G-9d+b!nChm6?bM zR0nobji0*sE-?{j8c|K0-DNAB@m~EUNOw)`v{9KTi@_9Xjo#Wfo1r{R#f}d72=P4~ zX0Iz+0YmKSbvt>5#ApoCL^XOeL7bzFs5O>=mRhcJLInfXuB5ZL$?cfcRAy~8@i$%3 zh>4n+qwf(18NC2ETf+Ao#WvXyDPlEwaoU@V3I#v2wrayXRP}Y+;_D1WWyTe}! z2TiLUhvqrkx)STCCbx^qap^RU&6o~FolsdViH9tykvXFhv(&^=4-0BGQreQzHZhLV z!4xMqN_g-Gpp6BLDBVohwhb*+G}TtNo#R3<-FsK{o6@$;O>(bkY;uOk-Jr<^^*_kd BVsQWf literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/hsb/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/hsb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7b376cb54e71ccc166059ff47840cbc6d36c316e GIT binary patch literal 7925 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/hsb/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/hsb/LC_MESSAGES/django.po new file mode 100644 index 0000000..588ad7a --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/hsb/LC_MESSAGES/django.po @@ -0,0 +1,312 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Michael Wolf , 2016-2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-09-27 20:07+0000\n" +"Last-Translator: Michael Wolf \n" +"Language-Team: Upper Sorbian (http://www.transifex.com/django/django/" +"language/hsb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hsb\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "Personal info" +msgstr "Wosobinske informacije" + +msgid "Permissions" +msgstr "Prawa" + +msgid "Important dates" +msgstr "Wažne daty" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "Objekt %(name)s z primarnym klučom %(key)r njeeksistuje." + +msgid "Password changed successfully." +msgstr "Hesło je so wuspěšnje změniło." + +#, python-format +msgid "Change password: %s" +msgstr "Hesło změnić: %s" + +msgid "Authentication and Authorization" +msgstr "Awtentifikacija a awtorizacija" + +msgid "password" +msgstr "hesło" + +msgid "last login" +msgstr "poslednje přizjewjenje" + +msgid "No password set." +msgstr "Žane hesło nastajene." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Njepłaćiwy hesłowy format abo njeznaty kontrolny algoritmus." + +msgid "The two password fields didn't match." +msgstr "Hesle jednak njejstej." + +msgid "Password" +msgstr "Hesło" + +msgid "Password confirmation" +msgstr "Hesłowe wobkrućenje" + +msgid "Enter the same password as before, for verification." +msgstr "Zapodajće samsne hesło kaž do toho, za přepruwowanje." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" +"Hrube hesła so njeskładuja, tohodla njeje móžno, hesło wužiwarja widźeć, ale " +"móžeće hesło z pomocu tutoho formulara změnić." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Prošu zapodajće korektne %(username)s a hesło. Dźiwajće na to, zo wobě poli " +"móžetej mjez wulko- a małopisanjom rozeznawać." + +msgid "This account is inactive." +msgstr "Tute konto je inaktiwne." + +msgid "Email" +msgstr "E-mejl" + +msgid "New password" +msgstr "Nowe hesło" + +msgid "New password confirmation" +msgstr "Wobkrućenje noweho hesła" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Waše stare hesło je so wopak zapodało. Prošu zapodajće jo hišće raz." + +msgid "Old password" +msgstr "Stare hesło" + +msgid "Password (again)" +msgstr "Hesło (znowa)" + +msgid "algorithm" +msgstr "algoritmus" + +msgid "iterations" +msgstr "wospjetowanja" + +msgid "salt" +msgstr "sól" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "warianta" + +msgid "version" +msgstr "wersija" + +msgid "memory cost" +msgstr "Składowa přetrjeba" + +msgid "time cost" +msgstr "Časowa přetrjeba" + +msgid "parallelism" +msgstr "paralelizm" + +msgid "work factor" +msgstr "dźěłowy faktor" + +msgid "checksum" +msgstr "pruwowanska suma" + +msgid "name" +msgstr "mjeno" + +msgid "content type" +msgstr "wobsahowy typ" + +msgid "codename" +msgstr "kodowe mjeno" + +msgid "permission" +msgstr "prawo" + +msgid "permissions" +msgstr "prawa" + +msgid "group" +msgstr "skupina" + +msgid "groups" +msgstr "skupiny" + +msgid "superuser status" +msgstr "status superwužiwarja" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Woznamjenja, zo tutón wužiwar ma wšě prawa bjez toho, zo by móhł je " +"eksplicitnje připokazać." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Skupiny, ke kotrymž wužiwar słuša. Wužiwar dóstanje wšě prawa, kotrež jemu " +"skupiny dawaja." + +msgid "user permissions" +msgstr "wužiwarske prawa" + +msgid "Specific permissions for this user." +msgstr "Wěste prawa za tutoho wužiwarja." + +msgid "username" +msgstr "wužiwarske mjeno" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "Trěbne. 150 znamješkow abo mjenje. Jenož pismiki, cyfry a @/./+/-/_." + +msgid "A user with that username already exists." +msgstr "Wužiwar z tutym mjenom hižo eksistuje." + +msgid "first name" +msgstr "předmjeno" + +msgid "last name" +msgstr "swójbne mjeno" + +msgid "email address" +msgstr "e-mejlowa adresa" + +msgid "staff status" +msgstr "personalny status" + +msgid "Designates whether the user can log into this admin site." +msgstr "" +"Woznamjenja, hač wužiwar móže so pola administratoroweho sydła přizjewić." + +msgid "active" +msgstr "aktiwny" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Woznamjenja, hač maja z wužiwarjom jako aktiwnym wobchadźeć. Znjemóžńće to " +"město toho, zo byšće konto zhašał." + +msgid "date joined" +msgstr "čłon wot" + +msgid "user" +msgstr "wužiwar" + +msgid "users" +msgstr "wužiwarjo" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Tute hesło je překrótke. Dyrbi znajmjeńša %(min_length)d znamješko " +"wobsahować." +msgstr[1] "" +"Tute hesło je překrótke. Dyrbi znajmjeńša %(min_length)d znamješce " +"wobsahować." +msgstr[2] "" +"Tute hesło je překrótke. Dyrbi znajmjeńša %(min_length)d znamješka " +"wobsahować." +msgstr[3] "" +"Tute hesło je překrótke. Dyrbi znajmjeńša %(min_length)d znamješkow " +"wobsahować." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Waše hesło dyrbi znajmjeńša %(min_length)d znamješko měć." +msgstr[1] "Waše hesło dyrbi znajmjeńša %(min_length)d znamješce měć." +msgstr[2] "Waše hesło dyrbi znajmjeńša %(min_length)d znamješka měć." +msgstr[3] "Waše hesło dyrbi znajmjeńša %(min_length)d znamješkow měć." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Hesło je na %(verbose_name)s přepodobne." + +msgid "Your password can't be too similar to your other personal information." +msgstr "Waše hesło njesmě wašim druhim wosobinskim datam podobne być." + +msgid "This password is too common." +msgstr "Tute hesło je přehuste," + +msgid "Your password can't be a commonly used password." +msgstr "Waše hesło njemóže husto wužiwane hesło być." + +msgid "This password is entirely numeric." +msgstr "Tute hesło je cyle numeriske." + +msgid "Your password can't be entirely numeric." +msgstr "Waše hesło njemóže cyle numeriske być." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Hesło je so na %(site_name)s wróćo stajiło." + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Zapodajće płaćiwe wužiwarske mjeno. Tuta hódnota smě jenož jendźelske " +"pismiki, ličby a znamješka @/./+/-/_ wobsahować." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Zapodajće płaćiwe wužiwarske mjeno. Tuta hódnota smě jenož pismiki, ličby a " +"znamješka @/./+/-/_ wobsahować." + +msgid "Logged out" +msgstr "Wotzjewjeny" + +msgid "Password reset" +msgstr "Wróćostajenje hesła" + +msgid "Password reset sent" +msgstr "Wróćostajenje hesła jo se wotpósłało." + +msgid "Enter new password" +msgstr "Zapodajće nowe hesło" + +msgid "Password reset unsuccessful" +msgstr "Wróćostajenje hesła njeje so poradźiło" + +msgid "Password reset complete" +msgstr "Wróćostajenje hesła je zakónčene" + +msgid "Password change" +msgstr "Změnjenje hesła" + +msgid "Password change successful" +msgstr "Hesło je so wuspěšnje změniło" diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/hu/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/hu/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ee1161a9d25bf60ba9b365cb51e4445b323b217e GIT binary patch literal 7691 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 hsJW;4gvMHPZ-d5jJ$=>WUE}2oYb, 2011 +# János R (Hangya), 2014 +# Szilveszter Farkas , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-11-24 13:37+0000\n" +"Last-Translator: András Veres-Szentkirályi\n" +"Language-Team: Hungarian (http://www.transifex.com/django/django/language/" +"hu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "Személyes információ" + +msgid "Permissions" +msgstr "Jogosultságok" + +msgid "Important dates" +msgstr "Fontos dátumok" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "%(name)s objektum %(key)r elsődleges kulccsal nem létezik." + +msgid "Password changed successfully." +msgstr "Sikeres jelszóváltoztatás." + +#, python-format +msgid "Change password: %s" +msgstr "Jelszó megváltoztatása: %s" + +msgid "Authentication and Authorization" +msgstr "Hitelesítés és engedélyezés" + +msgid "password" +msgstr "jelszó" + +msgid "last login" +msgstr "utolsó bejelentkezés" + +msgid "No password set." +msgstr "Nincs jelszó beállítva." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Érvénytelen jelszóformátum vagy ismeretlen hash-algoritmus." + +msgid "The two password fields didn't match." +msgstr "A két jelszó mező tartalma nem egyezik meg." + +msgid "Password" +msgstr "Jelszó" + +msgid "Password confirmation" +msgstr "Jelszó megerősítése" + +msgid "Enter the same password as before, for verification." +msgstr "Írja be az előbb megadott jelszót, ellenőrzés céljából." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" +"A kódolatlan jelszavakat nem tároljuk, így a felhasználó jelszavát nem lehet " +"megtekinteni, azonban ezzel az űrlappal a jelszó " +"megváltoztatható." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Írjon be egy helyes %(username)s és jelszót. Mindkét mező kisbetű-nagybetű " +"érzékeny lehet." + +msgid "This account is inactive." +msgstr "Ez a fiók inaktív." + +msgid "Email" +msgstr "E-mail" + +msgid "New password" +msgstr "Új jelszó" + +msgid "New password confirmation" +msgstr "Új jelszó megerősítése" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "A régi jelszó hibásan lett megadva. Írja be újra." + +msgid "Old password" +msgstr "Régi jelszó" + +msgid "Password (again)" +msgstr "Jelszó újra" + +msgid "algorithm" +msgstr "algoritmus" + +msgid "iterations" +msgstr "iterációk" + +msgid "salt" +msgstr "salt" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "változat" + +msgid "version" +msgstr "verzió" + +msgid "memory cost" +msgstr "memória költség" + +msgid "time cost" +msgstr "idő költség" + +msgid "parallelism" +msgstr "párhuzamosság" + +msgid "work factor" +msgstr "erősség" + +msgid "checksum" +msgstr "ellenőrző összeg" + +msgid "name" +msgstr "név" + +msgid "content type" +msgstr "tartalom típusa" + +msgid "codename" +msgstr "kódnév" + +msgid "permission" +msgstr "jogosultság" + +msgid "permissions" +msgstr "jogosultságok" + +msgid "group" +msgstr "csoport" + +msgid "groups" +msgstr "csoportok" + +msgid "superuser status" +msgstr "rendszergazda státusz" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Megadja, hogy ez a felhasználó rendelkezik-e minden jogosultsággal anélkül, " +"hogy azt külön meg kellene adni." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"A csoportok, amelyekhez a felhasználó tartozik. A felhasználó minden egyes " +"csoportja jogosultságaival rendelkezni fog." + +msgid "user permissions" +msgstr "felhasználói jogosultságok" + +msgid "Specific permissions for this user." +msgstr "A felhasználó egyedi jogosultságai." + +msgid "username" +msgstr "felhasználónév" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"Kötelező. Legfeljebb 150 karakter. Betűk, számok és @/./+/-/_ karakterek." + +msgid "A user with that username already exists." +msgstr "Létezik már egy felhasználó ezzel a névvel." + +msgid "first name" +msgstr "keresztnév" + +msgid "last name" +msgstr "vezetéknév" + +msgid "email address" +msgstr "e-mail cím" + +msgid "staff status" +msgstr "személyzet státusz" + +msgid "Designates whether the user can log into this admin site." +msgstr "" +"Megadja, hogy a felhasználó bejelentkezhet-e erre az adminisztrációs oldalra." + +msgid "active" +msgstr "aktív" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Megadja, hogy a felhasználó aktív-e. Állítsa át ezt az értéket a fiók " +"törlése helyett." + +msgid "date joined" +msgstr "csatlakozás dátuma" + +msgid "user" +msgstr "felhasználó" + +msgid "users" +msgstr "felhasználók" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Ez a jelszó túl rövid. Legalább %(min_length)d karakter hosszú legyen." +msgstr[1] "" +"Ez a jelszó túl rövid. Legalább %(min_length)d karakter hosszú legyen." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" +"A jelszavának legalább %(min_length)d karakter hosszúnak kell lennie." +msgstr[1] "" +"A jelszavának legalább %(min_length)d karakter hosszúnak kell lennie." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "A jelszava túlságosan hasonlít a következőhöz: %(verbose_name)s." + +msgid "Your password can't be too similar to your other personal information." +msgstr "A jelszava nem lehet túlságosan hasonló egyéb személyes adataihoz." + +msgid "This password is too common." +msgstr "Ez a jelszó túlságosan gyakori." + +msgid "Your password can't be a commonly used password." +msgstr "A jelszava nem lehet gyakran használt jelszó." + +msgid "This password is entirely numeric." +msgstr "A jelszava kizárólag számjegyekből áll." + +msgid "Your password can't be entirely numeric." +msgstr "A jelszava nem állhat kizárólag számjegyekből." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Jelszó újragenerálása ezen az oldalon: %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Írjon be egy érvényes felhasználónevet, mely csak ékezetmentes betűket, " +"számokat és @/./+/-/_ karaktereket tartalmazhat." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Írjon be egy érvényes felhasználónevet, mely csak betűket, számokat és @/./" +"+/-/_ karaktereket tartalmazhat." + +msgid "Logged out" +msgstr "Kijelentkezve" + +msgid "Password reset" +msgstr "Jelszó újragenerálása" + +msgid "Password reset sent" +msgstr "Jelszó beállítás infók elküldve" + +msgid "Enter new password" +msgstr "Írja be az új jelszavát" + +msgid "Password reset unsuccessful" +msgstr "Jelszó beállítása sikertelen" + +msgid "Password reset complete" +msgstr "Jelszó beállítása kész" + +msgid "Password change" +msgstr "Jelszó megváltoztatása" + +msgid "Password change successful" +msgstr "Sikeres jelszóváltoztatás" diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/hy/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/hy/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9ca530aea136109075553a4ee4a9b68fa9fe38fb GIT binary patch literal 8001 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/it/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..818ec614d0dc511c0ec2420d26ca8326bb896da7 GIT binary patch literal 7583 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 I%*37NKPi&T`Tzg` literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/it/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/it/LC_MESSAGES/django.po new file mode 100644 index 0000000..b014468 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/it/LC_MESSAGES/django.po @@ -0,0 +1,313 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Federico Capoano , 2011 +# Flavio Curella , 2013-2014 +# Jannis Leidel , 2011 +# Luciano De Falco Alfano, 2016 +# Marco Bonetti, 2014 +# palmux , 2015 +# Mattia Procopio , 2015 +# Stefano Brentegani , 2015,2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-11-16 13:37+0000\n" +"Last-Translator: palmux \n" +"Language-Team: Italian (http://www.transifex.com/django/django/language/" +"it/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "Informazioni personali" + +msgid "Permissions" +msgstr "Permessi" + +msgid "Important dates" +msgstr "Date importanti" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "L'oggetto %(name)s con chiave primaria %(key)r non esiste." + +msgid "Password changed successfully." +msgstr "La password è stata modificata correttamente." + +#, python-format +msgid "Change password: %s" +msgstr "Modifica la password: %s" + +msgid "Authentication and Authorization" +msgstr "Autenticazione e Autorizzazione " + +msgid "password" +msgstr "password" + +msgid "last login" +msgstr "ultimo accesso" + +msgid "No password set." +msgstr "Nessuna password impostata." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Formato di password non valido o algoritmo di hash sconosciuto." + +msgid "The two password fields didn't match." +msgstr "I due campi password non corrispondono." + +msgid "Password" +msgstr "Password" + +msgid "Password confirmation" +msgstr "Conferma password" + +msgid "Enter the same password as before, for verification." +msgstr "Inserisci la stessa password inserita sopra, come verifica." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" +"Le password non vengono conservate nella forma originale, quindi non è " +"possibile visualizzare la password di questo utente, ma è possibile " +"cambiarla usando questo modulo." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Inserisci %(username)s e password corretti. In entrambi i campi le maiuscole " +"potrebbero essere significative." + +msgid "This account is inactive." +msgstr "Questo account non è attivo." + +msgid "Email" +msgstr "Email" + +msgid "New password" +msgstr "Nuova password" + +msgid "New password confirmation" +msgstr "Conferma nuova password" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" +"La password attuale non è stata inserita correttamente. Riprova per favore." + +msgid "Old password" +msgstr "Password attuale" + +msgid "Password (again)" +msgstr "Password (di nuovo)" + +msgid "algorithm" +msgstr "algoritmo" + +msgid "iterations" +msgstr "iterazioni" + +msgid "salt" +msgstr "salt" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "varietà" + +msgid "version" +msgstr "versione" + +msgid "memory cost" +msgstr "impegno di memoria" + +msgid "time cost" +msgstr "impiego di tempo" + +msgid "parallelism" +msgstr "parallelismo" + +msgid "work factor" +msgstr "work factor" + +msgid "checksum" +msgstr "checksum" + +msgid "name" +msgstr "nome" + +msgid "content type" +msgstr "content type" + +msgid "codename" +msgstr "nome in codice" + +msgid "permission" +msgstr "permesso" + +msgid "permissions" +msgstr "permessi" + +msgid "group" +msgstr "gruppo" + +msgid "groups" +msgstr "gruppi" + +msgid "superuser status" +msgstr "privilegi di superutente" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Attribuisce all'utente tutti i privilegi, senza che sia necessario " +"assegnarli esplicitamente." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"I gruppi a cui appartiene l'utente. L'utente eredita tutti i permessi " +"assegnati a ciascuno dei suoi gruppi." + +msgid "user permissions" +msgstr "privilegi utente" + +msgid "Specific permissions for this user." +msgstr "Permessi specifici per questo utente." + +msgid "username" +msgstr "nome utente" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "Obbligatorio. 150 caratteri o meno.Solo lettere, cifre e @/./+/-/_" + +msgid "A user with that username already exists." +msgstr "Un utente con questo nome è già presente." + +msgid "first name" +msgstr "nome" + +msgid "last name" +msgstr "cognome" + +msgid "email address" +msgstr "indirizzo email" + +msgid "staff status" +msgstr "privilegi di staff" + +msgid "Designates whether the user can log into this admin site." +msgstr "Stabilisce se l'utente può accedere a questo sito di amministrazione." + +msgid "active" +msgstr "attivo" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Stabilisce se l'utente debba essere considerato attivo. Deseleziona qui, " +"piuttosto che cancellare gli account." + +msgid "date joined" +msgstr "iscritto in data" + +msgid "user" +msgstr "utente" + +msgid "users" +msgstr "utenti" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Questa password è troppo corta. Deve contenere almeno %(min_length)d " +"carattere." +msgstr[1] "" +"Questa password è troppo corta. Deve contenere almeno %(min_length)d " +"caratteri." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "La tua password deve contenere almeno %(min_length)d carattere." +msgstr[1] "La tua password deve contenere almeno %(min_length)d caratteri." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "La password è troppo simile a %(verbose_name)s." + +msgid "Your password can't be too similar to your other personal information." +msgstr "" +"La tua password non può essere troppo simile alle altre tue informazioni " +"personali." + +msgid "This password is too common." +msgstr "Questa password è troppo comune." + +msgid "Your password can't be a commonly used password." +msgstr "La tua password non può essere una password comunemente usata." + +msgid "This password is entirely numeric." +msgstr "Questa password è interamente numerica." + +msgid "Your password can't be entirely numeric." +msgstr "La tua password non può essere interamente numerica." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Password reset su %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Immetti un nome utente valido. Questo campo può contenere solo lettere " +"dell'alfabeto inglese, numeri e caratteri @/./+/-/_ ." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Immetti un nome utente valido. Questo campo può contenere solo lettere " +"dell'alfabeto inglese, numeri e caratteri @/./+/-/_ ." + +msgid "Logged out" +msgstr "Accesso annullato" + +msgid "Password reset" +msgstr "Reimposta la password" + +msgid "Password reset sent" +msgstr "Istruzioni per il recupero della password inviate" + +msgid "Enter new password" +msgstr "Inserisci la nuova password" + +msgid "Password reset unsuccessful" +msgstr "Password non reimpostata" + +msgid "Password reset complete" +msgstr "Password reimpostata" + +msgid "Password change" +msgstr "Modifica password" + +msgid "Password change successful" +msgstr "Password modificata correttamente" diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/ka/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/ka/LC_MESSAGES/django.po new file mode 100644 index 0000000..347ed66 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/ka/LC_MESSAGES/django.po @@ -0,0 +1,300 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# André Bouatchidzé , 2013-2015 +# Jannis Leidel , 2011 +# Tornike Beradze , 2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2018-02-07 12:11+0000\n" +"Last-Translator: Tornike Beradze \n" +"Language-Team: Georgian (http://www.transifex.com/django/django/language/" +"ka/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ka\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" + +msgid "Personal info" +msgstr "პირადი ინფორმაცია" + +msgid "Permissions" +msgstr "უფლებები" + +msgid "Important dates" +msgstr "მნიშვნელოვანი თარიღები" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "%(name)s ობიექტი პირველადი გასაღებით %(key)r არ არსებობს." + +msgid "Password changed successfully." +msgstr "პაროლი წარმატებით შეიცვალა." + +#, python-format +msgid "Change password: %s" +msgstr "შევცვალოთ პაროლი: %s" + +msgid "Authentication and Authorization" +msgstr "იდენტიფიკაცია და ავტორიზაცია" + +msgid "password" +msgstr "პაროლი" + +msgid "last login" +msgstr "ბოლო შესვლა" + +msgid "No password set." +msgstr "არ არის დაყენებული პაროლი." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "არასწორი პაროლის ფორმატი ან უცნობი ჰეშირების ალგორითმი." + +msgid "The two password fields didn't match." +msgstr "პაროლის ორი ველი ერთმანეთს არ ემთხვევა." + +msgid "Password" +msgstr "პაროლი" + +msgid "Password confirmation" +msgstr "პაროლის დამოწმება" + +msgid "Enter the same password as before, for verification." +msgstr "გაიმეორეთ იგივე პაროლი ვერიფიკაციისთვის." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" +"მომხმარებლის პაროლი პირდაპ არ ინახება ბაზაში, ამიტომ მისი ნახვა შეუძლებელია, " +"მაგრამ შეგიძლიათ შეცვალოთ ამ ფორმით." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"გთხოვთ, შეიყვანოთ სწორი %(username)s და პაროლი. იქონიეთ მხედველობაში, რომ " +"ორივე ველი ითვალისწინებს მთავრულს." + +msgid "This account is inactive." +msgstr "თქვენი ანგარიში არააქტიურია." + +msgid "Email" +msgstr "ელ. ფოსტა" + +msgid "New password" +msgstr "ახალი პაროლი" + +msgid "New password confirmation" +msgstr "ახალი პაროლის დამოწმება" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "თქვენი ძველი პაროლი შეყვანილია არასწორად. გთხოვთ, შეიყვანოთ ხელახლა." + +msgid "Old password" +msgstr "ძველი პაროლი" + +msgid "Password (again)" +msgstr "პაროლი (განმეორებით)" + +msgid "algorithm" +msgstr "ალგორითმი" + +msgid "iterations" +msgstr "იტერაციები" + +msgid "salt" +msgstr "მარილი" + +msgid "hash" +msgstr "ჰეში" + +msgid "variety" +msgstr "" + +msgid "version" +msgstr "ვერსია" + +msgid "memory cost" +msgstr "" + +msgid "time cost" +msgstr "" + +msgid "parallelism" +msgstr "პარალელიზმი" + +msgid "work factor" +msgstr "სამუშაო ფაქტორი" + +msgid "checksum" +msgstr "საკონტროლო ჯამი" + +msgid "name" +msgstr "სახელი" + +msgid "content type" +msgstr "კონტენტის ტიპი" + +msgid "codename" +msgstr "კოდური სახელი" + +msgid "permission" +msgstr "უფლება" + +msgid "permissions" +msgstr "უფლებები" + +msgid "group" +msgstr "ჯგუფი" + +msgid "groups" +msgstr "ჯგუფები" + +msgid "superuser status" +msgstr "სუპერმომხმარებლის სტატუსი" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "განსაზღვრავს, რომ ამ მომხმარებელს აქვს ყველა უფლება." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"ჯგუფები, რომლებსაც მიეკუთვნება ეს მომხმარებელი. მომხმარებელი მიიღებს ყველა " +"უფლებას, რომელიც მინიჭებული აქვს მის თითოეულ ჯგუფს." + +msgid "user permissions" +msgstr "მომხმარებლის უფლებები" + +msgid "Specific permissions for this user." +msgstr "სპეციფიური უფლებები ამ მომხმარებლისთვის." + +msgid "username" +msgstr "მომხმარებლის სახელი" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"აუცილებელი. 150 სიმბოლ ან ნაკლები. მხოლოდ ასოები, ციფრები ან @/./+/-/_ ." + +msgid "A user with that username already exists." +msgstr "მომხმარებელი ამ სახელით უკვე არსებობს." + +msgid "first name" +msgstr "სახელი" + +msgid "last name" +msgstr "გვარი" + +msgid "email address" +msgstr "ელ. ფოსტის მისამართი" + +msgid "staff status" +msgstr "თანამშრომლობის სტატუსი" + +msgid "Designates whether the user can log into this admin site." +msgstr "" +"განსაზღვრავს, აქვს თუ არა მომხმარებელს ადმინისტრირების საიტზე შესვლის უფლება." + +msgid "active" +msgstr "აქტიურია" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"განსაზღვრავს, რომ მომხმარებელი გააქტიურებულია. მომხმარებლის წაშლის მაგივრად " +"გადანიშნეთ ეს დროშა." + +msgid "date joined" +msgstr "გაწევრიანების თარიღი" + +msgid "user" +msgstr "მომხმარებელი" + +msgid "users" +msgstr "მომხმარებლები" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"პაროლი ძალიან მოკლეა. მინიმუმ %(min_length)dსიმბოლოს უნდა შეიცავდეს." +msgstr[1] "" +"პაროლი ძალიან მოკლეა. მინიმუმ %(min_length)dსიმბოლოს უნდა შეიცავდეს." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" +"პაროლი ძალიან მოკლეა. მინიმუმ %(min_length)d სიმბოლოს უნდა შეიცავდეს." +msgstr[1] "" +"პაროლი ძალიან მოკლეა. მინიმუმ %(min_length)d სიმბოლოს უნდა შეიცავდეს." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "პაროლი ძალიან გავს %(verbose_name)s." + +msgid "Your password can't be too similar to your other personal information." +msgstr "პაროლი ძალიან გავს თქვენს პერსონალურ ინფორმაციას." + +msgid "This password is too common." +msgstr "ეს პაროლი ხშირად გამოიყენება." + +msgid "Your password can't be a commonly used password." +msgstr "თქვენი პაროლი არ უნდა იყოს ხშირად გამოყენებადი." + +msgid "This password is entirely numeric." +msgstr "პაროლი მხოლოდ ციფრებისგან შედგება." + +msgid "Your password can't be entirely numeric." +msgstr "თქვენი პაროლი არ შეიძლება შეიცავდეს მხოლოდ ციფრებს." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "პაროლის თავიდან დაყენება %(site_name)s-ზე" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" + +msgid "Logged out" +msgstr "გამოსული ხართ" + +msgid "Password reset" +msgstr "პაროლის აღდგენა" + +msgid "Password reset sent" +msgstr "პაროლის აღდგენა გაგზავნილია" + +msgid "Enter new password" +msgstr "შეიყვანეთ ახალი პაროლი" + +msgid "Password reset unsuccessful" +msgstr "პაროლის აღდგენა წარუმატებლად დასრულდა" + +msgid "Password reset complete" +msgstr "პაროლის აღდგენა დასრულებულია" + +msgid "Password change" +msgstr "პაროლის შეცვლა" + +msgid "Password change successful" +msgstr "პაროლი წარმატებით შეიცვალა" diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/kab/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/kab/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..33333095ea6485b1794f810d98192de22644017d GIT binary patch literal 2982 zcmZ{l%WoS+9LJ|n9yO1a0tL#WQ|Ke1TE_{cElz`)rYVFrG-{nnJ^t(+uP5G}b#`Xs zIN~Ax04fy;E)|EWLV^Qu;m}@tDV4bNfVd%rhr|tW03^hL?{9aVm=Z>s{p`&C=J%SP zfBt^^<_`tN0nBGG-6kQ%!Ef%u1LNA=LJWh~!AHR#!8!0xP=T*+7UCZ83vfI56}T0= z36{X`zz4w}z^A}pi}e;9x*zKu;5Kj<$mc5Hh%A z>!%>caRcPMehu<{eG76veg--I-$0i817tmagREyWggE~@K$hDB;*%H#5vn){vitu7eUr{1w>l2T)YSt<%_r6t_1gDvMtW*FlK+SAFPAN9?boi zoRi&{>=WBNfXM@9#8CE@KRDLsiZ$O4-&KF$Cn9zhi|4^7G1+I%bARyN;7YO_?*jQw z9>d&$$?@{w`sbW;UideVjY*kWmB_AkE$Le1vZbL&NeUB1eov}pZJjNPsTP?)$qrfD zjT65r_gZm6SsfU1%I1e%OWRywi!3yRvZInnTdQMZGb3^8ps^F`hIV03LKzfj6X3jx z%7Y5KErq=VANo3ND^5dS)|GT{%_$$pB{iI0Qe`=BtO`}bi{TcAcG zP7Q}L9gz;jv~f^xRCg^VF%xy-#F25*=b*&tI0#?{PK!4OZR*-l;9l6g;*Qq3&kmw#hBu+c|(~6L=9mat+`D-STJ=SuzUNB<))e4(pm6fV>jdv+kHKQg zHZslp*@`7R_YW1hKdd!J{E9h%ed@Uanb}S1mw{qkF=>iGF+OSnVnwG!DzWsn#wQNtKo91 z(y3)P(g{(n;}TVxpaLi6YbU)U>vC+YsSWF$Fd)0~T*xR=%&rY>Xb5cY9P=UE5(X zS;rT|`7f1XLqpJ}j8Q9h%5Joa6e4}TsHI_+k_}~CmSzMmTp^bJkDTw5sO5K!atcua z=vJv8Aq!}Wlei!WudNufD*ni{w?>H#gVnlLmeto1rDt&D@}p!iHd?fqv}3|EU-us j`Y7(Oo%*7vz`i_7=Cz)w9$3OI{{)nQm-&kb7vb+eGHwy{ literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/kab/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/kab/LC_MESSAGES/django.po new file mode 100644 index 0000000..7456e93 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/kab/LC_MESSAGES/django.po @@ -0,0 +1,287 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-10-06 11:56+0000\n" +"Last-Translator: Muḥend Belqasem \n" +"Language-Team: Kabyle (http://www.transifex.com/django/django/language/" +"kab/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kab\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "Talɣut tudmawant" + +msgid "Permissions" +msgstr "Tisirag" + +msgid "Important dates" +msgstr "Izemzen ixataren" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "" + +msgid "Password changed successfully." +msgstr "" + +#, python-format +msgid "Change password: %s" +msgstr "Snifel awal uffir: %s" + +msgid "Authentication and Authorization" +msgstr "" + +msgid "password" +msgstr "awal uffir" + +msgid "last login" +msgstr "tuqqna taneggarut" + +msgid "No password set." +msgstr "" + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "" + +msgid "The two password fields didn't match." +msgstr "" + +msgid "Password" +msgstr "Awal n uɛeddi" + +msgid "Password confirmation" +msgstr "Asentem n wawal uffir" + +msgid "Enter the same password as before, for verification." +msgstr "" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" + +msgid "This account is inactive." +msgstr "Amidan-agi ur yermid ara." + +msgid "Email" +msgstr "E-mail" + +msgid "New password" +msgstr "Awal uffir amaynut" + +msgid "New password confirmation" +msgstr "Asentem n wawal uffir amaynut" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" + +msgid "Old password" +msgstr "Awal uffir aqbuṛ" + +msgid "Password (again)" +msgstr "Mot de passe (bis)" + +msgid "algorithm" +msgstr "" + +msgid "iterations" +msgstr "" + +msgid "salt" +msgstr "" + +msgid "hash" +msgstr "" + +msgid "variety" +msgstr "" + +msgid "version" +msgstr "lqem" + +msgid "memory cost" +msgstr "" + +msgid "time cost" +msgstr "tasqamt n wakud" + +msgid "parallelism" +msgstr "" + +msgid "work factor" +msgstr "" + +msgid "checksum" +msgstr "" + +msgid "name" +msgstr "isem" + +msgid "content type" +msgstr "anaw n ugbur" + +msgid "codename" +msgstr "" + +msgid "permission" +msgstr "tasiregt" + +msgid "permissions" +msgstr "tisirag" + +msgid "group" +msgstr "agraw" + +msgid "groups" +msgstr "igrawen" + +msgid "superuser status" +msgstr "addad n unebdal" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Yemmal-d d akken aseqdac-agi ɣur-s akk tisirag war ma ttwanefkent-as s wudem " +"aflalay." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" + +msgid "user permissions" +msgstr "tisirag n useqdac" + +msgid "Specific permissions for this user." +msgstr "" + +msgid "username" +msgstr "isem n useqdac" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +msgid "A user with that username already exists." +msgstr "Tansa-agi imayl tella yakan." + +msgid "first name" +msgstr "isem" + +msgid "last name" +msgstr "Isem aneggaru" + +msgid "email address" +msgstr "tansa imayl" + +msgid "staff status" +msgstr "" + +msgid "Designates whether the user can log into this admin site." +msgstr "" + +msgid "active" +msgstr "urmid" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Yettwag ma yella aseqdac-agi yezmer ad yettwammel d urmid neɣ ala. Kkes " +"afran deg umḍiq n tukksa n umiḍan." + +msgid "date joined" +msgstr "azemz n ujerred" + +msgid "user" +msgstr "aseqdac" + +msgid "users" +msgstr "Iseqdaceniseqdacen" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "" + +msgid "Your password can't be too similar to your other personal information." +msgstr "" + +msgid "This password is too common." +msgstr "" + +msgid "Your password can't be a commonly used password." +msgstr "" + +msgid "This password is entirely numeric." +msgstr "" + +msgid "Your password can't be entirely numeric." +msgstr "" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" + +msgid "Logged out" +msgstr "Yeffeɣ" + +msgid "Password reset" +msgstr "Awennez n wawal uffir" + +msgid "Password reset sent" +msgstr "Tulsa n wennez n wawal uffir tettwazen" + +msgid "Enter new password" +msgstr "Sekcem awal n uffir amaynut" + +msgid "Password reset unsuccessful" +msgstr "tulsa n uwennez n wawal uffir tedda" + +msgid "Password reset complete" +msgstr "Awennez n wawal uffir yemmed" + +msgid "Password change" +msgstr "Abeddel n wawal uffir" + +msgid "Password change successful" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/km/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/km/LC_MESSAGES/django.po new file mode 100644 index 0000000..26beb5a --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/km/LC_MESSAGES/django.po @@ -0,0 +1,281 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-09-24 14:24+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Khmer (http://www.transifex.com/django/django/language/km/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: km\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Personal info" +msgstr "ព័ត៌មានផ្ទាល់ខ្លួន" + +msgid "Permissions" +msgstr "ការអនុញ្ញាត" + +msgid "Important dates" +msgstr "កាលបរិច្ឆេទសំខាន់" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "" + +msgid "Password changed successfully." +msgstr "" + +#, python-format +msgid "Change password: %s" +msgstr "" + +msgid "Authentication and Authorization" +msgstr "" + +msgid "password" +msgstr "ពាក្យសំងាត់" + +msgid "last login" +msgstr "ការពិនិត្យចូលកន្លងមក" + +msgid "No password set." +msgstr "" + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "" + +msgid "The two password fields didn't match." +msgstr "" + +msgid "Password" +msgstr "ពាក្យសំងាត់" + +msgid "Password confirmation" +msgstr "" + +msgid "Enter the same password as before, for verification." +msgstr "" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" + +msgid "This account is inactive." +msgstr "ឈ្មោះសមាជិកនេះ​លែងដំណើរការ" + +msgid "Email" +msgstr "" + +msgid "New password" +msgstr "" + +msgid "New password confirmation" +msgstr "" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" + +msgid "Old password" +msgstr "" + +msgid "Password (again)" +msgstr "ពាក្យសំងាត់ (ម្តងទៀត)" + +msgid "algorithm" +msgstr "" + +msgid "iterations" +msgstr "" + +msgid "salt" +msgstr "" + +msgid "hash" +msgstr "" + +msgid "variety" +msgstr "" + +msgid "version" +msgstr "" + +msgid "memory cost" +msgstr "" + +msgid "time cost" +msgstr "" + +msgid "parallelism" +msgstr "" + +msgid "work factor" +msgstr "" + +msgid "checksum" +msgstr "" + +msgid "name" +msgstr "ឈ្មោះ" + +msgid "content type" +msgstr "" + +msgid "codename" +msgstr "ឈ្មោះលេខកូត" + +msgid "permission" +msgstr "អនុញ្ញាត" + +msgid "permissions" +msgstr "អនុញ្ញាត" + +msgid "group" +msgstr "ក្រុម" + +msgid "groups" +msgstr "ក្រុម" + +msgid "superuser status" +msgstr "ស្ថានភាពអ្នកគ្រងគ្រង" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "កំណត់អោយសមាជិកនេះមានសិទ្ធិទាំងអស់។" + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" + +msgid "user permissions" +msgstr "ការអនុញ្ញាតអោយសមាជិក" + +msgid "Specific permissions for this user." +msgstr "" + +msgid "username" +msgstr "ឈ្មោះជាសមាជិក" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +msgid "A user with that username already exists." +msgstr "" + +msgid "first name" +msgstr "នាម" + +msgid "last name" +msgstr "គោត្តនាម" + +msgid "email address" +msgstr "" + +msgid "staff status" +msgstr "ស្ថានភាពបុគ្គលិក" + +msgid "Designates whether the user can log into this admin site." +msgstr "កំណត់អោយសមាជិកអាចចូលមកប្រើប្រាស់ទំព័រគ្រប់គ្រងនេះ។" + +msgid "active" +msgstr "សកម្ម" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" + +msgid "date joined" +msgstr "កាលបរិច្ឆេទចូលរួម" + +msgid "user" +msgstr "សមាជិក" + +msgid "users" +msgstr "សមាជិក" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "" + +msgid "Your password can't be too similar to your other personal information." +msgstr "" + +msgid "This password is too common." +msgstr "" + +msgid "Your password can't be a commonly used password." +msgstr "" + +msgid "This password is entirely numeric." +msgstr "" + +msgid "Your password can't be entirely numeric." +msgstr "" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" + +msgid "Logged out" +msgstr "ចាកចេញ" + +msgid "Password reset" +msgstr "" + +msgid "Password reset sent" +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Password reset unsuccessful" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgid "Password change" +msgstr "" + +msgid "Password change successful" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/lb/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/lb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3adcc2c4b61f88355282a1cc1af335f21b2ef443 GIT binary patch literal 474 zcmZWlK~KUk7}e-$N6#K=;sJtPJBS8~Ge(321CfyFy<=sRbnVi1fBlSVU?t+~!k zFc+n<9#35^GyGKL4kw18VD_5effd|?7C&<@7;4k#7Sj%nx`_5zbl0L0r69y}@gZx^ z|GJ2>4sB6DFyYSQ#B%Kv_r@~x!nKwTO@z#ZLidmc#z(aqL#dbM0q*F$;<>7jsmgMN bN5&S8Azki97q|Opzl|FjUBxJB_JfmO=%kD+ literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/lv/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/lv/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..242ef23916b52182369c969cc250e7bdc4ce3842 GIT binary patch literal 7599 zcmb`LU5sQ$b;m1)V3-iV5D0`o%EoKYWT$&()*pDs9^32n8rIp5(K1Fs2uyX~>h7Ap zAI+_MXLcqbVj|%r2;_$mi5wB|lH?(pD3Op5LP7*7JqTWSFuVnUc|&{%A_bB_gz`Ie z@9plHm64tJYO4SD*1dJ=)H(li>ePJuwJ-gI;##NuF71;yC^eM(U+0JGt1naP9`I}6 z0(irXN@;Krd>wcZl(7ap4Sp81;159&apmPo^}#;`9|yk-z82K4Q0h+b4)E3B0K5yl z3eJK51iljd0{ABIE8uIuXY2ld2N9)yS@++_Ad&M%@OQv@@U7rk@bzE^d=+>V{B7{h zz~2Ku4az$H1$;C34e&R>AA`RM{sMeI_zF6o1P9R&pNaenj2}KzYAe_h+EU`7kJY{RIeB)RQ&-6)5w48vOjPDRlq} zuey*%?E5$1&EPYj@aRAIc_(-yPJ9=*4$AZ2fg<-u;0M8egV7*{4$8E)H9%b|6Ne{^xyUK>)%lI zw?Iw*IZ$}g1BD+StMQ*fvD-7?8^LdZ+u%>Z&wvTS9|m8;OBweV_#yBr*aCkB@~3Wv ze4@u1DE4}+#%=H?JU<0)fFC7Tejoe}*aqiN`Vx2={Cn`vL9t^S@`_$}gR=eyLGkNF zQ0#RDlzHC|iXFB=vCk8r`1#}Y^FAo!{u&H^22n*FfWnJIQ0)12Q099Ul=;37ioE{> z<-1?j?{9odCGRFs`0xf$*1Z6V9%n$|>pF<5)q6paKdSrx6cjx^4$3;80>$swKb?eaeG`09--}%ck8p`i@1vch$vS1t3$)WTxz=cZKwF|+q{$_Ae^73?SZ=r^7M5vZ zJK@DWG~wAhXu@Z?9-;}?#NQG_;@`VzkI>{2KiwMcs@y8K=V(w^ouvsM@23gR&eKlN zF4H7#@1=>~vAUGO^VY}#(2w_P#NqueDX-_b+6 zqfgB9yO8TBvtFlJq3u=Yi?%wWOKt?CnAJ#4+}r>0=iAiWqkU(Gl$o+)BIvU%dXN2Cv0 zWTogfie1+g@s36q0$kc>yiMA(0=Ea2zFb~ZBD*Hlan{!^Ei!tU$wY}uwReSmj**Qv zevp-Mq&rp@th%rf6Km5g+?H+Y$5L-&v1*X%QeR*go%M7?cOkl&ZZ|8_0xO+MjEmK| zv_LVVw@mD!iAmdfLzJSkv^p_6x|^kiLBT9#rRUOq?EF9@lEHpar)AO!H)84sm)c7w zms(4Y>+ZnhXvQ06`#;R{!sVxSd*ao4O0l^YmNecLdv$Ct%k84(S8v(e^=huP)%j$U z<%LNL9SIlI`LwdkWHdt($j87k9j4iKs^P~Vm^SW1v0{MlFJ%2bo`E6i(yU6e4`S1v z6Jan)UCO2kdJEkzAAc-NJ1{n!KK`tI+3i~Idu4q5RW$Q1-f7Rg zp4F?FS?3nDrXPhzmXM6_(#*6~KT&sLUda4-73{~ydBXE}UzyJ8I*m284uP`N#6(Lk zQ|qxc-f9E{-gdJ*7s8*Im+Vld7NKEdySBcR6$Fc9j7~LRR#Iw&g< zq^_7LgNUo#h7{xr=n^ezFVSl0BskJcZxa~=u(u+=4$#~EWa>rTAw}$DC9|Xw4U%+( zkBx4`n-J$dqX)U|t=;lRAG+oKAV^4d-;%i>ee4HI$J}kba@X=qL_h?4Rh}RvT#6&$DtQ8L&w=9UEt9pPsC(CmEPz*tf-X zNwJ?3H_#rFSkoOy-eI*auccNqOxDf}MTYTQ;$nj$!L<01c5EBvgkwTap(E-1@z|#QVz3ZR{q`b@BeA|GD|4OABnw#StMI@TF0BIu66hnL$S=f$a``nW%0SSxGqDKznwKVrOKPY#VwrbE%D#l`WR7Jt8Z5MY4w( zVMGWsRRx=p{X>x}^RN?m6$^o=4qRH@h7pNPG76+_<_i@%M(nL|Y}tqt)tFdKOO%;g zue^y1PJymxUjx91smtGZKO{MwJ5$2UQUTvA&*v<-XUF&?*dUy4DRY#j7zijS`mEE;<(f3`{dZ_IC)<(9f=hiQ8w9ZO3gQ(WS z7;sgeT3&g3Yx#8R)SY_ej@3KwKDm5qd6^GeSL~LPDQCZ1In`QO)+?u1Pn|xw%r$ob z6Sg);M?N;Fw5l(aaeUsh6D;fdQtq9nvRr=9rJd|*JKnmV5oy0PecRfwCRx=NOtIxi z+Vg{=7_BZXZEtV43z6q~_G+8duvD$6fw&&N6mKmp%w0Tx@!WLnEA8dEvlT^J8&G6b z7xrqgG>VD7dqZkqXI*=2FdFZ*so}gCnnea28IPW3Sd0(0JX>hdC1lw<53gl< zC`Gl7cE|gbRxHP2MT+GX5nWJx+AR|~ig%WU>94bBTOU5nf>Aw3en+bKoMN{q^YK3E z$PH2COxhoRv7{2oiTg#}btI0GlTA8PsIv!mvbe-7FUE{7XevwrEvThXD~nyDfU_{q z4iB$UW?|-Ne1J!*PwIlbW{sn^Vb$0NJF)V_QE^uWlR~T_kd#y7Js2&XN$svn$9stn zg*!z|sM?dj3Gs2Xi;vZ#C^g=zCDc!iz`&Kb(Q7>!*Gl!_H3w&0K)uhH3XGum-7Y+}i z-BP_M^_Ed(A1FT1*S81KcV3ao_a_=rtHbd2{F_0VY3ag{KFI5y>w zr<{Y$_-`ec^=44Mk6kZWv1s7kULo0|c2&w5+75L;HXZ0>2q(gIG~VyBt8XFMbH8a| z7Q=^PcJ}dU7OeE-P#~N?JP3(JQUT1Kcz02|-GnMS+vFb~N6rP3FvK)vbuPHvi5>Rh zARi6}LhQtlIEPyDnx%Uqgueu%tHa(Mjry6q4XLUFf+wtI5^7t$BQMECSdW~tmrR#~ zQJlmX$B)Sh6Ws~RI+~QjSd56NCs|mGih**p?#l#d7$zVC9zH?P*RmV(%TO38tBc1_ zLIMLC96u>E;ZV62s+l3@ann|ZPje!WY|E()M>W~F5ziiiAGhj+NiGUW(#bz@Dv?3= zT7eEb$(Ne^9%Pe&D}u~^Ha_qMAFx1_-yH8@nL@TJoP_2_4hNOPbf1C_?uCs0|CWbc zgSZz<-grN06nqpPOH9@Y8pcnO9l2FDohrscuBu|z!IIffu1IeR$d*$$u<8x7)uc~^ zMC9`!MQ||Maf8<`nSNEfZ@T3j@!+qJd_AW^kJJRoOgagV>@72dc%ELJv0A0|^BmWB zucqJg95pjr&G6>b!j>THCu?(VNemB>915rt45S}H zPC3F@6$&}e!G)Nue*N_LQddKYBpAU8vbEb4Y12)$+^q$eB9W4gq(HVC;y}gTK|+?z z3+@}XVL8}@2TDLCWtZ#~lbiZXQ=Jz>&acif^~q)?>o)xqb;8VMzR4GywElx hOlPh0q{m^d!!L!R1dYN8h`lN@IR#h`%V(UA{ujd0IWzzO literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/mk/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/mk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4909b2066199beb8d1ed590ffef0f2f7ae51831c GIT binary patch literal 9235 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 TE*WpJJqv;h{$ZS^i<*A|`>DwX literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/mk/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/mk/LC_MESSAGES/django.po new file mode 100644 index 0000000..a991af0 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/mk/LC_MESSAGES/django.po @@ -0,0 +1,308 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# dekomote , 2015 +# Jannis Leidel , 2011 +# Vasil Vangelovski , 2016-2017 +# Vasil Vangelovski , 2013-2015 +# Vasil Vangelovski , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-09-24 14:24+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Macedonian (http://www.transifex.com/django/django/language/" +"mk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mk\n" +"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n" + +msgid "Personal info" +msgstr "Лични информации" + +msgid "Permissions" +msgstr "Привилегии" + +msgid "Important dates" +msgstr "Важни датуми" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "Не постои %(name)s објект со примарен клуч %(key)r." + +msgid "Password changed successfully." +msgstr "Успешна промена на лозинката." + +#, python-format +msgid "Change password: %s" +msgstr "Промени лозинка: %s" + +msgid "Authentication and Authorization" +msgstr "Автентикација и авторизација" + +msgid "password" +msgstr "лозинка" + +msgid "last login" +msgstr "последна најава" + +msgid "No password set." +msgstr "Нема зададена лозинка." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Невалиден формат на лозинка или непознат алгоритам за хеширање." + +msgid "The two password fields didn't match." +msgstr "Двете полиња со лозинките не се совпаѓаат." + +msgid "Password" +msgstr "Лозинка" + +msgid "Password confirmation" +msgstr "Потврда на лозинка" + +msgid "Enter the same password as before, for verification." +msgstr "Внесете ја истата лозинка како претходно, за верификација." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Ве молиме внесете ја точно %(username)s и лозинка. Имајте на ум дека двете " +"полиња може да бидат со мали букви." + +msgid "This account is inactive." +msgstr "Оваа сметка е неактивна." + +msgid "Email" +msgstr "Email" + +msgid "New password" +msgstr "Нова лозинка" + +msgid "New password confirmation" +msgstr "Потврда за нова лозинка" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" +"Не ја внесовте точно вашата стара лозинка. Ве молам внесете ја повторно." + +msgid "Old password" +msgstr "Стара лозинка" + +msgid "Password (again)" +msgstr "Лозинка (повторно)" + +msgid "algorithm" +msgstr "алгоритам" + +msgid "iterations" +msgstr "повторувања" + +msgid "salt" +msgstr "случаен клуч" + +msgid "hash" +msgstr "хеш" + +msgid "variety" +msgstr "" + +msgid "version" +msgstr "верзија" + +msgid "memory cost" +msgstr "просторна (мемориска) комплексност" + +msgid "time cost" +msgstr "временска комплексност" + +msgid "parallelism" +msgstr "паралелизам" + +msgid "work factor" +msgstr "фактор на работа" + +msgid "checksum" +msgstr "проверка" + +msgid "name" +msgstr "име" + +msgid "content type" +msgstr "тип содржина" + +msgid "codename" +msgstr "кодно име" + +msgid "permission" +msgstr "привилегија" + +msgid "permissions" +msgstr "привилегии" + +msgid "group" +msgstr "група" + +msgid "groups" +msgstr "групи" + +msgid "superuser status" +msgstr "статус на суперкорисник" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Означува дека овој корисник ги има сите привилегии без експлицитно да се " +"доделуваат сите." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Групите на коишто припаѓа овој корисник. Корисникот ќе ги добие сите " +"пермисии на секоја од избраните групи." + +msgid "user permissions" +msgstr "кориснички привилегии" + +msgid "Specific permissions for this user." +msgstr "Специфични дозволи за овој корисник." + +msgid "username" +msgstr "корисничко име" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"Задолжително. 150 или помалку знаци. Единствено букви, бројки и @/./+/-/_ ." + +msgid "A user with that username already exists." +msgstr "Веќе постои корисник со тоа корисничко име." + +msgid "first name" +msgstr "име" + +msgid "last name" +msgstr "презиме" + +msgid "email address" +msgstr "email адреса" + +msgid "staff status" +msgstr "статус на администраторите" + +msgid "Designates whether the user can log into this admin site." +msgstr "" +"Означува дали корисникот може да се логира во сајтот за администрација." + +msgid "active" +msgstr "активен" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Означува дали корисникот треба да биде активен. Одштиклирајте го ова наместо " +"да бришете корисници." + +msgid "date joined" +msgstr "датум на зачленување" + +msgid "user" +msgstr "корисник" + +msgid "users" +msgstr "корисници" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Оваа лозинка е премногу кратка. Мора да содржи најмалку %(min_length)d " +"карактер." +msgstr[1] "" +"Оваа лозинка е премногу кратка. Мора да содржи најмалку %(min_length)d " +"карактери." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Вашата лозинка мора да содржи најмалку %(min_length)d карактер." +msgstr[1] "Вашата лозинка мора да содржи најмалку %(min_length)d карактери." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Лозинката е премногу слична со %(verbose_name)s." + +msgid "Your password can't be too similar to your other personal information." +msgstr "" +"Вашата лозинка не смее да биде премногу слична со други лични информации." + +msgid "This password is too common." +msgstr "Оваа лозинка е премногу често користена." + +msgid "Your password can't be a commonly used password." +msgstr "Вашата лозинка не смее да биде лозинка која се користи многу често." + +msgid "This password is entirely numeric." +msgstr "Оваа лозинка содржи само цифри." + +msgid "Your password can't be entirely numeric." +msgstr "Вашата лозинка не може да содржи само цифри." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Ресетирање на лозинка за %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Внесете валидно корисничко име. Оваа вредност може да содржи само латински " +"букви, бројки и @/./+/-/_ знаци." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Внесете валидно корисничко име. Оваа вредност може да содржи само букви, " +"бројки и @/./+/-/_ знаци." + +msgid "Logged out" +msgstr "Одјавен" + +msgid "Password reset" +msgstr "Ресетирање на лозинка" + +msgid "Password reset sent" +msgstr "Испратено информации за ресетирање лозинка" + +msgid "Enter new password" +msgstr "Внесете нова лозинка" + +msgid "Password reset unsuccessful" +msgstr "Неуспешно ресетирање на лозинка" + +msgid "Password reset complete" +msgstr "Ресетирањето на лозинката е завршено" + +msgid "Password change" +msgstr "Промена на лозинка" + +msgid "Password change successful" +msgstr "Успешна промена на лозинка" diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/ml/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/ml/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d247f8eaa75e111da8d9d76f7985fba5a9c37221 GIT binary patch literal 12611 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\n" +"Language-Team: Marathi (http://www.transifex.com/projects/p/django/language/" +"mr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mr\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "" + +msgid "Permissions" +msgstr "" + +msgid "Important dates" +msgstr "" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "" + +msgid "Password changed successfully." +msgstr "" + +#, python-format +msgid "Change password: %s" +msgstr "" + +msgid "Authentication and Authorization" +msgstr "" + +msgid "No password set." +msgstr "" + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "" + +msgid "The two password fields didn't match." +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Password confirmation" +msgstr "" + +msgid "Enter the same password as above, for verification." +msgstr "" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this " +"form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" + +msgid "This account is inactive." +msgstr "" + +msgid "Email" +msgstr "" + +msgid "New password" +msgstr "" + +msgid "New password confirmation" +msgstr "" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" + +msgid "Old password" +msgstr "" + +msgid "Password (again)" +msgstr "" + +msgid "algorithm" +msgstr "" + +msgid "iterations" +msgstr "" + +msgid "salt" +msgstr "" + +msgid "hash" +msgstr "" + +msgid "work factor" +msgstr "" + +msgid "checksum" +msgstr "" + +msgid "name" +msgstr "" + +msgid "codename" +msgstr "" + +msgid "permission" +msgstr "" + +msgid "permissions" +msgstr "" + +msgid "group" +msgstr "" + +msgid "groups" +msgstr "" + +msgid "password" +msgstr "" + +msgid "last login" +msgstr "" + +msgid "superuser status" +msgstr "" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" + +msgid "user permissions" +msgstr "" + +msgid "Specific permissions for this user." +msgstr "" + +msgid "username" +msgstr "" + +msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers and @/./" +"+/-/_ characters." +msgstr "" + +msgid "A user with that username already exists." +msgstr "" + +msgid "first name" +msgstr "" + +msgid "last name" +msgstr "" + +msgid "email address" +msgstr "" + +msgid "staff status" +msgstr "" + +msgid "Designates whether the user can log into this admin site." +msgstr "" + +msgid "active" +msgstr "" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" + +msgid "date joined" +msgstr "" + +msgid "user" +msgstr "" + +msgid "users" +msgstr "" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "" + +msgid "Logged out" +msgstr "" + +msgid "Password reset" +msgstr "" + +msgid "Password reset sent" +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Password reset unsuccessful" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgid "Password change" +msgstr "" + +msgid "Password change successful" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/my/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/my/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a08a819519b1e95c21cc49da2a244b89d2a4e12f GIT binary patch literal 1026 zcmZvXOKTKC6opHTuNG0V5)4u+QA5x4OokXc#z$fTkpzb@x-VxcoetgALsgBF>`Ks$ z8#iX*69kuP(1l8j;(ria3iS(oY}|UPCJzWHIP=ZDeb22^Kl}Su2u=VEKpAutT8G^E z4ef{iK*yke&>`sH9zu?Q$3Ztg03HU6VU$6pYu{J{#J-{;!sxjS7BcU%sa4HiNsbCzagI&T+J zGofjVX|70}Db+1xi`2QyQ>D^Epvk2w1j}eD<_p5Iq>!mz$VnoLPP_N3h+sJCB_ zt2J5~ifhAzQ8kJ%7|!uKsoS~BTrIBF1|ytchAAC3BoiuQx{xuw&V)!6o#APVXY?Y{ zpuCd#vgBTL2_BJjSi-{wXL(G=J2K~r(=!WNx8riT+wGRL+nCPtrBbuV%e^;kBHOT+ z^X2l{V0L, 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-09-24 14:24+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Burmese (http://www.transifex.com/django/django/language/" +"my/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: my\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Personal info" +msgstr "ကိုယ်ရေးအချက်အလက်" + +msgid "Permissions" +msgstr "ခွင့်ပြုချက်များ" + +msgid "Important dates" +msgstr "အရေးကြီးနေ့စွဲများ" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "" + +msgid "Password changed successfully." +msgstr "" + +#, python-format +msgid "Change password: %s" +msgstr "" + +msgid "Authentication and Authorization" +msgstr "" + +msgid "password" +msgstr "" + +msgid "last login" +msgstr "" + +msgid "No password set." +msgstr "" + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "" + +msgid "The two password fields didn't match." +msgstr "" + +msgid "Password" +msgstr "စကားဝှက်" + +msgid "Password confirmation" +msgstr "" + +msgid "Enter the same password as before, for verification." +msgstr "" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" + +msgid "This account is inactive." +msgstr "" + +msgid "Email" +msgstr "အီးမေးလ်" + +msgid "New password" +msgstr "" + +msgid "New password confirmation" +msgstr "" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" + +msgid "Old password" +msgstr "" + +msgid "Password (again)" +msgstr "" + +msgid "algorithm" +msgstr "ပံုသေနည်း" + +msgid "iterations" +msgstr "" + +msgid "salt" +msgstr "" + +msgid "hash" +msgstr "" + +msgid "variety" +msgstr "" + +msgid "version" +msgstr "" + +msgid "memory cost" +msgstr "" + +msgid "time cost" +msgstr "" + +msgid "parallelism" +msgstr "" + +msgid "work factor" +msgstr "" + +msgid "checksum" +msgstr "" + +msgid "name" +msgstr "နာမည်" + +msgid "content type" +msgstr "" + +msgid "codename" +msgstr "" + +msgid "permission" +msgstr "" + +msgid "permissions" +msgstr "" + +msgid "group" +msgstr "အုပ်စု" + +msgid "groups" +msgstr "အုပ်စုများ" + +msgid "superuser status" +msgstr "" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" + +msgid "user permissions" +msgstr "" + +msgid "Specific permissions for this user." +msgstr "" + +msgid "username" +msgstr "" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +msgid "A user with that username already exists." +msgstr "" + +msgid "first name" +msgstr "" + +msgid "last name" +msgstr "" + +msgid "email address" +msgstr "" + +msgid "staff status" +msgstr "" + +msgid "Designates whether the user can log into this admin site." +msgstr "" + +msgid "active" +msgstr "" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" + +msgid "date joined" +msgstr "" + +msgid "user" +msgstr "" + +msgid "users" +msgstr "" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "" + +msgid "Your password can't be too similar to your other personal information." +msgstr "" + +msgid "This password is too common." +msgstr "" + +msgid "Your password can't be a commonly used password." +msgstr "" + +msgid "This password is entirely numeric." +msgstr "" + +msgid "Your password can't be entirely numeric." +msgstr "" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" + +msgid "Logged out" +msgstr "" + +msgid "Password reset" +msgstr "" + +msgid "Password reset sent" +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Password reset unsuccessful" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgid "Password change" +msgstr "" + +msgid "Password change successful" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/nb/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/nb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f2ac3142ef5a802bbd0184db2f39b5e0d6068d83 GIT binary patch literal 7222 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 Z#jWu&ypU6*r7zAwUN;zP5<#T+e*tphMw|cu literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/nn/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/nn/LC_MESSAGES/django.po new file mode 100644 index 0000000..febc7ee --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/nn/LC_MESSAGES/django.po @@ -0,0 +1,285 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-09-24 14:24+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Norwegian Nynorsk (http://www.transifex.com/django/django/" +"language/nn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "Personleg informasjon" + +msgid "Permissions" +msgstr "Løyve" + +msgid "Important dates" +msgstr "Viktige datoar" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "" + +msgid "Password changed successfully." +msgstr "Passordet er endra." + +#, python-format +msgid "Change password: %s" +msgstr "Endre passord: %s" + +msgid "Authentication and Authorization" +msgstr "" + +msgid "password" +msgstr "passord" + +msgid "last login" +msgstr "siste innlogging" + +msgid "No password set." +msgstr "" + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "" + +msgid "The two password fields didn't match." +msgstr "Dei to passordfelta er ikkje like." + +msgid "Password" +msgstr "Passord" + +msgid "Password confirmation" +msgstr "Stadfesting av passord" + +msgid "Enter the same password as before, for verification." +msgstr "" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" + +msgid "This account is inactive." +msgstr "Denne kontoen er inaktiv." + +msgid "Email" +msgstr "" + +msgid "New password" +msgstr "Nytt passord" + +msgid "New password confirmation" +msgstr "Stadfest nytt passord" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Det gamle passordet er feil. Prøv omatt." + +msgid "Old password" +msgstr "Gammalt passord" + +msgid "Password (again)" +msgstr "Passord (gjenta)" + +msgid "algorithm" +msgstr "" + +msgid "iterations" +msgstr "" + +msgid "salt" +msgstr "" + +msgid "hash" +msgstr "" + +msgid "variety" +msgstr "" + +msgid "version" +msgstr "" + +msgid "memory cost" +msgstr "" + +msgid "time cost" +msgstr "" + +msgid "parallelism" +msgstr "" + +msgid "work factor" +msgstr "" + +msgid "checksum" +msgstr "" + +msgid "name" +msgstr "namn" + +msgid "content type" +msgstr "" + +msgid "codename" +msgstr "kodenamn" + +msgid "permission" +msgstr "løyve" + +msgid "permissions" +msgstr "løyve" + +msgid "group" +msgstr "gruppe" + +msgid "groups" +msgstr "grupper" + +msgid "superuser status" +msgstr "superbrukar" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "Angir at denne brukaren har alle løyve utan å eksplisitt sette dei." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" + +msgid "user permissions" +msgstr "Brukerløyve" + +msgid "Specific permissions for this user." +msgstr "" + +msgid "username" +msgstr "brukarnamn" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +msgid "A user with that username already exists." +msgstr "Det eksisterar allereie ein brukar med dette brukernamnet." + +msgid "first name" +msgstr "fornamn" + +msgid "last name" +msgstr "etternamn" + +msgid "email address" +msgstr "" + +msgid "staff status" +msgstr "administrasjonsstatus" + +msgid "Designates whether the user can log into this admin site." +msgstr "Angir at brukaren kan logge inn på denne administrasjonssida." + +msgid "active" +msgstr "aktiv" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Angir at denne brukaren er aktiv. Avmerk denne i staden for å slette kontoen." + +msgid "date joined" +msgstr "registrert" + +msgid "user" +msgstr "brukar" + +msgid "users" +msgstr "brukarar" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "" + +msgid "Your password can't be too similar to your other personal information." +msgstr "" + +msgid "This password is too common." +msgstr "" + +msgid "Your password can't be a commonly used password." +msgstr "" + +msgid "This password is entirely numeric." +msgstr "" + +msgid "Your password can't be entirely numeric." +msgstr "" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" + +msgid "Logged out" +msgstr "Logga ut" + +msgid "Password reset" +msgstr "" + +msgid "Password reset sent" +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Password reset unsuccessful" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgid "Password change" +msgstr "" + +msgid "Password change successful" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/pt/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/pt/LC_MESSAGES/django.po new file mode 100644 index 0000000..1254932 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/pt/LC_MESSAGES/django.po @@ -0,0 +1,313 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Claude Paroz , 2017 +# Jannis Leidel , 2011 +# jorgecarleitao , 2015 +# Nuno Mariz , 2013,2015,2017 +# Raúl Pedro Fernandes Santos, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-11-30 23:58+0000\n" +"Last-Translator: Nuno Mariz \n" +"Language-Team: Portuguese (http://www.transifex.com/django/django/language/" +"pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "Informação pessoal" + +msgid "Permissions" +msgstr "Permissões" + +msgid "Important dates" +msgstr "Datas importantes" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "O objecto %(name)s com a chave primária %(key)r não existe." + +msgid "Password changed successfully." +msgstr "Palavra-passe modificada com sucesso." + +#, python-format +msgid "Change password: %s" +msgstr "Modificar a palavra-passe: %s" + +msgid "Authentication and Authorization" +msgstr "Autenticação e Autorização" + +msgid "password" +msgstr "palavra-passe" + +msgid "last login" +msgstr "última entrada" + +msgid "No password set." +msgstr "Nenhuma palavra-chave definida." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Formato de palavra-chave inválido ou função de mistura desconhecida." + +msgid "The two password fields didn't match." +msgstr "Os dois campos da palavra-passe não coincidem." + +msgid "Password" +msgstr "Palavra-passe" + +msgid "Password confirmation" +msgstr "Confirmação da palavra-passe" + +msgid "Enter the same password as before, for verification." +msgstr "Introduza a palavra-passe como acima, para verificação." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" +"Não são guardadas palavras-passe sem encriptação, portanto não é possível " +"visualizar a password deste utilizador, mas poderá modificar a palavra-passe " +"através deste formulário." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Por favor introduza o %(username)s e password corretos. Tenha em atenção às " +"maiúsculas e minúsculas." + +msgid "This account is inactive." +msgstr "Esta conta não está activa." + +msgid "Email" +msgstr "Email" + +msgid "New password" +msgstr "Nova palavra-passe" + +msgid "New password confirmation" +msgstr "Confirmação da nova palavra-passe" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" +"A sua palavra-passe antiga foi introduzida incorretamente. Por favor tente " +"novamente." + +msgid "Old password" +msgstr "Palavra-passe antiga" + +msgid "Password (again)" +msgstr "Palavra-passe (novamente)" + +msgid "algorithm" +msgstr "algoritmo" + +msgid "iterations" +msgstr "iterações" + +msgid "salt" +msgstr "salt" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "variedade" + +msgid "version" +msgstr "versão" + +msgid "memory cost" +msgstr "custo da memória" + +msgid "time cost" +msgstr "custo de tempo" + +msgid "parallelism" +msgstr "paralelismo" + +msgid "work factor" +msgstr "fator trabalho" + +msgid "checksum" +msgstr "verificação" + +msgid "name" +msgstr "nome" + +msgid "content type" +msgstr "tipo de conteúdo" + +msgid "codename" +msgstr "nome de código" + +msgid "permission" +msgstr "permissão" + +msgid "permissions" +msgstr "permissões" + +msgid "group" +msgstr "grupo" + +msgid "groups" +msgstr "grupos" + +msgid "superuser status" +msgstr "Status de superuser" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Define se este utilizador tem todas as permissões sem explicitamente as " +"atribuir." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Os grupos que este utilizador pertence. Um utilizador terá todas as " +"permissões concedidas a cada um dos seus grupos." + +msgid "user permissions" +msgstr "permissões do utilizador" + +msgid "Specific permissions for this user." +msgstr "Permissões específicas para este utilizador." + +msgid "username" +msgstr "utilizador" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "Obrigatório. 150 carateres ou menos. Apenas letras, dígitos @/./+/-/_." + +msgid "A user with that username already exists." +msgstr "Já existe um utilizador com esse nome." + +msgid "first name" +msgstr "primeiro nome" + +msgid "last name" +msgstr "último nome" + +msgid "email address" +msgstr "endereço de email" + +msgid "staff status" +msgstr "status de equipa" + +msgid "Designates whether the user can log into this admin site." +msgstr "Define se o utilizador pode usar a administração do site." + +msgid "active" +msgstr "ativo" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Defina se este utilizador deva ser tratado como ativo. Não selecione em vez " +"de remover as contas." + +msgid "date joined" +msgstr "data de registo" + +msgid "user" +msgstr "utilizador" + +msgid "users" +msgstr "utilizadores" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Esta palavra-passe é muito curta. Deve conter pelo menos %(min_length)d " +"caractere." +msgstr[1] "" +"Esta palavra-passe é muito curta. Deve conter pelo menos %(min_length)d " +"caracteres." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" +"A sua palavra-passe deve conter pelo menos %(min_length)d caractere." +msgstr[1] "" +"A sua palavra-passe deve conter pelo menos %(min_length)d caracteres." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "A palavra-passe é muito semelhante ao %(verbose_name)s." + +msgid "Your password can't be too similar to your other personal information." +msgstr "" +"Sua palavra-passe não pode ser muito semelhante a outras informações " +"pessoais." + +msgid "This password is too common." +msgstr "Esta palavra-passe é muito comum." + +msgid "Your password can't be a commonly used password." +msgstr "A sua palavra-passe não pode ser uma palavra-passe comum." + +msgid "This password is entirely numeric." +msgstr "Esta palavra-passe é inteiramente numérica." + +msgid "Your password can't be entirely numeric." +msgstr "Sua palavra-passe não pode ser inteiramente numérica." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Redefinição de palavra-passe em %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Insira um nome de utilizador válido. Este valor apenas deverá conter letras, " +"números e carateres @/./+/-/_." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Insira um nome de utilizador válido. Este valor apenas deverá conter letras, " +"números e carateres @/./+/-/_." + +msgid "Logged out" +msgstr "Saiu" + +msgid "Password reset" +msgstr "Gerar nova palavra-passe" + +msgid "Password reset sent" +msgstr "Redefinição de palavra-passe enviada" + +msgid "Enter new password" +msgstr "Introduza nova palavra-passe" + +msgid "Password reset unsuccessful" +msgstr "A mudança da palavra-passe não foi bem sucedida" + +msgid "Password reset complete" +msgstr "Geração de nova palavra-passe completa" + +msgid "Password change" +msgstr "Mudança de palavra-passe" + +msgid "Password change successful" +msgstr "Mudança de palavra-passe bem sucedida" diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/sl/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/sl/LC_MESSAGES/django.po new file mode 100644 index 0000000..f5d824c --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/sl/LC_MESSAGES/django.po @@ -0,0 +1,308 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Jure Cuhalev , 2012 +# Primož Verdnik , 2017 +# zejn , 2013,2016-2017 +# zejn , 2011-2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-12-03 15:49+0000\n" +"Last-Translator: zejn \n" +"Language-Team: Slovenian (http://www.transifex.com/django/django/language/" +"sl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sl\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "Personal info" +msgstr "Osebni podatki" + +msgid "Permissions" +msgstr "Dovoljenja" + +msgid "Important dates" +msgstr "Pomembni datumi" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "Objekt %(name)s z glavnim ključem %(key)r ne obstaja." + +msgid "Password changed successfully." +msgstr "Geslo je uspešno spremenjeno." + +#, python-format +msgid "Change password: %s" +msgstr "Spremeni geslo: %s" + +msgid "Authentication and Authorization" +msgstr "Avtentikacija in avtorizacija" + +msgid "password" +msgstr "geslo" + +msgid "last login" +msgstr "zadnja prijava" + +msgid "No password set." +msgstr "Geslo ni nastavljeno." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Neveljavna oblika gesla ali neznan algoritem razpršila." + +msgid "The two password fields didn't match." +msgstr "Gesli se ne ujemata." + +msgid "Password" +msgstr "Geslo" + +msgid "Password confirmation" +msgstr "Potrditev gesla" + +msgid "Enter the same password as before, for verification." +msgstr "Vnesite isto geslo kot prej, za preverjanje." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" +"Čitljiva gesla se ne shranjujejo, tako da ni možno videti gesla tega " +"uporabnika, lahko pa geslo spremenite z uporabo tega obrazca." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Vnesite veljavno %(username)s in geslo. Opomba: obe polji upoštevata " +"velikost črk." + +msgid "This account is inactive." +msgstr "Ta uporabniški račun ni dejaven." + +msgid "Email" +msgstr "Elektronski naslov" + +msgid "New password" +msgstr "Novo geslo" + +msgid "New password confirmation" +msgstr "Potrditev novega gesla" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Vaše staro geslo ni vneseno pravilno. Poskusite znova." + +msgid "Old password" +msgstr "Staro geslo" + +msgid "Password (again)" +msgstr "Geslo (znova)" + +msgid "algorithm" +msgstr "algoritem" + +msgid "iterations" +msgstr "ponovitev" + +msgid "salt" +msgstr "naključna vrednost" + +msgid "hash" +msgstr "razpršilo" + +msgid "variety" +msgstr "pestrost" + +msgid "version" +msgstr "različica" + +msgid "memory cost" +msgstr "pomnilniška zahtevnost" + +msgid "time cost" +msgstr "časovna zahtevnost" + +msgid "parallelism" +msgstr "paralelnost" + +msgid "work factor" +msgstr "faktor obremenitve" + +msgid "checksum" +msgstr "nadzorna vsota" + +msgid "name" +msgstr "ime" + +msgid "content type" +msgstr "vrsta vsebine" + +msgid "codename" +msgstr "kodno ime" + +msgid "permission" +msgstr "dovoljenje" + +msgid "permissions" +msgstr "dovoljenja" + +msgid "group" +msgstr "skupina" + +msgid "groups" +msgstr "skupine" + +msgid "superuser status" +msgstr "stanje skrbnika" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Določi, da bo uporabnik imel vsa dovoljenja, ne da bi mu jih posebej " +"dodelili." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Skupine, katerih član je ta uporabnik. Uporabnik pridobi vsa dovoljenja, " +"povezana z vsako izmed skupin." + +msgid "user permissions" +msgstr "uporabniška dovoljenja" + +msgid "Specific permissions for this user." +msgstr "Dovoljenja specifična za tega uporabnika." + +msgid "username" +msgstr "uporabniško ime" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "Zahtevano. 150 znakov ali manj. Le črke, števke in znaki @/./+/-/_." + +msgid "A user with that username already exists." +msgstr "Uporabnik s tem uporabniškim imenom že obstaja." + +msgid "first name" +msgstr "ime" + +msgid "last name" +msgstr "priimek" + +msgid "email address" +msgstr "elektronski naslov" + +msgid "staff status" +msgstr "stanje osebja" + +msgid "Designates whether the user can log into this admin site." +msgstr "Določi, ali se sme uporabnik prijaviti kot skrbnik." + +msgid "active" +msgstr "dejaven" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Določi, ali je uporabnik dejaven. Možnost je priročna in preprečuje brisanje " +"računov." + +msgid "date joined" +msgstr "vpisan od" + +msgid "user" +msgstr "uporabnik" + +msgid "users" +msgstr "uporabniki" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "To geslo je prekratko. Imeti mora vsaj %(min_length)d znak." +msgstr[1] "To geslo je prekratko. Imeti mora vsaj %(min_length)d znaka." +msgstr[2] "To geslo je prekratko. Imeti mora vsaj %(min_length)d znake." +msgstr[3] "To geslo je prekratko. Imeti mora vsaj %(min_length)d znakov." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Vaše geslo mora imeti vsaj %(min_length)d znak." +msgstr[1] "Vaše geslo mora imeti vsaj %(min_length)d znaka." +msgstr[2] "Vaše geslo mora imeti vsaj %(min_length)d znake." +msgstr[3] "Vaše geslo mora imeti vsaj %(min_length)d znakov." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Geslo je preveč podobno %(verbose_name)s." + +msgid "Your password can't be too similar to your other personal information." +msgstr "Geslo ne sme biti preveč podobno ostalim vašim osebnim podatkom." + +msgid "This password is too common." +msgstr "Geslo je eno izmed preveč pogosto uporabljanih." + +msgid "Your password can't be a commonly used password." +msgstr "Vaše geslo ne sme biti eno izmed pogosto uporabljanih gesel." + +msgid "This password is entirely numeric." +msgstr "Vaše geslo je sestavljeno samo iz števk." + +msgid "Your password can't be entirely numeric." +msgstr "Vaše geslo ne sme biti sestavljeno samo iz števk." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Geslo na %(site_name)s je ponastavljeno." + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Vnesite veljavno uporabniško ime. Ta vrednost sme vsebovati le angleške " +"črke, števke in znake @/./+/-/_." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Vnesite veljavno uporabniško ime. Ta vrednost sme vsebovati le črke, števke " +"in znake @/./+/-/_." + +msgid "Logged out" +msgstr "Odjavljen" + +msgid "Password reset" +msgstr "Ponastavi geslo" + +msgid "Password reset sent" +msgstr "Navodila za ponastavitev gesla so bila poslana" + +msgid "Enter new password" +msgstr "Vnesite novo geslo" + +msgid "Password reset unsuccessful" +msgstr "Ponastavitev gesla ni uspela" + +msgid "Password reset complete" +msgstr "Ponastavitev gesla zaključena" + +msgid "Password change" +msgstr "Sprememba gesla" + +msgid "Password change successful" +msgstr "Sprememba gesla je uspela" diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/sr/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/sr/LC_MESSAGES/django.po new file mode 100644 index 0000000..a51c3b9 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/sr/LC_MESSAGES/django.po @@ -0,0 +1,309 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Janos Guljas , 2011-2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-10-19 14:35+0000\n" +"Last-Translator: mPyth \n" +"Language-Team: Serbian (http://www.transifex.com/django/django/language/" +"sr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sr\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +msgid "Personal info" +msgstr "Лични подаци" + +msgid "Permissions" +msgstr "Дозволе" + +msgid "Important dates" +msgstr "Важни датуми" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "%(name)s објекат са примарним кључем %(key)r не постоји." + +msgid "Password changed successfully." +msgstr "Лозинка успешно измењена." + +#, python-format +msgid "Change password: %s" +msgstr "Измени лозинку: %s" + +msgid "Authentication and Authorization" +msgstr "Аутентикација и Ауторизација" + +msgid "password" +msgstr "лозинка" + +msgid "last login" +msgstr "последња пријава" + +msgid "No password set." +msgstr "Лозинка није унета." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Инвалидан формат лозинке или непознат hashing алгоритам." + +msgid "The two password fields didn't match." +msgstr "Два поља за лозинке се нису поклопила." + +msgid "Password" +msgstr "Лозинка" + +msgid "Password confirmation" +msgstr "Потврда лозинке" + +msgid "Enter the same password as before, for verification." +msgstr "Унесите исту лозинку као малопре ради верификације." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" +"Лозинке се не чувају у изворном облику па не постоји могућност приказа " +"лозинке овог корисника, али можете променити лозинку коришћењем ове форме." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Молим вас унесите исправно %(username)s и лозинку. Обратите пажњу да мала и " +"велика слова представљају различите карактере." + +msgid "This account is inactive." +msgstr "Овај налог је неактиван." + +msgid "Email" +msgstr "И-мејл" + +msgid "New password" +msgstr "Нова лозинка" + +msgid "New password confirmation" +msgstr "Потврда нове лозинке" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Ваша стара лознка није правилно унесена. Унесите је поново." + +msgid "Old password" +msgstr "Стара лозинка" + +msgid "Password (again)" +msgstr "Лозинка (поновите)" + +msgid "algorithm" +msgstr "алгоритам" + +msgid "iterations" +msgstr "итерације" + +msgid "salt" +msgstr "зачин" + +msgid "hash" +msgstr "хеш" + +msgid "variety" +msgstr "варијанта" + +msgid "version" +msgstr "верзија" + +msgid "memory cost" +msgstr "меморијска захтевност" + +msgid "time cost" +msgstr "временска захтевност" + +msgid "parallelism" +msgstr "паралелизам" + +msgid "work factor" +msgstr "фактор сложености" + +msgid "checksum" +msgstr "сума за проверу" + +msgid "name" +msgstr "име" + +msgid "content type" +msgstr "тип садржаја" + +msgid "codename" +msgstr "шифра дозволе" + +msgid "permission" +msgstr "дозвола" + +msgid "permissions" +msgstr "дозволе" + +msgid "group" +msgstr "група" + +msgid "groups" +msgstr "групе" + +msgid "superuser status" +msgstr "статус администратора" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Указује да корисник има све дозволе без додељивања појединачних дозвола." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Групе којима припада овај корисник. Корисник ће добити све дозволе које су " +"дате групама којима припада." + +msgid "user permissions" +msgstr "корисникове дозволе" + +msgid "Specific permissions for this user." +msgstr "Дозволе које се односе на овог корисника." + +msgid "username" +msgstr "корисничко име" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"Обавезан податак. 150 карактера или мање. Дозвољена су само слова, цифре и " +"карактери @/./+/-/_ ." + +msgid "A user with that username already exists." +msgstr "Корисник са тим корисничким именом већ постоји." + +msgid "first name" +msgstr "име" + +msgid "last name" +msgstr "презиме" + +msgid "email address" +msgstr "и-мејл адреса" + +msgid "staff status" +msgstr "статус члана посаде" + +msgid "Designates whether the user can log into this admin site." +msgstr "Указује да корисник може да се пријави на овај сајт за администрацију." + +msgid "active" +msgstr "активан" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Означава да ли се корисник сматра активним. Деселектујте ово уместо да " +"бришете налог." + +msgid "date joined" +msgstr "датум регистрације" + +msgid "user" +msgstr "корисник" + +msgid "users" +msgstr "корисници" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Ова лозинка је превише кратка, мора садржати најмање %(min_length)d карактер." +msgstr[1] "" +"Ова лозинка је превише кратка, мора садржати најмање %(min_length)d " +"карактера." +msgstr[2] "" +"Ова лозинка је превише кратка, мора садржати најмање %(min_length)d " +"карактера." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Ваша лозинка мора садржати најмање %(min_length)d карактер." +msgstr[1] "Ваша лозинка мора садржати најмање %(min_length)d карактера." +msgstr[2] "Ваша лозинка мора садржати најмање %(min_length)d карактера." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Лозинка је превише слична пољу '%(verbose_name)s'." + +msgid "Your password can't be too similar to your other personal information." +msgstr "Ваша лозинка не може бити слична вашим личним подацима." + +msgid "This password is too common." +msgstr "Ова лозинка је међу најчешће коришћеним лозинкама." + +msgid "Your password can't be a commonly used password." +msgstr "Ваша лозинка не може бити међу најчешће коришћеним лозинкама." + +msgid "This password is entirely numeric." +msgstr "Ова лозинка садржи само цифре." + +msgid "Your password can't be entirely numeric." +msgstr "Ваша лозинка не може садржати само цифре." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Ресетовање лозинке на сајту %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Унесите исправно корисничко име. Оно може садржати само слова енглеске " +"абецеде, цифре и карактере @/./+/-/_ ." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Унесите исправно корисничко име. Оно може садржати само слова, цифре и " +"карактере @/./+/-/_ ." + +msgid "Logged out" +msgstr "Одјављен" + +msgid "Password reset" +msgstr "Ресет лозинке" + +msgid "Password reset sent" +msgstr "Захтев за ресет лозинке је послат" + +msgid "Enter new password" +msgstr "Унесите нову лозинку" + +msgid "Password reset unsuccessful" +msgstr "Неуспешан ресет лозинке" + +msgid "Password reset complete" +msgstr "Ресет лозинке је завршен" + +msgid "Password change" +msgstr "Промена лозинке" + +msgid "Password change successful" +msgstr "Лозинка је успешно промењена" diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/sr_Latn/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/sr_Latn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9608759cdcfe5377e79b85db58ed4e7e7864e5be GIT binary patch literal 3293 zcmZ{lO^h7H6~`-lXZdm&8~7%8Kllgmdhj3Mjo^piBKSGT z_HMdHh$q1Yh@Y6?^F#0jknO)%@jS?OE`aRUTOdq`cR~Ebd-%Y0@kfyR->>)=knR1w z>i-wWcK=iLe+IJMFRK2pL5^2kTgG)G$ae3m>W4s{zXJ05J&@;4;LJD-9#fnS2W4m*QX5x0UI=N%RA1zC?n zAkS}rKLVFQwz~%My!EQyulSpazXKt$7=s+A1vy{NgRJY@Am`^hAp7+vkk|Pu2-n01 zAY>Mt)*LtI5Rc;+xu1Qz7w^yT^229=G#|0S+-PtF89>mLe%MZuJ z5688L_Xt<2hkbvbDzm@*u>Y(*>&_1q-*0{*R2z8jz`6(7=r=$UHKv&O4L4MJ&C8y^ri*&)Sf z4(yv83~X*#gi~o|U63YF%u$PVI~u_nq7qN5`K~zMsL;Tgp?0YZP(f_Kk6J^~uf*If zP(zNSHqE_;K_PogJ|7H}_rp9%wp#nT_uH<`kyBm;vW6BLtj_bip-nIPdz-;!Z;ebK z=g^8xh#cm2*E1SwmBgN69h-*&!S}(qg;6YeDF&gaO{Jmut<4?TeWB4D3M&(ogFM;{ ztaFeUu2Vlz(yOwMbf6;OmMAR=nT)JMGNxiMR)eX}QLwS%00c`;6RVAi1qAhhisq5C zc_xal7s$J@K*+98+lxeE7_vs2vRKS0KD(Q+m!e{?=!KU_5I)G^knjyTT5|Lk$E9lE zvM3t%PvnMT1ul4j!!o5I!n02Fot;32=u{j%hd$&(m*NS|m0dWaIJ2VDex&2*=lRG- zo3={}{f*6Nm2(zjqcsT7rR8?#(Ww1cw7f!{hr26}9BD7N+ZY&~Q8Udp|IfIU?()i! zHlBrb2oh~NX?!B#QkQ-qjlo{7D~)`o5RadJG4IcAj0k%~5zOuO`qa%VLT zV`Cj|nI<*HA!Oa9rTKi`3T#;q)w$Ndrb}gPHImBAl6Q+MZ7i?NQgh+-snbvGsnKb* z7gjCu#=y(14B-ZKE-YmUPQ@|8VQ|Ro-m{x0qoaG{c+H`5(NoB?7zegXN6+f8>vosC zJ5emR&`)wFljx*%sqd1>imLBDe2mIsuVEHD?Ov}#hYu4M+Xs7{4n09_!f@0d?=9C| z$9pSWEM~NiciQyQOXU=dX*V&agE`C1V+-P!NNI2Ml)R*%Q<|3b%NM4o=u{b-(o9`` zg)-}dooL)M+i2BD+-+^9d2!cnY#Vv`f}BZQJ(TF$$P@-7`I(~FZqIC@aLa9@jLn?r znKTm#s}luTFx%*HHB7d|_Zm#?&Lx-J;2_l#T+LqfPPjH~^%u=2z1kOvIb$aKbLNl%=J8FsNRCtRp95DgFmbr*zl= literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/sv/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/sv/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d202498db56f3f638cb394bcb67191f6241a68cc GIT binary patch literal 7447 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 literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/sv/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/sv/LC_MESSAGES/django.po new file mode 100644 index 0000000..d824ec2 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/sv/LC_MESSAGES/django.po @@ -0,0 +1,311 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Alex Nordlund , 2012 +# Cybjit , 2012 +# Jannis Leidel , 2011 +# Jonathan Lindén, 2015 +# Jonathan Lindén, 2014 +# Mattias Hansson , 2016 +# nip3o , 2014 +# Petter Strandmark , 2019 +# Samuel Linde , 2011 +# Thomas Lundqvist, 2013,2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2019-01-28 13:46+0000\n" +"Last-Translator: Petter Strandmark \n" +"Language-Team: Swedish (http://www.transifex.com/django/django/language/" +"sv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sv\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "Personlig information" + +msgid "Permissions" +msgstr "Rättigheter" + +msgid "Important dates" +msgstr "Viktiga datum" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "%(name)s-objekt med primärnyckel %(key)r finns inte." + +msgid "Password changed successfully." +msgstr "Lösenordet ändrades." + +#, python-format +msgid "Change password: %s" +msgstr "Ändra lösenord: %s" + +msgid "Authentication and Authorization" +msgstr "Autentisering och auktorisering" + +msgid "password" +msgstr "lösenord" + +msgid "last login" +msgstr "senaste inloggning" + +msgid "No password set." +msgstr "Inget lösenord angivet." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Ogiltigt lösenordsformat eller okänd hashalgoritm." + +msgid "The two password fields didn't match." +msgstr "De två lösenordsfälten stämde inte överens." + +msgid "Password" +msgstr "Lösenord" + +msgid "Password confirmation" +msgstr "Lösenordsbekräftelse" + +msgid "Enter the same password as before, for verification." +msgstr "Fyll i samma lösenord som tidigare för verifiering." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" +"Lösenord lagras inte direkt, så det finns inget sätt att se denna användares " +"lösenord, men du kan ändra lösenorden med detta formulär." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Ange ett korrekt %(username)s och lösenord. Observera att båda fälten är " +"skiftlägeskänsliga." + +msgid "This account is inactive." +msgstr "Detta konto är inaktivt." + +msgid "Email" +msgstr "E-postadress" + +msgid "New password" +msgstr "Nytt lösenord" + +msgid "New password confirmation" +msgstr "Bekräfta nytt lösenord" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Ditt gamla lösenord var felaktigt ifyllt. Var vänlig fyll i det igen." + +msgid "Old password" +msgstr "Gammalt lösenord" + +msgid "Password (again)" +msgstr "Lösenord (igen)" + +msgid "algorithm" +msgstr "algoritm" + +msgid "iterations" +msgstr "iterationer" + +msgid "salt" +msgstr "salt" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "variation" + +msgid "version" +msgstr "version" + +msgid "memory cost" +msgstr "minneskostnad" + +msgid "time cost" +msgstr "tidskostnad" + +msgid "parallelism" +msgstr "parallellism" + +msgid "work factor" +msgstr "arbetsfaktor" + +msgid "checksum" +msgstr "kontrollsumma" + +msgid "name" +msgstr "namn" + +msgid "content type" +msgstr "innehållstyp" + +msgid "codename" +msgstr "kodnamn" + +msgid "permission" +msgstr "rättighet" + +msgid "permissions" +msgstr "rättigheter" + +msgid "group" +msgstr "grupp" + +msgid "groups" +msgstr "grupper" + +msgid "superuser status" +msgstr "superanvändare" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Anger att denna användare har alla rättigheter utan att uttryckligen " +"tilldela dem." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"De grupper som användaren är medlem i. Användare får tillgång till alla " +"rättigheter som deras grupper har." + +msgid "user permissions" +msgstr "användarättigheter" + +msgid "Specific permissions for this user." +msgstr "Specifika rättigheter för denna användare." + +msgid "username" +msgstr "användarnamn" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"Obligatoriskt. 150 tecken eller färre. Endast bokstäver, siffror och @/./+/-/" +"_." + +msgid "A user with that username already exists." +msgstr "En användare med det användarnamnet finns redan." + +msgid "first name" +msgstr "förnamn" + +msgid "last name" +msgstr "efternamn" + +msgid "email address" +msgstr "e-postadress" + +msgid "staff status" +msgstr "personalstatus" + +msgid "Designates whether the user can log into this admin site." +msgstr "Avgör om användaren kan logga in på denna adminsida." + +msgid "active" +msgstr "aktiv" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Anger om användaren skall betraktas som aktiv. Avmarkera detta istället för " +"att ta bort konton." + +msgid "date joined" +msgstr "registreringsdatum" + +msgid "user" +msgstr "användare" + +msgid "users" +msgstr "användare" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Detta lösenord är för kort. Det måste innehålla minst %(min_length)d tecken." +msgstr[1] "" +"Detta lösenord är för kort. Det måste innehålla minst %(min_length)d tecken." + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Ditt lösenord måste innehålla minst %(min_length)d tecken." +msgstr[1] "Ditt lösenord måste innehålla minst %(min_length)d tecken." + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Ditt lösenord är alltför likt %(verbose_name)s." + +msgid "Your password can't be too similar to your other personal information." +msgstr "Ditt lösenord kan inte vara alltför lik din personliga information." + +msgid "This password is too common." +msgstr "Detta lösenord är alldeles för vanligt." + +msgid "Your password can't be a commonly used password." +msgstr "Ditt lösenord kan inte vara ett allmänt använt lösenord." + +msgid "This password is entirely numeric." +msgstr "Detta lösenord är enbart numeriskt." + +msgid "Your password can't be entirely numeric." +msgstr "Ditt lösenord kan inte bara vara numeriskt." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Lösenord nollställt på %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Fyll i ett giltigt användarnamn. Detta värde får endast innehålla bokstäver " +"a-z, siffror och @/./+/-/_." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Fyll i ett giltigt användarnamn. Detta värde får endast innehålla bokstäver, " +"siffror och @/./+/-/_." + +msgid "Logged out" +msgstr "Utloggad" + +msgid "Password reset" +msgstr "Nollställ lösenord" + +msgid "Password reset sent" +msgstr "Lösenordsnollställning skickad" + +msgid "Enter new password" +msgstr "Nytt lösenord" + +msgid "Password reset unsuccessful" +msgstr "Lösenordsnollställning misslyckad" + +msgid "Password reset complete" +msgstr "Nollställning av lösenord klar" + +msgid "Password change" +msgstr "Ändra lösenord" + +msgid "Password change successful" +msgstr "Lösenordet ändrades" diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/ta/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/ta/LC_MESSAGES/django.po new file mode 100644 index 0000000..3e89f57 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/ta/LC_MESSAGES/django.po @@ -0,0 +1,283 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-09-24 14:24+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Tamil (http://www.transifex.com/django/django/language/ta/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ta\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "தனிப்பட்ட விவரம்" + +msgid "Permissions" +msgstr "அனுமதிகள்" + +msgid "Important dates" +msgstr "முக்கியமான தேதிகள்" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "" + +msgid "Password changed successfully." +msgstr "" + +#, python-format +msgid "Change password: %s" +msgstr "" + +msgid "Authentication and Authorization" +msgstr "" + +msgid "password" +msgstr "கடவுச்சொல்" + +msgid "last login" +msgstr "கடைசி உள்நுழைவு" + +msgid "No password set." +msgstr "" + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "" + +msgid "The two password fields didn't match." +msgstr "" + +msgid "Password" +msgstr "கடவுச்சொல்" + +msgid "Password confirmation" +msgstr "" + +msgid "Enter the same password as before, for verification." +msgstr "" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" + +msgid "This account is inactive." +msgstr "இந்த கணக்கு செயல்பட துவங்கவில்லை" + +msgid "Email" +msgstr "" + +msgid "New password" +msgstr "" + +msgid "New password confirmation" +msgstr "" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" + +msgid "Old password" +msgstr "" + +msgid "Password (again)" +msgstr "கடவுச்சொல்(மறுபடியும்)" + +msgid "algorithm" +msgstr "" + +msgid "iterations" +msgstr "" + +msgid "salt" +msgstr "" + +msgid "hash" +msgstr "" + +msgid "variety" +msgstr "" + +msgid "version" +msgstr "" + +msgid "memory cost" +msgstr "" + +msgid "time cost" +msgstr "" + +msgid "parallelism" +msgstr "" + +msgid "work factor" +msgstr "" + +msgid "checksum" +msgstr "" + +msgid "name" +msgstr "பெயர்" + +msgid "content type" +msgstr "" + +msgid "codename" +msgstr "குறிமுறை பெயர்" + +msgid "permission" +msgstr "அனுமதி" + +msgid "permissions" +msgstr "அனுமதிகள்" + +msgid "group" +msgstr "குழு" + +msgid "groups" +msgstr "குழுக்கள்" + +msgid "superuser status" +msgstr "மேலாளர் இருப்பு நிலை" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "இந்த பயனருக்கு எல்லா அங்கீகாரங்களும் வழங்கப்படவில்லை." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" + +msgid "user permissions" +msgstr "பயனர் அனுமதிகள்" + +msgid "Specific permissions for this user." +msgstr "" + +msgid "username" +msgstr "பயனர் பெயர்" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +msgid "A user with that username already exists." +msgstr "" + +msgid "first name" +msgstr "முதல் பெயர்" + +msgid "last name" +msgstr "கடைசி பெயர்" + +msgid "email address" +msgstr "" + +msgid "staff status" +msgstr "பணியாளர் நிலை" + +msgid "Designates whether the user can log into this admin site." +msgstr "பயனர், 'மேலாளலர்' பக்கத்தில் நுழைவதை முடிவு செய்கிறது" + +msgid "active" +msgstr "செயல்படும்" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" + +msgid "date joined" +msgstr "சேர்ந்த தேதி" + +msgid "user" +msgstr "பயனர்" + +msgid "users" +msgstr "பயனர்கள்" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "" + +msgid "Your password can't be too similar to your other personal information." +msgstr "" + +msgid "This password is too common." +msgstr "" + +msgid "Your password can't be a commonly used password." +msgstr "" + +msgid "This password is entirely numeric." +msgstr "" + +msgid "Your password can't be entirely numeric." +msgstr "" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" + +msgid "Logged out" +msgstr "வெளியே வந்துவீட்டீர்" + +msgid "Password reset" +msgstr "" + +msgid "Password reset sent" +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Password reset unsuccessful" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgid "Password change" +msgstr "" + +msgid "Password change successful" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/te/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/te/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4aad473bb99ee2728bfb4d11faad923022e85e8d GIT binary patch literal 2955 zcma)+TW=Iq9KeqXi0d7^qQW7HwBYWxr3!AX;hsQRX`uLGG#Phhw}Z1Yo0-`b5)*+$ zK@Ev7g@l+8w4&ibrW%mGKzQ&2$Oq7QG12d!#^3+U?DoQXIoUbCIdlH!e?R;4s%6uP zv7YByo)_*?stjMcn~Cuo?1jI>)o}GaN<9oW!UEh1AAmdI)9^sPcHv6alkgGv0bC0| zgO9^2@P7Csd=UNwH^5(@=vlr@sTFV?6g@9OkuO8BI|P@*y-?&v^6!V>eXQSs{L}=K zoNqumHwi`02`GM_f&A2YCh_wE6!`>-{y8{JPHw`tSRcmNemDy^!$06A*mExrJOp>c z_u=#K7JLf+3PtWO_%`gtNIyIUWq%HCfw$p%a0Nj~9YQF1`y%HpD0ND6{t2ZXYY0yA zx(P}iw?oNe4N9EHq1ZVCSHVm9dJewK`ZkpFD@jfXu7%PQqwpCRK+>Raf6;i1mB`6h z$0NRoe|h^Dn;bPdfYLJML;R8<^?#CQjVu__XAhaTtTwcSsfpBCYDCB;2C2_;Jdg6= zzIuX3hU80z#3MuUpmyk1v(pgZP)fU#v0$M6D6eFNL$rv&>}!yUEiw4?xa&v8C5l~9m$oF==G7n z^&MLgTNG>axgG|srZRJ+Jd4j>P;<-L;E5TlJ_o9#nK;?7(<&7X_E1 z6n7I&MGy4#Z!Pw{S{xYE{aY%7uWarc=<7qUc+i=2MQ0be!OFnk<~~MYgm8=Fq2))O z6$fEO@3(xPB#t<)?Rfe%ykWWBGs}`x<#o>Z^_Eq4isO#esOWLWYt>u2XCjW9m2!D% zYN`~ALbv7|Emea?ISZ)`FF#$5opNtsbl>Qn`QZCYeT7|tA3Huy9cvO@>>Q2DO^@yx z(lk{VIq~q}@x8@u^KxRV=7hyPK81GudPQ%0*Nr<~ijKmV*9tAKxHkwJQAPVrvy6rZ zhIIBi+~e!@!@9qBsG!p1v`&+6(&R>(d@H}%6KOJ&&VItzQ)zNCO{TNO)ik+j1eve! zDNW9$$t80xVGHq(WqbCF5lYa5?(1z0sG3QW%k2{#IXQ<}jB|pc=Z$?#erir$M6Iozeeh=pQ}kzM*?eXy2PKnUD8kr>iKI7v(*x=;u<- zgm*GSiI}PD4IErtmb^qKN=vk7CH=3sKQyN4ER<3&Uh+y^ZPzm^6An-#9LP(N`Oq#{ za#Cx|OT&`ekMa&N8DDI`v}32)#1uymAuX9k3Ph)$HkFcy*3se~exKzPx*lWh`-W@??^ScJ2?K^f3>jf`@ZHxzZVvdCoD9+UG+ zYjMY?1@$NE++3XCFNG^l<*%D%-Xz&Yk^QgQIg>0C0eQPT>HbwO^=5(TE=rap K^$v;7>AwNnnfze@ literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/te/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/te/LC_MESSAGES/django.po new file mode 100644 index 0000000..d50487c --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/te/LC_MESSAGES/django.po @@ -0,0 +1,285 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# bhaskar teja yerneni , 2011 +# Jannis Leidel , 2011 +# వీవెన్ , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-09-24 14:24+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Telugu (http://www.transifex.com/django/django/language/te/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: te\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "వ్యక్తిగత సమాచారం " + +msgid "Permissions" +msgstr "అనుమతులు" + +msgid "Important dates" +msgstr "ముఖ్యమైన తేదీలు" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "" + +msgid "Password changed successfully." +msgstr "సంకేతపదాన్ని విజయవంతంగా మార్చారు." + +#, python-format +msgid "Change password: %s" +msgstr "సంకేతపదాన్ని మార్చుకోండి: %s" + +msgid "Authentication and Authorization" +msgstr "" + +msgid "password" +msgstr "సంకేతపదం" + +msgid "last login" +msgstr "చివరి ప్రవేశం" + +msgid "No password set." +msgstr "" + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "" + +msgid "The two password fields didn't match." +msgstr "ఈ రెండు అనుమతి పదాలు అసమానమైనంగ ఉన్నాయి" + +msgid "Password" +msgstr "సంకేతపదం" + +msgid "Password confirmation" +msgstr "సంకేపదపు నిర్ధారణ" + +msgid "Enter the same password as before, for verification." +msgstr "" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" + +msgid "This account is inactive." +msgstr "ఈ ఖాతా అచేతనమైనది" + +msgid "Email" +msgstr "" + +msgid "New password" +msgstr "కొత్త సంకేతపదం" + +msgid "New password confirmation" +msgstr "కొత్త సంకేతపదపు నిర్ధారణ" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" + +msgid "Old password" +msgstr "పాత సంకేతపదం" + +msgid "Password (again)" +msgstr "సంకేతపదం (మళ్ళీ)" + +msgid "algorithm" +msgstr "" + +msgid "iterations" +msgstr "" + +msgid "salt" +msgstr "" + +msgid "hash" +msgstr "" + +msgid "variety" +msgstr "" + +msgid "version" +msgstr "" + +msgid "memory cost" +msgstr "" + +msgid "time cost" +msgstr "" + +msgid "parallelism" +msgstr "" + +msgid "work factor" +msgstr "" + +msgid "checksum" +msgstr "" + +msgid "name" +msgstr "పేరు" + +msgid "content type" +msgstr "" + +msgid "codename" +msgstr "సంహితనామము" + +msgid "permission" +msgstr "అనుమతి" + +msgid "permissions" +msgstr "అనుమతులు" + +msgid "group" +msgstr "గుంపు" + +msgid "groups" +msgstr "గుంపులు" + +msgid "superuser status" +msgstr "" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" + +msgid "user permissions" +msgstr "వాడుకరి అనుమతులు" + +msgid "Specific permissions for this user." +msgstr "" + +msgid "username" +msgstr "వాడుకరిపేరు" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +msgid "A user with that username already exists." +msgstr "ఈ నామముతొ ఇంకొ వినియొగదారి ఉన్నరు" + +msgid "first name" +msgstr "మొదటి పేరు" + +msgid "last name" +msgstr "ఇంటి పేరు" + +msgid "email address" +msgstr "" + +msgid "staff status" +msgstr "ఉద్యోగస్తుల స్థితి" + +msgid "Designates whether the user can log into this admin site." +msgstr "" + +msgid "active" +msgstr "క్రియాశీలం" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" + +msgid "date joined" +msgstr "చేరిన తేదీ" + +msgid "user" +msgstr "వాడుకరి" + +msgid "users" +msgstr "వాడుకరులు" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "" + +msgid "Your password can't be too similar to your other personal information." +msgstr "" + +msgid "This password is too common." +msgstr "" + +msgid "Your password can't be a commonly used password." +msgstr "" + +msgid "This password is entirely numeric." +msgstr "" + +msgid "Your password can't be entirely numeric." +msgstr "" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" + +msgid "Logged out" +msgstr "నిష్క్రమించారు" + +msgid "Password reset" +msgstr "" + +msgid "Password reset sent" +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Password reset unsuccessful" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgid "Password change" +msgstr "" + +msgid "Password change successful" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/th/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/th/LC_MESSAGES/django.po new file mode 100644 index 0000000..79da789 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/th/LC_MESSAGES/django.po @@ -0,0 +1,282 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Kowit Charoenratchatabhan , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-11-29 04:33+0000\n" +"Last-Translator: Kowit Charoenratchatabhan \n" +"Language-Team: Thai (http://www.transifex.com/django/django/language/th/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: th\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Personal info" +msgstr "ข้อมูลส่วนตัว" + +msgid "Permissions" +msgstr "สิทธิ์" + +msgid "Important dates" +msgstr "วันที่ที่สำคัญ" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "" + +msgid "Password changed successfully." +msgstr "เปลี่ยนรหัสผ่านสำเร็จแล้ว" + +#, python-format +msgid "Change password: %s" +msgstr "เปลี่ยนรหัสผ่าน: %s " + +msgid "Authentication and Authorization" +msgstr "การตรวจสอบและอนุมัติ" + +msgid "password" +msgstr "รหัสผ่าน" + +msgid "last login" +msgstr "เข้าสู่ระบบครั้งสุดท้าย" + +msgid "No password set." +msgstr "ไม่ได้ตั้งค่ารหัสผ่าน" + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "รูปแบบรหัสผ่านไม่ถูกต้อง หรือไม่รู้จักแฮชอัลกอริทึมนี้" + +msgid "The two password fields didn't match." +msgstr "รหัสผ่านไม่ตรงกัน" + +msgid "Password" +msgstr "รหัสผ่าน" + +msgid "Password confirmation" +msgstr "ยืนยันรหัสผ่าน" + +msgid "Enter the same password as before, for verification." +msgstr "" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "กรุณาใส่ %(username)s และรหัสผ่านที่ถูกต้อง มีการแยกแยะตัวพิมพ์ใหญ่-เล็ก" + +msgid "This account is inactive." +msgstr "บัญชีนี้ไม่ทำงาน" + +msgid "Email" +msgstr "อีเมล" + +msgid "New password" +msgstr "รหัสผ่านใหม่" + +msgid "New password confirmation" +msgstr "ยืนยันการตั้งรหัสผ่านใหม่" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "ใส่รหัสผ่านเก่าผิด กรุณาใส่รหัสผ่านอีกครั้ง" + +msgid "Old password" +msgstr "รหัสผ่านเก่า" + +msgid "Password (again)" +msgstr "รหัสผ่าน (อีกครั้ง)" + +msgid "algorithm" +msgstr "algorithm" + +msgid "iterations" +msgstr "iterations" + +msgid "salt" +msgstr "salt" + +msgid "hash" +msgstr "hash" + +msgid "variety" +msgstr "" + +msgid "version" +msgstr "" + +msgid "memory cost" +msgstr "" + +msgid "time cost" +msgstr "" + +msgid "parallelism" +msgstr "" + +msgid "work factor" +msgstr "ปัจจัยการทำงาน" + +msgid "checksum" +msgstr "checksum" + +msgid "name" +msgstr "ชื่อ" + +msgid "content type" +msgstr "" + +msgid "codename" +msgstr "รหัสชื่อ" + +msgid "permission" +msgstr "สิทธิ์" + +msgid "permissions" +msgstr "สิทธิ์" + +msgid "group" +msgstr "กลุ่ม" + +msgid "groups" +msgstr "กลุ่ม" + +msgid "superuser status" +msgstr "สถานะผู้ใช้พิเศษ" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "กำหนดสิทธิ์ทุกอย่างให้ผู้ใช้ โดยไม่ต้องการมอบหมายอย่างเป็นทางการ" + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" + +msgid "user permissions" +msgstr "สิทธิ์ของผู้ใช้" + +msgid "Specific permissions for this user." +msgstr "สิทธิ์ที่เฉพาะเจาะจงสำหรับผู้ใช้นี้" + +msgid "username" +msgstr "ชื่อผู้ใช้" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +msgid "A user with that username already exists." +msgstr "ชื่อผู้ใช้นั้นได้ถูกใช้ไปแล้ว" + +msgid "first name" +msgstr "ชื่อ" + +msgid "last name" +msgstr "นามสกุล" + +msgid "email address" +msgstr "ที่อยู่อีเมล" + +msgid "staff status" +msgstr "สถานะของพนักงาน" + +msgid "Designates whether the user can log into this admin site." +msgstr "กำหนดผู้ที่จะเข้ามาใช้งานในส่วนของผู้ดูแลระบบ" + +msgid "active" +msgstr "ใช้งานได้" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "กำหนดให้ผู้ใช้มีสถานะที่สามารถเข้ามาใช้งานได้ เลือกออกแทนที่จะลบชื่อผู้ใช้ทิ้งไป " + +msgid "date joined" +msgstr "วันที่เข้าร่วม" + +msgid "user" +msgstr "ผู้ใช้" + +msgid "users" +msgstr "ผู้ใช้" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "" + +msgid "Your password can't be too similar to your other personal information." +msgstr "" + +msgid "This password is too common." +msgstr "" + +msgid "Your password can't be a commonly used password." +msgstr "" + +msgid "This password is entirely numeric." +msgstr "" + +msgid "Your password can't be entirely numeric." +msgstr "" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "รีเซ็ตรหัสผ่านบน %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" + +msgid "Logged out" +msgstr "ออกจากระบบ" + +msgid "Password reset" +msgstr "รีเซ็ตรหัสผ่าน" + +msgid "Password reset sent" +msgstr "" + +msgid "Enter new password" +msgstr "ป้อนรหัสผ่านใหม่" + +msgid "Password reset unsuccessful" +msgstr "ตั้งรหัสผ่านใหม่ไม่สำเร็จ" + +msgid "Password reset complete" +msgstr "รีเซ็ตรหัสผ่านเสร็จสมบูรณ์" + +msgid "Password change" +msgstr "เปลี่ยนรหัสผ่าน" + +msgid "Password change successful" +msgstr "เปลี่ยนรหัสผ่านสำเร็จ" diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/uk/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/uk/LC_MESSAGES/django.po new file mode 100644 index 0000000..5d98e5f --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/uk/LC_MESSAGES/django.po @@ -0,0 +1,319 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# captain_m4l , 2012 +# Igor Melnyk, 2014-2015 +# Jannis Leidel , 2011 +# Kirill Gagarski , 2015 +# Max V. Stotsky , 2014 +# captain_m4l , 2012 +# Mykola Zamkovoi , 2014 +# Alex Bolotov , 2013 +# Vitaliy Kozlovskyi , 2015 +# Zoriana Zaiats, 2016-2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2017-11-08 15:37+0000\n" +"Last-Translator: Zoriana Zaiats\n" +"Language-Team: Ukrainian (http://www.transifex.com/django/django/language/" +"uk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != " +"11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % " +"100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || " +"(n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n" + +msgid "Personal info" +msgstr "Персональна інформація" + +msgid "Permissions" +msgstr "Дозволи" + +msgid "Important dates" +msgstr "Важливі дати" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "%(name)s об'єкт з первинним ключем %(key)r не існує." + +msgid "Password changed successfully." +msgstr "Пароль успішно змінено." + +#, python-format +msgid "Change password: %s" +msgstr "Змінити пароль: %s" + +msgid "Authentication and Authorization" +msgstr "Аутентифікація та авторизація" + +msgid "password" +msgstr "пароль" + +msgid "last login" +msgstr "останній вхід" + +msgid "No password set." +msgstr "Пароль не встановлено." + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "Невірний формат пароля або невідомий алгоритм хешування." + +msgid "The two password fields didn't match." +msgstr "Паролі у двох полях не співпадають." + +msgid "Password" +msgstr "Пароль" + +msgid "Password confirmation" +msgstr "Підтвердження пароля" + +msgid "Enter the same password as before, for verification." +msgstr "Введіть той же пароль, що і раніше, для підтвердження." + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" +"Паролі не зберігаються у відкритому вигляді, тому немає можливості " +"переглянути пароль цього користувача, але ви можете змінити пароль за " +"допомогою цієї форми." + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" +"Будь ласка, введіть правильні %(username)s та пароль. Зауважте, що обидва " +"поля чутливі до регістру." + +msgid "This account is inactive." +msgstr "Цей запис користувача не активний." + +msgid "Email" +msgstr "Email" + +msgid "New password" +msgstr "Новий пароль" + +msgid "New password confirmation" +msgstr "Новий пароль (підтвердження)" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" +"Старий пароль було введено неправильно. Будь ласка, введіть його знову." + +msgid "Old password" +msgstr "Старий пароль" + +msgid "Password (again)" +msgstr "Пароль (ще раз)" + +msgid "algorithm" +msgstr "алгоритм" + +msgid "iterations" +msgstr "ітерації" + +msgid "salt" +msgstr "сіль" + +msgid "hash" +msgstr "хеш" + +msgid "variety" +msgstr "різноманітність" + +msgid "version" +msgstr "версія" + +msgid "memory cost" +msgstr "витрати пам’яті" + +msgid "time cost" +msgstr "витрати часу" + +msgid "parallelism" +msgstr "паралелізм" + +msgid "work factor" +msgstr "робочий фактор" + +msgid "checksum" +msgstr "контрольна сума" + +msgid "name" +msgstr "ім'я" + +msgid "content type" +msgstr "тип вмісту" + +msgid "codename" +msgstr "код" + +msgid "permission" +msgstr "дозвіл" + +msgid "permissions" +msgstr "дозволи" + +msgid "group" +msgstr "група" + +msgid "groups" +msgstr "групи" + +msgid "superuser status" +msgstr "статус суперкористувача" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "Визначає, що цей користувач має всі дозволи без їх точного зазначення." + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" +"Групи, до яких належить користувач. Користувач отримає всі дозволи, що " +"вказані в кожній з його груп." + +msgid "user permissions" +msgstr "дозволи користувача" + +msgid "Specific permissions for this user." +msgstr "Особливі права доступу для цього користувача." + +msgid "username" +msgstr "ім'я користувача" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"Необхідно: 150 або менше символів. тільки букви, цифри та знаки @/./+/-/_." + +msgid "A user with that username already exists." +msgstr "Користувач з таким ім'ям вже існує." + +msgid "first name" +msgstr "ім'я" + +msgid "last name" +msgstr "прізвище" + +msgid "email address" +msgstr "email адреса" + +msgid "staff status" +msgstr "статус персоналу" + +msgid "Designates whether the user can log into this admin site." +msgstr "Визначає, чи може користувач увійти до цього сайту адміністрування." + +msgid "active" +msgstr "активний" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Визначає, чи можна цього користувача вважати діючим. Заберіть галочку, " +"замість видалення запису користувача." + +msgid "date joined" +msgstr "дата приєднання" + +msgid "user" +msgstr "користувач" + +msgid "users" +msgstr "користувачі" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +"Пароль надто короткий. Він повинен містити як мінімум %(min_length)d символ" +msgstr[1] "" +"Пароль надто короткий. Він повинен містити як мінімум %(min_length)d символи" +msgstr[2] "" +"Пароль надто короткий. Він повинен містити як мінімум %(min_length)d символів" +msgstr[3] "" +"Пароль надто короткий. Він повинен містити як мінімум %(min_length)d символів" + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "Ваш пароль повинен містити як мінімум %(min_length)d символ" +msgstr[1] "Ваш пароль повинен містити як мінімум %(min_length)d символи" +msgstr[2] "Ваш пароль повинен містити як мінімум %(min_length)d символів" +msgstr[3] "Ваш пароль повинен містити як мінімум %(min_length)d символів" + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "Пароль надто схожий на %(verbose_name)s." + +msgid "Your password can't be too similar to your other personal information." +msgstr "Пароль не повинен бути надто схожим на іншу персональну інформацію." + +msgid "This password is too common." +msgstr "Пароль надто відомий." + +msgid "Your password can't be a commonly used password." +msgstr "Ваш пароль не повинен бути загальновідомим." + +msgid "This password is entirely numeric." +msgstr "Цей пароль повністю складається із цифр." + +msgid "Your password can't be entirely numeric." +msgstr "Ваш пароль не може складається лише із цифр." + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "Скидання пароля на %(site_name)s" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" +"Введіть коректне ім'я користувача. Значення цього поля може складатися лише " +"з англійських літер, цифр, а також з символів: @/./+/-/_." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"Введіть коректне ім'я користувача. Значення цього поля може складатися лише " +"з літер, цифр, а також з символів: @/./+/-/_." + +msgid "Logged out" +msgstr "Вихід" + +msgid "Password reset" +msgstr "Перевстановлення паролю" + +msgid "Password reset sent" +msgstr "Скидання пароля відправлено" + +msgid "Enter new password" +msgstr "Введіть новий пароль" + +msgid "Password reset unsuccessful" +msgstr "Пароль не перевстановлено" + +msgid "Password reset complete" +msgstr "Пароль перевстановлено" + +msgid "Password change" +msgstr "Зміна паролю" + +msgid "Password change successful" +msgstr "Пароль успішно змінено" diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/ur/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/ur/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..cfa37dab546b2eff1feec75eacd10fdade912531 GIT binary patch literal 698 zcmZvY&ui2`6vv}hl;A;o^5Efl+ojAVn=V>sT@m{ODqXvl)cd%ZO=ro@gqew{$3kf< zcoPNB9#*6v_2fnWj)a1Li!a@77qkyPeCNG<=goWhGe7sy!MKjxLspO*NP<*xgxo^j zo$Dvmo5&aBHgb%7xZ*g!Q12oyuTJ_5QSV@Whzh8mQPFl0m^yPv_3pK*`hw?>GGlV3 zBWE*-W=U^aogSdZVkTtW>1j3OeM{CO@``ICl%x<1nT(aY#Z#p%>6%zX%oE__&yrR7JnnEo|pJqG-xgO814o$mV}x~ zlQ63^h38C4VPJ!ch$rwEr@{1Ta+WrP9H=LFN5&b8ISDx%QP|c|2DKe)Q|ftno;PgO zP7L^NqpwEZWTB}f=XbqKdv&+F-d&xo-fZ~pvXYid9O-R}yIH<#y)?m})rS5K(}vs5 zcDP2CX1?mJ0oP\n" +"Language-Team: Urdu (http://www.transifex.com/django/django/language/ur/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ur\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Personal info" +msgstr "" + +msgid "Permissions" +msgstr "" + +msgid "Important dates" +msgstr "" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "" + +msgid "Password changed successfully." +msgstr "" + +#, python-format +msgid "Change password: %s" +msgstr "" + +msgid "Authentication and Authorization" +msgstr "" + +msgid "password" +msgstr "" + +msgid "last login" +msgstr "" + +msgid "No password set." +msgstr "" + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "" + +msgid "The two password fields didn't match." +msgstr "" + +msgid "Password" +msgstr "لفظ اجازت" + +msgid "Password confirmation" +msgstr "" + +msgid "Enter the same password as before, for verification." +msgstr "" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "" + +msgid "This account is inactive." +msgstr "" + +msgid "Email" +msgstr "" + +msgid "New password" +msgstr "نیا لفظ اجازت" + +msgid "New password confirmation" +msgstr "" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" + +msgid "Old password" +msgstr "پرانا لفظ اجازت" + +msgid "Password (again)" +msgstr "لفظ اجازت (دوبارہ)" + +msgid "algorithm" +msgstr "" + +msgid "iterations" +msgstr "" + +msgid "salt" +msgstr "" + +msgid "hash" +msgstr "" + +msgid "variety" +msgstr "" + +msgid "version" +msgstr "" + +msgid "memory cost" +msgstr "" + +msgid "time cost" +msgstr "" + +msgid "parallelism" +msgstr "" + +msgid "work factor" +msgstr "" + +msgid "checksum" +msgstr "" + +msgid "name" +msgstr "" + +msgid "content type" +msgstr "" + +msgid "codename" +msgstr "" + +msgid "permission" +msgstr "" + +msgid "permissions" +msgstr "" + +msgid "group" +msgstr "" + +msgid "groups" +msgstr "" + +msgid "superuser status" +msgstr "" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "" + +msgid "user permissions" +msgstr "" + +msgid "Specific permissions for this user." +msgstr "" + +msgid "username" +msgstr "" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +msgid "A user with that username already exists." +msgstr "" + +msgid "first name" +msgstr "" + +msgid "last name" +msgstr "" + +msgid "email address" +msgstr "" + +msgid "staff status" +msgstr "" + +msgid "Designates whether the user can log into this admin site." +msgstr "" + +msgid "active" +msgstr "" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" + +msgid "date joined" +msgstr "" + +msgid "user" +msgstr "" + +msgid "users" +msgstr "" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "" + +msgid "Your password can't be too similar to your other personal information." +msgstr "" + +msgid "This password is too common." +msgstr "" + +msgid "Your password can't be a commonly used password." +msgstr "" + +msgid "This password is entirely numeric." +msgstr "" + +msgid "Your password can't be entirely numeric." +msgstr "" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" + +msgid "Logged out" +msgstr "" + +msgid "Password reset" +msgstr "" + +msgid "Password reset sent" +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Password reset unsuccessful" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgid "Password change" +msgstr "" + +msgid "Password change successful" +msgstr "" diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/zh_Hans/LC_MESSAGES/django.po b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/zh_Hans/LC_MESSAGES/django.po new file mode 100644 index 0000000..207a858 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/zh_Hans/LC_MESSAGES/django.po @@ -0,0 +1,295 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# David , 2019 +# ausaki , 2017 +# jamin M , 2019 +# Jannis Leidel , 2011 +# Kevin Sze , 2012 +# Lele Long , 2011,2015 +# Liping Wang , 2016-2017 +# mozillazg , 2016 +# pylemon , 2012-2013 +# hizyn , 2016 +# ced773123cfad7b4e8b79ca80f736af9, 2011 +# Kevin Sze , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-24 13:46+0200\n" +"PO-Revision-Date: 2019-05-26 10:59+0000\n" +"Last-Translator: jamin M \n" +"Language-Team: Chinese (China) (http://www.transifex.com/django/django/" +"language/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Personal info" +msgstr "个人信息" + +msgid "Permissions" +msgstr "权限" + +msgid "Important dates" +msgstr "重要日期" + +#, python-format +msgid "%(name)s object with primary key %(key)r does not exist." +msgstr "具有主键 %(key)r 的对象 %(name)s 不存在。" + +msgid "Password changed successfully." +msgstr "密码修改成功。" + +#, python-format +msgid "Change password: %s" +msgstr "修改密码:%s" + +msgid "Authentication and Authorization" +msgstr "认证和授权" + +msgid "password" +msgstr "密码" + +msgid "last login" +msgstr "上次登录" + +msgid "No password set." +msgstr "密码未设置。" + +msgid "Invalid password format or unknown hashing algorithm." +msgstr "不可用的密码格式或未知的哈希算法。" + +msgid "The two password fields didn't match." +msgstr "两个密码字段不一致。" + +msgid "Password" +msgstr "密码" + +msgid "Password confirmation" +msgstr "密码确认" + +msgid "Enter the same password as before, for verification." +msgstr "为了校验,请输入与上面相同的密码。" + +msgid "" +"Raw passwords are not stored, so there is no way to see this user's " +"password, but you can change the password using this form." +msgstr "" +"由于没有存储明文密码,所以无法查看该用户的密码,但是可以通过这个表单修改密码。" + +#, python-format +msgid "" +"Please enter a correct %(username)s and password. Note that both fields may " +"be case-sensitive." +msgstr "请输入一个正确的 %(username)s 和密码. 注意他们都是大区分大小写的." + +msgid "This account is inactive." +msgstr "该帐号未激活。" + +msgid "Email" +msgstr "电子邮件" + +msgid "New password" +msgstr "新密码" + +msgid "New password confirmation" +msgstr "新密码确认" + +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "你的旧密码不正确。请重新输入。" + +msgid "Old password" +msgstr "旧密码" + +msgid "Password (again)" +msgstr "密码(重复)" + +msgid "algorithm" +msgstr "算法" + +msgid "iterations" +msgstr "迭代次数" + +msgid "salt" +msgstr "盐" + +msgid "hash" +msgstr "哈希" + +msgid "variety" +msgstr "多样性" + +msgid "version" +msgstr "版本" + +msgid "memory cost" +msgstr "内存花销" + +msgid "time cost" +msgstr "时间花销" + +msgid "parallelism" +msgstr "对比" + +msgid "work factor" +msgstr "加密因子" + +msgid "checksum" +msgstr "校验和" + +msgid "name" +msgstr "名称" + +msgid "content type" +msgstr "内容类型" + +msgid "codename" +msgstr "代码名称" + +msgid "permission" +msgstr "权限" + +msgid "permissions" +msgstr "权限" + +msgid "group" +msgstr "组" + +msgid "groups" +msgstr "组" + +msgid "superuser status" +msgstr "超级用户状态" + +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "指明该用户缺省拥有所有权限。" + +msgid "" +"The groups this user belongs to. A user will get all permissions granted to " +"each of their groups." +msgstr "该用户归属的组。一个用户将得到其归属的组的所有权限。" + +msgid "user permissions" +msgstr "用户权限" + +msgid "Specific permissions for this user." +msgstr "这个用户的特定权限。" + +msgid "username" +msgstr "用户名" + +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "必填。150个字符或者更少。包含字母,数字和仅有的@/./+/-/_符号。" + +msgid "A user with that username already exists." +msgstr "已存在一位使用该名字的用户。" + +msgid "first name" +msgstr "名字" + +msgid "last name" +msgstr "姓氏" + +msgid "email address" +msgstr "电子邮件地址" + +msgid "staff status" +msgstr "人员状态" + +msgid "Designates whether the user can log into this admin site." +msgstr "指明用户是否可以登录到这个管理站点。" + +msgid "active" +msgstr "有效" + +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "指明用户是否被认为是活跃的。以反选代替删除帐号。" + +msgid "date joined" +msgstr "加入日期" + +msgid "user" +msgstr "用户" + +msgid "users" +msgstr "用户" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "密码长度太短。密码必须包含至少 %(min_length)d 个字符。" + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "你的密码必须包含至少 %(min_length)d 个字符。" + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "密码跟 %(verbose_name)s 太相似了。" + +msgid "Your password can't be too similar to your other personal information." +msgstr "你的密码不能与你的其他个人信息太相似。" + +msgid "This password is too common." +msgstr "这个密码太常见了。" + +msgid "Your password can't be a commonly used password." +msgstr "你的密码不能是大家都爱用的常见密码。" + +msgid "This password is entirely numeric." +msgstr "密码只包含数字。" + +msgid "Your password can't be entirely numeric." +msgstr "你的密码不能全部为数字。" + +#, python-format +msgid "Password reset on %(site_name)s" +msgstr "重置 %(site_name)s 的密码" + +msgid "" +"Enter a valid username. This value may contain only English letters, " +"numbers, and @/./+/-/_ characters." +msgstr "请输入合法的用户名。只能包含英文字母,数字和@/./+/-/_字符。" + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "请输入合法用户名。只能包含字母,数字和@/./+/-/_ 字符。" + +msgid "Logged out" +msgstr "登出" + +msgid "Password reset" +msgstr "重置密码" + +msgid "Password reset sent" +msgstr "密码重置链接已经发送。" + +msgid "Enter new password" +msgstr "输入新密码" + +msgid "Password reset unsuccessful" +msgstr "密码重置失败" + +msgid "Password reset complete" +msgstr "密码重置完成" + +msgid "Password change" +msgstr "密码更改" + +msgid "Password change successful" +msgstr "密码更改成功" diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/locale/zh_Hant/LC_MESSAGES/django.mo b/venv/lib/python3.7/site-packages/django/contrib/auth/locale/zh_Hant/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d2ed911fd53a6a4c4f13f2b0f8a07aa5705ee107 GIT binary patch literal 6759 zcmb`Jd2Ae49mgNErPP$8r9cZ5UPIH`B)hhAw8^GP(_C$64l8vj1wk0^KJQMlJ7Z>M z<2V#))5P)ms$CK%bz)*WILXF|9Vc#FCwA%z#1SDO5D5N2s##MmML~`y1KMR(FUjWyFp91T^kAb_v&wwr97r}mz&M^ai z4*U)H5%6vBqu@K>x4_%b*#$D+CS2SIGb`ashA3<%Ne5(w4V zk3sUoFF}&?TkvM^4|4ns$v=T4{~sX9A!F0L+d+E11EhWL1xfA$vcDRnc`HHEV-1KO z+loJu_id2IcgTJnBsmF?^lAkWDy&QL2uS<&gZ&?1>@4WV^OFb~AGimEiYx_Uh)seI zf!DyrAUShAummK1_JGfVE#On&n;@pLrFVJrp8#pzb0EoS1<6jYfu#S>K-%xuAgy~- z_WvEEdGCU75xWIJMsn@~Y2JO3OJx7!lC`p50q@5=3&fB0%Kq~p$^8*X@~(lK!QX-V z!23VV*jK<5Nb&tQ@EPz<1oZ-N2T1*gK`ddH|{S!23W0Bz+En zi^0oa0Q?I``jjJ>$sUy;JujDB4U(RZOV&y%a$J*)OFjpZoPF}S6QuQrAC}r_MwaN8RldQ(J1H0FLVXaNC&zeMk9NYPd1^|pwYF&1A7!i$#pM^`*mnk z7pmQ!;vbi{lq-}EbdjEv19VZ2J%UCtfRJ=^v;tg?M%PNTC($a=D4ytoiQHJA`+MmR z7ul!^jbi%CXv@&3em#yx^^vYMXcRjL4Yml4@|bdG0~%dqPl_eFkZ$fpIf+nZYtbm) zR-tV{+lV$FZ7bRnXe-djUvyEOpcC2~G`NO6C_Bp~+5B=%iHQo6>vcOs(Bh4% z72yqr8dHoWzEd>u`Q`YpFnCB8Cf9U}i`}Ye`PpMUZVJPjZ$%W#eI!|2i5fx)HF*BBu~c2-iWcJ3r5oxVw}-8bC|X$X2E{ZRbt4qu^G&u+m}*#4ENtpZw<4

    {AtY;QL?HlQ`Jlh zhT(cW524#4-IQQZk82jJv_7V&QMO*QpqRpUDN!|4FsYx{l2Yi53m#LNcu?0Y1q$jK zPP$$TM^!VzArgztgf9SL_3BE0<$_9I<#ry7C$qaZMWyBgCu-e7{K#hv6AS2-{MsQt1QPv|c4)h$yy2FDhsXg!@)FIln2Zk&#-s z;pIvg{-`K+z}SfCxzF5;2ZO>i>*LY6L!pwfXp_HWxKywF&fE}Ct2oJh#1Uc*@KVXP zUO%#KemMp6b}!lIt}~IIbNk|2sjkIbV>JjMT~ngSmU^AlM1^7s4gqf526e-rfS+GZ z)j^gP3d6kZ{CtaUAz7$m)aj@-^{R-5OgE~LL_rAiK^-Vd8N{|J#Rx)P8Nw|=riE|` zE#xL;t3W4`L(_R9G6M;03X(4q^g*+*^+H~U649i`v5Q98Kt+e*F|Ql)jRNNpg+~lg zzjEGpzc+7{D~N*ZkxFG1^by~QtJvGmtCv=lWE2Hpy=WAMpKr>iVMq~h7IHm!X73O zN-#oo2d7mHDb?GdaCYoq=`fxeQ=D2rQ-fgi+Tc5MRTCj5=oO1sdk9t0WGMEC z40nZ_X3R@AM(+=XT4}g%0+U54fbeyoYTm88A|_%wK9GXCX)(8>0q@pmRNzG%V|f#^ z;wMVUt;tL!YBAGN>gzfFtvGt(nCgB{$qq}!E7Fxtz04gdN;BOKcV8MY*)GLUh1JB6 ztn@*|@ENs}*TYu2!Dl%^=&r8YRI=H9yWcodVrVJ zY_0XJrLP%?@~wjb1AI|c^~1iZ<-SErc=h7Il7|*lEvl-*MBg^COQkJK=T$HARW0UK zO9M+DUQmUrY!giAt3^37qY6|C@Y+3bUjx^+}tE?u9gGGHC@cJ+VTx)P2&6U+FxOcm87f^sntN*sn|OOVeXUMU62sZE z?RM8;XCj%~JLw#3$tF5*Y?_lC&h-x2ljGUmev*NL+>qoO zlIa{CgQ}hjSmyaF&hQDR|0LY^_H+k~;B5?#*{z+qADr+UU0C2+prtc=YOizTq|?{W zGW!Q%zrwgPFl|qFImyE?UZx+G>BLa(Sf6vb&6z%w89f3+kqq)}%M}J)q#}j8%!w-q z8j_n$jUY6yHROiN!qkiI%# zyV;mabmjKGFzegY%ggLw%04_wpQq_p50o0*)nTR?u>zTRpf6S&mx48Um^?N1BB|0f z?4`&11u=V0u6Ib!ipYw&AEfrsFj6Et^CIa0Z_okV>gJq7RqUiR zI5wF%cZ!CksL63BIYHj&=||S(d)-9^V|c}(WRW*KH0<<_<`PHe4!|>+{t@(20=JCA zvYx3BL9;$QJ@d;F1J~lD*?d+}xpO1W6NAu4PI}dVw!>`9Kr!i0-!ppUofT>ia|Q-; zXO6J+6mo1D4m)j+Ud|03w~x0oFJxq0n^opf#t@y%3#B~lgGqa`gQR3ynhm$xh>rB2H$fA%tnsUzc+X*Q6 z%E|QAK2!+%;9#ab;WW3i>_l_s<)g(^kiCf`PA_>$zKDx=Qf6U9s!({Qx|vChvP^3d QDTZ}@&=mzD^YQ@u56#!yO#lD@ literal 0 HcmV?d00001 diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/migrations/0002_alter_permission_name_max_length.py b/venv/lib/python3.7/site-packages/django/contrib/auth/migrations/0002_alter_permission_name_max_length.py new file mode 100644 index 0000000..556c320 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/auth/migrations/0002_alter_permission_name_max_length.py @@ -0,0 +1,16 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('auth', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='permission', + name='name', + field=models.CharField(max_length=255, verbose_name='name'), + ), + ] diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/migrations/0004_alter_user_username_opts.py b/venv/lib/python3.7/site-packages/django/contrib/auth/migrations/0004_alter_user_username_opts.py new file mode 100644 index 0000000..a16083e --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/auth/migrations/0004_alter_user_username_opts.py @@ -0,0 +1,23 @@ +from django.contrib.auth import validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('auth', '0003_alter_user_email_max_length'), + ] + + # No database changes; modifies validators and error_messages (#13147). + operations = [ + migrations.AlterField( + model_name='user', + name='username', + field=models.CharField( + error_messages={'unique': 'A user with that username already exists.'}, max_length=30, + validators=[validators.UnicodeUsernameValidator()], + help_text='Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only.', + unique=True, verbose_name='username' + ), + ), + ] diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/migrations/0005_alter_user_last_login_null.py b/venv/lib/python3.7/site-packages/django/contrib/auth/migrations/0005_alter_user_last_login_null.py new file mode 100644 index 0000000..97cd105 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/auth/migrations/0005_alter_user_last_login_null.py @@ -0,0 +1,16 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('auth', '0004_alter_user_username_opts'), + ] + + operations = [ + migrations.AlterField( + model_name='user', + name='last_login', + field=models.DateTimeField(null=True, verbose_name='last login', blank=True), + ), + ] diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/migrations/0010_alter_group_name_max_length.py b/venv/lib/python3.7/site-packages/django/contrib/auth/migrations/0010_alter_group_name_max_length.py new file mode 100644 index 0000000..67ea061 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/auth/migrations/0010_alter_group_name_max_length.py @@ -0,0 +1,16 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('auth', '0009_alter_user_last_name_max_length'), + ] + + operations = [ + migrations.AlterField( + model_name='group', + name='name', + field=models.CharField(max_length=150, unique=True, verbose_name='name'), + ), + ] diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/migrations/__init__.py b/venv/lib/python3.7/site-packages/django/contrib/auth/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/venv/lib/python3.7/site-packages/django/contrib/auth/password_validation.py b/venv/lib/python3.7/site-packages/django/contrib/auth/password_validation.py new file mode 100644 index 0000000..948ded6 --- /dev/null +++ b/venv/lib/python3.7/site-packages/django/contrib/auth/password_validation.py @@ -0,0 +1,205 @@ +import functools +import gzip +import re +from difflib import SequenceMatcher +from pathlib import Path + +from django.conf import settings +from django.core.exceptions import ( + FieldDoesNotExist, ImproperlyConfigured, ValidationError, +) +from django.utils.functional import lazy +from django.utils.html import format_html, format_html_join +from django.utils.module_loading import import_string +from django.utils.translation import gettext as _, ngettext + + +@functools.lru_cache(maxsize=None) +def get_default_password_validators(): + return get_password_validators(settings.AUTH_PASSWORD_VALIDATORS) + + +def get_password_validators(validator_config): + validators = [] + for validator in validator_config: + try: + klass = import_string(validator['NAME']) + except ImportError: + msg = "The module in NAME could not be imported: %s. Check your AUTH_PASSWORD_VALIDATORS setting." + raise ImproperlyConfigured(msg % validator['NAME']) + validators.append(klass(**validator.get('OPTIONS', {}))) + + return validators + + +def validate_password(password, user=None, password_validators=None): + """ + Validate whether the password meets all validator requirements. + + If the password is valid, return ``None``. + If the password is invalid, raise ValidationError with all error messages. + """ + errors = [] + if password_validators is None: + password_validators = get_default_password_validators() + for validator in password_validators: + try: + validator.validate(password, user) + except ValidationError as error: + errors.append(error) + if errors: + raise ValidationError(errors) + + +def password_changed(password, user=None, password_validators=None): + """ + Inform all validators that have implemented a password_changed() method + that the password has been changed. + """ + if password_validators is None: + password_validators = get_default_password_validators() + for validator in password_validators: + password_changed = getattr(validator, 'password_changed', lambda *a: None) + password_changed(password, user) + + +def password_validators_help_texts(password_validators=None): + """ + Return a list of all help texts of all configured validators. + """ + help_texts = [] + if password_validators is None: + password_validators = get_default_password_validators() + for validator in password_validators: + help_texts.append(validator.get_help_text()) + return help_texts + + +def _password_validators_help_text_html(password_validators=None): + """ + Return an HTML string with all help texts of all configured validators + in an