From 89ee84c73ea359177620e5e7847f108639fc2c00 Mon Sep 17 00:00:00 2001 From: j Date: Fri, 5 Sep 2014 15:43:43 +0000 Subject: [PATCH] update Linux i686 --- Linux_i686/bin/alembic | 10 - Linux_i686/bin/cftp | 15 - Linux_i686/bin/ckeygen | 15 - Linux_i686/bin/conch | 15 - Linux_i686/bin/lore | 16 - Linux_i686/bin/mailmail | 20 - Linux_i686/bin/mako-render | 46 - Linux_i686/bin/manhole | 16 - Linux_i686/bin/pyhtmlizer | 12 - Linux_i686/bin/tap2deb | 16 - Linux_i686/bin/tap2rpm | 19 - Linux_i686/bin/tapconvert | 12 - Linux_i686/bin/tkconch | 15 - Linux_i686/bin/trial | 18 - Linux_i686/bin/twistd | 14 - .../Flask-0.10.1.egg-info/PKG-INFO | 58 - .../Flask-0.10.1.egg-info/SOURCES.txt | 238 - .../Flask-0.10.1.egg-info/installed-files.txt | 148 - .../Flask-0.10.1.egg-info/requires.txt | 3 - .../Flask-0.10.1.egg-info/top_level.txt | 1 - .../Flask_Migrate-1.2.0.egg-info/PKG-INFO | 22 - .../Flask_Migrate-1.2.0.egg-info/SOURCES.txt | 24 - .../installed-files.txt | 14 - .../Flask_Migrate-1.2.0.egg-info/requires.txt | 4 - .../top_level.txt | 1 - .../Flask_SQLAlchemy-1.0.egg-info/PKG-INFO | 30 - .../Flask_SQLAlchemy-1.0.egg-info/SOURCES.txt | 35 - .../installed-files.txt | 11 - .../not-zip-safe | 1 - .../requires.txt | 3 - .../top_level.txt | 1 - .../Flask_Script-2.0.3.egg-info/PKG-INFO | 35 - .../Flask_Script-2.0.3.egg-info/SOURCES.txt | 29 - .../dependency_links.txt | 1 - .../installed-files.txt | 15 - .../Flask_Script-2.0.3.egg-info/not-zip-safe | 1 - .../Flask_Script-2.0.3.egg-info/requires.txt | 1 - .../Flask_Script-2.0.3.egg-info/top_level.txt | 1 - .../Jinja2-2.7.2.egg-info/PKG-INFO | 55 - .../Jinja2-2.7.2.egg-info/SOURCES.txt | 126 - .../dependency_links.txt | 1 - .../Jinja2-2.7.2.egg-info/entry_points.txt | 4 - .../Jinja2-2.7.2.egg-info/installed-files.txt | 92 - .../Jinja2-2.7.2.egg-info/not-zip-safe | 1 - .../Jinja2-2.7.2.egg-info/requires.txt | 4 - .../Jinja2-2.7.2.egg-info/top_level.txt | 1 - .../Mako-0.9.1.egg-info/PKG-INFO | 71 - .../Mako-0.9.1.egg-info/SOURCES.txt | 173 - .../Mako-0.9.1.egg-info/dependency_links.txt | 1 - .../Mako-0.9.1.egg-info/entry_points.txt | 14 - .../Mako-0.9.1.egg-info/installed-files.txt | 55 - .../Mako-0.9.1.egg-info/not-zip-safe | 1 - .../Mako-0.9.1.egg-info/requires.txt | 4 - .../Mako-0.9.1.egg-info/top_level.txt | 1 - .../MarkupSafe-0.23.egg-info/PKG-INFO | 119 - .../MarkupSafe-0.23.egg-info/SOURCES.txt | 17 - .../dependency_links.txt | 1 - .../installed-files.txt | 18 - .../MarkupSafe-0.23.egg-info/not-zip-safe | 1 - .../MarkupSafe-0.23.egg-info/top_level.txt | 1 - .../Twisted-14.0.0.egg-info/PKG-INFO | 16 - .../Twisted-14.0.0.egg-info/SOURCES.txt | 846 --- .../dependency_links.txt | 1 - .../installed-files.txt | 1757 ----- .../Twisted-14.0.0.egg-info/not-zip-safe | 1 - .../Twisted-14.0.0.egg-info/requires.txt | 1 - .../Twisted-14.0.0.egg-info/top_level.txt | 1 - .../Werkzeug-0.9.4.egg-info/PKG-INFO | 72 - .../Werkzeug-0.9.4.egg-info/SOURCES.txt | 289 - .../dependency_links.txt | 1 - .../installed-files.txt | 161 - .../Werkzeug-0.9.4.egg-info/not-zip-safe | 1 - .../Werkzeug-0.9.4.egg-info/top_level.txt | 1 - .../python2.7/site-packages/_cffi_backend.so | Bin 191347 -> 191355 bytes .../alembic-0.6.5.egg-info/PKG-INFO | 96 - .../alembic-0.6.5.egg-info/SOURCES.txt | 123 - .../dependency_links.txt | 1 - .../alembic-0.6.5.egg-info/entry_points.txt | 3 - .../installed-files.txt | 70 - .../alembic-0.6.5.egg-info/not-zip-safe | 1 - .../alembic-0.6.5.egg-info/requires.txt | 2 - .../alembic-0.6.5.egg-info/top_level.txt | 1 - .../site-packages/alembic/__init__.py | 11 - .../alembic/autogenerate/__init__.py | 1 - .../site-packages/alembic/autogenerate/api.py | 301 - .../alembic/autogenerate/compare.py | 490 -- .../alembic/autogenerate/render.py | 457 -- .../site-packages/alembic/command.py | 266 - .../python2.7/site-packages/alembic/compat.py | 130 - .../python2.7/site-packages/alembic/config.py | 301 - .../site-packages/alembic/context.py | 6 - .../site-packages/alembic/ddl/__init__.py | 2 - .../site-packages/alembic/ddl/base.py | 161 - .../site-packages/alembic/ddl/impl.py | 279 - .../site-packages/alembic/ddl/mssql.py | 217 - .../site-packages/alembic/ddl/mysql.py | 212 - .../site-packages/alembic/ddl/oracle.py | 77 - .../site-packages/alembic/ddl/postgresql.py | 43 - .../site-packages/alembic/ddl/sqlite.py | 73 - .../site-packages/alembic/environment.py | 791 -- .../site-packages/alembic/migration.py | 352 - .../lib/python2.7/site-packages/alembic/op.py | 6 - .../site-packages/alembic/operations.py | 1037 --- .../python2.7/site-packages/alembic/script.py | 513 -- .../alembic/templates/generic/README | 1 - .../templates/generic/alembic.ini.mako | 59 - .../alembic/templates/generic/env.py | 71 - .../alembic/templates/generic/script.py.mako | 22 - .../alembic/templates/multidb/README | 1 - .../templates/multidb/alembic.ini.mako | 65 - .../alembic/templates/multidb/env.py | 130 - .../alembic/templates/multidb/script.py.mako | 43 - .../alembic/templates/pylons/README | 1 - .../alembic/templates/pylons/alembic.ini.mako | 25 - .../alembic/templates/pylons/env.py | 86 - .../alembic/templates/pylons/script.py.mako | 22 - .../python2.7/site-packages/alembic/util.py | 348 - .../cffi-0.8.2.egg-info/dependency_links.txt | 1 - .../cffi-0.8.2.egg-info/not-zip-safe | 1 - .../PKG-INFO | 2 +- .../SOURCES.txt | 22 +- .../dependency_links.txt | 0 .../installed-files.txt | 0 .../not-zip-safe | 0 .../requires.txt | 0 .../top_level.txt | 0 .../python2.7/site-packages/cffi/__init__.py | 4 +- .../lib/python2.7/site-packages/cffi/api.py | 7 +- .../python2.7/site-packages/cffi/cparser.py | 113 +- .../site-packages/cffi/ffiplatform.py | 1 + .../site-packages/cffi/vengine_cpy.py | 169 +- .../site-packages/cffi/vengine_gen.py | 60 +- .../dependency_links.txt | 1 - .../cryptography-0.4.egg-info/not-zip-safe | 1 - .../PKG-INFO | 6 +- .../SOURCES.txt | 30 +- .../dependency_links.txt | 0 .../installed-files.txt | 40 +- .../not-zip-safe | 0 .../requires.txt | 0 .../top_level.txt | 2 +- .../_Cryptography_cffi_444d7397xa22f8491.so | Bin 1242449 -> 0 bytes .../_Cryptography_cffi_4ed9e37dx4000d087.so | Bin 0 -> 1339223 bytes .../_Cryptography_cffi_684bb40axf342507b.so | Bin 19606 -> 23858 bytes .../_Cryptography_cffi_8f86901cxc1767c5a.so | Bin 20180 -> 20368 bytes .../site-packages/cryptography/__about__.py | 4 +- .../site-packages/cryptography/exceptions.py | 2 + .../site-packages/cryptography/fernet.py | 14 +- .../hazmat/backends/commoncrypto/backend.py | 290 +- .../hazmat/backends/commoncrypto/ciphers.py | 191 + .../hazmat/backends/commoncrypto/hashes.py | 62 + .../hazmat/backends/commoncrypto/hmac.py | 58 + .../hazmat/backends/interfaces.py | 99 +- .../hazmat/backends/multibackend.py | 160 +- .../hazmat/backends/openssl/backend.py | 1636 ++--- .../hazmat/backends/openssl/ciphers.py | 219 + .../hazmat/backends/openssl/cmac.py | 80 + .../hazmat/backends/openssl/dsa.py | 190 + .../hazmat/backends/openssl/ec.py | 191 + .../hazmat/backends/openssl/hashes.py | 69 + .../hazmat/backends/openssl/hmac.py | 80 + .../hazmat/backends/openssl/rsa.py | 603 ++ .../hazmat/bindings/commoncrypto/binding.py | 7 + .../hazmat/bindings/commoncrypto/cf.py | 114 + .../bindings/commoncrypto/common_cryptor.py | 2 +- .../hazmat/bindings/commoncrypto/secimport.py | 95 + .../hazmat/bindings/commoncrypto/secitem.py | 38 + .../hazmat/bindings/commoncrypto/seckey.py | 35 + .../bindings/commoncrypto/seckeychain.py | 36 + .../bindings/commoncrypto/sectransform.py | 79 + .../hazmat/bindings/openssl/aes.py | 10 +- .../hazmat/bindings/openssl/asn1.py | 3 + .../hazmat/bindings/openssl/binding.py | 19 +- .../hazmat/bindings/openssl/cms.py | 4 +- .../hazmat/bindings/openssl/conf.py | 2 + .../hazmat/bindings/openssl/dh.py | 8 +- .../hazmat/bindings/openssl/dsa.py | 10 +- .../hazmat/bindings/openssl/ec.py | 11 + .../hazmat/bindings/openssl/err.py | 25 +- .../hazmat/bindings/openssl/evp.py | 3 +- .../hazmat/bindings/openssl/nid.py | 3 +- .../hazmat/bindings/openssl/opensslv.py | 2 + .../hazmat/bindings/openssl/pem.py | 1 + .../hazmat/bindings/openssl/rsa.py | 2 +- .../hazmat/bindings/openssl/ssl.py | 95 +- .../hazmat/bindings/openssl/x509.py | 14 +- .../hazmat/bindings/openssl/x509_vfy.py | 336 + .../hazmat/bindings/openssl/x509v3.py | 2 + .../hazmat/primitives/asymmetric/dsa.py | 212 +- .../hazmat/primitives/asymmetric/ec.py | 255 + .../hazmat/primitives/asymmetric/padding.py | 16 +- .../hazmat/primitives/asymmetric/rsa.py | 253 +- .../hazmat/primitives/ciphers/algorithms.py | 2 +- .../hazmat/primitives/ciphers/base.py | 24 +- .../hazmat/primitives/ciphers/modes.py | 47 +- .../cryptography/hazmat/primitives/cmac.py | 20 +- .../hazmat/primitives/constant_time.py | 20 +- .../cryptography/hazmat/primitives/hashes.py | 14 +- .../cryptography/hazmat/primitives/hmac.py | 18 +- .../hazmat/primitives/interfaces.py | 241 +- .../hazmat/primitives/kdf/hkdf.py | 72 +- .../hazmat/primitives/kdf/pbkdf2.py | 22 +- .../cryptography/hazmat/primitives/padding.py | 24 +- .../hazmat/primitives/serialization.py | 26 + .../hazmat/primitives/twofactor/hotp.py | 12 +- .../hazmat/primitives/twofactor/totp.py | 4 +- .../site-packages/cryptography/utils.py | 3 +- .../python2.7/site-packages/flask/__init__.py | 50 - .../python2.7/site-packages/flask/_compat.py | 73 - .../lib/python2.7/site-packages/flask/app.py | 1842 ----- .../site-packages/flask/blueprints.py | 401 -- .../python2.7/site-packages/flask/config.py | 168 - .../lib/python2.7/site-packages/flask/ctx.py | 394 - .../site-packages/flask/debughelpers.py | 87 - .../site-packages/flask/ext/__init__.py | 29 - .../python2.7/site-packages/flask/exthook.py | 120 - .../python2.7/site-packages/flask/globals.py | 44 - .../python2.7/site-packages/flask/helpers.py | 849 --- .../lib/python2.7/site-packages/flask/json.py | 243 - .../python2.7/site-packages/flask/logging.py | 45 - .../python2.7/site-packages/flask/module.py | 42 - .../python2.7/site-packages/flask/sessions.py | 332 - .../python2.7/site-packages/flask/signals.py | 55 - .../site-packages/flask/templating.py | 143 - .../python2.7/site-packages/flask/testing.py | 124 - .../site-packages/flask/testsuite/__init__.py | 246 - .../site-packages/flask/testsuite/appctx.py | 101 - .../site-packages/flask/testsuite/basic.py | 1254 ---- .../flask/testsuite/blueprints.py | 790 -- .../site-packages/flask/testsuite/config.py | 299 - .../flask/testsuite/deprecations.py | 24 - .../site-packages/flask/testsuite/examples.py | 38 - .../site-packages/flask/testsuite/ext.py | 134 - .../site-packages/flask/testsuite/helpers.py | 593 -- .../flask/testsuite/regression.py | 116 - .../site-packages/flask/testsuite/reqctx.py | 185 - .../site-packages/flask/testsuite/signals.py | 153 - .../flask/testsuite/static/index.html | 1 - .../flask/testsuite/subclassing.py | 46 - .../flask/testsuite/templates/_macro.html | 1 - .../testsuite/templates/context_template.html | 1 - .../templates/escaping_template.html | 6 - .../flask/testsuite/templates/mail.txt | 1 - .../testsuite/templates/nested/nested.txt | 1 - .../testsuite/templates/simple_template.html | 1 - .../testsuite/templates/template_filter.html | 1 - .../testsuite/templates/template_test.html | 3 - .../flask/testsuite/templating.py | 302 - .../test_apps/blueprintapp/__init__.py | 7 - .../test_apps/blueprintapp/apps/__init__.py | 0 .../blueprintapp/apps/admin/__init__.py | 15 - .../apps/admin/static/css/test.css | 1 - .../blueprintapp/apps/admin/static/test.txt | 1 - .../apps/admin/templates/admin/index.html | 1 - .../blueprintapp/apps/frontend/__init__.py | 8 - .../frontend/templates/frontend/index.html | 1 - .../testsuite/test_apps/config_module_app.py | 4 - .../test_apps/config_package_app/__init__.py | 4 - .../test_apps/flask_broken/__init__.py | 2 - .../testsuite/test_apps/flask_broken/b.py | 0 .../flask_newext_package/__init__.py | 1 - .../flask_newext_package/submodule.py | 2 - .../test_apps/flask_newext_simple.py | 1 - .../testsuite/test_apps/flaskext/__init__.py | 0 .../flaskext/oldext_package/__init__.py | 1 - .../flaskext/oldext_package/submodule.py | 2 - .../test_apps/flaskext/oldext_simple.py | 1 - .../flask/testsuite/test_apps/importerror.py | 2 - .../lib/python2.5/site-packages/SiteEgg.egg | Bin 1218 -> 0 bytes .../lib/python2.5/site-packages/site_app.py | 3 - .../site-packages/site_package/__init__.py | 3 - .../flask/testsuite/test_apps/main_app.py | 4 - .../testsuite/test_apps/moduleapp/__init__.py | 7 - .../test_apps/moduleapp/apps/__init__.py | 0 .../moduleapp/apps/admin/__init__.py | 14 - .../moduleapp/apps/admin/static/css/test.css | 1 - .../moduleapp/apps/admin/static/test.txt | 1 - .../moduleapp/apps/admin/templates/index.html | 1 - .../moduleapp/apps/frontend/__init__.py | 9 - .../apps/frontend/templates/index.html | 1 - .../path/installed_package/__init__.py | 3 - .../test_apps/subdomaintestmodule/__init__.py | 4 - .../subdomaintestmodule/static/hello.txt | 1 - .../site-packages/flask/testsuite/testing.py | 242 - .../site-packages/flask/testsuite/views.py | 169 - .../python2.7/site-packages/flask/views.py | 149 - .../python2.7/site-packages/flask/wrappers.py | 184 - .../site-packages/flask_migrate/__init__.py | 113 - .../flask_migrate/templates/flask/README | 1 - .../templates/flask/alembic.ini.mako | 45 - .../flask_migrate/templates/flask/env.py | 73 - .../templates/flask/script.py.mako | 22 - .../site-packages/flask_script/__init__.py | 416 -- .../site-packages/flask_script/_compat.py | 117 - .../site-packages/flask_script/cli.py | 97 - .../site-packages/flask_script/commands.py | 517 -- .../flask_sqlalchemy/__init__.py | 885 --- .../site-packages/flask_sqlalchemy/_compat.py | 37 - .../itsdangerous-0.24.egg-info/PKG-INFO | 13 - .../itsdangerous-0.24.egg-info/SOURCES.txt | 27 - .../dependency_links.txt | 1 - .../installed-files.txt | 8 - .../itsdangerous-0.24.egg-info/not-zip-safe | 1 - .../itsdangerous-0.24.egg-info/top_level.txt | 1 - .../python2.7/site-packages/itsdangerous.py | 872 --- .../site-packages/jinja2/__init__.py | 69 - .../python2.7/site-packages/jinja2/_compat.py | 150 - .../site-packages/jinja2/_stringdefs.py | 132 - .../python2.7/site-packages/jinja2/bccache.py | 337 - .../site-packages/jinja2/compiler.py | 1640 ----- .../site-packages/jinja2/constants.py | 32 - .../python2.7/site-packages/jinja2/debug.py | 337 - .../site-packages/jinja2/defaults.py | 43 - .../site-packages/jinja2/environment.py | 1191 --- .../site-packages/jinja2/exceptions.py | 146 - .../lib/python2.7/site-packages/jinja2/ext.py | 636 -- .../python2.7/site-packages/jinja2/filters.py | 987 --- .../python2.7/site-packages/jinja2/lexer.py | 733 -- .../python2.7/site-packages/jinja2/loaders.py | 471 -- .../python2.7/site-packages/jinja2/meta.py | 103 - .../python2.7/site-packages/jinja2/nodes.py | 914 --- .../site-packages/jinja2/optimizer.py | 68 - .../python2.7/site-packages/jinja2/parser.py | 895 --- .../python2.7/site-packages/jinja2/runtime.py | 581 -- .../python2.7/site-packages/jinja2/sandbox.py | 368 - .../python2.7/site-packages/jinja2/tests.py | 149 - .../jinja2/testsuite/__init__.py | 156 - .../site-packages/jinja2/testsuite/api.py | 261 - .../jinja2/testsuite/bytecode_cache.py | 37 - .../jinja2/testsuite/core_tags.py | 305 - .../site-packages/jinja2/testsuite/debug.py | 58 - .../jinja2/testsuite/doctests.py | 29 - .../site-packages/jinja2/testsuite/ext.py | 459 -- .../site-packages/jinja2/testsuite/filters.py | 515 -- .../site-packages/jinja2/testsuite/imports.py | 141 - .../jinja2/testsuite/inheritance.py | 250 - .../jinja2/testsuite/lexnparse.py | 593 -- .../site-packages/jinja2/testsuite/loader.py | 226 - .../jinja2/testsuite/regression.py | 279 - .../jinja2/testsuite/res/__init__.py | 0 .../testsuite/res/templates/broken.html | 3 - .../testsuite/res/templates/foo/test.html | 1 - .../testsuite/res/templates/syntaxerror.html | 4 - .../jinja2/testsuite/res/templates/test.html | 1 - .../jinja2/testsuite/security.py | 166 - .../site-packages/jinja2/testsuite/tests.py | 93 - .../site-packages/jinja2/testsuite/utils.py | 82 - .../python2.7/site-packages/jinja2/utils.py | 520 -- .../python2.7/site-packages/jinja2/visitor.py | 87 - .../python2.7/site-packages/mako/__init__.py | 9 - .../python2.7/site-packages/mako/_ast_util.py | 845 --- .../lib/python2.7/site-packages/mako/ast.py | 152 - .../lib/python2.7/site-packages/mako/cache.py | 236 - .../python2.7/site-packages/mako/codegen.py | 1222 ---- .../python2.7/site-packages/mako/compat.py | 167 - .../site-packages/mako/exceptions.py | 374 - .../site-packages/mako/ext/__init__.py | 0 .../site-packages/mako/ext/autohandler.py | 65 - .../site-packages/mako/ext/babelplugin.py | 126 - .../site-packages/mako/ext/beaker_cache.py | 70 - .../site-packages/mako/ext/preprocessors.py | 20 - .../site-packages/mako/ext/pygmentplugin.py | 122 - .../site-packages/mako/ext/turbogears.py | 58 - .../python2.7/site-packages/mako/filters.py | 196 - .../lib/python2.7/site-packages/mako/lexer.py | 441 -- .../python2.7/site-packages/mako/lookup.py | 359 - .../python2.7/site-packages/mako/parsetree.py | 594 -- .../lib/python2.7/site-packages/mako/pygen.py | 282 - .../python2.7/site-packages/mako/pyparser.py | 572 -- .../python2.7/site-packages/mako/runtime.py | 882 --- .../python2.7/site-packages/mako/template.py | 686 -- .../lib/python2.7/site-packages/mako/util.py | 365 - .../site-packages/markupsafe/__init__.py | 298 - .../site-packages/markupsafe/_compat.py | 26 - .../site-packages/markupsafe/_constants.py | 267 - .../site-packages/markupsafe/_native.py | 46 - .../site-packages/markupsafe/_speedups.c | 239 - .../site-packages/markupsafe/_speedups.so | Bin 23651 -> 0 bytes .../site-packages/markupsafe/tests.py | 179 - .../six-1.6.1.egg-info/dependency_links.txt | 1 - .../PKG-INFO | 2 +- .../SOURCES.txt | 0 .../dependency_links.txt | 0 .../installed-files.txt | 0 .../top_level.txt | 0 Linux_i686/lib/python2.7/site-packages/six.py | 221 +- .../site-packages/twisted/__init__.py | 71 - .../site-packages/twisted/_version.py | 11 - .../twisted/application/__init__.py | 7 - .../site-packages/twisted/application/app.py | 664 -- .../twisted/application/internet.py | 405 -- .../twisted/application/reactors.py | 85 - .../twisted/application/service.py | 413 -- .../twisted/application/strports.py | 103 - .../twisted/application/test/__init__.py | 6 - .../twisted/application/test/test_internet.py | 403 -- .../site-packages/twisted/conch/__init__.py | 18 - .../site-packages/twisted/conch/_version.py | 11 - .../site-packages/twisted/conch/avatar.py | 37 - .../site-packages/twisted/conch/checkers.py | 307 - .../twisted/conch/client/__init__.py | 9 - .../twisted/conch/client/agent.py | 73 - .../twisted/conch/client/connect.py | 21 - .../twisted/conch/client/default.py | 260 - .../twisted/conch/client/direct.py | 107 - .../twisted/conch/client/knownhosts.py | 624 -- .../twisted/conch/client/options.py | 96 - .../site-packages/twisted/conch/endpoints.py | 832 --- .../site-packages/twisted/conch/error.py | 102 - .../twisted/conch/insults/__init__.py | 16 - .../twisted/conch/insults/client.py | 138 - .../twisted/conch/insults/colors.py | 29 - .../twisted/conch/insults/helper.py | 463 -- .../twisted/conch/insults/insults.py | 1087 --- .../twisted/conch/insults/text.py | 175 - .../twisted/conch/insults/window.py | 868 --- .../site-packages/twisted/conch/interfaces.py | 408 -- .../site-packages/twisted/conch/ls.py | 75 - .../site-packages/twisted/conch/manhole.py | 340 - .../twisted/conch/manhole_ssh.py | 146 - .../twisted/conch/manhole_tap.py | 124 - .../site-packages/twisted/conch/mixin.py | 49 - .../twisted/conch/openssh_compat/__init__.py | 11 - .../twisted/conch/openssh_compat/factory.py | 73 - .../twisted/conch/openssh_compat/primes.py | 26 - .../site-packages/twisted/conch/recvline.py | 329 - .../twisted/conch/scripts/__init__.py | 1 - .../twisted/conch/scripts/cftp.py | 832 --- .../twisted/conch/scripts/ckeygen.py | 226 - .../twisted/conch/scripts/conch.py | 512 -- .../twisted/conch/scripts/tkconch.py | 572 -- .../twisted/conch/ssh/__init__.py | 10 - .../twisted/conch/ssh/address.py | 38 - .../site-packages/twisted/conch/ssh/agent.py | 294 - .../twisted/conch/ssh/channel.py | 281 - .../site-packages/twisted/conch/ssh/common.py | 117 - .../twisted/conch/ssh/connection.py | 636 -- .../twisted/conch/ssh/factory.py | 120 - .../twisted/conch/ssh/filetransfer.py | 934 --- .../twisted/conch/ssh/forwarding.py | 181 - .../site-packages/twisted/conch/ssh/keys.py | 857 --- .../twisted/conch/ssh/service.py | 48 - .../twisted/conch/ssh/session.py | 348 - .../site-packages/twisted/conch/ssh/sexpy.py | 42 - .../twisted/conch/ssh/transport.py | 1639 ----- .../twisted/conch/ssh/userauth.py | 838 --- .../site-packages/twisted/conch/stdio.py | 95 - .../site-packages/twisted/conch/tap.py | 92 - .../site-packages/twisted/conch/telnet.py | 1086 --- .../twisted/conch/test/__init__.py | 1 - .../twisted/conch/test/keydata.py | 208 - .../twisted/conch/test/test_address.py | 49 - .../twisted/conch/test/test_agent.py | 399 -- .../twisted/conch/test/test_cftp.py | 992 --- .../twisted/conch/test/test_channel.py | 279 - .../twisted/conch/test/test_checkers.py | 603 -- .../twisted/conch/test/test_ckeygen.py | 340 - .../twisted/conch/test/test_conch.py | 564 -- .../twisted/conch/test/test_connection.py | 730 -- .../twisted/conch/test/test_default.py | 171 - .../twisted/conch/test/test_endpoints.py | 1492 ---- .../twisted/conch/test/test_filetransfer.py | 771 -- .../twisted/conch/test/test_helper.py | 614 -- .../twisted/conch/test/test_insults.py | 496 -- .../twisted/conch/test/test_keys.py | 644 -- .../twisted/conch/test/test_knownhosts.py | 1262 ---- .../twisted/conch/test/test_manhole.py | 372 - .../twisted/conch/test/test_mixin.py | 47 - .../twisted/conch/test/test_openssh_compat.py | 101 - .../twisted/conch/test/test_recvline.py | 706 -- .../twisted/conch/test/test_scripts.py | 82 - .../twisted/conch/test/test_session.py | 1254 ---- .../twisted/conch/test/test_ssh.py | 995 --- .../twisted/conch/test/test_tap.py | 183 - .../twisted/conch/test/test_telnet.py | 767 -- .../twisted/conch/test/test_text.py | 161 - .../twisted/conch/test/test_transport.py | 2195 ------ .../twisted/conch/test/test_userauth.py | 1036 --- .../twisted/conch/test/test_window.py | 67 - .../site-packages/twisted/conch/topfiles/NEWS | 506 -- .../twisted/conch/topfiles/README | 11 - .../site-packages/twisted/conch/ttymodes.py | 121 - .../twisted/conch/ui/__init__.py | 11 - .../site-packages/twisted/conch/ui/ansi.py | 240 - .../site-packages/twisted/conch/ui/tkvt100.py | 197 - .../site-packages/twisted/conch/unix.py | 457 -- .../site-packages/twisted/copyright.py | 41 - .../site-packages/twisted/cred/__init__.py | 13 - .../site-packages/twisted/cred/_digest.py | 129 - .../site-packages/twisted/cred/checkers.py | 268 - .../site-packages/twisted/cred/credentials.py | 493 -- .../site-packages/twisted/cred/error.py | 41 - .../site-packages/twisted/cred/pamauth.py | 79 - .../site-packages/twisted/cred/portal.py | 121 - .../site-packages/twisted/cred/strcred.py | 270 - .../twisted/enterprise/__init__.py | 9 - .../twisted/enterprise/adbapi.py | 483 -- .../twisted/internet/__init__.py | 12 - .../twisted/internet/_baseprocess.py | 65 - .../twisted/internet/_dumbwin32proc.py | 388 - .../twisted/internet/_glibbase.py | 390 - .../site-packages/twisted/internet/_newtls.py | 271 - .../twisted/internet/_pollingfile.py | 300 - .../twisted/internet/_posixserialport.py | 74 - .../twisted/internet/_posixstdio.py | 167 - .../twisted/internet/_signals.py | 68 - .../site-packages/twisted/internet/_ssl.py | 32 - .../twisted/internet/_sslverify.py | 1701 ----- .../twisted/internet/_threadedselect.py | 361 - .../twisted/internet/_win32serialport.py | 126 - .../twisted/internet/_win32stdio.py | 125 - .../twisted/internet/abstract.py | 535 -- .../site-packages/twisted/internet/address.py | 181 - .../site-packages/twisted/internet/base.py | 1213 ---- .../twisted/internet/cfreactor.py | 501 -- .../site-packages/twisted/internet/default.py | 56 - .../site-packages/twisted/internet/defer.py | 1623 ----- .../twisted/internet/endpoints.py | 1792 ----- .../twisted/internet/epollreactor.py | 410 -- .../site-packages/twisted/internet/error.py | 498 -- .../site-packages/twisted/internet/fdesc.py | 118 - .../twisted/internet/gireactor.py | 188 - .../twisted/internet/glib2reactor.py | 44 - .../twisted/internet/gtk2reactor.py | 119 - .../twisted/internet/gtk3reactor.py | 80 - .../twisted/internet/gtkreactor.py | 250 - .../site-packages/twisted/internet/inotify.py | 405 -- .../twisted/internet/interfaces.py | 2693 ------- .../twisted/internet/iocpreactor/__init__.py | 10 - .../twisted/internet/iocpreactor/abstract.py | 400 -- .../twisted/internet/iocpreactor/build.bat | 4 - .../twisted/internet/iocpreactor/const.py | 26 - .../internet/iocpreactor/interfaces.py | 47 - .../iocpreactor/iocpsupport/acceptex.pxi | 46 - .../iocpreactor/iocpsupport/connectex.pxi | 47 - .../iocpreactor/iocpsupport/iocpsupport.c | 6376 ----------------- .../iocpreactor/iocpsupport/iocpsupport.pyx | 312 - .../iocpsupport/winsock_pointers.c | 62 - .../iocpsupport/winsock_pointers.h | 51 - .../iocpreactor/iocpsupport/wsarecv.pxi | 76 - .../iocpreactor/iocpsupport/wsasend.pxi | 30 - .../twisted/internet/iocpreactor/notes.txt | 24 - .../twisted/internet/iocpreactor/reactor.py | 273 - .../twisted/internet/iocpreactor/setup.py | 23 - .../twisted/internet/iocpreactor/tcp.py | 578 -- .../twisted/internet/iocpreactor/udp.py | 433 -- .../twisted/internet/kqreactor.py | 303 - .../site-packages/twisted/internet/main.py | 37 - .../twisted/internet/pollreactor.py | 189 - .../twisted/internet/posixbase.py | 640 -- .../site-packages/twisted/internet/process.py | 1072 --- .../twisted/internet/protocol.py | 848 --- .../twisted/internet/pyuisupport.py | 37 - .../twisted/internet/qtreactor.py | 19 - .../site-packages/twisted/internet/reactor.py | 39 - .../twisted/internet/selectreactor.py | 200 - .../twisted/internet/serialport.py | 87 - .../site-packages/twisted/internet/ssl.py | 243 - .../site-packages/twisted/internet/stdio.py | 35 - .../site-packages/twisted/internet/task.py | 914 --- .../site-packages/twisted/internet/tcp.py | 1182 --- .../twisted/internet/test/__init__.py | 6 - .../twisted/internet/test/_posixifaces.py | 177 - .../twisted/internet/test/_win32ifaces.py | 119 - .../twisted/internet/test/connectionmixins.py | 606 -- .../twisted/internet/test/fake_CAs/chain.pem | 37 - .../internet/test/fake_CAs/not-a-certificate | 1 - .../twisted/internet/test/fake_CAs/thing1.pem | 26 - .../test/fake_CAs/thing2-duplicate.pem | 26 - .../twisted/internet/test/fake_CAs/thing2.pem | 26 - .../twisted/internet/test/fakeendpoint.py | 75 - .../twisted/internet/test/modulehelpers.py | 67 - .../test/process_gireactornocompat.py | 22 - .../twisted/internet/test/process_helper.py | 33 - .../twisted/internet/test/reactormixins.py | 317 - .../twisted/internet/test/test_abstract.py | 58 - .../twisted/internet/test/test_address.py | 344 - .../twisted/internet/test/test_base.py | 272 - .../twisted/internet/test/test_baseprocess.py | 73 - .../twisted/internet/test/test_core.py | 333 - .../twisted/internet/test/test_default.py | 120 - .../twisted/internet/test/test_endpoints.py | 3225 --------- .../internet/test/test_epollreactor.py | 248 - .../twisted/internet/test/test_fdset.py | 426 -- .../internet/test/test_filedescriptor.py | 99 - .../twisted/internet/test/test_gireactor.py | 251 - .../twisted/internet/test/test_glibbase.py | 68 - .../twisted/internet/test/test_gtkreactor.py | 95 - .../twisted/internet/test/test_inlinecb.py | 90 - .../twisted/internet/test/test_inotify.py | 504 -- .../twisted/internet/test/test_iocp.py | 150 - .../twisted/internet/test/test_main.py | 50 - .../twisted/internet/test/test_newtls.py | 197 - .../twisted/internet/test/test_pollingfile.py | 46 - .../twisted/internet/test/test_posixbase.py | 320 - .../internet/test/test_posixprocess.py | 340 - .../twisted/internet/test/test_process.py | 791 -- .../twisted/internet/test/test_protocol.py | 430 -- .../twisted/internet/test/test_qtreactor.py | 35 - .../twisted/internet/test/test_serialport.py | 72 - .../twisted/internet/test/test_sigchld.py | 125 - .../twisted/internet/test/test_socket.py | 256 - .../twisted/internet/test/test_stdio.py | 195 - .../twisted/internet/test/test_tcp.py | 2465 ------- .../twisted/internet/test/test_threads.py | 220 - .../twisted/internet/test/test_time.py | 110 - .../twisted/internet/test/test_tls.py | 387 - .../twisted/internet/test/test_udp.py | 456 -- .../internet/test/test_udp_internals.py | 167 - .../twisted/internet/test/test_unix.py | 600 -- .../twisted/internet/test/test_win32events.py | 200 - .../site-packages/twisted/internet/threads.py | 127 - .../twisted/internet/tksupport.py | 75 - .../site-packages/twisted/internet/udp.py | 498 -- .../site-packages/twisted/internet/unix.py | 518 -- .../site-packages/twisted/internet/utils.py | 235 - .../twisted/internet/win32eventreactor.py | 430 -- .../twisted/internet/wxreactor.py | 184 - .../twisted/internet/wxsupport.py | 61 - .../site-packages/twisted/lore/__init__.py | 24 - .../site-packages/twisted/lore/_version.py | 11 - .../site-packages/twisted/lore/default.py | 56 - .../site-packages/twisted/lore/docbook.py | 68 - .../site-packages/twisted/lore/htmlbook.py | 49 - .../site-packages/twisted/lore/indexer.py | 53 - .../site-packages/twisted/lore/latex.py | 482 -- .../site-packages/twisted/lore/lint.py | 213 - .../site-packages/twisted/lore/lmath.py | 85 - .../site-packages/twisted/lore/man2lore.py | 295 - .../site-packages/twisted/lore/numberer.py | 36 - .../site-packages/twisted/lore/process.py | 120 - .../twisted/lore/scripts/__init__.py | 1 - .../twisted/lore/scripts/lore.py | 155 - .../site-packages/twisted/lore/slides.py | 370 - .../site-packages/twisted/lore/template.mgp | 24 - .../twisted/lore/test/__init__.py | 1 - .../lore/test/lore_index_file_out.html | 2 - .../test/lore_index_file_out_multiple.html | 5 - .../test/lore_index_file_unnumbered_out.html | 2 - .../twisted/lore/test/lore_index_test.xhtml | 21 - .../twisted/lore/test/lore_index_test2.xhtml | 22 - .../lore/test/lore_numbering_test_out.html | 2 - .../lore/test/lore_numbering_test_out2.html | 2 - .../twisted/lore/test/simple.html | 9 - .../twisted/lore/test/simple3.html | 9 - .../twisted/lore/test/simple4.html | 9 - .../twisted/lore/test/template.tpl | 13 - .../twisted/lore/test/test_docbook.py | 35 - .../twisted/lore/test/test_latex.py | 180 - .../twisted/lore/test/test_lint.py | 153 - .../twisted/lore/test/test_lmath.py | 72 - .../twisted/lore/test/test_lore.py | 1219 ---- .../twisted/lore/test/test_man2lore.py | 169 - .../twisted/lore/test/test_scripts.py | 27 - .../twisted/lore/test/test_slides.py | 153 - .../twisted/lore/test/test_texi.py | 88 - .../site-packages/twisted/lore/texi.py | 115 - .../site-packages/twisted/lore/topfiles/NEWS | 203 - .../twisted/lore/topfiles/README | 3 - .../site-packages/twisted/lore/tree.py | 1161 --- .../site-packages/twisted/lore/xhtml-lat1.ent | 196 - .../twisted/lore/xhtml-special.ent | 80 - .../twisted/lore/xhtml-symbol.ent | 237 - .../twisted/lore/xhtml1-strict.dtd | 978 --- .../twisted/lore/xhtml1-transitional.dtd | 1201 ---- .../site-packages/twisted/mail/__init__.py | 15 - .../site-packages/twisted/mail/_version.py | 11 - .../site-packages/twisted/mail/alias.py | 814 --- .../site-packages/twisted/mail/bounce.py | 86 - .../site-packages/twisted/mail/imap4.py | 6257 ---------------- .../site-packages/twisted/mail/mail.py | 819 --- .../site-packages/twisted/mail/maildir.py | 942 --- .../site-packages/twisted/mail/pb.py | 115 - .../site-packages/twisted/mail/pop3.py | 1880 ----- .../site-packages/twisted/mail/pop3client.py | 1320 ---- .../site-packages/twisted/mail/protocols.py | 505 -- .../site-packages/twisted/mail/relay.py | 185 - .../twisted/mail/relaymanager.py | 1098 --- .../twisted/mail/scripts/__init__.py | 1 - .../twisted/mail/scripts/mailmail.py | 366 - .../site-packages/twisted/mail/smtp.py | 2051 ------ .../site-packages/twisted/mail/tap.py | 467 -- .../twisted/mail/test/__init__.py | 1 - .../twisted/mail/test/pop3testserver.py | 314 - .../twisted/mail/test/rfc822.message | 86 - .../twisted/mail/test/server.pem | 36 - .../twisted/mail/test/test_bounce.py | 32 - .../twisted/mail/test/test_imap.py | 5024 ------------- .../twisted/mail/test/test_mail.py | 2213 ------ .../twisted/mail/test/test_mailmail.py | 75 - .../twisted/mail/test/test_options.py | 247 - .../twisted/mail/test/test_pop3.py | 1071 --- .../twisted/mail/test/test_pop3client.py | 620 -- .../twisted/mail/test/test_scripts.py | 18 - .../twisted/mail/test/test_smtp.py | 1789 ----- .../site-packages/twisted/mail/topfiles/NEWS | 411 -- .../twisted/mail/topfiles/README | 6 - .../site-packages/twisted/manhole/__init__.py | 8 - .../twisted/manhole/_inspectro.py | 369 - .../site-packages/twisted/manhole/explorer.py | 654 -- .../twisted/manhole/gladereactor.glade | 342 - .../twisted/manhole/gladereactor.py | 219 - .../twisted/manhole/inspectro.glade | 510 -- .../twisted/manhole/logview.glade | 39 - .../site-packages/twisted/manhole/service.py | 395 - .../site-packages/twisted/manhole/telnet.py | 115 - .../twisted/manhole/test/__init__.py | 6 - .../twisted/manhole/test/test_explorer.py | 102 - .../twisted/manhole/ui/__init__.py | 7 - .../twisted/manhole/ui/gtk2manhole.glade | 268 - .../twisted/manhole/ui/gtk2manhole.py | 374 - .../twisted/manhole/ui/test/__init__.py | 4 - .../manhole/ui/test/test_gtk2manhole.py | 48 - .../site-packages/twisted/names/__init__.py | 7 - .../site-packages/twisted/names/_rfc1982.py | 278 - .../site-packages/twisted/names/_version.py | 11 - .../site-packages/twisted/names/authority.py | 405 -- .../site-packages/twisted/names/cache.py | 125 - .../site-packages/twisted/names/client.py | 749 -- .../site-packages/twisted/names/common.py | 250 - .../site-packages/twisted/names/dns.py | 2879 -------- .../site-packages/twisted/names/error.py | 97 - .../site-packages/twisted/names/hosts.py | 149 - .../site-packages/twisted/names/resolve.py | 99 - .../site-packages/twisted/names/root.py | 333 - .../site-packages/twisted/names/secondary.py | 179 - .../site-packages/twisted/names/server.py | 594 -- .../site-packages/twisted/names/srvconnect.py | 217 - .../site-packages/twisted/names/tap.py | 150 - .../twisted/names/test/__init__.py | 1 - .../twisted/names/test/test_cache.py | 144 - .../twisted/names/test/test_client.py | 1212 ---- .../twisted/names/test/test_common.py | 133 - .../twisted/names/test/test_dns.py | 4777 ------------ .../twisted/names/test/test_examples.py | 167 - .../twisted/names/test/test_hosts.py | 257 - .../twisted/names/test/test_names.py | 974 --- .../twisted/names/test/test_resolve.py | 38 - .../twisted/names/test/test_rfc1982.py | 444 -- .../twisted/names/test/test_rootresolve.py | 855 --- .../twisted/names/test/test_server.py | 1265 ---- .../twisted/names/test/test_srvconnect.py | 181 - .../twisted/names/test/test_tap.py | 99 - .../site-packages/twisted/names/topfiles/NEWS | 365 - .../twisted/names/topfiles/README | 3 - .../site-packages/twisted/news/__init__.py | 11 - .../site-packages/twisted/news/_version.py | 11 - .../site-packages/twisted/news/database.py | 1051 --- .../site-packages/twisted/news/news.py | 90 - .../site-packages/twisted/news/nntp.py | 1036 --- .../site-packages/twisted/news/tap.py | 138 - .../twisted/news/test/__init__.py | 1 - .../twisted/news/test/test_database.py | 224 - .../twisted/news/test/test_news.py | 105 - .../twisted/news/test/test_nntp.py | 197 - .../site-packages/twisted/news/topfiles/NEWS | 150 - .../twisted/news/topfiles/README | 4 - .../site-packages/twisted/pair/__init__.py | 20 - .../site-packages/twisted/pair/_version.py | 11 - .../site-packages/twisted/pair/ethernet.py | 56 - .../site-packages/twisted/pair/ip.py | 72 - .../site-packages/twisted/pair/raw.py | 33 - .../site-packages/twisted/pair/rawudp.py | 55 - .../twisted/pair/test/__init__.py | 1 - .../twisted/pair/test/test_ethernet.py | 224 - .../twisted/pair/test/test_ip.py | 415 -- .../twisted/pair/test/test_rawudp.py | 326 - .../twisted/pair/test/test_tuntap.py | 1397 ---- .../site-packages/twisted/pair/testing.py | 570 -- .../site-packages/twisted/pair/topfiles/NEWS | 101 - .../twisted/pair/topfiles/README | 12 - .../site-packages/twisted/pair/tuntap.py | 434 -- .../twisted/persisted/__init__.py | 6 - .../site-packages/twisted/persisted/aot.py | 560 -- .../twisted/persisted/crefutil.py | 163 - .../site-packages/twisted/persisted/dirdbm.py | 358 - .../site-packages/twisted/persisted/sob.py | 227 - .../site-packages/twisted/persisted/styles.py | 262 - .../twisted/persisted/test/__init__.py | 6 - .../twisted/persisted/test/test_styles.py | 55 - .../python2.7/site-packages/twisted/plugin.py | 255 - .../site-packages/twisted/plugins/__init__.py | 17 - .../twisted/plugins/cred_anonymous.py | 40 - .../twisted/plugins/cred_file.py | 60 - .../twisted/plugins/cred_memory.py | 68 - .../twisted/plugins/cred_sshkeys.py | 51 - .../twisted/plugins/cred_unix.py | 138 - .../twisted/plugins/twisted_conch.py | 18 - .../twisted/plugins/twisted_core.py | 9 - .../twisted/plugins/twisted_ftp.py | 10 - .../twisted/plugins/twisted_inet.py | 10 - .../twisted/plugins/twisted_lore.py | 38 - .../twisted/plugins/twisted_mail.py | 10 - .../twisted/plugins/twisted_manhole.py | 10 - .../twisted/plugins/twisted_names.py | 10 - .../twisted/plugins/twisted_news.py | 10 - .../twisted/plugins/twisted_portforward.py | 10 - .../twisted/plugins/twisted_qtstub.py | 45 - .../twisted/plugins/twisted_reactors.py | 42 - .../twisted/plugins/twisted_runner.py | 10 - .../twisted/plugins/twisted_socks.py | 10 - .../twisted/plugins/twisted_telnet.py | 10 - .../twisted/plugins/twisted_trial.py | 59 - .../twisted/plugins/twisted_web.py | 11 - .../twisted/plugins/twisted_words.py | 43 - .../twisted/positioning/__init__.py | 8 - .../twisted/positioning/_sentence.py | 119 - .../site-packages/twisted/positioning/base.py | 929 --- .../twisted/positioning/ipositioning.py | 119 - .../site-packages/twisted/positioning/nmea.py | 980 --- .../twisted/positioning/test/__init__.py | 5 - .../twisted/positioning/test/receiver.py | 43 - .../twisted/positioning/test/test_base.py | 917 --- .../twisted/positioning/test/test_nmea.py | 1252 ---- .../twisted/positioning/test/test_sentence.py | 166 - .../twisted/protocols/__init__.py | 7 - .../site-packages/twisted/protocols/amp.py | 2703 ------- .../site-packages/twisted/protocols/basic.py | 952 --- .../site-packages/twisted/protocols/dict.py | 362 - .../site-packages/twisted/protocols/finger.py | 42 - .../site-packages/twisted/protocols/ftp.py | 3123 -------- .../twisted/protocols/gps/__init__.py | 1 - .../twisted/protocols/gps/nmea.py | 217 - .../twisted/protocols/gps/rockwell.py | 277 - .../site-packages/twisted/protocols/htb.py | 297 - .../site-packages/twisted/protocols/ident.py | 231 - .../twisted/protocols/loopback.py | 377 - .../twisted/protocols/memcache.py | 752 -- .../twisted/protocols/mice/__init__.py | 1 - .../twisted/protocols/mice/mouseman.py | 127 - .../site-packages/twisted/protocols/pcp.py | 204 - .../twisted/protocols/policies.py | 737 -- .../twisted/protocols/portforward.py | 87 - .../twisted/protocols/postfix.py | 112 - .../twisted/protocols/shoutcast.py | 111 - .../site-packages/twisted/protocols/sip.py | 1347 ---- .../site-packages/twisted/protocols/socks.py | 240 - .../twisted/protocols/stateful.py | 52 - .../site-packages/twisted/protocols/telnet.py | 325 - .../twisted/protocols/test/__init__.py | 6 - .../twisted/protocols/test/test_basic.py | 1279 ---- .../twisted/protocols/test/test_tls.py | 1522 ---- .../site-packages/twisted/protocols/tls.py | 806 --- .../site-packages/twisted/protocols/wire.py | 90 - .../site-packages/twisted/python/__init__.py | 13 - .../twisted/python/_initgroups.c | 66 - .../site-packages/twisted/python/_inotify.py | 101 - .../site-packages/twisted/python/_release.py | 1158 --- .../twisted/python/_shellcomp.py | 668 -- .../twisted/python/_textattributes.py | 316 - .../site-packages/twisted/python/compat.py | 446 -- .../twisted/python/components.py | 443 -- .../site-packages/twisted/python/constants.py | 500 -- .../site-packages/twisted/python/context.py | 133 - .../site-packages/twisted/python/deprecate.py | 613 -- .../site-packages/twisted/python/dist.py | 447 -- .../site-packages/twisted/python/dist3.py | 264 - .../site-packages/twisted/python/failure.py | 654 -- .../site-packages/twisted/python/fakepwd.py | 219 - .../site-packages/twisted/python/filepath.py | 1547 ---- .../site-packages/twisted/python/finalize.py | 46 - .../twisted/python/formmethod.py | 363 - .../site-packages/twisted/python/hashlib.py | 23 - .../site-packages/twisted/python/hook.py | 176 - .../site-packages/twisted/python/htmlizer.py | 91 - .../site-packages/twisted/python/lockfile.py | 214 - .../site-packages/twisted/python/log.py | 624 -- .../site-packages/twisted/python/logfile.py | 323 - .../site-packages/twisted/python/modules.py | 775 -- .../site-packages/twisted/python/monkey.py | 75 - .../site-packages/twisted/python/procutils.py | 45 - .../site-packages/twisted/python/randbytes.py | 150 - .../site-packages/twisted/python/rebuild.py | 271 - .../site-packages/twisted/python/reflect.py | 707 -- .../site-packages/twisted/python/release.py | 63 - .../site-packages/twisted/python/roots.py | 248 - .../site-packages/twisted/python/runtime.py | 178 - .../site-packages/twisted/python/sendmsg.c | 511 -- .../site-packages/twisted/python/sendmsg.so | Bin 29036 -> 0 bytes .../site-packages/twisted/python/shortcut.py | 76 - .../site-packages/twisted/python/syslog.py | 107 - .../site-packages/twisted/python/systemd.py | 87 - .../twisted/python/test/__init__.py | 3 - .../python/test/deprecatedattributes.py | 28 - .../twisted/python/test/modules_helpers.py | 59 - .../twisted/python/test/pullpipe.py | 40 - .../twisted/python/test/test_components.py | 839 --- .../twisted/python/test/test_constants.py | 1128 --- .../twisted/python/test/test_deprecate.py | 917 --- .../twisted/python/test/test_dist.py | 454 -- .../twisted/python/test/test_dist3.py | 42 - .../twisted/python/test/test_fakepwd.py | 414 -- .../twisted/python/test/test_hashlib.py | 112 - .../twisted/python/test/test_htmlizer.py | 41 - .../twisted/python/test/test_inotify.py | 120 - .../twisted/python/test/test_release.py | 1982 ----- .../twisted/python/test/test_runtime.py | 165 - .../twisted/python/test/test_sendmsg.py | 543 -- .../twisted/python/test/test_shellcomp.py | 623 -- .../twisted/python/test/test_syslog.py | 151 - .../twisted/python/test/test_systemd.py | 173 - .../python/test/test_textattributes.py | 27 - .../twisted/python/test/test_urlpath.py | 44 - .../twisted/python/test/test_util.py | 1085 --- .../twisted/python/test/test_versions.py | 361 - .../twisted/python/test/test_win32.py | 70 - .../twisted/python/test/test_zippath.py | 101 - .../twisted/python/test/test_zipstream.py | 355 - .../site-packages/twisted/python/text.py | 208 - .../twisted/python/threadable.py | 139 - .../twisted/python/threadpool.py | 267 - .../twisted/python/twisted-completion.zsh | 33 - .../site-packages/twisted/python/urlpath.py | 122 - .../site-packages/twisted/python/usage.py | 973 --- .../site-packages/twisted/python/util.py | 1045 --- .../site-packages/twisted/python/versions.py | 258 - .../site-packages/twisted/python/win32.py | 169 - .../site-packages/twisted/python/zippath.py | 268 - .../site-packages/twisted/python/zipstream.py | 319 - .../twisted/python/zsh/README.txt | 9 - .../site-packages/twisted/python/zsh/_cftp | 34 - .../site-packages/twisted/python/zsh/_ckeygen | 34 - .../site-packages/twisted/python/zsh/_conch | 34 - .../site-packages/twisted/python/zsh/_lore | 34 - .../site-packages/twisted/python/zsh/_manhole | 34 - .../site-packages/twisted/python/zsh/_mktap | 34 - .../twisted/python/zsh/_pyhtmlizer | 34 - .../site-packages/twisted/python/zsh/_tap2deb | 34 - .../site-packages/twisted/python/zsh/_tap2rpm | 34 - .../twisted/python/zsh/_tapconvert | 34 - .../site-packages/twisted/python/zsh/_tkconch | 34 - .../site-packages/twisted/python/zsh/_tkmktap | 34 - .../site-packages/twisted/python/zsh/_trial | 34 - .../site-packages/twisted/python/zsh/_twistd | 34 - .../twisted/python/zsh/_websetroot | 34 - .../site-packages/twisted/runner/__init__.py | 18 - .../site-packages/twisted/runner/_version.py | 11 - .../site-packages/twisted/runner/inetd.py | 70 - .../site-packages/twisted/runner/inetdconf.py | 194 - .../site-packages/twisted/runner/inetdtap.py | 163 - .../site-packages/twisted/runner/portmap.c | 57 - .../site-packages/twisted/runner/portmap.so | Bin 15744 -> 0 bytes .../site-packages/twisted/runner/procmon.py | 308 - .../twisted/runner/procmontap.py | 73 - .../twisted/runner/test/__init__.py | 6 - .../twisted/runner/test/test_procmon.py | 477 -- .../twisted/runner/test/test_procmontap.py | 87 - .../twisted/runner/topfiles/NEWS | 145 - .../twisted/runner/topfiles/README | 3 - .../site-packages/twisted/scripts/__init__.py | 27 - .../twisted/scripts/_twistd_unix.py | 390 - .../site-packages/twisted/scripts/_twistw.py | 50 - .../site-packages/twisted/scripts/htmlizer.py | 69 - .../site-packages/twisted/scripts/manhole.py | 69 - .../site-packages/twisted/scripts/tap2deb.py | 301 - .../site-packages/twisted/scripts/tap2rpm.py | 331 - .../twisted/scripts/tapconvert.py | 57 - .../twisted/scripts/test/__init__.py | 6 - .../twisted/scripts/test/test_scripts.py | 201 - .../twisted/scripts/test/test_tap2deb.py | 100 - .../twisted/scripts/test/test_tap2rpm.py | 399 -- .../site-packages/twisted/scripts/tkunzip.py | 290 - .../site-packages/twisted/scripts/trial.py | 621 -- .../site-packages/twisted/scripts/twistd.py | 30 - .../site-packages/twisted/spread/__init__.py | 12 - .../site-packages/twisted/spread/banana.py | 358 - .../site-packages/twisted/spread/flavors.py | 590 -- .../twisted/spread/interfaces.py | 31 - .../site-packages/twisted/spread/jelly.py | 1124 --- .../site-packages/twisted/spread/pb.py | 1434 ---- .../site-packages/twisted/spread/publish.py | 142 - .../twisted/spread/ui/__init__.py | 12 - .../twisted/spread/ui/gtk2util.py | 218 - .../twisted/spread/ui/login2.glade | 461 -- .../site-packages/twisted/spread/ui/tktree.py | 204 - .../site-packages/twisted/spread/ui/tkutil.py | 397 - .../site-packages/twisted/spread/util.py | 215 - .../site-packages/twisted/tap/__init__.py | 10 - .../site-packages/twisted/tap/ftp.py | 69 - .../site-packages/twisted/tap/manhole.py | 54 - .../site-packages/twisted/tap/portforward.py | 27 - .../site-packages/twisted/tap/socks.py | 38 - .../site-packages/twisted/tap/telnet.py | 32 - .../site-packages/twisted/test/__init__.py | 10 - .../site-packages/twisted/test/_preamble.py | 17 - .../twisted/test/crash_test_dummy.py | 34 - .../site-packages/twisted/test/iosim.py | 407 -- .../twisted/test/mock_win32process.py | 48 - .../twisted/test/myrebuilder1.py | 15 - .../twisted/test/myrebuilder2.py | 16 - .../twisted/test/plugin_basic.py | 57 - .../twisted/test/plugin_extra1.py | 23 - .../twisted/test/plugin_extra2.py | 35 - .../twisted/test/process_cmdline.py | 5 - .../twisted/test/process_echoer.py | 11 - .../site-packages/twisted/test/process_fds.py | 40 - .../twisted/test/process_linger.py | 17 - .../twisted/test/process_reader.py | 12 - .../twisted/test/process_signal.py | 8 - .../twisted/test/process_stdinreader.py | 23 - .../twisted/test/process_tester.py | 37 - .../site-packages/twisted/test/process_tty.py | 6 - .../twisted/test/process_twisted.py | 43 - .../twisted/test/proto_helpers.py | 690 -- .../site-packages/twisted/test/raiser.c | 1443 ---- .../site-packages/twisted/test/raiser.pyx | 21 - .../site-packages/twisted/test/raiser.so | Bin 32456 -> 0 bytes .../twisted/test/reflect_helper_IE.py | 4 - .../twisted/test/reflect_helper_VE.py | 4 - .../twisted/test/reflect_helper_ZDE.py | 4 - .../site-packages/twisted/test/server.pem | 36 - .../site-packages/twisted/test/ssl_helpers.py | 37 - .../twisted/test/stdio_test_consumer.py | 39 - .../twisted/test/stdio_test_halfclose.py | 66 - .../twisted/test/stdio_test_hostpeer.py | 32 - .../twisted/test/stdio_test_lastwrite.py | 45 - .../twisted/test/stdio_test_loseconn.py | 48 - .../twisted/test/stdio_test_producer.py | 55 - .../twisted/test/stdio_test_write.py | 31 - .../twisted/test/stdio_test_writeseq.py | 30 - .../twisted/test/test_abstract.py | 85 - .../site-packages/twisted/test/test_adbapi.py | 819 --- .../site-packages/twisted/test/test_amp.py | 3171 -------- .../twisted/test/test_application.py | 896 --- .../site-packages/twisted/test/test_banana.py | 278 - .../site-packages/twisted/test/test_compat.py | 623 -- .../twisted/test/test_context.py | 51 - .../twisted/test/test_cooperator.py | 711 -- .../site-packages/twisted/test/test_defer.py | 2361 ------ .../site-packages/twisted/test/test_defgen.py | 301 - .../site-packages/twisted/test/test_dict.py | 22 - .../twisted/test/test_digestauth.py | 681 -- .../site-packages/twisted/test/test_dirdbm.py | 170 - .../site-packages/twisted/test/test_doc.py | 104 - .../site-packages/twisted/test/test_error.py | 266 - .../twisted/test/test_explorer.py | 236 - .../twisted/test/test_factories.py | 145 - .../twisted/test/test_failure.py | 993 --- .../site-packages/twisted/test/test_fdesc.py | 266 - .../site-packages/twisted/test/test_finger.py | 67 - .../twisted/test/test_formmethod.py | 98 - .../site-packages/twisted/test/test_ftp.py | 3482 --------- .../twisted/test/test_ftp_options.py | 80 - .../site-packages/twisted/test/test_hook.py | 150 - .../site-packages/twisted/test/test_htb.py | 109 - .../site-packages/twisted/test/test_ident.py | 194 - .../twisted/test/test_internet.py | 1442 ---- .../site-packages/twisted/test/test_iosim.py | 25 - .../site-packages/twisted/test/test_iutils.py | 351 - .../site-packages/twisted/test/test_jelly.py | 640 -- .../twisted/test/test_lockfile.py | 445 -- .../site-packages/twisted/test/test_log.py | 882 --- .../twisted/test/test_logfile.py | 320 - .../twisted/test/test_loopback.py | 431 -- .../twisted/test/test_manhole.py | 75 - .../twisted/test/test_memcache.py | 699 -- .../twisted/test/test_modules.py | 514 -- .../site-packages/twisted/test/test_monkey.py | 164 - .../twisted/test/test_newcred.py | 435 -- .../site-packages/twisted/test/test_nmea.py | 115 - .../site-packages/twisted/test/test_paths.py | 1558 ---- .../site-packages/twisted/test/test_pb.py | 1846 ----- .../twisted/test/test_pbfailure.py | 469 -- .../site-packages/twisted/test/test_pcp.py | 368 - .../twisted/test/test_persisted.py | 377 - .../site-packages/twisted/test/test_plugin.py | 719 -- .../twisted/test/test_policies.py | 872 --- .../twisted/test/test_postfix.py | 108 - .../twisted/test/test_process.py | 2597 ------- .../twisted/test/test_protocols.py | 236 - .../twisted/test/test_randbytes.py | 121 - .../twisted/test/test_rebuild.py | 252 - .../twisted/test/test_reflect.py | 900 --- .../site-packages/twisted/test/test_roots.py | 63 - .../site-packages/twisted/test/test_setup.py | 61 - .../twisted/test/test_shortcut.py | 26 - .../site-packages/twisted/test/test_sip.py | 984 --- .../site-packages/twisted/test/test_sob.py | 172 - .../site-packages/twisted/test/test_socks.py | 498 -- .../site-packages/twisted/test/test_ssl.py | 727 -- .../twisted/test/test_sslverify.py | 2153 ------ .../twisted/test/test_stateful.py | 81 - .../site-packages/twisted/test/test_stdio.py | 371 - .../twisted/test/test_strcred.py | 657 -- .../twisted/test/test_strerror.py | 151 - .../twisted/test/test_stringtransport.py | 313 - .../twisted/test/test_strports.py | 133 - .../site-packages/twisted/test/test_task.py | 1027 --- .../site-packages/twisted/test/test_tcp.py | 1829 ----- .../twisted/test/test_tcp_internals.py | 255 - .../site-packages/twisted/test/test_text.py | 242 - .../twisted/test/test_threadable.py | 132 - .../twisted/test/test_threadpool.py | 625 -- .../twisted/test/test_threads.py | 421 -- .../site-packages/twisted/test/test_tpfile.py | 52 - .../site-packages/twisted/test/test_twistd.py | 1738 ----- .../twisted/test/test_twisted.py | 694 -- .../site-packages/twisted/test/test_udp.py | 710 -- .../site-packages/twisted/test/test_unix.py | 405 -- .../site-packages/twisted/test/test_usage.py | 612 -- .../site-packages/twisted/test/testutils.py | 169 - .../site-packages/twisted/topfiles/CREDITS | 60 - .../twisted/topfiles/ChangeLog.Old | 3888 ---------- .../site-packages/twisted/topfiles/NEWS | 2253 ------ .../site-packages/twisted/topfiles/README | 14 - .../site-packages/twisted/trial/__init__.py | 52 - .../twisted/trial/_asyncrunner.py | 184 - .../site-packages/twisted/trial/_asynctest.py | 405 -- .../twisted/trial/_dist/__init__.py | 47 - .../twisted/trial/_dist/distreporter.py | 94 - .../twisted/trial/_dist/disttrial.py | 258 - .../twisted/trial/_dist/managercommands.py | 76 - .../twisted/trial/_dist/options.py | 30 - .../twisted/trial/_dist/test/__init__.py | 6 - .../trial/_dist/test/test_distreporter.py | 62 - .../trial/_dist/test/test_disttrial.py | 375 - .../twisted/trial/_dist/test/test_options.py | 48 - .../twisted/trial/_dist/test/test_worker.py | 473 -- .../trial/_dist/test/test_workerreporter.py | 119 - .../trial/_dist/test/test_workertrial.py | 183 - .../twisted/trial/_dist/worker.py | 328 - .../twisted/trial/_dist/workercommands.py | 28 - .../twisted/trial/_dist/workerreporter.py | 123 - .../twisted/trial/_dist/workertrial.py | 109 - .../site-packages/twisted/trial/_synctest.py | 1289 ---- .../site-packages/twisted/trial/itrial.py | 253 - .../site-packages/twisted/trial/reporter.py | 1285 ---- .../site-packages/twisted/trial/runner.py | 795 -- .../twisted/trial/test/__init__.py | 6 - .../twisted/trial/test/detests.py | 203 - .../twisted/trial/test/erroneous.py | 188 - .../twisted/trial/test/mockcustomsuite.py | 21 - .../twisted/trial/test/mockcustomsuite2.py | 21 - .../twisted/trial/test/mockcustomsuite3.py | 28 - .../twisted/trial/test/mockdoctest.py | 104 - .../twisted/trial/test/moduleself.py | 7 - .../twisted/trial/test/moduletest.py | 11 - .../twisted/trial/test/novars.py | 6 - .../twisted/trial/test/ordertests.py | 50 - .../twisted/trial/test/packages.py | 181 - .../twisted/trial/test/sample.py | 108 - .../twisted/trial/test/scripttest.py | 14 - .../twisted/trial/test/skipping.py | 270 - .../twisted/trial/test/suppression.py | 115 - .../twisted/trial/test/test_assertions.py | 1220 ---- .../trial/test/test_asyncassertions.py | 83 - .../twisted/trial/test/test_deferred.py | 236 - .../twisted/trial/test/test_doctest.py | 62 - .../twisted/trial/test/test_keyboard.py | 119 - .../twisted/trial/test/test_loader.py | 656 -- .../twisted/trial/test/test_log.py | 235 - .../twisted/trial/test/test_output.py | 179 - .../twisted/trial/test/test_plugins.py | 46 - .../twisted/trial/test/test_pyunitcompat.py | 287 - .../twisted/trial/test/test_reporter.py | 1721 ----- .../twisted/trial/test/test_runner.py | 1051 --- .../twisted/trial/test/test_script.py | 867 --- .../twisted/trial/test/test_suppression.py | 162 - .../twisted/trial/test/test_testcase.py | 70 - .../twisted/trial/test/test_tests.py | 1399 ---- .../twisted/trial/test/test_util.py | 780 -- .../twisted/trial/test/test_warning.py | 491 -- .../site-packages/twisted/trial/test/weird.py | 23 - .../site-packages/twisted/trial/unittest.py | 41 - .../site-packages/twisted/trial/util.py | 432 -- .../site-packages/twisted/web/__init__.py | 15 - .../twisted/web/_auth/__init__.py | 7 - .../site-packages/twisted/web/_auth/basic.py | 59 - .../site-packages/twisted/web/_auth/digest.py | 54 - .../twisted/web/_auth/wrapper.py | 225 - .../site-packages/twisted/web/_element.py | 185 - .../site-packages/twisted/web/_flatten.py | 422 -- .../site-packages/twisted/web/_newclient.py | 1608 ----- .../site-packages/twisted/web/_responses.py | 114 - .../site-packages/twisted/web/_stan.py | 325 - .../site-packages/twisted/web/_version.py | 11 - .../site-packages/twisted/web/client.py | 1997 ------ .../site-packages/twisted/web/demo.py | 24 - .../site-packages/twisted/web/distrib.py | 373 - .../site-packages/twisted/web/domhelpers.py | 268 - .../site-packages/twisted/web/error.py | 380 - .../site-packages/twisted/web/failure.xhtml | 71 - .../site-packages/twisted/web/guard.py | 17 - .../site-packages/twisted/web/html.py | 46 - .../site-packages/twisted/web/http.py | 2050 ------ .../site-packages/twisted/web/http_headers.py | 261 - .../site-packages/twisted/web/iweb.py | 760 -- .../site-packages/twisted/web/microdom.py | 1028 --- .../site-packages/twisted/web/proxy.py | 303 - .../site-packages/twisted/web/resource.py | 405 -- .../site-packages/twisted/web/rewrite.py | 52 - .../site-packages/twisted/web/script.py | 170 - .../site-packages/twisted/web/server.py | 706 -- .../site-packages/twisted/web/soap.py | 154 - .../site-packages/twisted/web/static.py | 1032 --- .../site-packages/twisted/web/sux.py | 636 -- .../site-packages/twisted/web/tap.py | 232 - .../site-packages/twisted/web/template.py | 566 -- .../twisted/web/test/__init__.py | 7 - .../site-packages/twisted/web/test/_util.py | 82 - .../twisted/web/test/requesthelper.py | 278 - .../twisted/web/test/test_agent.py | 2727 ------- .../twisted/web/test/test_cgi.py | 364 - .../twisted/web/test/test_distrib.py | 434 -- .../twisted/web/test/test_domhelpers.py | 306 - .../twisted/web/test/test_error.py | 151 - .../twisted/web/test/test_flatten.py | 554 -- .../twisted/web/test/test_http.py | 2175 ------ .../twisted/web/test/test_http_headers.py | 631 -- .../twisted/web/test/test_httpauth.py | 634 -- .../twisted/web/test/test_newclient.py | 2675 ------- .../twisted/web/test/test_proxy.py | 544 -- .../twisted/web/test/test_resource.py | 261 - .../twisted/web/test/test_script.py | 70 - .../twisted/web/test/test_soap.py | 114 - .../twisted/web/test/test_stan.py | 139 - .../twisted/web/test/test_static.py | 1540 ---- .../twisted/web/test/test_tap.py | 196 - .../twisted/web/test/test_template.py | 820 --- .../twisted/web/test/test_util.py | 472 -- .../twisted/web/test/test_vhost.py | 105 - .../twisted/web/test/test_web.py | 1175 --- .../twisted/web/test/test_webclient.py | 1350 ---- .../twisted/web/test/test_wsgi.py | 1571 ---- .../twisted/web/test/test_xml.py | 1105 --- .../twisted/web/test/test_xmlrpc.py | 818 --- .../site-packages/twisted/web/topfiles/NEWS | 705 -- .../site-packages/twisted/web/topfiles/README | 6 - .../site-packages/twisted/web/twcgi.py | 307 - .../site-packages/twisted/web/util.py | 440 -- .../site-packages/twisted/web/vhost.py | 135 - .../site-packages/twisted/web/wsgi.py | 403 -- .../site-packages/twisted/web/xmlrpc.py | 572 -- .../site-packages/twisted/words/__init__.py | 11 - .../site-packages/twisted/words/_version.py | 11 - .../site-packages/twisted/words/ewords.py | 34 - .../twisted/words/im/__init__.py | 8 - .../twisted/words/im/baseaccount.py | 62 - .../twisted/words/im/basechat.py | 512 -- .../twisted/words/im/basesupport.py | 270 - .../twisted/words/im/instancemessenger.glade | 3165 -------- .../twisted/words/im/interfaces.py | 364 - .../twisted/words/im/ircsupport.py | 265 - .../site-packages/twisted/words/im/locals.py | 26 - .../twisted/words/im/pbsupport.py | 260 - .../site-packages/twisted/words/iwords.py | 266 - .../twisted/words/protocols/__init__.py | 7 - .../twisted/words/protocols/irc.py | 3756 ---------- .../words/protocols/jabber/__init__.py | 8 - .../twisted/words/protocols/jabber/client.py | 368 - .../words/protocols/jabber/component.py | 474 -- .../twisted/words/protocols/jabber/error.py | 336 - .../twisted/words/protocols/jabber/ijabber.py | 199 - .../twisted/words/protocols/jabber/jid.py | 249 - .../words/protocols/jabber/jstrports.py | 31 - .../twisted/words/protocols/jabber/sasl.py | 230 - .../words/protocols/jabber/sasl_mechanisms.py | 276 - .../words/protocols/jabber/xmlstream.py | 1136 --- .../words/protocols/jabber/xmpp_stringprep.py | 246 - .../twisted/words/protocols/msn.py | 2479 ------- .../twisted/words/protocols/oscar.py | 1235 ---- .../site-packages/twisted/words/service.py | 1224 ---- .../site-packages/twisted/words/tap.py | 74 - .../twisted/words/test/__init__.py | 1 - .../twisted/words/test/test_basechat.py | 68 - .../twisted/words/test/test_basesupport.py | 97 - .../twisted/words/test/test_domish.py | 434 -- .../twisted/words/test/test_irc.py | 2608 ------- .../twisted/words/test/test_irc_service.py | 245 - .../twisted/words/test/test_ircsupport.py | 88 - .../twisted/words/test/test_jabberclient.py | 414 -- .../words/test/test_jabbercomponent.py | 422 -- .../twisted/words/test/test_jabbererror.py | 342 - .../twisted/words/test/test_jabberjid.py | 225 - .../words/test/test_jabberjstrports.py | 34 - .../twisted/words/test/test_jabbersasl.py | 272 - .../words/test/test_jabbersaslmechanisms.py | 142 - .../words/test/test_jabberxmlstream.py | 1334 ---- .../words/test/test_jabberxmppstringprep.py | 109 - .../twisted/words/test/test_msn.py | 522 -- .../twisted/words/test/test_oscar.py | 24 - .../twisted/words/test/test_service.py | 838 --- .../twisted/words/test/test_tap.py | 78 - .../twisted/words/test/test_xishutil.py | 345 - .../twisted/words/test/test_xmlstream.py | 224 - .../twisted/words/test/test_xmpproutertap.py | 84 - .../twisted/words/test/test_xpath.py | 260 - .../site-packages/twisted/words/topfiles/NEWS | 439 -- .../twisted/words/topfiles/README | 5 - .../twisted/words/xish/__init__.py | 10 - .../twisted/words/xish/domish.py | 848 --- .../twisted/words/xish/utility.py | 372 - .../twisted/words/xish/xmlstream.py | 261 - .../site-packages/twisted/words/xish/xpath.py | 333 - .../twisted/words/xish/xpathparser.g | 375 - .../twisted/words/xish/xpathparser.py | 508 -- .../twisted/words/xmpproutertap.py | 30 - .../site-packages/werkzeug/__init__.py | 154 - .../site-packages/werkzeug/_compat.py | 202 - .../site-packages/werkzeug/_internal.py | 412 -- .../werkzeug/contrib/__init__.py | 16 - .../site-packages/werkzeug/contrib/atom.py | 347 - .../site-packages/werkzeug/contrib/cache.py | 679 -- .../site-packages/werkzeug/contrib/fixers.py | 244 - .../site-packages/werkzeug/contrib/iterio.py | 346 - .../werkzeug/contrib/jsrouting.py | 262 - .../site-packages/werkzeug/contrib/limiter.py | 40 - .../site-packages/werkzeug/contrib/lint.py | 334 - .../werkzeug/contrib/profiler.py | 142 - .../werkzeug/contrib/securecookie.py | 321 - .../werkzeug/contrib/sessions.py | 348 - .../werkzeug/contrib/testtools.py | 71 - .../werkzeug/contrib/wrappers.py | 278 - .../site-packages/werkzeug/datastructures.py | 2612 ------- .../site-packages/werkzeug/debug/__init__.py | 185 - .../site-packages/werkzeug/debug/console.py | 211 - .../site-packages/werkzeug/debug/repr.py | 280 - .../werkzeug/debug/shared/FONT_LICENSE | 96 - .../werkzeug/debug/shared/console.png | Bin 507 -> 0 bytes .../werkzeug/debug/shared/debugger.js | 201 - .../werkzeug/debug/shared/jquery.js | 167 - .../werkzeug/debug/shared/less.png | Bin 191 -> 0 bytes .../werkzeug/debug/shared/more.png | Bin 200 -> 0 bytes .../werkzeug/debug/shared/source.png | Bin 818 -> 0 bytes .../werkzeug/debug/shared/style.css | 113 - .../werkzeug/debug/shared/ubuntu.ttf | Bin 70220 -> 0 bytes .../site-packages/werkzeug/debug/tbtools.py | 508 -- .../site-packages/werkzeug/exceptions.py | 588 -- .../site-packages/werkzeug/formparser.py | 521 -- .../python2.7/site-packages/werkzeug/http.py | 980 --- .../python2.7/site-packages/werkzeug/local.py | 409 -- .../site-packages/werkzeug/posixemulation.py | 105 - .../site-packages/werkzeug/routing.py | 1635 ----- .../site-packages/werkzeug/script.py | 316 - .../site-packages/werkzeug/security.py | 240 - .../site-packages/werkzeug/serving.py | 749 -- .../python2.7/site-packages/werkzeug/test.py | 879 --- .../site-packages/werkzeug/testapp.py | 230 - .../werkzeug/testsuite/__init__.py | 267 - .../werkzeug/testsuite/compat.py | 40 - .../werkzeug/testsuite/contrib/__init__.py | 19 - .../werkzeug/testsuite/contrib/cache.py | 257 - .../werkzeug/testsuite/contrib/fixers.py | 193 - .../werkzeug/testsuite/contrib/iterio.py | 184 - .../testsuite/contrib/securecookie.py | 64 - .../werkzeug/testsuite/contrib/sessions.py | 80 - .../werkzeug/testsuite/contrib/wrappers.py | 97 - .../werkzeug/testsuite/datastructures.py | 788 -- .../site-packages/werkzeug/testsuite/debug.py | 172 - .../werkzeug/testsuite/exceptions.py | 85 - .../werkzeug/testsuite/formparser.py | 400 -- .../site-packages/werkzeug/testsuite/http.py | 449 -- .../werkzeug/testsuite/internal.py | 81 - .../site-packages/werkzeug/testsuite/local.py | 159 - .../werkzeug/testsuite/multipart/collect.py | 56 - .../multipart/firefox3-2png1txt/file1.png | Bin 523 -> 0 bytes .../multipart/firefox3-2png1txt/file2.png | Bin 703 -> 0 bytes .../multipart/firefox3-2png1txt/request.txt | Bin 1739 -> 0 bytes .../multipart/firefox3-2png1txt/text.txt | 1 - .../multipart/firefox3-2pnglongtext/file1.png | Bin 781 -> 0 bytes .../multipart/firefox3-2pnglongtext/file2.png | Bin 733 -> 0 bytes .../firefox3-2pnglongtext/request.txt | Bin 2042 -> 0 bytes .../multipart/firefox3-2pnglongtext/text.txt | 3 - .../multipart/ie6-2png1txt/file1.png | Bin 523 -> 0 bytes .../multipart/ie6-2png1txt/file2.png | Bin 703 -> 0 bytes .../multipart/ie6-2png1txt/request.txt | Bin 1798 -> 0 bytes .../testsuite/multipart/ie6-2png1txt/text.txt | 1 - .../multipart/ie7_full_path_request.txt | Bin 30044 -> 0 bytes .../multipart/opera8-2png1txt/file1.png | Bin 582 -> 0 bytes .../multipart/opera8-2png1txt/file2.png | Bin 733 -> 0 bytes .../multipart/opera8-2png1txt/request.txt | Bin 1740 -> 0 bytes .../multipart/opera8-2png1txt/text.txt | 1 - .../multipart/webkit3-2png1txt/file1.png | Bin 1002 -> 0 bytes .../multipart/webkit3-2png1txt/file2.png | Bin 952 -> 0 bytes .../multipart/webkit3-2png1txt/request.txt | Bin 2408 -> 0 bytes .../multipart/webkit3-2png1txt/text.txt | 1 - .../werkzeug/testsuite/res/test.txt | 1 - .../werkzeug/testsuite/routing.py | 673 -- .../werkzeug/testsuite/security.py | 97 - .../werkzeug/testsuite/serving.py | 117 - .../site-packages/werkzeug/testsuite/test.py | 410 -- .../site-packages/werkzeug/testsuite/urls.py | 308 - .../site-packages/werkzeug/testsuite/utils.py | 284 - .../werkzeug/testsuite/wrappers.py | 840 --- .../site-packages/werkzeug/testsuite/wsgi.py | 352 - .../python2.7/site-packages/werkzeug/urls.py | 883 --- .../site-packages/werkzeug/useragents.py | 190 - .../python2.7/site-packages/werkzeug/utils.py | 611 -- .../site-packages/werkzeug/wrappers.py | 1802 ----- .../python2.7/site-packages/werkzeug/wsgi.py | 1038 --- 1390 files changed, 4932 insertions(+), 433509 deletions(-) delete mode 100755 Linux_i686/bin/alembic delete mode 100755 Linux_i686/bin/cftp delete mode 100755 Linux_i686/bin/ckeygen delete mode 100755 Linux_i686/bin/conch delete mode 100755 Linux_i686/bin/lore delete mode 100755 Linux_i686/bin/mailmail delete mode 100755 Linux_i686/bin/mako-render delete mode 100755 Linux_i686/bin/manhole delete mode 100755 Linux_i686/bin/pyhtmlizer delete mode 100755 Linux_i686/bin/tap2deb delete mode 100755 Linux_i686/bin/tap2rpm delete mode 100755 Linux_i686/bin/tapconvert delete mode 100755 Linux_i686/bin/tkconch delete mode 100755 Linux_i686/bin/trial delete mode 100755 Linux_i686/bin/twistd delete mode 100644 Linux_i686/lib/python2.7/site-packages/Flask-0.10.1.egg-info/PKG-INFO delete mode 100644 Linux_i686/lib/python2.7/site-packages/Flask-0.10.1.egg-info/SOURCES.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/Flask-0.10.1.egg-info/installed-files.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/Flask-0.10.1.egg-info/requires.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/Flask-0.10.1.egg-info/top_level.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/Flask_Migrate-1.2.0.egg-info/PKG-INFO delete mode 100644 Linux_i686/lib/python2.7/site-packages/Flask_Migrate-1.2.0.egg-info/SOURCES.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/Flask_Migrate-1.2.0.egg-info/installed-files.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/Flask_Migrate-1.2.0.egg-info/requires.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/Flask_Migrate-1.2.0.egg-info/top_level.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/Flask_SQLAlchemy-1.0.egg-info/PKG-INFO delete mode 100644 Linux_i686/lib/python2.7/site-packages/Flask_SQLAlchemy-1.0.egg-info/SOURCES.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/Flask_SQLAlchemy-1.0.egg-info/installed-files.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/Flask_SQLAlchemy-1.0.egg-info/not-zip-safe delete mode 100644 Linux_i686/lib/python2.7/site-packages/Flask_SQLAlchemy-1.0.egg-info/requires.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/Flask_SQLAlchemy-1.0.egg-info/top_level.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/Flask_Script-2.0.3.egg-info/PKG-INFO delete mode 100644 Linux_i686/lib/python2.7/site-packages/Flask_Script-2.0.3.egg-info/SOURCES.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/Flask_Script-2.0.3.egg-info/dependency_links.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/Flask_Script-2.0.3.egg-info/installed-files.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/Flask_Script-2.0.3.egg-info/not-zip-safe delete mode 100644 Linux_i686/lib/python2.7/site-packages/Flask_Script-2.0.3.egg-info/requires.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/Flask_Script-2.0.3.egg-info/top_level.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/Jinja2-2.7.2.egg-info/PKG-INFO delete mode 100644 Linux_i686/lib/python2.7/site-packages/Jinja2-2.7.2.egg-info/SOURCES.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/Jinja2-2.7.2.egg-info/dependency_links.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/Jinja2-2.7.2.egg-info/entry_points.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/Jinja2-2.7.2.egg-info/installed-files.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/Jinja2-2.7.2.egg-info/not-zip-safe delete mode 100644 Linux_i686/lib/python2.7/site-packages/Jinja2-2.7.2.egg-info/requires.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/Jinja2-2.7.2.egg-info/top_level.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/Mako-0.9.1.egg-info/PKG-INFO delete mode 100644 Linux_i686/lib/python2.7/site-packages/Mako-0.9.1.egg-info/SOURCES.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/Mako-0.9.1.egg-info/dependency_links.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/Mako-0.9.1.egg-info/entry_points.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/Mako-0.9.1.egg-info/installed-files.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/Mako-0.9.1.egg-info/not-zip-safe delete mode 100644 Linux_i686/lib/python2.7/site-packages/Mako-0.9.1.egg-info/requires.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/Mako-0.9.1.egg-info/top_level.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/MarkupSafe-0.23.egg-info/PKG-INFO delete mode 100644 Linux_i686/lib/python2.7/site-packages/MarkupSafe-0.23.egg-info/SOURCES.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/MarkupSafe-0.23.egg-info/dependency_links.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/MarkupSafe-0.23.egg-info/installed-files.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/MarkupSafe-0.23.egg-info/not-zip-safe delete mode 100644 Linux_i686/lib/python2.7/site-packages/MarkupSafe-0.23.egg-info/top_level.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/Twisted-14.0.0.egg-info/PKG-INFO delete mode 100644 Linux_i686/lib/python2.7/site-packages/Twisted-14.0.0.egg-info/SOURCES.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/Twisted-14.0.0.egg-info/dependency_links.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/Twisted-14.0.0.egg-info/installed-files.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/Twisted-14.0.0.egg-info/not-zip-safe delete mode 100644 Linux_i686/lib/python2.7/site-packages/Twisted-14.0.0.egg-info/requires.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/Twisted-14.0.0.egg-info/top_level.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/Werkzeug-0.9.4.egg-info/PKG-INFO delete mode 100644 Linux_i686/lib/python2.7/site-packages/Werkzeug-0.9.4.egg-info/SOURCES.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/Werkzeug-0.9.4.egg-info/dependency_links.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/Werkzeug-0.9.4.egg-info/installed-files.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/Werkzeug-0.9.4.egg-info/not-zip-safe delete mode 100644 Linux_i686/lib/python2.7/site-packages/Werkzeug-0.9.4.egg-info/top_level.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/alembic-0.6.5.egg-info/PKG-INFO delete mode 100644 Linux_i686/lib/python2.7/site-packages/alembic-0.6.5.egg-info/SOURCES.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/alembic-0.6.5.egg-info/dependency_links.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/alembic-0.6.5.egg-info/entry_points.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/alembic-0.6.5.egg-info/installed-files.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/alembic-0.6.5.egg-info/not-zip-safe delete mode 100644 Linux_i686/lib/python2.7/site-packages/alembic-0.6.5.egg-info/requires.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/alembic-0.6.5.egg-info/top_level.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/alembic/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/alembic/autogenerate/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/alembic/autogenerate/api.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/alembic/autogenerate/compare.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/alembic/autogenerate/render.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/alembic/command.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/alembic/compat.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/alembic/config.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/alembic/context.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/alembic/ddl/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/alembic/ddl/base.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/alembic/ddl/impl.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/alembic/ddl/mssql.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/alembic/ddl/mysql.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/alembic/ddl/oracle.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/alembic/ddl/postgresql.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/alembic/ddl/sqlite.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/alembic/environment.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/alembic/migration.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/alembic/op.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/alembic/operations.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/alembic/script.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/alembic/templates/generic/README delete mode 100644 Linux_i686/lib/python2.7/site-packages/alembic/templates/generic/alembic.ini.mako delete mode 100644 Linux_i686/lib/python2.7/site-packages/alembic/templates/generic/env.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/alembic/templates/generic/script.py.mako delete mode 100644 Linux_i686/lib/python2.7/site-packages/alembic/templates/multidb/README delete mode 100644 Linux_i686/lib/python2.7/site-packages/alembic/templates/multidb/alembic.ini.mako delete mode 100644 Linux_i686/lib/python2.7/site-packages/alembic/templates/multidb/env.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/alembic/templates/multidb/script.py.mako delete mode 100644 Linux_i686/lib/python2.7/site-packages/alembic/templates/pylons/README delete mode 100644 Linux_i686/lib/python2.7/site-packages/alembic/templates/pylons/alembic.ini.mako delete mode 100644 Linux_i686/lib/python2.7/site-packages/alembic/templates/pylons/env.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/alembic/templates/pylons/script.py.mako delete mode 100644 Linux_i686/lib/python2.7/site-packages/alembic/util.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/cffi-0.8.2.egg-info/dependency_links.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/cffi-0.8.2.egg-info/not-zip-safe rename Linux_i686/lib/python2.7/site-packages/{cffi-0.8.2.egg-info => cffi-0.8.6.egg-info}/PKG-INFO (98%) rename Linux_i686/lib/python2.7/site-packages/{cffi-0.8.2.egg-info => cffi-0.8.6.egg-info}/SOURCES.txt (81%) rename Linux_i686/lib/python2.7/site-packages/{Flask-0.10.1.egg-info => cffi-0.8.6.egg-info}/dependency_links.txt (100%) rename Linux_i686/lib/python2.7/site-packages/{cffi-0.8.2.egg-info => cffi-0.8.6.egg-info}/installed-files.txt (100%) rename Linux_i686/lib/python2.7/site-packages/{Flask-0.10.1.egg-info => cffi-0.8.6.egg-info}/not-zip-safe (100%) rename Linux_i686/lib/python2.7/site-packages/{cffi-0.8.2.egg-info => cffi-0.8.6.egg-info}/requires.txt (100%) rename Linux_i686/lib/python2.7/site-packages/{cffi-0.8.2.egg-info => cffi-0.8.6.egg-info}/top_level.txt (100%) delete mode 100644 Linux_i686/lib/python2.7/site-packages/cryptography-0.4.egg-info/dependency_links.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/cryptography-0.4.egg-info/not-zip-safe rename Linux_i686/lib/python2.7/site-packages/{cryptography-0.4.egg-info => cryptography-0.5.4.egg-info}/PKG-INFO (94%) rename Linux_i686/lib/python2.7/site-packages/{cryptography-0.4.egg-info => cryptography-0.5.4.egg-info}/SOURCES.txt (83%) rename Linux_i686/lib/python2.7/site-packages/{Flask_Migrate-1.2.0.egg-info => cryptography-0.5.4.egg-info}/dependency_links.txt (100%) rename Linux_i686/lib/python2.7/site-packages/{cryptography-0.4.egg-info => cryptography-0.5.4.egg-info}/installed-files.txt (78%) rename Linux_i686/lib/python2.7/site-packages/{Flask_Migrate-1.2.0.egg-info => cryptography-0.5.4.egg-info}/not-zip-safe (100%) rename Linux_i686/lib/python2.7/site-packages/{cryptography-0.4.egg-info => cryptography-0.5.4.egg-info}/requires.txt (100%) rename Linux_i686/lib/python2.7/site-packages/{cryptography-0.4.egg-info => cryptography-0.5.4.egg-info}/top_level.txt (70%) delete mode 100755 Linux_i686/lib/python2.7/site-packages/cryptography/_Cryptography_cffi_444d7397xa22f8491.so create mode 100755 Linux_i686/lib/python2.7/site-packages/cryptography/_Cryptography_cffi_4ed9e37dx4000d087.so create mode 100644 Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/backends/commoncrypto/ciphers.py create mode 100644 Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/backends/commoncrypto/hashes.py create mode 100644 Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/backends/commoncrypto/hmac.py create mode 100644 Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/ciphers.py create mode 100644 Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/cmac.py create mode 100644 Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/dsa.py create mode 100644 Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/ec.py create mode 100644 Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/hashes.py create mode 100644 Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/hmac.py create mode 100644 Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/rsa.py create mode 100644 Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/commoncrypto/cf.py create mode 100644 Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/commoncrypto/secimport.py create mode 100644 Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/commoncrypto/secitem.py create mode 100644 Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/commoncrypto/seckey.py create mode 100644 Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/commoncrypto/seckeychain.py create mode 100644 Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/commoncrypto/sectransform.py create mode 100644 Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/x509_vfy.py create mode 100644 Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/asymmetric/ec.py create mode 100644 Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/serialization.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/_compat.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/app.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/blueprints.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/config.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/ctx.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/debughelpers.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/ext/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/exthook.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/globals.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/helpers.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/json.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/logging.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/module.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/sessions.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/signals.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/templating.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testing.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/appctx.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/basic.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/blueprints.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/config.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/deprecations.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/examples.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/ext.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/helpers.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/regression.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/reqctx.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/signals.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/static/index.html delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/subclassing.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/templates/_macro.html delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/templates/context_template.html delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/templates/escaping_template.html delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/templates/mail.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/templates/nested/nested.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/templates/simple_template.html delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/templates/template_filter.html delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/templates/template_test.html delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/templating.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/test_apps/blueprintapp/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/test_apps/blueprintapp/apps/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/test_apps/blueprintapp/apps/admin/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/test_apps/blueprintapp/apps/admin/static/css/test.css delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/test_apps/blueprintapp/apps/admin/static/test.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/test_apps/blueprintapp/apps/admin/templates/admin/index.html delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/test_apps/blueprintapp/apps/frontend/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/test_apps/blueprintapp/apps/frontend/templates/frontend/index.html delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/test_apps/config_module_app.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/test_apps/config_package_app/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/test_apps/flask_broken/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/test_apps/flask_broken/b.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/test_apps/flask_newext_package/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/test_apps/flask_newext_package/submodule.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/test_apps/flask_newext_simple.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/test_apps/flaskext/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/test_apps/flaskext/oldext_package/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/test_apps/flaskext/oldext_package/submodule.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/test_apps/flaskext/oldext_simple.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/test_apps/importerror.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/test_apps/lib/python2.5/site-packages/SiteEgg.egg delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/test_apps/lib/python2.5/site-packages/site_app.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/test_apps/lib/python2.5/site-packages/site_package/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/test_apps/main_app.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/test_apps/moduleapp/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/test_apps/moduleapp/apps/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/test_apps/moduleapp/apps/admin/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/test_apps/moduleapp/apps/admin/static/css/test.css delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/test_apps/moduleapp/apps/admin/static/test.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/test_apps/moduleapp/apps/admin/templates/index.html delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/test_apps/moduleapp/apps/frontend/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/test_apps/moduleapp/apps/frontend/templates/index.html delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/test_apps/path/installed_package/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/test_apps/subdomaintestmodule/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/test_apps/subdomaintestmodule/static/hello.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/testing.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/testsuite/views.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/views.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask/wrappers.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask_migrate/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask_migrate/templates/flask/README delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask_migrate/templates/flask/alembic.ini.mako delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask_migrate/templates/flask/env.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask_migrate/templates/flask/script.py.mako delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask_script/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask_script/_compat.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask_script/cli.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask_script/commands.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask_sqlalchemy/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/flask_sqlalchemy/_compat.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/itsdangerous-0.24.egg-info/PKG-INFO delete mode 100644 Linux_i686/lib/python2.7/site-packages/itsdangerous-0.24.egg-info/SOURCES.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/itsdangerous-0.24.egg-info/dependency_links.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/itsdangerous-0.24.egg-info/installed-files.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/itsdangerous-0.24.egg-info/not-zip-safe delete mode 100644 Linux_i686/lib/python2.7/site-packages/itsdangerous-0.24.egg-info/top_level.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/itsdangerous.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/jinja2/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/jinja2/_compat.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/jinja2/_stringdefs.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/jinja2/bccache.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/jinja2/compiler.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/jinja2/constants.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/jinja2/debug.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/jinja2/defaults.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/jinja2/environment.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/jinja2/exceptions.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/jinja2/ext.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/jinja2/filters.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/jinja2/lexer.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/jinja2/loaders.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/jinja2/meta.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/jinja2/nodes.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/jinja2/optimizer.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/jinja2/parser.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/jinja2/runtime.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/jinja2/sandbox.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/jinja2/tests.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/jinja2/testsuite/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/jinja2/testsuite/api.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/jinja2/testsuite/bytecode_cache.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/jinja2/testsuite/core_tags.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/jinja2/testsuite/debug.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/jinja2/testsuite/doctests.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/jinja2/testsuite/ext.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/jinja2/testsuite/filters.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/jinja2/testsuite/imports.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/jinja2/testsuite/inheritance.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/jinja2/testsuite/lexnparse.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/jinja2/testsuite/loader.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/jinja2/testsuite/regression.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/jinja2/testsuite/res/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/jinja2/testsuite/res/templates/broken.html delete mode 100644 Linux_i686/lib/python2.7/site-packages/jinja2/testsuite/res/templates/foo/test.html delete mode 100644 Linux_i686/lib/python2.7/site-packages/jinja2/testsuite/res/templates/syntaxerror.html delete mode 100644 Linux_i686/lib/python2.7/site-packages/jinja2/testsuite/res/templates/test.html delete mode 100644 Linux_i686/lib/python2.7/site-packages/jinja2/testsuite/security.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/jinja2/testsuite/tests.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/jinja2/testsuite/utils.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/jinja2/utils.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/jinja2/visitor.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/mako/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/mako/_ast_util.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/mako/ast.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/mako/cache.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/mako/codegen.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/mako/compat.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/mako/exceptions.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/mako/ext/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/mako/ext/autohandler.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/mako/ext/babelplugin.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/mako/ext/beaker_cache.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/mako/ext/preprocessors.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/mako/ext/pygmentplugin.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/mako/ext/turbogears.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/mako/filters.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/mako/lexer.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/mako/lookup.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/mako/parsetree.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/mako/pygen.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/mako/pyparser.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/mako/runtime.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/mako/template.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/mako/util.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/markupsafe/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/markupsafe/_compat.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/markupsafe/_constants.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/markupsafe/_native.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/markupsafe/_speedups.c delete mode 100755 Linux_i686/lib/python2.7/site-packages/markupsafe/_speedups.so delete mode 100644 Linux_i686/lib/python2.7/site-packages/markupsafe/tests.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/six-1.6.1.egg-info/dependency_links.txt rename Linux_i686/lib/python2.7/site-packages/{six-1.6.1.egg-info => six-1.7.3.egg-info}/PKG-INFO (98%) rename Linux_i686/lib/python2.7/site-packages/{six-1.6.1.egg-info => six-1.7.3.egg-info}/SOURCES.txt (100%) rename Linux_i686/lib/python2.7/site-packages/{Flask_SQLAlchemy-1.0.egg-info => six-1.7.3.egg-info}/dependency_links.txt (100%) rename Linux_i686/lib/python2.7/site-packages/{six-1.6.1.egg-info => six-1.7.3.egg-info}/installed-files.txt (100%) rename Linux_i686/lib/python2.7/site-packages/{six-1.6.1.egg-info => six-1.7.3.egg-info}/top_level.txt (100%) delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/_version.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/application/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/application/app.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/application/internet.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/application/reactors.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/application/service.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/application/strports.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/application/test/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/application/test/test_internet.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/_version.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/avatar.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/checkers.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/client/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/client/agent.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/client/connect.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/client/default.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/client/direct.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/client/knownhosts.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/client/options.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/endpoints.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/error.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/insults/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/insults/client.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/insults/colors.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/insults/helper.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/insults/insults.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/insults/text.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/insults/window.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/interfaces.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/ls.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/manhole.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/manhole_ssh.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/manhole_tap.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/mixin.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/openssh_compat/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/openssh_compat/factory.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/openssh_compat/primes.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/recvline.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/scripts/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/scripts/cftp.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/scripts/ckeygen.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/scripts/conch.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/scripts/tkconch.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/ssh/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/ssh/address.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/ssh/agent.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/ssh/channel.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/ssh/common.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/ssh/connection.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/ssh/factory.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/ssh/filetransfer.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/ssh/forwarding.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/ssh/keys.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/ssh/service.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/ssh/session.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/ssh/sexpy.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/ssh/transport.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/ssh/userauth.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/stdio.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/tap.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/telnet.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/test/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/test/keydata.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/test/test_address.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/test/test_agent.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/test/test_cftp.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/test/test_channel.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/test/test_checkers.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/test/test_ckeygen.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/test/test_conch.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/test/test_connection.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/test/test_default.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/test/test_endpoints.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/test/test_filetransfer.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/test/test_helper.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/test/test_insults.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/test/test_keys.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/test/test_knownhosts.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/test/test_manhole.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/test/test_mixin.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/test/test_openssh_compat.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/test/test_recvline.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/test/test_scripts.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/test/test_session.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/test/test_ssh.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/test/test_tap.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/test/test_telnet.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/test/test_text.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/test/test_transport.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/test/test_userauth.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/test/test_window.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/topfiles/NEWS delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/topfiles/README delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/ttymodes.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/ui/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/ui/ansi.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/ui/tkvt100.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/conch/unix.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/copyright.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/cred/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/cred/_digest.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/cred/checkers.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/cred/credentials.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/cred/error.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/cred/pamauth.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/cred/portal.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/cred/strcred.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/enterprise/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/enterprise/adbapi.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/_baseprocess.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/_dumbwin32proc.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/_glibbase.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/_newtls.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/_pollingfile.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/_posixserialport.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/_posixstdio.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/_signals.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/_ssl.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/_sslverify.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/_threadedselect.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/_win32serialport.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/_win32stdio.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/abstract.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/address.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/base.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/cfreactor.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/default.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/defer.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/endpoints.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/epollreactor.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/error.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/fdesc.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/gireactor.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/glib2reactor.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/gtk2reactor.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/gtk3reactor.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/gtkreactor.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/inotify.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/interfaces.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/iocpreactor/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/iocpreactor/abstract.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/iocpreactor/build.bat delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/iocpreactor/const.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/iocpreactor/interfaces.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/iocpreactor/iocpsupport/acceptex.pxi delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/iocpreactor/iocpsupport/connectex.pxi delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/iocpreactor/iocpsupport/iocpsupport.c delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/iocpreactor/iocpsupport/iocpsupport.pyx delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/iocpreactor/iocpsupport/winsock_pointers.c delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/iocpreactor/iocpsupport/winsock_pointers.h delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/iocpreactor/iocpsupport/wsarecv.pxi delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/iocpreactor/iocpsupport/wsasend.pxi delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/iocpreactor/notes.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/iocpreactor/reactor.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/iocpreactor/setup.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/iocpreactor/tcp.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/iocpreactor/udp.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/kqreactor.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/main.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/pollreactor.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/posixbase.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/process.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/protocol.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/pyuisupport.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/qtreactor.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/reactor.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/selectreactor.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/serialport.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/ssl.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/stdio.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/task.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/tcp.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/_posixifaces.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/_win32ifaces.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/connectionmixins.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/fake_CAs/chain.pem delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/fake_CAs/not-a-certificate delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/fake_CAs/thing1.pem delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/fake_CAs/thing2-duplicate.pem delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/fake_CAs/thing2.pem delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/fakeendpoint.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/modulehelpers.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/process_gireactornocompat.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/process_helper.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/reactormixins.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/test_abstract.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/test_address.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/test_base.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/test_baseprocess.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/test_core.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/test_default.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/test_endpoints.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/test_epollreactor.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/test_fdset.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/test_filedescriptor.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/test_gireactor.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/test_glibbase.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/test_gtkreactor.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/test_inlinecb.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/test_inotify.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/test_iocp.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/test_main.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/test_newtls.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/test_pollingfile.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/test_posixbase.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/test_posixprocess.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/test_process.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/test_protocol.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/test_qtreactor.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/test_serialport.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/test_sigchld.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/test_socket.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/test_stdio.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/test_tcp.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/test_threads.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/test_time.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/test_tls.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/test_udp.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/test_udp_internals.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/test_unix.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/test/test_win32events.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/threads.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/tksupport.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/udp.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/unix.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/utils.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/win32eventreactor.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/wxreactor.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/internet/wxsupport.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/_version.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/default.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/docbook.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/htmlbook.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/indexer.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/latex.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/lint.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/lmath.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/man2lore.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/numberer.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/process.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/scripts/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/scripts/lore.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/slides.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/template.mgp delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/test/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/test/lore_index_file_out.html delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/test/lore_index_file_out_multiple.html delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/test/lore_index_file_unnumbered_out.html delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/test/lore_index_test.xhtml delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/test/lore_index_test2.xhtml delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/test/lore_numbering_test_out.html delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/test/lore_numbering_test_out2.html delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/test/simple.html delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/test/simple3.html delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/test/simple4.html delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/test/template.tpl delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/test/test_docbook.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/test/test_latex.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/test/test_lint.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/test/test_lmath.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/test/test_lore.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/test/test_man2lore.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/test/test_scripts.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/test/test_slides.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/test/test_texi.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/texi.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/topfiles/NEWS delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/topfiles/README delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/tree.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/xhtml-lat1.ent delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/xhtml-special.ent delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/xhtml-symbol.ent delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/xhtml1-strict.dtd delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/lore/xhtml1-transitional.dtd delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/mail/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/mail/_version.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/mail/alias.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/mail/bounce.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/mail/imap4.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/mail/mail.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/mail/maildir.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/mail/pb.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/mail/pop3.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/mail/pop3client.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/mail/protocols.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/mail/relay.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/mail/relaymanager.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/mail/scripts/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/mail/scripts/mailmail.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/mail/smtp.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/mail/tap.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/mail/test/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/mail/test/pop3testserver.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/mail/test/rfc822.message delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/mail/test/server.pem delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/mail/test/test_bounce.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/mail/test/test_imap.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/mail/test/test_mail.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/mail/test/test_mailmail.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/mail/test/test_options.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/mail/test/test_pop3.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/mail/test/test_pop3client.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/mail/test/test_scripts.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/mail/test/test_smtp.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/mail/topfiles/NEWS delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/mail/topfiles/README delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/manhole/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/manhole/_inspectro.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/manhole/explorer.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/manhole/gladereactor.glade delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/manhole/gladereactor.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/manhole/inspectro.glade delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/manhole/logview.glade delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/manhole/service.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/manhole/telnet.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/manhole/test/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/manhole/test/test_explorer.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/manhole/ui/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/manhole/ui/gtk2manhole.glade delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/manhole/ui/gtk2manhole.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/manhole/ui/test/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/manhole/ui/test/test_gtk2manhole.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/names/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/names/_rfc1982.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/names/_version.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/names/authority.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/names/cache.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/names/client.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/names/common.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/names/dns.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/names/error.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/names/hosts.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/names/resolve.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/names/root.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/names/secondary.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/names/server.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/names/srvconnect.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/names/tap.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/names/test/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/names/test/test_cache.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/names/test/test_client.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/names/test/test_common.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/names/test/test_dns.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/names/test/test_examples.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/names/test/test_hosts.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/names/test/test_names.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/names/test/test_resolve.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/names/test/test_rfc1982.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/names/test/test_rootresolve.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/names/test/test_server.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/names/test/test_srvconnect.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/names/test/test_tap.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/names/topfiles/NEWS delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/names/topfiles/README delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/news/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/news/_version.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/news/database.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/news/news.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/news/nntp.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/news/tap.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/news/test/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/news/test/test_database.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/news/test/test_news.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/news/test/test_nntp.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/news/topfiles/NEWS delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/news/topfiles/README delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/pair/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/pair/_version.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/pair/ethernet.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/pair/ip.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/pair/raw.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/pair/rawudp.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/pair/test/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/pair/test/test_ethernet.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/pair/test/test_ip.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/pair/test/test_rawudp.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/pair/test/test_tuntap.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/pair/testing.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/pair/topfiles/NEWS delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/pair/topfiles/README delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/pair/tuntap.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/persisted/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/persisted/aot.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/persisted/crefutil.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/persisted/dirdbm.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/persisted/sob.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/persisted/styles.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/persisted/test/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/persisted/test/test_styles.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/plugin.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/plugins/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/plugins/cred_anonymous.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/plugins/cred_file.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/plugins/cred_memory.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/plugins/cred_sshkeys.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/plugins/cred_unix.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/plugins/twisted_conch.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/plugins/twisted_core.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/plugins/twisted_ftp.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/plugins/twisted_inet.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/plugins/twisted_lore.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/plugins/twisted_mail.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/plugins/twisted_manhole.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/plugins/twisted_names.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/plugins/twisted_news.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/plugins/twisted_portforward.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/plugins/twisted_qtstub.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/plugins/twisted_reactors.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/plugins/twisted_runner.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/plugins/twisted_socks.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/plugins/twisted_telnet.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/plugins/twisted_trial.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/plugins/twisted_web.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/plugins/twisted_words.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/positioning/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/positioning/_sentence.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/positioning/base.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/positioning/ipositioning.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/positioning/nmea.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/positioning/test/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/positioning/test/receiver.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/positioning/test/test_base.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/positioning/test/test_nmea.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/positioning/test/test_sentence.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/protocols/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/protocols/amp.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/protocols/basic.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/protocols/dict.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/protocols/finger.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/protocols/ftp.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/protocols/gps/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/protocols/gps/nmea.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/protocols/gps/rockwell.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/protocols/htb.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/protocols/ident.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/protocols/loopback.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/protocols/memcache.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/protocols/mice/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/protocols/mice/mouseman.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/protocols/pcp.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/protocols/policies.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/protocols/portforward.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/protocols/postfix.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/protocols/shoutcast.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/protocols/sip.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/protocols/socks.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/protocols/stateful.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/protocols/telnet.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/protocols/test/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/protocols/test/test_basic.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/protocols/test/test_tls.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/protocols/tls.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/protocols/wire.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/_initgroups.c delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/_inotify.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/_release.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/_shellcomp.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/_textattributes.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/compat.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/components.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/constants.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/context.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/deprecate.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/dist.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/dist3.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/failure.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/fakepwd.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/filepath.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/finalize.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/formmethod.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/hashlib.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/hook.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/htmlizer.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/lockfile.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/log.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/logfile.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/modules.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/monkey.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/procutils.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/randbytes.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/rebuild.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/reflect.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/release.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/roots.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/runtime.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/sendmsg.c delete mode 100755 Linux_i686/lib/python2.7/site-packages/twisted/python/sendmsg.so delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/shortcut.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/syslog.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/systemd.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/test/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/test/deprecatedattributes.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/test/modules_helpers.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/test/pullpipe.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/test/test_components.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/test/test_constants.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/test/test_deprecate.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/test/test_dist.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/test/test_dist3.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/test/test_fakepwd.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/test/test_hashlib.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/test/test_htmlizer.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/test/test_inotify.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/test/test_release.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/test/test_runtime.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/test/test_sendmsg.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/test/test_shellcomp.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/test/test_syslog.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/test/test_systemd.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/test/test_textattributes.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/test/test_urlpath.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/test/test_util.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/test/test_versions.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/test/test_win32.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/test/test_zippath.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/test/test_zipstream.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/text.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/threadable.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/threadpool.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/twisted-completion.zsh delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/urlpath.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/usage.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/util.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/versions.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/win32.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/zippath.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/zipstream.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/zsh/README.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/zsh/_cftp delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/zsh/_ckeygen delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/zsh/_conch delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/zsh/_lore delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/zsh/_manhole delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/zsh/_mktap delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/zsh/_pyhtmlizer delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/zsh/_tap2deb delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/zsh/_tap2rpm delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/zsh/_tapconvert delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/zsh/_tkconch delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/zsh/_tkmktap delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/zsh/_trial delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/zsh/_twistd delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/python/zsh/_websetroot delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/runner/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/runner/_version.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/runner/inetd.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/runner/inetdconf.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/runner/inetdtap.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/runner/portmap.c delete mode 100755 Linux_i686/lib/python2.7/site-packages/twisted/runner/portmap.so delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/runner/procmon.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/runner/procmontap.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/runner/test/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/runner/test/test_procmon.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/runner/test/test_procmontap.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/runner/topfiles/NEWS delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/runner/topfiles/README delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/scripts/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/scripts/_twistd_unix.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/scripts/_twistw.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/scripts/htmlizer.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/scripts/manhole.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/scripts/tap2deb.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/scripts/tap2rpm.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/scripts/tapconvert.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/scripts/test/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/scripts/test/test_scripts.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/scripts/test/test_tap2deb.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/scripts/test/test_tap2rpm.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/scripts/tkunzip.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/scripts/trial.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/scripts/twistd.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/spread/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/spread/banana.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/spread/flavors.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/spread/interfaces.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/spread/jelly.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/spread/pb.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/spread/publish.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/spread/ui/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/spread/ui/gtk2util.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/spread/ui/login2.glade delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/spread/ui/tktree.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/spread/ui/tkutil.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/spread/util.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/tap/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/tap/ftp.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/tap/manhole.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/tap/portforward.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/tap/socks.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/tap/telnet.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/_preamble.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/crash_test_dummy.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/iosim.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/mock_win32process.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/myrebuilder1.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/myrebuilder2.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/plugin_basic.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/plugin_extra1.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/plugin_extra2.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/process_cmdline.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/process_echoer.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/process_fds.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/process_linger.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/process_reader.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/process_signal.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/process_stdinreader.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/process_tester.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/process_tty.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/process_twisted.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/proto_helpers.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/raiser.c delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/raiser.pyx delete mode 100755 Linux_i686/lib/python2.7/site-packages/twisted/test/raiser.so delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/reflect_helper_IE.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/reflect_helper_VE.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/reflect_helper_ZDE.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/server.pem delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/ssl_helpers.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/stdio_test_consumer.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/stdio_test_halfclose.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/stdio_test_hostpeer.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/stdio_test_lastwrite.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/stdio_test_loseconn.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/stdio_test_producer.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/stdio_test_write.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/stdio_test_writeseq.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_abstract.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_adbapi.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_amp.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_application.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_banana.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_compat.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_context.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_cooperator.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_defer.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_defgen.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_dict.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_digestauth.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_dirdbm.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_doc.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_error.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_explorer.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_factories.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_failure.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_fdesc.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_finger.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_formmethod.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_ftp.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_ftp_options.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_hook.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_htb.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_ident.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_internet.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_iosim.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_iutils.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_jelly.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_lockfile.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_log.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_logfile.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_loopback.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_manhole.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_memcache.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_modules.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_monkey.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_newcred.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_nmea.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_paths.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_pb.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_pbfailure.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_pcp.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_persisted.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_plugin.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_policies.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_postfix.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_process.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_protocols.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_randbytes.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_rebuild.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_reflect.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_roots.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_setup.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_shortcut.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_sip.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_sob.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_socks.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_ssl.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_sslverify.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_stateful.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_stdio.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_strcred.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_strerror.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_stringtransport.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_strports.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_task.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_tcp.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_tcp_internals.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_text.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_threadable.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_threadpool.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_threads.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_tpfile.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_twistd.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_twisted.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_udp.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_unix.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/test_usage.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/test/testutils.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/topfiles/CREDITS delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/topfiles/ChangeLog.Old delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/topfiles/NEWS delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/topfiles/README delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/_asyncrunner.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/_asynctest.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/_dist/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/_dist/distreporter.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/_dist/disttrial.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/_dist/managercommands.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/_dist/options.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/_dist/test/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/_dist/test/test_distreporter.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/_dist/test/test_disttrial.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/_dist/test/test_options.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/_dist/test/test_worker.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/_dist/test/test_workerreporter.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/_dist/test/test_workertrial.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/_dist/worker.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/_dist/workercommands.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/_dist/workerreporter.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/_dist/workertrial.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/_synctest.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/itrial.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/reporter.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/runner.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/test/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/test/detests.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/test/erroneous.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/test/mockcustomsuite.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/test/mockcustomsuite2.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/test/mockcustomsuite3.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/test/mockdoctest.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/test/moduleself.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/test/moduletest.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/test/novars.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/test/ordertests.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/test/packages.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/test/sample.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/test/scripttest.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/test/skipping.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/test/suppression.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/test/test_assertions.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/test/test_asyncassertions.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/test/test_deferred.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/test/test_doctest.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/test/test_keyboard.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/test/test_loader.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/test/test_log.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/test/test_output.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/test/test_plugins.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/test/test_pyunitcompat.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/test/test_reporter.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/test/test_runner.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/test/test_script.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/test/test_suppression.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/test/test_testcase.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/test/test_tests.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/test/test_util.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/test/test_warning.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/test/weird.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/unittest.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/trial/util.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/_auth/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/_auth/basic.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/_auth/digest.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/_auth/wrapper.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/_element.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/_flatten.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/_newclient.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/_responses.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/_stan.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/_version.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/client.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/demo.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/distrib.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/domhelpers.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/error.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/failure.xhtml delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/guard.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/html.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/http.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/http_headers.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/iweb.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/microdom.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/proxy.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/resource.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/rewrite.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/script.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/server.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/soap.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/static.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/sux.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/tap.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/template.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/test/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/test/_util.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/test/requesthelper.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/test/test_agent.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/test/test_cgi.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/test/test_distrib.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/test/test_domhelpers.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/test/test_error.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/test/test_flatten.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/test/test_http.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/test/test_http_headers.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/test/test_httpauth.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/test/test_newclient.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/test/test_proxy.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/test/test_resource.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/test/test_script.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/test/test_soap.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/test/test_stan.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/test/test_static.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/test/test_tap.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/test/test_template.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/test/test_util.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/test/test_vhost.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/test/test_web.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/test/test_webclient.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/test/test_wsgi.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/test/test_xml.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/test/test_xmlrpc.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/topfiles/NEWS delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/topfiles/README delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/twcgi.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/util.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/vhost.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/wsgi.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/web/xmlrpc.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/_version.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/ewords.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/im/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/im/baseaccount.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/im/basechat.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/im/basesupport.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/im/instancemessenger.glade delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/im/interfaces.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/im/ircsupport.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/im/locals.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/im/pbsupport.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/iwords.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/protocols/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/protocols/irc.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/protocols/jabber/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/protocols/jabber/client.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/protocols/jabber/component.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/protocols/jabber/error.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/protocols/jabber/ijabber.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/protocols/jabber/jid.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/protocols/jabber/jstrports.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/protocols/jabber/sasl.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/protocols/jabber/sasl_mechanisms.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/protocols/jabber/xmlstream.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/protocols/jabber/xmpp_stringprep.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/protocols/msn.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/protocols/oscar.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/service.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/tap.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/test/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/test/test_basechat.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/test/test_basesupport.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/test/test_domish.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/test/test_irc.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/test/test_irc_service.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/test/test_ircsupport.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/test/test_jabberclient.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/test/test_jabbercomponent.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/test/test_jabbererror.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/test/test_jabberjid.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/test/test_jabberjstrports.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/test/test_jabbersasl.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/test/test_jabbersaslmechanisms.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/test/test_jabberxmlstream.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/test/test_jabberxmppstringprep.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/test/test_msn.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/test/test_oscar.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/test/test_service.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/test/test_tap.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/test/test_xishutil.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/test/test_xmlstream.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/test/test_xmpproutertap.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/test/test_xpath.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/topfiles/NEWS delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/topfiles/README delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/xish/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/xish/domish.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/xish/utility.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/xish/xmlstream.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/xish/xpath.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/xish/xpathparser.g delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/xish/xpathparser.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/twisted/words/xmpproutertap.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/_compat.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/_internal.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/contrib/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/contrib/atom.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/contrib/cache.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/contrib/fixers.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/contrib/iterio.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/contrib/jsrouting.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/contrib/limiter.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/contrib/lint.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/contrib/profiler.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/contrib/securecookie.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/contrib/sessions.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/contrib/testtools.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/contrib/wrappers.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/datastructures.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/debug/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/debug/console.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/debug/repr.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/debug/shared/FONT_LICENSE delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/debug/shared/console.png delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/debug/shared/debugger.js delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/debug/shared/jquery.js delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/debug/shared/less.png delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/debug/shared/more.png delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/debug/shared/source.png delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/debug/shared/style.css delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/debug/shared/ubuntu.ttf delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/debug/tbtools.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/exceptions.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/formparser.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/http.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/local.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/posixemulation.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/routing.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/script.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/security.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/serving.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/test.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testapp.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/compat.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/contrib/__init__.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/contrib/cache.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/contrib/fixers.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/contrib/iterio.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/contrib/securecookie.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/contrib/sessions.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/contrib/wrappers.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/datastructures.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/debug.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/exceptions.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/formparser.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/http.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/internal.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/local.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/multipart/collect.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/multipart/firefox3-2png1txt/file1.png delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/multipart/firefox3-2png1txt/file2.png delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/multipart/firefox3-2png1txt/request.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/multipart/firefox3-2png1txt/text.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/multipart/firefox3-2pnglongtext/file1.png delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/multipart/firefox3-2pnglongtext/file2.png delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/multipart/firefox3-2pnglongtext/request.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/multipart/firefox3-2pnglongtext/text.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/multipart/ie6-2png1txt/file1.png delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/multipart/ie6-2png1txt/file2.png delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/multipart/ie6-2png1txt/request.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/multipart/ie6-2png1txt/text.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/multipart/ie7_full_path_request.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/multipart/opera8-2png1txt/file1.png delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/multipart/opera8-2png1txt/file2.png delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/multipart/opera8-2png1txt/request.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/multipart/opera8-2png1txt/text.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/multipart/webkit3-2png1txt/file1.png delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/multipart/webkit3-2png1txt/file2.png delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/multipart/webkit3-2png1txt/request.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/multipart/webkit3-2png1txt/text.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/res/test.txt delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/routing.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/security.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/serving.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/test.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/urls.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/utils.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/wrappers.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/testsuite/wsgi.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/urls.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/useragents.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/utils.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/wrappers.py delete mode 100644 Linux_i686/lib/python2.7/site-packages/werkzeug/wsgi.py diff --git a/Linux_i686/bin/alembic b/Linux_i686/bin/alembic deleted file mode 100755 index ad61885..0000000 --- a/Linux_i686/bin/alembic +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/python -# EASY-INSTALL-ENTRY-SCRIPT: 'alembic==0.6.5','console_scripts','alembic' -__requires__ = 'alembic==0.6.5' -import sys -from pkg_resources import load_entry_point - -if __name__ == '__main__': - sys.exit( - load_entry_point('alembic==0.6.5', 'console_scripts', 'alembic')() - ) diff --git a/Linux_i686/bin/cftp b/Linux_i686/bin/cftp deleted file mode 100755 index bd7f3db..0000000 --- a/Linux_i686/bin/cftp +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/python -# Copyright (c) Twisted Matrix Laboratories. -# See LICENSE for details. - -import sys, os -extra = os.path.dirname(os.path.dirname(sys.argv[0])) -sys.path.insert(0, extra) -try: - import _preamble -except ImportError: - sys.exc_clear() -sys.path.remove(extra) - -from twisted.conch.scripts.cftp import run -run() diff --git a/Linux_i686/bin/ckeygen b/Linux_i686/bin/ckeygen deleted file mode 100755 index bf12fe3..0000000 --- a/Linux_i686/bin/ckeygen +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/python -# Copyright (c) Twisted Matrix Laboratories. -# See LICENSE for details. - -import sys, os -extra = os.path.dirname(os.path.dirname(sys.argv[0])) -sys.path.insert(0, extra) -try: - import _preamble -except ImportError: - sys.exc_clear() -sys.path.remove(extra) - -from twisted.conch.scripts.ckeygen import run -run() diff --git a/Linux_i686/bin/conch b/Linux_i686/bin/conch deleted file mode 100755 index 304dd29..0000000 --- a/Linux_i686/bin/conch +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/python -# Copyright (c) Twisted Matrix Laboratories. -# See LICENSE for details. - -import sys, os -extra = os.path.dirname(os.path.dirname(sys.argv[0])) -sys.path.insert(0, extra) -try: - import _preamble -except ImportError: - sys.exc_clear() -sys.path.remove(extra) - -from twisted.conch.scripts.conch import run -run() diff --git a/Linux_i686/bin/lore b/Linux_i686/bin/lore deleted file mode 100755 index 0b497e3..0000000 --- a/Linux_i686/bin/lore +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/python -# Copyright (c) Twisted Matrix Laboratories. -# See LICENSE for details. - -import sys, os -extra = os.path.dirname(os.path.dirname(sys.argv[0])) -sys.path.insert(0, extra) -try: - import _preamble -except ImportError: - sys.exc_clear() -sys.path.remove(extra) - -from twisted.lore.scripts.lore import run -run() - diff --git a/Linux_i686/bin/mailmail b/Linux_i686/bin/mailmail deleted file mode 100755 index 1fc026d..0000000 --- a/Linux_i686/bin/mailmail +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/python -# Copyright (c) Twisted Matrix Laboratories. -# See LICENSE for details. - -""" -This script attempts to send some email. -""" - -import sys, os -extra = os.path.dirname(os.path.dirname(sys.argv[0])) -sys.path.insert(0, extra) -try: - import _preamble -except ImportError: - sys.exc_clear() -sys.path.remove(extra) - -from twisted.mail.scripts import mailmail -mailmail.run() - diff --git a/Linux_i686/bin/mako-render b/Linux_i686/bin/mako-render deleted file mode 100755 index 62b2386..0000000 --- a/Linux_i686/bin/mako-render +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/python - -def render(data, filename, kw): - from mako.template import Template - from mako.lookup import TemplateLookup - - lookup = TemplateLookup(["."]) - return Template(data, filename, lookup=lookup).render(**kw) - -def varsplit(var): - if "=" not in var: - return (var, "") - return var.split("=", 1) - -def main(argv=None): - from os.path import isfile - from sys import stdin - - if argv is None: - import sys - argv = sys.argv - - from optparse import OptionParser - - parser = OptionParser("usage: %prog [FILENAME]") - parser.add_option("--var", default=[], action="append", - help="variable (can be used multiple times, use name=value)") - - opts, args = parser.parse_args(argv[1:]) - if len(args) not in (0, 1): - parser.error("wrong number of arguments") # Will exit - - if (len(args) == 0) or (args[0] == "-"): - fo = stdin - else: - filename = args[0] - if not isfile(filename): - raise SystemExit("error: can't find %s" % filename) - fo = open(filename) - - kw = dict([varsplit(var) for var in opts.var]) - data = fo.read() - print(render(data, filename, kw)) - -if __name__ == "__main__": - main() diff --git a/Linux_i686/bin/manhole b/Linux_i686/bin/manhole deleted file mode 100755 index ff66286..0000000 --- a/Linux_i686/bin/manhole +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/python -# Copyright (c) Twisted Matrix Laboratories. -# See LICENSE for details. - -""" -This script runs GtkManhole, a client for Twisted.Manhole -""" -import sys - -try: - import _preamble -except ImportError: - sys.exc_clear() - -from twisted.scripts import manhole -manhole.run() diff --git a/Linux_i686/bin/pyhtmlizer b/Linux_i686/bin/pyhtmlizer deleted file mode 100755 index 430f788..0000000 --- a/Linux_i686/bin/pyhtmlizer +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/python -# Copyright (c) Twisted Matrix Laboratories. -# See LICENSE for details. -import sys - -try: - import _preamble -except ImportError: - sys.exc_clear() - -from twisted.scripts.htmlizer import run -run() diff --git a/Linux_i686/bin/tap2deb b/Linux_i686/bin/tap2deb deleted file mode 100755 index 3f90d25..0000000 --- a/Linux_i686/bin/tap2deb +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/python -# Copyright (c) Twisted Matrix Laboratories. -# See LICENSE for details. - -""" -tap2deb -""" -import sys - -try: - import _preamble -except ImportError: - sys.exc_clear() - -from twisted.scripts import tap2deb -tap2deb.run() diff --git a/Linux_i686/bin/tap2rpm b/Linux_i686/bin/tap2rpm deleted file mode 100755 index 3667858..0000000 --- a/Linux_i686/bin/tap2rpm +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/python -# Copyright (c) Twisted Matrix Laboratories. -# See LICENSE for details. - -# based off the tap2deb code -# tap2rpm built by Sean Reifschneider, - -""" -tap2rpm -""" -import sys - -try: - import _preamble -except ImportError: - sys.exc_clear() - -from twisted.scripts import tap2rpm -tap2rpm.run() diff --git a/Linux_i686/bin/tapconvert b/Linux_i686/bin/tapconvert deleted file mode 100755 index fb7fe59..0000000 --- a/Linux_i686/bin/tapconvert +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/python -# Copyright (c) Twisted Matrix Laboratories. -# See LICENSE for details. -import sys - -try: - import _preamble -except ImportError: - sys.exc_clear() - -from twisted.scripts.tapconvert import run -run() diff --git a/Linux_i686/bin/tkconch b/Linux_i686/bin/tkconch deleted file mode 100755 index 5b123a7..0000000 --- a/Linux_i686/bin/tkconch +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/python -# Copyright (c) Twisted Matrix Laboratories. -# See LICENSE for details. - -import sys, os -extra = os.path.dirname(os.path.dirname(sys.argv[0])) -sys.path.insert(0, extra) -try: - import _preamble -except ImportError: - sys.exc_clear() -sys.path.remove(extra) - -from twisted.conch.scripts.tkconch import run -run() diff --git a/Linux_i686/bin/trial b/Linux_i686/bin/trial deleted file mode 100755 index 64a38cf..0000000 --- a/Linux_i686/bin/trial +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/python -# Copyright (c) Twisted Matrix Laboratories. -# See LICENSE for details. -import os, sys - -try: - import _preamble -except ImportError: - sys.exc_clear() - -# begin chdir armor -sys.path[:] = map(os.path.abspath, sys.path) -# end chdir armor - -sys.path.insert(0, os.path.abspath(os.getcwd())) - -from twisted.scripts.trial import run -run() diff --git a/Linux_i686/bin/twistd b/Linux_i686/bin/twistd deleted file mode 100755 index 8cf908d..0000000 --- a/Linux_i686/bin/twistd +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/python -# Copyright (c) Twisted Matrix Laboratories. -# See LICENSE for details. -import os, sys - -try: - import _preamble -except ImportError: - sys.exc_clear() - -sys.path.insert(0, os.path.abspath(os.getcwd())) - -from twisted.scripts.twistd import run -run() diff --git a/Linux_i686/lib/python2.7/site-packages/Flask-0.10.1.egg-info/PKG-INFO b/Linux_i686/lib/python2.7/site-packages/Flask-0.10.1.egg-info/PKG-INFO deleted file mode 100644 index 1ff4f1a..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Flask-0.10.1.egg-info/PKG-INFO +++ /dev/null @@ -1,58 +0,0 @@ -Metadata-Version: 1.1 -Name: Flask -Version: 0.10.1 -Summary: A microframework based on Werkzeug, Jinja2 and good intentions -Home-page: http://github.com/mitsuhiko/flask/ -Author: Armin Ronacher -Author-email: armin.ronacher@active-4.com -License: BSD -Description: - Flask - ----- - - Flask is a microframework for Python based on Werkzeug, Jinja 2 and good - intentions. And before you ask: It's BSD licensed! - - Flask is Fun - ```````````` - - .. code:: python - - from flask import Flask - app = Flask(__name__) - - @app.route("/") - def hello(): - return "Hello World!" - - if __name__ == "__main__": - app.run() - - And Easy to Setup - ````````````````` - - .. code:: bash - - $ pip install Flask - $ python hello.py - * Running on http://localhost:5000/ - - Links - ````` - - * `website `_ - * `documentation `_ - * `development version - `_ - - -Platform: any -Classifier: Development Status :: 4 - Beta -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: Topic :: Internet :: WWW/HTTP :: Dynamic Content -Classifier: Topic :: Software Development :: Libraries :: Python Modules diff --git a/Linux_i686/lib/python2.7/site-packages/Flask-0.10.1.egg-info/SOURCES.txt b/Linux_i686/lib/python2.7/site-packages/Flask-0.10.1.egg-info/SOURCES.txt deleted file mode 100644 index e326cfc..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Flask-0.10.1.egg-info/SOURCES.txt +++ /dev/null @@ -1,238 +0,0 @@ -AUTHORS -CHANGES -LICENSE -MANIFEST.in -Makefile -README -run-tests.py -setup.cfg -setup.py -Flask.egg-info/PKG-INFO -Flask.egg-info/SOURCES.txt -Flask.egg-info/dependency_links.txt -Flask.egg-info/not-zip-safe -Flask.egg-info/requires.txt -Flask.egg-info/top_level.txt -artwork/.DS_Store -artwork/LICENSE -artwork/logo-full.svg -docs/.gitignore -docs/Makefile -docs/advanced_foreword.rst -docs/api.rst -docs/appcontext.rst -docs/becomingbig.rst -docs/blueprints.rst -docs/changelog.rst -docs/conf.py -docs/config.rst -docs/contents.rst.inc -docs/design.rst -docs/errorhandling.rst -docs/extensiondev.rst -docs/extensions.rst -docs/flaskdocext.py -docs/flaskext.py -docs/flaskstyle.sty -docs/foreword.rst -docs/htmlfaq.rst -docs/index.rst -docs/installation.rst -docs/latexindex.rst -docs/license.rst -docs/logo.pdf -docs/make.bat -docs/python3.rst -docs/quickstart.rst -docs/reqcontext.rst -docs/security.rst -docs/shell.rst -docs/signals.rst -docs/styleguide.rst -docs/templating.rst -docs/testing.rst -docs/unicode.rst -docs/upgrading.rst -docs/views.rst -docs/_static/debugger.png -docs/_static/flask.png -docs/_static/flaskr.png -docs/_static/logo-full.png -docs/_static/no.png -docs/_static/touch-icon.png -docs/_static/yes.png -docs/_templates/sidebarintro.html -docs/_templates/sidebarlogo.html -docs/_themes/.git -docs/_themes/.gitignore -docs/_themes/LICENSE -docs/_themes/README -docs/_themes/flask_theme_support.py -docs/_themes/flask/layout.html -docs/_themes/flask/relations.html -docs/_themes/flask/theme.conf -docs/_themes/flask/static/flasky.css_t -docs/_themes/flask/static/small_flask.css -docs/_themes/flask_small/layout.html -docs/_themes/flask_small/theme.conf -docs/_themes/flask_small/static/flasky.css_t -docs/deploying/cgi.rst -docs/deploying/fastcgi.rst -docs/deploying/index.rst -docs/deploying/mod_wsgi.rst -docs/deploying/uwsgi.rst -docs/deploying/wsgi-standalone.rst -docs/patterns/apierrors.rst -docs/patterns/appdispatch.rst -docs/patterns/appfactories.rst -docs/patterns/caching.rst -docs/patterns/celery.rst -docs/patterns/deferredcallbacks.rst -docs/patterns/distribute.rst -docs/patterns/errorpages.rst -docs/patterns/fabric.rst -docs/patterns/favicon.rst -docs/patterns/fileuploads.rst -docs/patterns/flashing.rst -docs/patterns/index.rst -docs/patterns/jquery.rst -docs/patterns/lazyloading.rst -docs/patterns/methodoverrides.rst -docs/patterns/mongokit.rst -docs/patterns/packages.rst -docs/patterns/requestchecksum.rst -docs/patterns/sqlalchemy.rst -docs/patterns/sqlite3.rst -docs/patterns/streaming.rst -docs/patterns/templateinheritance.rst -docs/patterns/urlprocessors.rst -docs/patterns/viewdecorators.rst -docs/patterns/wtforms.rst -docs/tutorial/css.rst -docs/tutorial/dbcon.rst -docs/tutorial/dbinit.rst -docs/tutorial/folders.rst -docs/tutorial/index.rst -docs/tutorial/introduction.rst -docs/tutorial/schema.rst -docs/tutorial/setup.rst -docs/tutorial/templates.rst -docs/tutorial/testing.rst -docs/tutorial/views.rst -examples/.DS_Store -examples/blueprintexample/blueprintexample.py -examples/blueprintexample/blueprintexample_test.py -examples/blueprintexample/simple_page/__init__.py -examples/blueprintexample/simple_page/simple_page.py -examples/blueprintexample/simple_page/templates/pages/hello.html -examples/blueprintexample/simple_page/templates/pages/index.html -examples/blueprintexample/simple_page/templates/pages/layout.html -examples/blueprintexample/simple_page/templates/pages/world.html -examples/flaskr/README -examples/flaskr/flaskr.py -examples/flaskr/flaskr_tests.py -examples/flaskr/schema.sql -examples/flaskr/static/style.css -examples/flaskr/templates/layout.html -examples/flaskr/templates/login.html -examples/flaskr/templates/show_entries.html -examples/jqueryexample/jqueryexample.py -examples/jqueryexample/templates/index.html -examples/jqueryexample/templates/layout.html -examples/minitwit/README -examples/minitwit/minitwit.py -examples/minitwit/minitwit_tests.py -examples/minitwit/schema.sql -examples/minitwit/static/style.css -examples/minitwit/templates/layout.html -examples/minitwit/templates/login.html -examples/minitwit/templates/register.html -examples/minitwit/templates/timeline.html -examples/persona/.DS_Store -examples/persona/persona.py -examples/persona/static/.DS_Store -examples/persona/static/persona.js -examples/persona/static/spinner.png -examples/persona/static/style.css -examples/persona/templates/index.html -examples/persona/templates/layout.html -flask/__init__.py -flask/_compat.py -flask/app.py -flask/blueprints.py -flask/config.py -flask/ctx.py -flask/debughelpers.py -flask/exthook.py -flask/globals.py -flask/helpers.py -flask/json.py -flask/logging.py -flask/module.py -flask/sessions.py -flask/signals.py -flask/templating.py -flask/testing.py -flask/views.py -flask/wrappers.py -flask/ext/__init__.py -flask/testsuite/__init__.py -flask/testsuite/appctx.py -flask/testsuite/basic.py -flask/testsuite/blueprints.py -flask/testsuite/config.py -flask/testsuite/deprecations.py -flask/testsuite/examples.py -flask/testsuite/ext.py -flask/testsuite/helpers.py -flask/testsuite/regression.py -flask/testsuite/reqctx.py -flask/testsuite/signals.py -flask/testsuite/subclassing.py -flask/testsuite/templating.py -flask/testsuite/testing.py -flask/testsuite/views.py -flask/testsuite/static/index.html -flask/testsuite/templates/_macro.html -flask/testsuite/templates/context_template.html -flask/testsuite/templates/escaping_template.html -flask/testsuite/templates/mail.txt -flask/testsuite/templates/simple_template.html -flask/testsuite/templates/template_filter.html -flask/testsuite/templates/template_test.html -flask/testsuite/templates/nested/nested.txt -flask/testsuite/test_apps/config_module_app.py -flask/testsuite/test_apps/flask_newext_simple.py -flask/testsuite/test_apps/importerror.py -flask/testsuite/test_apps/main_app.py -flask/testsuite/test_apps/blueprintapp/__init__.py -flask/testsuite/test_apps/blueprintapp/apps/__init__.py -flask/testsuite/test_apps/blueprintapp/apps/admin/__init__.py -flask/testsuite/test_apps/blueprintapp/apps/admin/static/test.txt -flask/testsuite/test_apps/blueprintapp/apps/admin/static/css/test.css -flask/testsuite/test_apps/blueprintapp/apps/admin/templates/admin/index.html -flask/testsuite/test_apps/blueprintapp/apps/frontend/__init__.py -flask/testsuite/test_apps/blueprintapp/apps/frontend/templates/frontend/index.html -flask/testsuite/test_apps/config_package_app/__init__.py -flask/testsuite/test_apps/flask_broken/__init__.py -flask/testsuite/test_apps/flask_broken/b.py -flask/testsuite/test_apps/flask_newext_package/__init__.py -flask/testsuite/test_apps/flask_newext_package/submodule.py -flask/testsuite/test_apps/flaskext/__init__.py -flask/testsuite/test_apps/flaskext/oldext_simple.py -flask/testsuite/test_apps/flaskext/oldext_package/__init__.py -flask/testsuite/test_apps/flaskext/oldext_package/submodule.py -flask/testsuite/test_apps/lib/python2.5/site-packages/SiteEgg.egg -flask/testsuite/test_apps/lib/python2.5/site-packages/site_app.py -flask/testsuite/test_apps/lib/python2.5/site-packages/site_package/__init__.py -flask/testsuite/test_apps/moduleapp/__init__.py -flask/testsuite/test_apps/moduleapp/apps/__init__.py -flask/testsuite/test_apps/moduleapp/apps/admin/__init__.py -flask/testsuite/test_apps/moduleapp/apps/admin/static/test.txt -flask/testsuite/test_apps/moduleapp/apps/admin/static/css/test.css -flask/testsuite/test_apps/moduleapp/apps/admin/templates/index.html -flask/testsuite/test_apps/moduleapp/apps/frontend/__init__.py -flask/testsuite/test_apps/moduleapp/apps/frontend/templates/index.html -flask/testsuite/test_apps/path/installed_package/__init__.py -flask/testsuite/test_apps/subdomaintestmodule/__init__.py -flask/testsuite/test_apps/subdomaintestmodule/static/hello.txt \ No newline at end of file diff --git a/Linux_i686/lib/python2.7/site-packages/Flask-0.10.1.egg-info/installed-files.txt b/Linux_i686/lib/python2.7/site-packages/Flask-0.10.1.egg-info/installed-files.txt deleted file mode 100644 index 5b4a661..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Flask-0.10.1.egg-info/installed-files.txt +++ /dev/null @@ -1,148 +0,0 @@ -../flask/wrappers.py -../flask/_compat.py -../flask/templating.py -../flask/helpers.py -../flask/ctx.py -../flask/views.py -../flask/sessions.py -../flask/blueprints.py -../flask/json.py -../flask/module.py -../flask/signals.py -../flask/logging.py -../flask/globals.py -../flask/__init__.py -../flask/debughelpers.py -../flask/testing.py -../flask/config.py -../flask/app.py -../flask/exthook.py -../flask/ext/__init__.py -../flask/testsuite/deprecations.py -../flask/testsuite/regression.py -../flask/testsuite/ext.py -../flask/testsuite/templating.py -../flask/testsuite/helpers.py -../flask/testsuite/views.py -../flask/testsuite/blueprints.py -../flask/testsuite/subclassing.py -../flask/testsuite/signals.py -../flask/testsuite/examples.py -../flask/testsuite/reqctx.py -../flask/testsuite/__init__.py -../flask/testsuite/basic.py -../flask/testsuite/testing.py -../flask/testsuite/config.py -../flask/testsuite/appctx.py -../flask/testsuite/static/index.html -../flask/testsuite/templates/_macro.html -../flask/testsuite/templates/context_template.html -../flask/testsuite/templates/escaping_template.html -../flask/testsuite/templates/mail.txt -../flask/testsuite/templates/simple_template.html -../flask/testsuite/templates/template_filter.html -../flask/testsuite/templates/template_test.html -../flask/testsuite/templates/nested/nested.txt -../flask/testsuite/test_apps/config_module_app.py -../flask/testsuite/test_apps/flask_newext_simple.py -../flask/testsuite/test_apps/importerror.py -../flask/testsuite/test_apps/main_app.py -../flask/testsuite/test_apps/blueprintapp/__init__.py -../flask/testsuite/test_apps/blueprintapp/apps/__init__.py -../flask/testsuite/test_apps/blueprintapp/apps/admin/__init__.py -../flask/testsuite/test_apps/blueprintapp/apps/admin/static/test.txt -../flask/testsuite/test_apps/blueprintapp/apps/admin/static/css/test.css -../flask/testsuite/test_apps/blueprintapp/apps/admin/templates/admin/index.html -../flask/testsuite/test_apps/blueprintapp/apps/frontend/__init__.py -../flask/testsuite/test_apps/blueprintapp/apps/frontend/templates/frontend/index.html -../flask/testsuite/test_apps/config_package_app/__init__.py -../flask/testsuite/test_apps/flask_broken/__init__.py -../flask/testsuite/test_apps/flask_broken/b.py -../flask/testsuite/test_apps/flask_newext_package/__init__.py -../flask/testsuite/test_apps/flask_newext_package/submodule.py -../flask/testsuite/test_apps/flaskext/__init__.py -../flask/testsuite/test_apps/flaskext/oldext_simple.py -../flask/testsuite/test_apps/flaskext/oldext_package/__init__.py -../flask/testsuite/test_apps/flaskext/oldext_package/submodule.py -../flask/testsuite/test_apps/lib/python2.5/site-packages/SiteEgg.egg -../flask/testsuite/test_apps/lib/python2.5/site-packages/site_app.py -../flask/testsuite/test_apps/lib/python2.5/site-packages/site_package/__init__.py -../flask/testsuite/test_apps/moduleapp/__init__.py -../flask/testsuite/test_apps/moduleapp/apps/__init__.py -../flask/testsuite/test_apps/moduleapp/apps/admin/__init__.py -../flask/testsuite/test_apps/moduleapp/apps/admin/static/test.txt -../flask/testsuite/test_apps/moduleapp/apps/admin/static/css/test.css -../flask/testsuite/test_apps/moduleapp/apps/admin/templates/index.html -../flask/testsuite/test_apps/moduleapp/apps/frontend/__init__.py -../flask/testsuite/test_apps/moduleapp/apps/frontend/templates/index.html -../flask/testsuite/test_apps/path/installed_package/__init__.py -../flask/testsuite/test_apps/subdomaintestmodule/__init__.py -../flask/testsuite/test_apps/subdomaintestmodule/static/hello.txt -../flask/wrappers.pyc -../flask/_compat.pyc -../flask/templating.pyc -../flask/helpers.pyc -../flask/ctx.pyc -../flask/views.pyc -../flask/sessions.pyc -../flask/blueprints.pyc -../flask/json.pyc -../flask/module.pyc -../flask/signals.pyc -../flask/logging.pyc -../flask/globals.pyc -../flask/__init__.pyc -../flask/debughelpers.pyc -../flask/testing.pyc -../flask/config.pyc -../flask/app.pyc -../flask/exthook.pyc -../flask/ext/__init__.pyc -../flask/testsuite/deprecations.pyc -../flask/testsuite/regression.pyc -../flask/testsuite/ext.pyc -../flask/testsuite/templating.pyc -../flask/testsuite/helpers.pyc -../flask/testsuite/views.pyc -../flask/testsuite/blueprints.pyc -../flask/testsuite/subclassing.pyc -../flask/testsuite/signals.pyc -../flask/testsuite/examples.pyc -../flask/testsuite/reqctx.pyc -../flask/testsuite/__init__.pyc -../flask/testsuite/basic.pyc -../flask/testsuite/testing.pyc -../flask/testsuite/config.pyc -../flask/testsuite/appctx.pyc -../flask/testsuite/test_apps/config_module_app.pyc -../flask/testsuite/test_apps/flask_newext_simple.pyc -../flask/testsuite/test_apps/importerror.pyc -../flask/testsuite/test_apps/main_app.pyc -../flask/testsuite/test_apps/blueprintapp/__init__.pyc -../flask/testsuite/test_apps/blueprintapp/apps/__init__.pyc -../flask/testsuite/test_apps/blueprintapp/apps/admin/__init__.pyc -../flask/testsuite/test_apps/blueprintapp/apps/frontend/__init__.pyc -../flask/testsuite/test_apps/config_package_app/__init__.pyc -../flask/testsuite/test_apps/flask_broken/__init__.pyc -../flask/testsuite/test_apps/flask_broken/b.pyc -../flask/testsuite/test_apps/flask_newext_package/__init__.pyc -../flask/testsuite/test_apps/flask_newext_package/submodule.pyc -../flask/testsuite/test_apps/flaskext/__init__.pyc -../flask/testsuite/test_apps/flaskext/oldext_simple.pyc -../flask/testsuite/test_apps/flaskext/oldext_package/__init__.pyc -../flask/testsuite/test_apps/flaskext/oldext_package/submodule.pyc -../flask/testsuite/test_apps/lib/python2.5/site-packages/site_app.pyc -../flask/testsuite/test_apps/lib/python2.5/site-packages/site_package/__init__.pyc -../flask/testsuite/test_apps/moduleapp/__init__.pyc -../flask/testsuite/test_apps/moduleapp/apps/__init__.pyc -../flask/testsuite/test_apps/moduleapp/apps/admin/__init__.pyc -../flask/testsuite/test_apps/moduleapp/apps/frontend/__init__.pyc -../flask/testsuite/test_apps/path/installed_package/__init__.pyc -../flask/testsuite/test_apps/subdomaintestmodule/__init__.pyc -./ -requires.txt -SOURCES.txt -dependency_links.txt -PKG-INFO -not-zip-safe -top_level.txt diff --git a/Linux_i686/lib/python2.7/site-packages/Flask-0.10.1.egg-info/requires.txt b/Linux_i686/lib/python2.7/site-packages/Flask-0.10.1.egg-info/requires.txt deleted file mode 100644 index a7281e1..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Flask-0.10.1.egg-info/requires.txt +++ /dev/null @@ -1,3 +0,0 @@ -Werkzeug>=0.7 -Jinja2>=2.4 -itsdangerous>=0.21 \ No newline at end of file diff --git a/Linux_i686/lib/python2.7/site-packages/Flask-0.10.1.egg-info/top_level.txt b/Linux_i686/lib/python2.7/site-packages/Flask-0.10.1.egg-info/top_level.txt deleted file mode 100644 index 7e10602..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Flask-0.10.1.egg-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -flask diff --git a/Linux_i686/lib/python2.7/site-packages/Flask_Migrate-1.2.0.egg-info/PKG-INFO b/Linux_i686/lib/python2.7/site-packages/Flask_Migrate-1.2.0.egg-info/PKG-INFO deleted file mode 100644 index e35f909..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Flask_Migrate-1.2.0.egg-info/PKG-INFO +++ /dev/null @@ -1,22 +0,0 @@ -Metadata-Version: 1.1 -Name: Flask-Migrate -Version: 1.2.0 -Summary: SQLAlchemy database migrations for Flask applications using Alembic -Home-page: http://github.com/miguelgrinberg/flask-migrate/ -Author: Miguel Grinberg -Author-email: miguelgrinberg50@gmail.com -License: MIT -Description: - Flask-Migrate - -------------- - - SQLAlchemy database migrations for Flask applications using Alembic. - -Platform: any -Classifier: Environment :: Web Environment -Classifier: Intended Audience :: Developers -Classifier: License :: OSI Approved :: MIT License -Classifier: Operating System :: OS Independent -Classifier: Programming Language :: Python -Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content -Classifier: Topic :: Software Development :: Libraries :: Python Modules diff --git a/Linux_i686/lib/python2.7/site-packages/Flask_Migrate-1.2.0.egg-info/SOURCES.txt b/Linux_i686/lib/python2.7/site-packages/Flask_Migrate-1.2.0.egg-info/SOURCES.txt deleted file mode 100644 index e0e8111..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Flask_Migrate-1.2.0.egg-info/SOURCES.txt +++ /dev/null @@ -1,24 +0,0 @@ -LICENSE -MANIFEST.in -README.md -setup.cfg -setup.py -Flask_Migrate.egg-info/PKG-INFO -Flask_Migrate.egg-info/SOURCES.txt -Flask_Migrate.egg-info/dependency_links.txt -Flask_Migrate.egg-info/not-zip-safe -Flask_Migrate.egg-info/requires.txt -Flask_Migrate.egg-info/top_level.txt -flask_migrate/__init__.py -flask_migrate/templates/flask/README -flask_migrate/templates/flask/alembic.ini.mako -flask_migrate/templates/flask/env.py -flask_migrate/templates/flask/script.py.mako -tests/__init__.py -tests/__init__.pyc -tests/app.py -tests/app.pyc -tests/app2.py -tests/test_migrate.py -tests/test_migrate.pyc -tests/test_migrate_custom_directory.py \ No newline at end of file diff --git a/Linux_i686/lib/python2.7/site-packages/Flask_Migrate-1.2.0.egg-info/installed-files.txt b/Linux_i686/lib/python2.7/site-packages/Flask_Migrate-1.2.0.egg-info/installed-files.txt deleted file mode 100644 index 673345e..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Flask_Migrate-1.2.0.egg-info/installed-files.txt +++ /dev/null @@ -1,14 +0,0 @@ -../flask_migrate/__init__.py -../flask_migrate/templates/flask/README -../flask_migrate/templates/flask/alembic.ini.mako -../flask_migrate/templates/flask/env.py -../flask_migrate/templates/flask/script.py.mako -../flask_migrate/__init__.pyc -../flask_migrate/templates/flask/env.pyc -./ -requires.txt -SOURCES.txt -dependency_links.txt -PKG-INFO -not-zip-safe -top_level.txt diff --git a/Linux_i686/lib/python2.7/site-packages/Flask_Migrate-1.2.0.egg-info/requires.txt b/Linux_i686/lib/python2.7/site-packages/Flask_Migrate-1.2.0.egg-info/requires.txt deleted file mode 100644 index 0426413..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Flask_Migrate-1.2.0.egg-info/requires.txt +++ /dev/null @@ -1,4 +0,0 @@ -Flask>=0.9 -Flask-SQLAlchemy>=1.0 -alembic>=0.6 -Flask-Script>=0.6 \ No newline at end of file diff --git a/Linux_i686/lib/python2.7/site-packages/Flask_Migrate-1.2.0.egg-info/top_level.txt b/Linux_i686/lib/python2.7/site-packages/Flask_Migrate-1.2.0.egg-info/top_level.txt deleted file mode 100644 index 0652762..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Flask_Migrate-1.2.0.egg-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -flask_migrate diff --git a/Linux_i686/lib/python2.7/site-packages/Flask_SQLAlchemy-1.0.egg-info/PKG-INFO b/Linux_i686/lib/python2.7/site-packages/Flask_SQLAlchemy-1.0.egg-info/PKG-INFO deleted file mode 100644 index 45e77d9..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Flask_SQLAlchemy-1.0.egg-info/PKG-INFO +++ /dev/null @@ -1,30 +0,0 @@ -Metadata-Version: 1.1 -Name: Flask-SQLAlchemy -Version: 1.0 -Summary: Adds SQLAlchemy support to your Flask application -Home-page: http://github.com/mitsuhiko/flask-sqlalchemy -Author: Armin Ronacher -Author-email: armin.ronacher@active-4.com -License: BSD -Description: - Flask-SQLAlchemy - ---------------- - - Adds SQLAlchemy support to your Flask application. - - Links - ````` - - * `documentation `_ - * `development version - `_ - - -Platform: any -Classifier: Environment :: Web Environment -Classifier: Intended Audience :: Developers -Classifier: License :: OSI Approved :: BSD License -Classifier: Operating System :: OS Independent -Classifier: Programming Language :: Python -Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content -Classifier: Topic :: Software Development :: Libraries :: Python Modules diff --git a/Linux_i686/lib/python2.7/site-packages/Flask_SQLAlchemy-1.0.egg-info/SOURCES.txt b/Linux_i686/lib/python2.7/site-packages/Flask_SQLAlchemy-1.0.egg-info/SOURCES.txt deleted file mode 100644 index 298e2fe..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Flask_SQLAlchemy-1.0.egg-info/SOURCES.txt +++ /dev/null @@ -1,35 +0,0 @@ -CHANGES -LICENSE -MANIFEST.in -README -setup.cfg -setup.py -test_sqlalchemy.py -Flask_SQLAlchemy.egg-info/PKG-INFO -Flask_SQLAlchemy.egg-info/SOURCES.txt -Flask_SQLAlchemy.egg-info/dependency_links.txt -Flask_SQLAlchemy.egg-info/not-zip-safe -Flask_SQLAlchemy.egg-info/requires.txt -Flask_SQLAlchemy.egg-info/top_level.txt -docs/Makefile -docs/api.rst -docs/binds.rst -docs/changelog.rst -docs/conf.py -docs/config.rst -docs/contents.rst.inc -docs/contexts.rst -docs/flaskstyle.sty -docs/index.rst -docs/logo.pdf -docs/make.bat -docs/models.rst -docs/queries.rst -docs/quickstart.rst -docs/signals.rst -docs/_static/flask-sqlalchemy-small.png -docs/_static/flask-sqlalchemy.png -docs/_templates/sidebarintro.html -docs/_templates/sidebarlogo.html -flask_sqlalchemy/__init__.py -flask_sqlalchemy/_compat.py \ No newline at end of file diff --git a/Linux_i686/lib/python2.7/site-packages/Flask_SQLAlchemy-1.0.egg-info/installed-files.txt b/Linux_i686/lib/python2.7/site-packages/Flask_SQLAlchemy-1.0.egg-info/installed-files.txt deleted file mode 100644 index ba5a715..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Flask_SQLAlchemy-1.0.egg-info/installed-files.txt +++ /dev/null @@ -1,11 +0,0 @@ -../flask_sqlalchemy/_compat.py -../flask_sqlalchemy/__init__.py -../flask_sqlalchemy/_compat.pyc -../flask_sqlalchemy/__init__.pyc -./ -requires.txt -SOURCES.txt -dependency_links.txt -PKG-INFO -not-zip-safe -top_level.txt diff --git a/Linux_i686/lib/python2.7/site-packages/Flask_SQLAlchemy-1.0.egg-info/not-zip-safe b/Linux_i686/lib/python2.7/site-packages/Flask_SQLAlchemy-1.0.egg-info/not-zip-safe deleted file mode 100644 index 8b13789..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Flask_SQLAlchemy-1.0.egg-info/not-zip-safe +++ /dev/null @@ -1 +0,0 @@ - diff --git a/Linux_i686/lib/python2.7/site-packages/Flask_SQLAlchemy-1.0.egg-info/requires.txt b/Linux_i686/lib/python2.7/site-packages/Flask_SQLAlchemy-1.0.egg-info/requires.txt deleted file mode 100644 index d07e166..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Flask_SQLAlchemy-1.0.egg-info/requires.txt +++ /dev/null @@ -1,3 +0,0 @@ -setuptools -Flask>=0.10 -SQLAlchemy \ No newline at end of file diff --git a/Linux_i686/lib/python2.7/site-packages/Flask_SQLAlchemy-1.0.egg-info/top_level.txt b/Linux_i686/lib/python2.7/site-packages/Flask_SQLAlchemy-1.0.egg-info/top_level.txt deleted file mode 100644 index 8a5538e..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Flask_SQLAlchemy-1.0.egg-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -flask_sqlalchemy diff --git a/Linux_i686/lib/python2.7/site-packages/Flask_Script-2.0.3.egg-info/PKG-INFO b/Linux_i686/lib/python2.7/site-packages/Flask_Script-2.0.3.egg-info/PKG-INFO deleted file mode 100644 index db853cd..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Flask_Script-2.0.3.egg-info/PKG-INFO +++ /dev/null @@ -1,35 +0,0 @@ -Metadata-Version: 1.1 -Name: Flask-Script -Version: 2.0.3 -Summary: Scripting support for Flask -Home-page: http://github.com/smurfix/flask-script -Author: Matthias Urlichs -Author-email: matthias@urlichs.de -License: BSD -Download-URL: https://github.com/smurfix/flask-script/tarball/v2.0.3 -Description: - Flask-Script - -------------- - - Flask support for writing external scripts. - - Links - ````` - - * `documentation `_ - - - -Platform: any -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 :: 2 -Classifier: Programming Language :: Python :: 2.7 -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.3 -Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content -Classifier: Topic :: Software Development :: Libraries :: Python Modules diff --git a/Linux_i686/lib/python2.7/site-packages/Flask_Script-2.0.3.egg-info/SOURCES.txt b/Linux_i686/lib/python2.7/site-packages/Flask_Script-2.0.3.egg-info/SOURCES.txt deleted file mode 100644 index 0202fcb..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Flask_Script-2.0.3.egg-info/SOURCES.txt +++ /dev/null @@ -1,29 +0,0 @@ -LICENSE -MANIFEST.in -README.rst -setup.cfg -setup.py -tests.py -Flask_Script.egg-info/PKG-INFO -Flask_Script.egg-info/SOURCES.txt -Flask_Script.egg-info/dependency_links.txt -Flask_Script.egg-info/not-zip-safe -Flask_Script.egg-info/requires.txt -Flask_Script.egg-info/top_level.txt -docs/Makefile -docs/conf.py -docs/index.rst -docs/make.bat -docs/_static/flask-script.png -docs/_static/index.html -docs/_themes/README -docs/_themes/flask_theme_support.py -docs/_themes/flask/theme.conf -docs/_themes/flask/static/flasky.css_t -docs/_themes/flask_small/layout.html -docs/_themes/flask_small/theme.conf -docs/_themes/flask_small/static/flasky.css_t -flask_script/__init__.py -flask_script/_compat.py -flask_script/cli.py -flask_script/commands.py \ No newline at end of file diff --git a/Linux_i686/lib/python2.7/site-packages/Flask_Script-2.0.3.egg-info/dependency_links.txt b/Linux_i686/lib/python2.7/site-packages/Flask_Script-2.0.3.egg-info/dependency_links.txt deleted file mode 100644 index 8b13789..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Flask_Script-2.0.3.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/Linux_i686/lib/python2.7/site-packages/Flask_Script-2.0.3.egg-info/installed-files.txt b/Linux_i686/lib/python2.7/site-packages/Flask_Script-2.0.3.egg-info/installed-files.txt deleted file mode 100644 index 967fb02..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Flask_Script-2.0.3.egg-info/installed-files.txt +++ /dev/null @@ -1,15 +0,0 @@ -../flask_script/cli.py -../flask_script/_compat.py -../flask_script/commands.py -../flask_script/__init__.py -../flask_script/cli.pyc -../flask_script/_compat.pyc -../flask_script/commands.pyc -../flask_script/__init__.pyc -./ -requires.txt -SOURCES.txt -dependency_links.txt -PKG-INFO -not-zip-safe -top_level.txt diff --git a/Linux_i686/lib/python2.7/site-packages/Flask_Script-2.0.3.egg-info/not-zip-safe b/Linux_i686/lib/python2.7/site-packages/Flask_Script-2.0.3.egg-info/not-zip-safe deleted file mode 100644 index 8b13789..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Flask_Script-2.0.3.egg-info/not-zip-safe +++ /dev/null @@ -1 +0,0 @@ - diff --git a/Linux_i686/lib/python2.7/site-packages/Flask_Script-2.0.3.egg-info/requires.txt b/Linux_i686/lib/python2.7/site-packages/Flask_Script-2.0.3.egg-info/requires.txt deleted file mode 100644 index 2077213..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Flask_Script-2.0.3.egg-info/requires.txt +++ /dev/null @@ -1 +0,0 @@ -Flask \ No newline at end of file diff --git a/Linux_i686/lib/python2.7/site-packages/Flask_Script-2.0.3.egg-info/top_level.txt b/Linux_i686/lib/python2.7/site-packages/Flask_Script-2.0.3.egg-info/top_level.txt deleted file mode 100644 index efd6af0..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Flask_Script-2.0.3.egg-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -flask_script diff --git a/Linux_i686/lib/python2.7/site-packages/Jinja2-2.7.2.egg-info/PKG-INFO b/Linux_i686/lib/python2.7/site-packages/Jinja2-2.7.2.egg-info/PKG-INFO deleted file mode 100644 index 2c6a330..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Jinja2-2.7.2.egg-info/PKG-INFO +++ /dev/null @@ -1,55 +0,0 @@ -Metadata-Version: 1.1 -Name: Jinja2 -Version: 2.7.2 -Summary: A small but fast and easy to use stand-alone template engine written in pure python. -Home-page: http://jinja.pocoo.org/ -Author: Armin Ronacher -Author-email: armin.ronacher@active-4.com -License: BSD -Description: - Jinja2 - ~~~~~~ - - Jinja2 is a template engine written in pure Python. It provides a - `Django`_ inspired non-XML syntax but supports inline expressions and - an optional `sandboxed`_ environment. - - Nutshell - -------- - - Here a small example of a Jinja template:: - - {% extends 'base.html' %} - {% block title %}Memberlist{% endblock %} - {% block content %} - - {% endblock %} - - Philosophy - ---------- - - Application logic is for the controller but don't try to make the life - for the template designer too hard by giving him too few functionality. - - For more informations visit the new `Jinja2 webpage`_ and `documentation`_. - - .. _sandboxed: http://en.wikipedia.org/wiki/Sandbox_(computer_security) - .. _Django: http://www.djangoproject.com/ - .. _Jinja2 webpage: http://jinja.pocoo.org/ - .. _documentation: http://jinja.pocoo.org/2/documentation/ - -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: Topic :: Internet :: WWW/HTTP :: Dynamic Content -Classifier: Topic :: Software Development :: Libraries :: Python Modules -Classifier: Topic :: Text Processing :: Markup :: HTML diff --git a/Linux_i686/lib/python2.7/site-packages/Jinja2-2.7.2.egg-info/SOURCES.txt b/Linux_i686/lib/python2.7/site-packages/Jinja2-2.7.2.egg-info/SOURCES.txt deleted file mode 100644 index a27a9c4..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Jinja2-2.7.2.egg-info/SOURCES.txt +++ /dev/null @@ -1,126 +0,0 @@ -AUTHORS -CHANGES -LICENSE -MANIFEST.in -Makefile -README.rst -run-tests.py -setup.cfg -setup.py -Jinja2.egg-info/PKG-INFO -Jinja2.egg-info/SOURCES.txt -Jinja2.egg-info/dependency_links.txt -Jinja2.egg-info/entry_points.txt -Jinja2.egg-info/not-zip-safe -Jinja2.egg-info/requires.txt -Jinja2.egg-info/top_level.txt -artwork/jinjalogo.svg -docs/Makefile -docs/api.rst -docs/cache_extension.py -docs/changelog.rst -docs/conf.py -docs/contents.rst.inc -docs/extensions.rst -docs/faq.rst -docs/index.rst -docs/integration.rst -docs/intro.rst -docs/jinjaext.py -docs/jinjastyle.sty -docs/latexindex.rst -docs/logo.pdf -docs/sandbox.rst -docs/switching.rst -docs/templates.rst -docs/tricks.rst -docs/_static/.ignore -docs/_static/jinja-small.png -docs/_templates/sidebarintro.html -docs/_templates/sidebarlogo.html -docs/_themes/LICENSE -docs/_themes/README -docs/_themes/jinja/layout.html -docs/_themes/jinja/relations.html -docs/_themes/jinja/theme.conf -docs/_themes/jinja/static/jinja.css_t -examples/bench.py -examples/profile.py -examples/basic/cycle.py -examples/basic/debugger.py -examples/basic/inheritance.py -examples/basic/test.py -examples/basic/test_filter_and_linestatements.py -examples/basic/test_loop_filter.py -examples/basic/translate.py -examples/basic/templates/broken.html -examples/basic/templates/subbroken.html -examples/rwbench/djangoext.py -examples/rwbench/rwbench.py -examples/rwbench/django/_form.html -examples/rwbench/django/_input_field.html -examples/rwbench/django/_textarea.html -examples/rwbench/django/index.html -examples/rwbench/django/layout.html -examples/rwbench/genshi/helpers.html -examples/rwbench/genshi/index.html -examples/rwbench/genshi/layout.html -examples/rwbench/jinja/helpers.html -examples/rwbench/jinja/index.html -examples/rwbench/jinja/layout.html -examples/rwbench/mako/helpers.html -examples/rwbench/mako/index.html -examples/rwbench/mako/layout.html -ext/djangojinja2.py -ext/inlinegettext.py -ext/jinja.el -ext/Vim/jinja.vim -ext/django2jinja/django2jinja.py -ext/django2jinja/example.py -ext/django2jinja/templates/index.html -ext/django2jinja/templates/layout.html -ext/django2jinja/templates/subtemplate.html -jinja2/__init__.py -jinja2/_compat.py -jinja2/_stringdefs.py -jinja2/bccache.py -jinja2/compiler.py -jinja2/constants.py -jinja2/debug.py -jinja2/defaults.py -jinja2/environment.py -jinja2/exceptions.py -jinja2/ext.py -jinja2/filters.py -jinja2/lexer.py -jinja2/loaders.py -jinja2/meta.py -jinja2/nodes.py -jinja2/optimizer.py -jinja2/parser.py -jinja2/runtime.py -jinja2/sandbox.py -jinja2/tests.py -jinja2/utils.py -jinja2/visitor.py -jinja2/testsuite/__init__.py -jinja2/testsuite/api.py -jinja2/testsuite/bytecode_cache.py -jinja2/testsuite/core_tags.py -jinja2/testsuite/debug.py -jinja2/testsuite/doctests.py -jinja2/testsuite/ext.py -jinja2/testsuite/filters.py -jinja2/testsuite/imports.py -jinja2/testsuite/inheritance.py -jinja2/testsuite/lexnparse.py -jinja2/testsuite/loader.py -jinja2/testsuite/regression.py -jinja2/testsuite/security.py -jinja2/testsuite/tests.py -jinja2/testsuite/utils.py -jinja2/testsuite/res/__init__.py -jinja2/testsuite/res/templates/broken.html -jinja2/testsuite/res/templates/syntaxerror.html -jinja2/testsuite/res/templates/test.html -jinja2/testsuite/res/templates/foo/test.html \ No newline at end of file diff --git a/Linux_i686/lib/python2.7/site-packages/Jinja2-2.7.2.egg-info/dependency_links.txt b/Linux_i686/lib/python2.7/site-packages/Jinja2-2.7.2.egg-info/dependency_links.txt deleted file mode 100644 index 8b13789..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Jinja2-2.7.2.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/Linux_i686/lib/python2.7/site-packages/Jinja2-2.7.2.egg-info/entry_points.txt b/Linux_i686/lib/python2.7/site-packages/Jinja2-2.7.2.egg-info/entry_points.txt deleted file mode 100644 index 32e6b75..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Jinja2-2.7.2.egg-info/entry_points.txt +++ /dev/null @@ -1,4 +0,0 @@ - - [babel.extractors] - jinja2 = jinja2.ext:babel_extract[i18n] - \ No newline at end of file diff --git a/Linux_i686/lib/python2.7/site-packages/Jinja2-2.7.2.egg-info/installed-files.txt b/Linux_i686/lib/python2.7/site-packages/Jinja2-2.7.2.egg-info/installed-files.txt deleted file mode 100644 index b958248..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Jinja2-2.7.2.egg-info/installed-files.txt +++ /dev/null @@ -1,92 +0,0 @@ -../jinja2/bccache.py -../jinja2/_compat.py -../jinja2/ext.py -../jinja2/defaults.py -../jinja2/meta.py -../jinja2/_stringdefs.py -../jinja2/nodes.py -../jinja2/runtime.py -../jinja2/exceptions.py -../jinja2/lexer.py -../jinja2/__init__.py -../jinja2/visitor.py -../jinja2/optimizer.py -../jinja2/sandbox.py -../jinja2/debug.py -../jinja2/filters.py -../jinja2/constants.py -../jinja2/tests.py -../jinja2/utils.py -../jinja2/compiler.py -../jinja2/parser.py -../jinja2/loaders.py -../jinja2/environment.py -../jinja2/testsuite/api.py -../jinja2/testsuite/regression.py -../jinja2/testsuite/core_tags.py -../jinja2/testsuite/inheritance.py -../jinja2/testsuite/ext.py -../jinja2/testsuite/security.py -../jinja2/testsuite/doctests.py -../jinja2/testsuite/bytecode_cache.py -../jinja2/testsuite/imports.py -../jinja2/testsuite/lexnparse.py -../jinja2/testsuite/__init__.py -../jinja2/testsuite/debug.py -../jinja2/testsuite/filters.py -../jinja2/testsuite/tests.py -../jinja2/testsuite/loader.py -../jinja2/testsuite/utils.py -../jinja2/testsuite/res/__init__.py -../jinja2/testsuite/res/templates/broken.html -../jinja2/testsuite/res/templates/syntaxerror.html -../jinja2/testsuite/res/templates/test.html -../jinja2/testsuite/res/templates/foo/test.html -../jinja2/bccache.pyc -../jinja2/_compat.pyc -../jinja2/ext.pyc -../jinja2/defaults.pyc -../jinja2/meta.pyc -../jinja2/_stringdefs.pyc -../jinja2/nodes.pyc -../jinja2/runtime.pyc -../jinja2/exceptions.pyc -../jinja2/lexer.pyc -../jinja2/__init__.pyc -../jinja2/visitor.pyc -../jinja2/optimizer.pyc -../jinja2/sandbox.pyc -../jinja2/debug.pyc -../jinja2/filters.pyc -../jinja2/constants.pyc -../jinja2/tests.pyc -../jinja2/utils.pyc -../jinja2/compiler.pyc -../jinja2/parser.pyc -../jinja2/loaders.pyc -../jinja2/environment.pyc -../jinja2/testsuite/api.pyc -../jinja2/testsuite/regression.pyc -../jinja2/testsuite/core_tags.pyc -../jinja2/testsuite/inheritance.pyc -../jinja2/testsuite/ext.pyc -../jinja2/testsuite/security.pyc -../jinja2/testsuite/doctests.pyc -../jinja2/testsuite/bytecode_cache.pyc -../jinja2/testsuite/imports.pyc -../jinja2/testsuite/lexnparse.pyc -../jinja2/testsuite/__init__.pyc -../jinja2/testsuite/debug.pyc -../jinja2/testsuite/filters.pyc -../jinja2/testsuite/tests.pyc -../jinja2/testsuite/loader.pyc -../jinja2/testsuite/utils.pyc -../jinja2/testsuite/res/__init__.pyc -./ -requires.txt -SOURCES.txt -entry_points.txt -dependency_links.txt -PKG-INFO -not-zip-safe -top_level.txt diff --git a/Linux_i686/lib/python2.7/site-packages/Jinja2-2.7.2.egg-info/not-zip-safe b/Linux_i686/lib/python2.7/site-packages/Jinja2-2.7.2.egg-info/not-zip-safe deleted file mode 100644 index 8b13789..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Jinja2-2.7.2.egg-info/not-zip-safe +++ /dev/null @@ -1 +0,0 @@ - diff --git a/Linux_i686/lib/python2.7/site-packages/Jinja2-2.7.2.egg-info/requires.txt b/Linux_i686/lib/python2.7/site-packages/Jinja2-2.7.2.egg-info/requires.txt deleted file mode 100644 index ccd0e92..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Jinja2-2.7.2.egg-info/requires.txt +++ /dev/null @@ -1,4 +0,0 @@ -markupsafe - -[i18n] -Babel>=0.8 \ No newline at end of file diff --git a/Linux_i686/lib/python2.7/site-packages/Jinja2-2.7.2.egg-info/top_level.txt b/Linux_i686/lib/python2.7/site-packages/Jinja2-2.7.2.egg-info/top_level.txt deleted file mode 100644 index 7f7afbf..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Jinja2-2.7.2.egg-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -jinja2 diff --git a/Linux_i686/lib/python2.7/site-packages/Mako-0.9.1.egg-info/PKG-INFO b/Linux_i686/lib/python2.7/site-packages/Mako-0.9.1.egg-info/PKG-INFO deleted file mode 100644 index 91b8ec7..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Mako-0.9.1.egg-info/PKG-INFO +++ /dev/null @@ -1,71 +0,0 @@ -Metadata-Version: 1.1 -Name: Mako -Version: 0.9.1 -Summary: A super-fast templating language that borrows the best ideas from the existing templating languages. -Home-page: http://www.makotemplates.org/ -Author: Mike Bayer -Author-email: mike@zzzcomputing.com -License: MIT -Description: ========================= - Mako Templates for Python - ========================= - - Mako is a template library written in Python. It provides a familiar, non-XML - syntax which compiles into Python modules for maximum performance. Mako's - syntax and API borrows from the best ideas of many others, including Django - templates, Cheetah, Myghty, and Genshi. Conceptually, Mako is an embedded - Python (i.e. Python Server Page) language, which refines the familiar ideas - of componentized layout and inheritance to produce one of the most - straightforward and flexible models available, while also maintaining close - ties to Python calling and scoping semantics. - - Nutshell - ======== - - :: - - <%inherit file="base.html"/> - <% - rows = [[v for v in range(0,10)] for row in range(0,10)] - %> - - % for row in rows: - ${makerow(row)} - % endfor -
- - <%def name="makerow(row)"> - - % for name in row: - ${name}\ - % endfor - - - - Philosophy - =========== - - Python is a great scripting language. Don't reinvent the wheel...your templates can handle it ! - - Documentation - ============== - - See documentation for Mako at http://www.makotemplates.org/docs/ - - License - ======== - - Mako is licensed under an MIT-style license (see LICENSE). - Other incorporated projects may be licensed under different licenses. - All licenses allow for non-commercial and commercial use. - -Keywords: templates -Platform: UNKNOWN -Classifier: Development Status :: 5 - Production/Stable -Classifier: Environment :: Web Environment -Classifier: Intended Audience :: Developers -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: Implementation :: CPython -Classifier: Programming Language :: Python :: Implementation :: PyPy -Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content diff --git a/Linux_i686/lib/python2.7/site-packages/Mako-0.9.1.egg-info/SOURCES.txt b/Linux_i686/lib/python2.7/site-packages/Mako-0.9.1.egg-info/SOURCES.txt deleted file mode 100644 index 6f580c3..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Mako-0.9.1.egg-info/SOURCES.txt +++ /dev/null @@ -1,173 +0,0 @@ -CHANGES -LICENSE -MANIFEST.in -README.rst -distribute_setup.py -setup.cfg -setup.py -Mako.egg-info/PKG-INFO -Mako.egg-info/SOURCES.txt -Mako.egg-info/dependency_links.txt -Mako.egg-info/entry_points.txt -Mako.egg-info/not-zip-safe -Mako.egg-info/requires.txt -Mako.egg-info/top_level.txt -doc/caching.html -doc/defs.html -doc/filtering.html -doc/genindex.html -doc/index.html -doc/inheritance.html -doc/namespaces.html -doc/runtime.html -doc/search.html -doc/searchindex.js -doc/syntax.html -doc/unicode.html -doc/usage.html -doc/_sources/caching.txt -doc/_sources/defs.txt -doc/_sources/filtering.txt -doc/_sources/index.txt -doc/_sources/inheritance.txt -doc/_sources/namespaces.txt -doc/_sources/runtime.txt -doc/_sources/syntax.txt -doc/_sources/unicode.txt -doc/_sources/usage.txt -doc/_static/basic.css -doc/_static/comment-bright.png -doc/_static/comment-close.png -doc/_static/comment.png -doc/_static/default.css -doc/_static/docs.css -doc/_static/doctools.js -doc/_static/down-pressed.png -doc/_static/down.png -doc/_static/file.png -doc/_static/jquery.js -doc/_static/makoLogo.png -doc/_static/minus.png -doc/_static/plus.png -doc/_static/pygments.css -doc/_static/searchtools.js -doc/_static/sidebar.js -doc/_static/site.css -doc/_static/underscore.js -doc/_static/up-pressed.png -doc/_static/up.png -doc/_static/websupport.js -doc/build/Makefile -doc/build/caching.rst -doc/build/conf.py -doc/build/defs.rst -doc/build/filtering.rst -doc/build/index.rst -doc/build/inheritance.rst -doc/build/namespaces.rst -doc/build/runtime.rst -doc/build/syntax.rst -doc/build/unicode.rst -doc/build/usage.rst -doc/build/builder/__init__.py -doc/build/builder/builders.py -doc/build/builder/util.py -doc/build/static/docs.css -doc/build/static/makoLogo.png -doc/build/static/site.css -doc/build/templates/base.mako -doc/build/templates/genindex.mako -doc/build/templates/layout.mako -doc/build/templates/page.mako -doc/build/templates/rtd_layout.mako -doc/build/templates/search.mako -examples/bench/basic.py -examples/bench/cheetah/footer.tmpl -examples/bench/cheetah/header.tmpl -examples/bench/cheetah/template.tmpl -examples/bench/django/templatetags/__init__.py -examples/bench/django/templatetags/bench.py -examples/bench/kid/base.kid -examples/bench/kid/template.kid -examples/bench/myghty/base.myt -examples/bench/myghty/template.myt -examples/wsgi/run_wsgi.py -mako/__init__.py -mako/_ast_util.py -mako/ast.py -mako/cache.py -mako/codegen.py -mako/compat.py -mako/exceptions.py -mako/filters.py -mako/lexer.py -mako/lookup.py -mako/parsetree.py -mako/pygen.py -mako/pyparser.py -mako/runtime.py -mako/template.py -mako/util.py -mako/ext/__init__.py -mako/ext/autohandler.py -mako/ext/babelplugin.py -mako/ext/beaker_cache.py -mako/ext/preprocessors.py -mako/ext/pygmentplugin.py -mako/ext/turbogears.py -scripts/mako-render -test/__init__.py -test/sample_module_namespace.py -test/test_ast.py -test/test_babelplugin.py -test/test_block.py -test/test_cache.py -test/test_call.py -test/test_decorators.py -test/test_def.py -test/test_exceptions.py -test/test_filters.py -test/test_inheritance.py -test/test_lexer.py -test/test_lookup.py -test/test_loop.py -test/test_lru.py -test/test_namespace.py -test/test_pygen.py -test/test_runtime.py -test/test_template.py -test/test_tgplugin.py -test/test_util.py -test/util.py -test/foo/__init__.py -test/foo/test_ns.py -test/templates/badbom.html -test/templates/bom.html -test/templates/bommagic.html -test/templates/chs_unicode.html -test/templates/chs_unicode_py3k.html -test/templates/chs_utf8.html -test/templates/crlf.html -test/templates/gettext.mako -test/templates/index.html -test/templates/internationalization.html -test/templates/modtest.html -test/templates/read_unicode.html -test/templates/read_unicode_py3k.html -test/templates/runtimeerr.html -test/templates/runtimeerr_py3k.html -test/templates/unicode.html -test/templates/unicode_arguments.html -test/templates/unicode_arguments_py3k.html -test/templates/unicode_code.html -test/templates/unicode_code_py3k.html -test/templates/unicode_expr.html -test/templates/unicode_expr_py3k.html -test/templates/unicode_runtime_error.html -test/templates/unicode_syntax_error.html -test/templates/foo/modtest.html.py -test/templates/othersubdir/foo.html -test/templates/subdir/incl.html -test/templates/subdir/index.html -test/templates/subdir/modtest.html -test/templates/subdir/foo/modtest.html.py \ No newline at end of file diff --git a/Linux_i686/lib/python2.7/site-packages/Mako-0.9.1.egg-info/dependency_links.txt b/Linux_i686/lib/python2.7/site-packages/Mako-0.9.1.egg-info/dependency_links.txt deleted file mode 100644 index 8b13789..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Mako-0.9.1.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/Linux_i686/lib/python2.7/site-packages/Mako-0.9.1.egg-info/entry_points.txt b/Linux_i686/lib/python2.7/site-packages/Mako-0.9.1.egg-info/entry_points.txt deleted file mode 100644 index 3717629..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Mako-0.9.1.egg-info/entry_points.txt +++ /dev/null @@ -1,14 +0,0 @@ - - [python.templating.engines] - mako = mako.ext.turbogears:TGPlugin - - [pygments.lexers] - mako = mako.ext.pygmentplugin:MakoLexer - html+mako = mako.ext.pygmentplugin:MakoHtmlLexer - xml+mako = mako.ext.pygmentplugin:MakoXmlLexer - js+mako = mako.ext.pygmentplugin:MakoJavascriptLexer - css+mako = mako.ext.pygmentplugin:MakoCssLexer - - [babel.extractors] - mako = mako.ext.babelplugin:extract - \ No newline at end of file diff --git a/Linux_i686/lib/python2.7/site-packages/Mako-0.9.1.egg-info/installed-files.txt b/Linux_i686/lib/python2.7/site-packages/Mako-0.9.1.egg-info/installed-files.txt deleted file mode 100644 index 3605bd0..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Mako-0.9.1.egg-info/installed-files.txt +++ /dev/null @@ -1,55 +0,0 @@ -../mako/compat.py -../mako/ast.py -../mako/codegen.py -../mako/util.py -../mako/pygen.py -../mako/runtime.py -../mako/exceptions.py -../mako/lexer.py -../mako/lookup.py -../mako/template.py -../mako/__init__.py -../mako/_ast_util.py -../mako/pyparser.py -../mako/filters.py -../mako/parsetree.py -../mako/cache.py -../mako/ext/babelplugin.py -../mako/ext/turbogears.py -../mako/ext/preprocessors.py -../mako/ext/autohandler.py -../mako/ext/beaker_cache.py -../mako/ext/__init__.py -../mako/ext/pygmentplugin.py -../mako/compat.pyc -../mako/ast.pyc -../mako/codegen.pyc -../mako/util.pyc -../mako/pygen.pyc -../mako/runtime.pyc -../mako/exceptions.pyc -../mako/lexer.pyc -../mako/lookup.pyc -../mako/template.pyc -../mako/__init__.pyc -../mako/_ast_util.pyc -../mako/pyparser.pyc -../mako/filters.pyc -../mako/parsetree.pyc -../mako/cache.pyc -../mako/ext/babelplugin.pyc -../mako/ext/turbogears.pyc -../mako/ext/preprocessors.pyc -../mako/ext/autohandler.pyc -../mako/ext/beaker_cache.pyc -../mako/ext/__init__.pyc -../mako/ext/pygmentplugin.pyc -./ -requires.txt -SOURCES.txt -entry_points.txt -dependency_links.txt -PKG-INFO -not-zip-safe -top_level.txt -../../../../bin/mako-render diff --git a/Linux_i686/lib/python2.7/site-packages/Mako-0.9.1.egg-info/not-zip-safe b/Linux_i686/lib/python2.7/site-packages/Mako-0.9.1.egg-info/not-zip-safe deleted file mode 100644 index 8b13789..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Mako-0.9.1.egg-info/not-zip-safe +++ /dev/null @@ -1 +0,0 @@ - diff --git a/Linux_i686/lib/python2.7/site-packages/Mako-0.9.1.egg-info/requires.txt b/Linux_i686/lib/python2.7/site-packages/Mako-0.9.1.egg-info/requires.txt deleted file mode 100644 index 8d60d23..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Mako-0.9.1.egg-info/requires.txt +++ /dev/null @@ -1,4 +0,0 @@ -MarkupSafe>=0.9.2 - -[beaker] -Beaker>=1.1 \ No newline at end of file diff --git a/Linux_i686/lib/python2.7/site-packages/Mako-0.9.1.egg-info/top_level.txt b/Linux_i686/lib/python2.7/site-packages/Mako-0.9.1.egg-info/top_level.txt deleted file mode 100644 index 2951cdd..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Mako-0.9.1.egg-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -mako diff --git a/Linux_i686/lib/python2.7/site-packages/MarkupSafe-0.23.egg-info/PKG-INFO b/Linux_i686/lib/python2.7/site-packages/MarkupSafe-0.23.egg-info/PKG-INFO deleted file mode 100644 index 12aa93e..0000000 --- a/Linux_i686/lib/python2.7/site-packages/MarkupSafe-0.23.egg-info/PKG-INFO +++ /dev/null @@ -1,119 +0,0 @@ -Metadata-Version: 1.1 -Name: MarkupSafe -Version: 0.23 -Summary: Implements a XML/HTML/XHTML Markup safe string for Python -Home-page: http://github.com/mitsuhiko/markupsafe -Author: Armin Ronacher -Author-email: armin.ronacher@active-4.com -License: BSD -Description: MarkupSafe - ========== - - Implements a unicode subclass that supports HTML strings: - - >>> from markupsafe import Markup, escape - >>> escape("") - Markup(u'<script>alert(document.cookie);</script>') - >>> tmpl = Markup("%s") - >>> tmpl % "Peter > Lustig" - Markup(u'Peter > Lustig') - - If you want to make an object unicode that is not yet unicode - but don't want to lose the taint information, you can use the - `soft_unicode` function. (On Python 3 you can also use `soft_str` which - is a different name for the same function). - - >>> from markupsafe import soft_unicode - >>> soft_unicode(42) - u'42' - >>> soft_unicode(Markup('foo')) - Markup(u'foo') - - HTML Representations - -------------------- - - Objects can customize their HTML markup equivalent by overriding - the `__html__` function: - - >>> class Foo(object): - ... def __html__(self): - ... return 'Nice' - ... - >>> escape(Foo()) - Markup(u'Nice') - >>> Markup(Foo()) - Markup(u'Nice') - - Silent Escapes - -------------- - - Since MarkupSafe 0.10 there is now also a separate escape function - called `escape_silent` that returns an empty string for `None` for - consistency with other systems that return empty strings for `None` - when escaping (for instance Pylons' webhelpers). - - If you also want to use this for the escape method of the Markup - object, you can create your own subclass that does that:: - - from markupsafe import Markup, escape_silent as escape - - class SilentMarkup(Markup): - __slots__ = () - - @classmethod - def escape(cls, s): - return cls(escape(s)) - - New-Style String Formatting - --------------------------- - - Starting with MarkupSafe 0.21 new style string formats from Python 2.6 and - 3.x are now fully supported. Previously the escape behavior of those - functions was spotty at best. The new implementations operates under the - following algorithm: - - 1. if an object has an ``__html_format__`` method it is called as - replacement for ``__format__`` with the format specifier. It either - has to return a string or markup object. - 2. if an object has an ``__html__`` method it is called. - 3. otherwise the default format system of Python kicks in and the result - is HTML escaped. - - Here is how you can implement your own formatting:: - - class User(object): - - def __init__(self, id, username): - self.id = id - self.username = username - - def __html_format__(self, format_spec): - if format_spec == 'link': - return Markup('{1}').format( - self.id, - self.__html__(), - ) - elif format_spec: - raise ValueError('Invalid format spec') - return self.__html__() - - def __html__(self): - return Markup('{0}').format(self.username) - - And to format that user: - - >>> user = User(1, 'foo') - >>> Markup('

User: {0:link}').format(user) - Markup(u'

User: foo') - -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: Topic :: Internet :: WWW/HTTP :: Dynamic Content -Classifier: Topic :: Software Development :: Libraries :: Python Modules -Classifier: Topic :: Text Processing :: Markup :: HTML diff --git a/Linux_i686/lib/python2.7/site-packages/MarkupSafe-0.23.egg-info/SOURCES.txt b/Linux_i686/lib/python2.7/site-packages/MarkupSafe-0.23.egg-info/SOURCES.txt deleted file mode 100644 index dfeb82b..0000000 --- a/Linux_i686/lib/python2.7/site-packages/MarkupSafe-0.23.egg-info/SOURCES.txt +++ /dev/null @@ -1,17 +0,0 @@ -AUTHORS -LICENSE -MANIFEST.in -README.rst -setup.cfg -setup.py -MarkupSafe.egg-info/PKG-INFO -MarkupSafe.egg-info/SOURCES.txt -MarkupSafe.egg-info/dependency_links.txt -MarkupSafe.egg-info/not-zip-safe -MarkupSafe.egg-info/top_level.txt -markupsafe/__init__.py -markupsafe/_compat.py -markupsafe/_constants.py -markupsafe/_native.py -markupsafe/_speedups.c -markupsafe/tests.py \ No newline at end of file diff --git a/Linux_i686/lib/python2.7/site-packages/MarkupSafe-0.23.egg-info/dependency_links.txt b/Linux_i686/lib/python2.7/site-packages/MarkupSafe-0.23.egg-info/dependency_links.txt deleted file mode 100644 index 8b13789..0000000 --- a/Linux_i686/lib/python2.7/site-packages/MarkupSafe-0.23.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/Linux_i686/lib/python2.7/site-packages/MarkupSafe-0.23.egg-info/installed-files.txt b/Linux_i686/lib/python2.7/site-packages/MarkupSafe-0.23.egg-info/installed-files.txt deleted file mode 100644 index b2eff87..0000000 --- a/Linux_i686/lib/python2.7/site-packages/MarkupSafe-0.23.egg-info/installed-files.txt +++ /dev/null @@ -1,18 +0,0 @@ -../markupsafe/_compat.py -../markupsafe/_native.py -../markupsafe/__init__.py -../markupsafe/_constants.py -../markupsafe/tests.py -../markupsafe/_speedups.c -../markupsafe/_compat.pyc -../markupsafe/_native.pyc -../markupsafe/__init__.pyc -../markupsafe/_constants.pyc -../markupsafe/tests.pyc -../markupsafe/_speedups.so -./ -SOURCES.txt -dependency_links.txt -PKG-INFO -not-zip-safe -top_level.txt diff --git a/Linux_i686/lib/python2.7/site-packages/MarkupSafe-0.23.egg-info/not-zip-safe b/Linux_i686/lib/python2.7/site-packages/MarkupSafe-0.23.egg-info/not-zip-safe deleted file mode 100644 index 8b13789..0000000 --- a/Linux_i686/lib/python2.7/site-packages/MarkupSafe-0.23.egg-info/not-zip-safe +++ /dev/null @@ -1 +0,0 @@ - diff --git a/Linux_i686/lib/python2.7/site-packages/MarkupSafe-0.23.egg-info/top_level.txt b/Linux_i686/lib/python2.7/site-packages/MarkupSafe-0.23.egg-info/top_level.txt deleted file mode 100644 index 75bf729..0000000 --- a/Linux_i686/lib/python2.7/site-packages/MarkupSafe-0.23.egg-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -markupsafe diff --git a/Linux_i686/lib/python2.7/site-packages/Twisted-14.0.0.egg-info/PKG-INFO b/Linux_i686/lib/python2.7/site-packages/Twisted-14.0.0.egg-info/PKG-INFO deleted file mode 100644 index 9414e47..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Twisted-14.0.0.egg-info/PKG-INFO +++ /dev/null @@ -1,16 +0,0 @@ -Metadata-Version: 1.1 -Name: Twisted -Version: 14.0.0 -Summary: An asynchronous networking framework written in Python -Home-page: http://twistedmatrix.com/ -Author: Glyph Lefkowitz -Author-email: glyph@twistedmatrix.com -License: MIT -Description: An extensible framework for Python programming, with special focus - on event-based network programming and multiprotocol integration. - -Platform: UNKNOWN -Classifier: Programming Language :: Python :: 2.6 -Classifier: Programming Language :: Python :: 2.7 -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.3 diff --git a/Linux_i686/lib/python2.7/site-packages/Twisted-14.0.0.egg-info/SOURCES.txt b/Linux_i686/lib/python2.7/site-packages/Twisted-14.0.0.egg-info/SOURCES.txt deleted file mode 100644 index 073c9d5..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Twisted-14.0.0.egg-info/SOURCES.txt +++ /dev/null @@ -1,846 +0,0 @@ -README -Twisted.egg-info/PKG-INFO -Twisted.egg-info/SOURCES.txt -Twisted.egg-info/dependency_links.txt -Twisted.egg-info/not-zip-safe -Twisted.egg-info/requires.txt -Twisted.egg-info/top_level.txt -bin/manhole -bin/pyhtmlizer -bin/tap2deb -bin/tap2rpm -bin/tapconvert -bin/trial -bin/twistd -bin/conch/cftp -bin/conch/ckeygen -bin/conch/conch -bin/conch/tkconch -bin/lore/lore -bin/mail/mailmail -twisted/__init__.py -twisted/_version.py -twisted/copyright.py -twisted/plugin.py -twisted/application/__init__.py -twisted/application/app.py -twisted/application/internet.py -twisted/application/reactors.py -twisted/application/service.py -twisted/application/strports.py -twisted/application/test/__init__.py -twisted/application/test/test_internet.py -twisted/conch/__init__.py -twisted/conch/_version.py -twisted/conch/avatar.py -twisted/conch/checkers.py -twisted/conch/endpoints.py -twisted/conch/error.py -twisted/conch/interfaces.py -twisted/conch/ls.py -twisted/conch/manhole.py -twisted/conch/manhole_ssh.py -twisted/conch/manhole_tap.py -twisted/conch/mixin.py -twisted/conch/recvline.py -twisted/conch/stdio.py -twisted/conch/tap.py -twisted/conch/telnet.py -twisted/conch/ttymodes.py -twisted/conch/unix.py -twisted/conch/client/__init__.py -twisted/conch/client/agent.py -twisted/conch/client/connect.py -twisted/conch/client/default.py -twisted/conch/client/direct.py -twisted/conch/client/knownhosts.py -twisted/conch/client/options.py -twisted/conch/insults/__init__.py -twisted/conch/insults/client.py -twisted/conch/insults/colors.py -twisted/conch/insults/helper.py -twisted/conch/insults/insults.py -twisted/conch/insults/text.py -twisted/conch/insults/window.py -twisted/conch/openssh_compat/__init__.py -twisted/conch/openssh_compat/factory.py -twisted/conch/openssh_compat/primes.py -twisted/conch/scripts/__init__.py -twisted/conch/scripts/cftp.py -twisted/conch/scripts/ckeygen.py -twisted/conch/scripts/conch.py -twisted/conch/scripts/tkconch.py -twisted/conch/ssh/__init__.py -twisted/conch/ssh/address.py -twisted/conch/ssh/agent.py -twisted/conch/ssh/channel.py -twisted/conch/ssh/common.py -twisted/conch/ssh/connection.py -twisted/conch/ssh/factory.py -twisted/conch/ssh/filetransfer.py -twisted/conch/ssh/forwarding.py -twisted/conch/ssh/keys.py -twisted/conch/ssh/service.py -twisted/conch/ssh/session.py -twisted/conch/ssh/sexpy.py -twisted/conch/ssh/transport.py -twisted/conch/ssh/userauth.py -twisted/conch/test/__init__.py -twisted/conch/test/keydata.py -twisted/conch/test/test_address.py -twisted/conch/test/test_agent.py -twisted/conch/test/test_cftp.py -twisted/conch/test/test_channel.py -twisted/conch/test/test_checkers.py -twisted/conch/test/test_ckeygen.py -twisted/conch/test/test_conch.py -twisted/conch/test/test_connection.py -twisted/conch/test/test_default.py -twisted/conch/test/test_endpoints.py -twisted/conch/test/test_filetransfer.py -twisted/conch/test/test_helper.py -twisted/conch/test/test_insults.py -twisted/conch/test/test_keys.py -twisted/conch/test/test_knownhosts.py -twisted/conch/test/test_manhole.py -twisted/conch/test/test_mixin.py -twisted/conch/test/test_openssh_compat.py -twisted/conch/test/test_recvline.py -twisted/conch/test/test_scripts.py -twisted/conch/test/test_session.py -twisted/conch/test/test_ssh.py -twisted/conch/test/test_tap.py -twisted/conch/test/test_telnet.py -twisted/conch/test/test_text.py -twisted/conch/test/test_transport.py -twisted/conch/test/test_userauth.py -twisted/conch/test/test_window.py -twisted/conch/ui/__init__.py -twisted/conch/ui/ansi.py -twisted/conch/ui/tkvt100.py -twisted/cred/__init__.py -twisted/cred/_digest.py -twisted/cred/checkers.py -twisted/cred/credentials.py -twisted/cred/error.py -twisted/cred/pamauth.py -twisted/cred/portal.py -twisted/cred/strcred.py -twisted/enterprise/__init__.py -twisted/enterprise/adbapi.py -twisted/internet/__init__.py -twisted/internet/_baseprocess.py -twisted/internet/_dumbwin32proc.py -twisted/internet/_glibbase.py -twisted/internet/_newtls.py -twisted/internet/_pollingfile.py -twisted/internet/_posixserialport.py -twisted/internet/_posixstdio.py -twisted/internet/_signals.py -twisted/internet/_ssl.py -twisted/internet/_sslverify.py -twisted/internet/_threadedselect.py -twisted/internet/_win32serialport.py -twisted/internet/_win32stdio.py -twisted/internet/abstract.py -twisted/internet/address.py -twisted/internet/base.py -twisted/internet/cfreactor.py -twisted/internet/default.py -twisted/internet/defer.py -twisted/internet/endpoints.py -twisted/internet/epollreactor.py -twisted/internet/error.py -twisted/internet/fdesc.py -twisted/internet/gireactor.py -twisted/internet/glib2reactor.py -twisted/internet/gtk2reactor.py -twisted/internet/gtk3reactor.py -twisted/internet/gtkreactor.py -twisted/internet/inotify.py -twisted/internet/interfaces.py -twisted/internet/kqreactor.py -twisted/internet/main.py -twisted/internet/pollreactor.py -twisted/internet/posixbase.py -twisted/internet/process.py -twisted/internet/protocol.py -twisted/internet/pyuisupport.py -twisted/internet/qtreactor.py -twisted/internet/reactor.py -twisted/internet/selectreactor.py -twisted/internet/serialport.py -twisted/internet/ssl.py -twisted/internet/stdio.py -twisted/internet/task.py -twisted/internet/tcp.py -twisted/internet/threads.py -twisted/internet/tksupport.py -twisted/internet/udp.py -twisted/internet/unix.py -twisted/internet/utils.py -twisted/internet/win32eventreactor.py -twisted/internet/wxreactor.py -twisted/internet/wxsupport.py -twisted/internet/iocpreactor/__init__.py -twisted/internet/iocpreactor/abstract.py -twisted/internet/iocpreactor/const.py -twisted/internet/iocpreactor/interfaces.py -twisted/internet/iocpreactor/reactor.py -twisted/internet/iocpreactor/setup.py -twisted/internet/iocpreactor/tcp.py -twisted/internet/iocpreactor/udp.py -twisted/internet/iocpreactor/iocpsupport/iocpsupport.c -twisted/internet/iocpreactor/iocpsupport/winsock_pointers.c -twisted/internet/test/__init__.py -twisted/internet/test/_posixifaces.py -twisted/internet/test/_win32ifaces.py -twisted/internet/test/connectionmixins.py -twisted/internet/test/fakeendpoint.py -twisted/internet/test/modulehelpers.py -twisted/internet/test/process_gireactornocompat.py -twisted/internet/test/process_helper.py -twisted/internet/test/reactormixins.py -twisted/internet/test/test_abstract.py -twisted/internet/test/test_address.py -twisted/internet/test/test_base.py -twisted/internet/test/test_baseprocess.py -twisted/internet/test/test_core.py -twisted/internet/test/test_default.py -twisted/internet/test/test_endpoints.py -twisted/internet/test/test_epollreactor.py -twisted/internet/test/test_fdset.py -twisted/internet/test/test_filedescriptor.py -twisted/internet/test/test_gireactor.py -twisted/internet/test/test_glibbase.py -twisted/internet/test/test_gtkreactor.py -twisted/internet/test/test_inlinecb.py -twisted/internet/test/test_inotify.py -twisted/internet/test/test_iocp.py -twisted/internet/test/test_main.py -twisted/internet/test/test_newtls.py -twisted/internet/test/test_pollingfile.py -twisted/internet/test/test_posixbase.py -twisted/internet/test/test_posixprocess.py -twisted/internet/test/test_process.py -twisted/internet/test/test_protocol.py -twisted/internet/test/test_qtreactor.py -twisted/internet/test/test_serialport.py -twisted/internet/test/test_sigchld.py -twisted/internet/test/test_socket.py -twisted/internet/test/test_stdio.py -twisted/internet/test/test_tcp.py -twisted/internet/test/test_threads.py -twisted/internet/test/test_time.py -twisted/internet/test/test_tls.py -twisted/internet/test/test_udp.py -twisted/internet/test/test_udp_internals.py -twisted/internet/test/test_unix.py -twisted/internet/test/test_win32events.py -twisted/lore/__init__.py -twisted/lore/_version.py -twisted/lore/default.py -twisted/lore/docbook.py -twisted/lore/htmlbook.py -twisted/lore/indexer.py -twisted/lore/latex.py -twisted/lore/lint.py -twisted/lore/lmath.py -twisted/lore/man2lore.py -twisted/lore/numberer.py -twisted/lore/process.py -twisted/lore/slides.py -twisted/lore/texi.py -twisted/lore/tree.py -twisted/lore/scripts/__init__.py -twisted/lore/scripts/lore.py -twisted/lore/test/__init__.py -twisted/lore/test/test_docbook.py -twisted/lore/test/test_latex.py -twisted/lore/test/test_lint.py -twisted/lore/test/test_lmath.py -twisted/lore/test/test_lore.py -twisted/lore/test/test_man2lore.py -twisted/lore/test/test_scripts.py -twisted/lore/test/test_slides.py -twisted/lore/test/test_texi.py -twisted/mail/__init__.py -twisted/mail/_version.py -twisted/mail/alias.py -twisted/mail/bounce.py -twisted/mail/imap4.py -twisted/mail/mail.py -twisted/mail/maildir.py -twisted/mail/pb.py -twisted/mail/pop3.py -twisted/mail/pop3client.py -twisted/mail/protocols.py -twisted/mail/relay.py -twisted/mail/relaymanager.py -twisted/mail/smtp.py -twisted/mail/tap.py -twisted/mail/scripts/__init__.py -twisted/mail/scripts/mailmail.py -twisted/mail/test/__init__.py -twisted/mail/test/pop3testserver.py -twisted/mail/test/test_bounce.py -twisted/mail/test/test_imap.py -twisted/mail/test/test_mail.py -twisted/mail/test/test_mailmail.py -twisted/mail/test/test_options.py -twisted/mail/test/test_pop3.py -twisted/mail/test/test_pop3client.py -twisted/mail/test/test_scripts.py -twisted/mail/test/test_smtp.py -twisted/manhole/__init__.py -twisted/manhole/_inspectro.py -twisted/manhole/explorer.py -twisted/manhole/gladereactor.py -twisted/manhole/service.py -twisted/manhole/telnet.py -twisted/manhole/test/__init__.py -twisted/manhole/test/test_explorer.py -twisted/manhole/ui/__init__.py -twisted/manhole/ui/gtk2manhole.py -twisted/manhole/ui/test/__init__.py -twisted/manhole/ui/test/test_gtk2manhole.py -twisted/names/__init__.py -twisted/names/_rfc1982.py -twisted/names/_version.py -twisted/names/authority.py -twisted/names/cache.py -twisted/names/client.py -twisted/names/common.py -twisted/names/dns.py -twisted/names/error.py -twisted/names/hosts.py -twisted/names/resolve.py -twisted/names/root.py -twisted/names/secondary.py -twisted/names/server.py -twisted/names/srvconnect.py -twisted/names/tap.py -twisted/names/test/__init__.py -twisted/names/test/test_cache.py -twisted/names/test/test_client.py -twisted/names/test/test_common.py -twisted/names/test/test_dns.py -twisted/names/test/test_examples.py -twisted/names/test/test_hosts.py -twisted/names/test/test_names.py -twisted/names/test/test_resolve.py -twisted/names/test/test_rfc1982.py -twisted/names/test/test_rootresolve.py -twisted/names/test/test_server.py -twisted/names/test/test_srvconnect.py -twisted/names/test/test_tap.py -twisted/news/__init__.py -twisted/news/_version.py -twisted/news/database.py -twisted/news/news.py -twisted/news/nntp.py -twisted/news/tap.py -twisted/news/test/__init__.py -twisted/news/test/test_database.py -twisted/news/test/test_news.py -twisted/news/test/test_nntp.py -twisted/pair/__init__.py -twisted/pair/_version.py -twisted/pair/ethernet.py -twisted/pair/ip.py -twisted/pair/raw.py -twisted/pair/rawudp.py -twisted/pair/testing.py -twisted/pair/tuntap.py -twisted/pair/test/__init__.py -twisted/pair/test/test_ethernet.py -twisted/pair/test/test_ip.py -twisted/pair/test/test_rawudp.py -twisted/pair/test/test_tuntap.py -twisted/persisted/__init__.py -twisted/persisted/aot.py -twisted/persisted/crefutil.py -twisted/persisted/dirdbm.py -twisted/persisted/sob.py -twisted/persisted/styles.py -twisted/persisted/test/__init__.py -twisted/persisted/test/test_styles.py -twisted/plugins/__init__.py -twisted/plugins/cred_anonymous.py -twisted/plugins/cred_file.py -twisted/plugins/cred_memory.py -twisted/plugins/cred_sshkeys.py -twisted/plugins/cred_unix.py -twisted/plugins/twisted_conch.py -twisted/plugins/twisted_core.py -twisted/plugins/twisted_ftp.py -twisted/plugins/twisted_inet.py -twisted/plugins/twisted_lore.py -twisted/plugins/twisted_mail.py -twisted/plugins/twisted_manhole.py -twisted/plugins/twisted_names.py -twisted/plugins/twisted_news.py -twisted/plugins/twisted_portforward.py -twisted/plugins/twisted_qtstub.py -twisted/plugins/twisted_reactors.py -twisted/plugins/twisted_runner.py -twisted/plugins/twisted_socks.py -twisted/plugins/twisted_telnet.py -twisted/plugins/twisted_trial.py -twisted/plugins/twisted_web.py -twisted/plugins/twisted_words.py -twisted/positioning/__init__.py -twisted/positioning/_sentence.py -twisted/positioning/base.py -twisted/positioning/ipositioning.py -twisted/positioning/nmea.py -twisted/positioning/test/__init__.py -twisted/positioning/test/receiver.py -twisted/positioning/test/test_base.py -twisted/positioning/test/test_nmea.py -twisted/positioning/test/test_sentence.py -twisted/protocols/__init__.py -twisted/protocols/amp.py -twisted/protocols/basic.py -twisted/protocols/dict.py -twisted/protocols/finger.py -twisted/protocols/ftp.py -twisted/protocols/htb.py -twisted/protocols/ident.py -twisted/protocols/loopback.py -twisted/protocols/memcache.py -twisted/protocols/pcp.py -twisted/protocols/policies.py -twisted/protocols/portforward.py -twisted/protocols/postfix.py -twisted/protocols/shoutcast.py -twisted/protocols/sip.py -twisted/protocols/socks.py -twisted/protocols/stateful.py -twisted/protocols/telnet.py -twisted/protocols/tls.py -twisted/protocols/wire.py -twisted/protocols/gps/__init__.py -twisted/protocols/gps/nmea.py -twisted/protocols/gps/rockwell.py -twisted/protocols/mice/__init__.py -twisted/protocols/mice/mouseman.py -twisted/protocols/test/__init__.py -twisted/protocols/test/test_basic.py -twisted/protocols/test/test_tls.py -twisted/python/__init__.py -twisted/python/_inotify.py -twisted/python/_release.py -twisted/python/_shellcomp.py -twisted/python/_textattributes.py -twisted/python/compat.py -twisted/python/components.py -twisted/python/constants.py -twisted/python/context.py -twisted/python/deprecate.py -twisted/python/dist.py -twisted/python/dist3.py -twisted/python/failure.py -twisted/python/fakepwd.py -twisted/python/filepath.py -twisted/python/finalize.py -twisted/python/formmethod.py -twisted/python/hashlib.py -twisted/python/hook.py -twisted/python/htmlizer.py -twisted/python/lockfile.py -twisted/python/log.py -twisted/python/logfile.py -twisted/python/modules.py -twisted/python/monkey.py -twisted/python/procutils.py -twisted/python/randbytes.py -twisted/python/rebuild.py -twisted/python/reflect.py -twisted/python/release.py -twisted/python/roots.py -twisted/python/runtime.py -twisted/python/sendmsg.c -twisted/python/shortcut.py -twisted/python/syslog.py -twisted/python/systemd.py -twisted/python/text.py -twisted/python/threadable.py -twisted/python/threadpool.py -twisted/python/urlpath.py -twisted/python/usage.py -twisted/python/util.py -twisted/python/versions.py -twisted/python/win32.py -twisted/python/zippath.py -twisted/python/zipstream.py -twisted/python/test/__init__.py -twisted/python/test/deprecatedattributes.py -twisted/python/test/modules_helpers.py -twisted/python/test/pullpipe.py -twisted/python/test/test_components.py -twisted/python/test/test_constants.py -twisted/python/test/test_deprecate.py -twisted/python/test/test_dist.py -twisted/python/test/test_dist3.py -twisted/python/test/test_fakepwd.py -twisted/python/test/test_hashlib.py -twisted/python/test/test_htmlizer.py -twisted/python/test/test_inotify.py -twisted/python/test/test_release.py -twisted/python/test/test_runtime.py -twisted/python/test/test_sendmsg.py -twisted/python/test/test_shellcomp.py -twisted/python/test/test_syslog.py -twisted/python/test/test_systemd.py -twisted/python/test/test_textattributes.py -twisted/python/test/test_urlpath.py -twisted/python/test/test_util.py -twisted/python/test/test_versions.py -twisted/python/test/test_win32.py -twisted/python/test/test_zippath.py -twisted/python/test/test_zipstream.py -twisted/runner/__init__.py -twisted/runner/_version.py -twisted/runner/inetd.py -twisted/runner/inetdconf.py -twisted/runner/inetdtap.py -twisted/runner/portmap.c -twisted/runner/procmon.py -twisted/runner/procmontap.py -twisted/runner/test/__init__.py -twisted/runner/test/test_procmon.py -twisted/runner/test/test_procmontap.py -twisted/scripts/__init__.py -twisted/scripts/_twistd_unix.py -twisted/scripts/_twistw.py -twisted/scripts/htmlizer.py -twisted/scripts/manhole.py -twisted/scripts/tap2deb.py -twisted/scripts/tap2rpm.py -twisted/scripts/tapconvert.py -twisted/scripts/tkunzip.py -twisted/scripts/trial.py -twisted/scripts/twistd.py -twisted/scripts/test/__init__.py -twisted/scripts/test/test_scripts.py -twisted/scripts/test/test_tap2deb.py -twisted/scripts/test/test_tap2rpm.py -twisted/spread/__init__.py -twisted/spread/banana.py -twisted/spread/flavors.py -twisted/spread/interfaces.py -twisted/spread/jelly.py -twisted/spread/pb.py -twisted/spread/publish.py -twisted/spread/util.py -twisted/spread/ui/__init__.py -twisted/spread/ui/gtk2util.py -twisted/spread/ui/tktree.py -twisted/spread/ui/tkutil.py -twisted/tap/__init__.py -twisted/tap/ftp.py -twisted/tap/manhole.py -twisted/tap/portforward.py -twisted/tap/socks.py -twisted/tap/telnet.py -twisted/test/__init__.py -twisted/test/_preamble.py -twisted/test/crash_test_dummy.py -twisted/test/iosim.py -twisted/test/mock_win32process.py -twisted/test/myrebuilder1.py -twisted/test/myrebuilder2.py -twisted/test/plugin_basic.py -twisted/test/plugin_extra1.py -twisted/test/plugin_extra2.py -twisted/test/process_cmdline.py -twisted/test/process_echoer.py -twisted/test/process_fds.py -twisted/test/process_linger.py -twisted/test/process_reader.py -twisted/test/process_signal.py -twisted/test/process_stdinreader.py -twisted/test/process_tester.py -twisted/test/process_tty.py -twisted/test/process_twisted.py -twisted/test/proto_helpers.py -twisted/test/raiser.c -twisted/test/reflect_helper_IE.py -twisted/test/reflect_helper_VE.py -twisted/test/reflect_helper_ZDE.py -twisted/test/ssl_helpers.py -twisted/test/stdio_test_consumer.py -twisted/test/stdio_test_halfclose.py -twisted/test/stdio_test_hostpeer.py -twisted/test/stdio_test_lastwrite.py -twisted/test/stdio_test_loseconn.py -twisted/test/stdio_test_producer.py -twisted/test/stdio_test_write.py -twisted/test/stdio_test_writeseq.py -twisted/test/test_abstract.py -twisted/test/test_adbapi.py -twisted/test/test_amp.py -twisted/test/test_application.py -twisted/test/test_banana.py -twisted/test/test_compat.py -twisted/test/test_context.py -twisted/test/test_cooperator.py -twisted/test/test_defer.py -twisted/test/test_defgen.py -twisted/test/test_dict.py -twisted/test/test_digestauth.py -twisted/test/test_dirdbm.py -twisted/test/test_doc.py -twisted/test/test_error.py -twisted/test/test_explorer.py -twisted/test/test_factories.py -twisted/test/test_failure.py -twisted/test/test_fdesc.py -twisted/test/test_finger.py -twisted/test/test_formmethod.py -twisted/test/test_ftp.py -twisted/test/test_ftp_options.py -twisted/test/test_hook.py -twisted/test/test_htb.py -twisted/test/test_ident.py -twisted/test/test_internet.py -twisted/test/test_iosim.py -twisted/test/test_iutils.py -twisted/test/test_jelly.py -twisted/test/test_lockfile.py -twisted/test/test_log.py -twisted/test/test_logfile.py -twisted/test/test_loopback.py -twisted/test/test_manhole.py -twisted/test/test_memcache.py -twisted/test/test_modules.py -twisted/test/test_monkey.py -twisted/test/test_newcred.py -twisted/test/test_nmea.py -twisted/test/test_paths.py -twisted/test/test_pb.py -twisted/test/test_pbfailure.py -twisted/test/test_pcp.py -twisted/test/test_persisted.py -twisted/test/test_plugin.py -twisted/test/test_policies.py -twisted/test/test_postfix.py -twisted/test/test_process.py -twisted/test/test_protocols.py -twisted/test/test_randbytes.py -twisted/test/test_rebuild.py -twisted/test/test_reflect.py -twisted/test/test_roots.py -twisted/test/test_setup.py -twisted/test/test_shortcut.py -twisted/test/test_sip.py -twisted/test/test_sob.py -twisted/test/test_socks.py -twisted/test/test_ssl.py -twisted/test/test_sslverify.py -twisted/test/test_stateful.py -twisted/test/test_stdio.py -twisted/test/test_strcred.py -twisted/test/test_strerror.py -twisted/test/test_stringtransport.py -twisted/test/test_strports.py -twisted/test/test_task.py -twisted/test/test_tcp.py -twisted/test/test_tcp_internals.py -twisted/test/test_text.py -twisted/test/test_threadable.py -twisted/test/test_threadpool.py -twisted/test/test_threads.py -twisted/test/test_tpfile.py -twisted/test/test_twistd.py -twisted/test/test_twisted.py -twisted/test/test_udp.py -twisted/test/test_unix.py -twisted/test/test_usage.py -twisted/test/testutils.py -twisted/trial/__init__.py -twisted/trial/_asyncrunner.py -twisted/trial/_asynctest.py -twisted/trial/_synctest.py -twisted/trial/itrial.py -twisted/trial/reporter.py -twisted/trial/runner.py -twisted/trial/unittest.py -twisted/trial/util.py -twisted/trial/_dist/__init__.py -twisted/trial/_dist/distreporter.py -twisted/trial/_dist/disttrial.py -twisted/trial/_dist/managercommands.py -twisted/trial/_dist/options.py -twisted/trial/_dist/worker.py -twisted/trial/_dist/workercommands.py -twisted/trial/_dist/workerreporter.py -twisted/trial/_dist/workertrial.py -twisted/trial/_dist/test/__init__.py -twisted/trial/_dist/test/test_distreporter.py -twisted/trial/_dist/test/test_disttrial.py -twisted/trial/_dist/test/test_options.py -twisted/trial/_dist/test/test_worker.py -twisted/trial/_dist/test/test_workerreporter.py -twisted/trial/_dist/test/test_workertrial.py -twisted/trial/test/__init__.py -twisted/trial/test/detests.py -twisted/trial/test/erroneous.py -twisted/trial/test/mockcustomsuite.py -twisted/trial/test/mockcustomsuite2.py -twisted/trial/test/mockcustomsuite3.py -twisted/trial/test/mockdoctest.py -twisted/trial/test/moduleself.py -twisted/trial/test/moduletest.py -twisted/trial/test/novars.py -twisted/trial/test/ordertests.py -twisted/trial/test/packages.py -twisted/trial/test/sample.py -twisted/trial/test/scripttest.py -twisted/trial/test/skipping.py -twisted/trial/test/suppression.py -twisted/trial/test/test_assertions.py -twisted/trial/test/test_asyncassertions.py -twisted/trial/test/test_deferred.py -twisted/trial/test/test_doctest.py -twisted/trial/test/test_keyboard.py -twisted/trial/test/test_loader.py -twisted/trial/test/test_log.py -twisted/trial/test/test_output.py -twisted/trial/test/test_plugins.py -twisted/trial/test/test_pyunitcompat.py -twisted/trial/test/test_reporter.py -twisted/trial/test/test_runner.py -twisted/trial/test/test_script.py -twisted/trial/test/test_suppression.py -twisted/trial/test/test_testcase.py -twisted/trial/test/test_tests.py -twisted/trial/test/test_util.py -twisted/trial/test/test_warning.py -twisted/trial/test/weird.py -twisted/web/__init__.py -twisted/web/_element.py -twisted/web/_flatten.py -twisted/web/_newclient.py -twisted/web/_responses.py -twisted/web/_stan.py -twisted/web/_version.py -twisted/web/client.py -twisted/web/demo.py -twisted/web/distrib.py -twisted/web/domhelpers.py -twisted/web/error.py -twisted/web/guard.py -twisted/web/html.py -twisted/web/http.py -twisted/web/http_headers.py -twisted/web/iweb.py -twisted/web/microdom.py -twisted/web/proxy.py -twisted/web/resource.py -twisted/web/rewrite.py -twisted/web/script.py -twisted/web/server.py -twisted/web/soap.py -twisted/web/static.py -twisted/web/sux.py -twisted/web/tap.py -twisted/web/template.py -twisted/web/twcgi.py -twisted/web/util.py -twisted/web/vhost.py -twisted/web/wsgi.py -twisted/web/xmlrpc.py -twisted/web/_auth/__init__.py -twisted/web/_auth/basic.py -twisted/web/_auth/digest.py -twisted/web/_auth/wrapper.py -twisted/web/test/__init__.py -twisted/web/test/_util.py -twisted/web/test/requesthelper.py -twisted/web/test/test_agent.py -twisted/web/test/test_cgi.py -twisted/web/test/test_distrib.py -twisted/web/test/test_domhelpers.py -twisted/web/test/test_error.py -twisted/web/test/test_flatten.py -twisted/web/test/test_http.py -twisted/web/test/test_http_headers.py -twisted/web/test/test_httpauth.py -twisted/web/test/test_newclient.py -twisted/web/test/test_proxy.py -twisted/web/test/test_resource.py -twisted/web/test/test_script.py -twisted/web/test/test_soap.py -twisted/web/test/test_stan.py -twisted/web/test/test_static.py -twisted/web/test/test_tap.py -twisted/web/test/test_template.py -twisted/web/test/test_util.py -twisted/web/test/test_vhost.py -twisted/web/test/test_web.py -twisted/web/test/test_webclient.py -twisted/web/test/test_wsgi.py -twisted/web/test/test_xml.py -twisted/web/test/test_xmlrpc.py -twisted/words/__init__.py -twisted/words/_version.py -twisted/words/ewords.py -twisted/words/iwords.py -twisted/words/service.py -twisted/words/tap.py -twisted/words/xmpproutertap.py -twisted/words/im/__init__.py -twisted/words/im/baseaccount.py -twisted/words/im/basechat.py -twisted/words/im/basesupport.py -twisted/words/im/interfaces.py -twisted/words/im/ircsupport.py -twisted/words/im/locals.py -twisted/words/im/pbsupport.py -twisted/words/protocols/__init__.py -twisted/words/protocols/irc.py -twisted/words/protocols/msn.py -twisted/words/protocols/oscar.py -twisted/words/protocols/jabber/__init__.py -twisted/words/protocols/jabber/client.py -twisted/words/protocols/jabber/component.py -twisted/words/protocols/jabber/error.py -twisted/words/protocols/jabber/ijabber.py -twisted/words/protocols/jabber/jid.py -twisted/words/protocols/jabber/jstrports.py -twisted/words/protocols/jabber/sasl.py -twisted/words/protocols/jabber/sasl_mechanisms.py -twisted/words/protocols/jabber/xmlstream.py -twisted/words/protocols/jabber/xmpp_stringprep.py -twisted/words/test/__init__.py -twisted/words/test/test_basechat.py -twisted/words/test/test_basesupport.py -twisted/words/test/test_domish.py -twisted/words/test/test_irc.py -twisted/words/test/test_irc_service.py -twisted/words/test/test_ircsupport.py -twisted/words/test/test_jabberclient.py -twisted/words/test/test_jabbercomponent.py -twisted/words/test/test_jabbererror.py -twisted/words/test/test_jabberjid.py -twisted/words/test/test_jabberjstrports.py -twisted/words/test/test_jabbersasl.py -twisted/words/test/test_jabbersaslmechanisms.py -twisted/words/test/test_jabberxmlstream.py -twisted/words/test/test_jabberxmppstringprep.py -twisted/words/test/test_msn.py -twisted/words/test/test_oscar.py -twisted/words/test/test_service.py -twisted/words/test/test_tap.py -twisted/words/test/test_xishutil.py -twisted/words/test/test_xmlstream.py -twisted/words/test/test_xmpproutertap.py -twisted/words/test/test_xpath.py -twisted/words/xish/__init__.py -twisted/words/xish/domish.py -twisted/words/xish/utility.py -twisted/words/xish/xmlstream.py -twisted/words/xish/xpath.py -twisted/words/xish/xpathparser.py \ No newline at end of file diff --git a/Linux_i686/lib/python2.7/site-packages/Twisted-14.0.0.egg-info/dependency_links.txt b/Linux_i686/lib/python2.7/site-packages/Twisted-14.0.0.egg-info/dependency_links.txt deleted file mode 100644 index 8b13789..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Twisted-14.0.0.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/Linux_i686/lib/python2.7/site-packages/Twisted-14.0.0.egg-info/installed-files.txt b/Linux_i686/lib/python2.7/site-packages/Twisted-14.0.0.egg-info/installed-files.txt deleted file mode 100644 index dd46462..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Twisted-14.0.0.egg-info/installed-files.txt +++ /dev/null @@ -1,1757 +0,0 @@ -../twisted/copyright.py -../twisted/_version.py -../twisted/plugin.py -../twisted/__init__.py -../twisted/manhole/telnet.py -../twisted/manhole/explorer.py -../twisted/manhole/service.py -../twisted/manhole/_inspectro.py -../twisted/manhole/__init__.py -../twisted/manhole/gladereactor.py -../twisted/manhole/ui/gtk2manhole.py -../twisted/manhole/ui/__init__.py -../twisted/manhole/ui/test/__init__.py -../twisted/manhole/ui/test/test_gtk2manhole.py -../twisted/manhole/test/__init__.py -../twisted/manhole/test/test_explorer.py -../twisted/mail/pb.py -../twisted/mail/relaymanager.py -../twisted/mail/imap4.py -../twisted/mail/_version.py -../twisted/mail/relay.py -../twisted/mail/pop3client.py -../twisted/mail/bounce.py -../twisted/mail/pop3.py -../twisted/mail/mail.py -../twisted/mail/__init__.py -../twisted/mail/alias.py -../twisted/mail/smtp.py -../twisted/mail/protocols.py -../twisted/mail/maildir.py -../twisted/mail/tap.py -../twisted/mail/scripts/mailmail.py -../twisted/mail/scripts/__init__.py -../twisted/mail/test/test_pop3client.py -../twisted/mail/test/test_smtp.py -../twisted/mail/test/test_scripts.py -../twisted/mail/test/test_imap.py -../twisted/mail/test/test_bounce.py -../twisted/mail/test/pop3testserver.py -../twisted/mail/test/__init__.py -../twisted/mail/test/test_mail.py -../twisted/mail/test/test_pop3.py -../twisted/mail/test/test_options.py -../twisted/mail/test/test_mailmail.py -../twisted/names/error.py -../twisted/names/client.py -../twisted/names/common.py -../twisted/names/server.py -../twisted/names/_version.py -../twisted/names/root.py -../twisted/names/hosts.py -../twisted/names/_rfc1982.py -../twisted/names/dns.py -../twisted/names/resolve.py -../twisted/names/__init__.py -../twisted/names/secondary.py -../twisted/names/srvconnect.py -../twisted/names/cache.py -../twisted/names/authority.py -../twisted/names/tap.py -../twisted/names/test/test_rfc1982.py -../twisted/names/test/test_client.py -../twisted/names/test/test_hosts.py -../twisted/names/test/test_server.py -../twisted/names/test/test_names.py -../twisted/names/test/test_resolve.py -../twisted/names/test/test_common.py -../twisted/names/test/__init__.py -../twisted/names/test/test_examples.py -../twisted/names/test/test_cache.py -../twisted/names/test/test_tap.py -../twisted/names/test/test_rootresolve.py -../twisted/names/test/test_srvconnect.py -../twisted/names/test/test_dns.py -../twisted/trial/unittest.py -../twisted/trial/_synctest.py -../twisted/trial/util.py -../twisted/trial/__init__.py -../twisted/trial/reporter.py -../twisted/trial/itrial.py -../twisted/trial/_asynctest.py -../twisted/trial/runner.py -../twisted/trial/_asyncrunner.py -../twisted/trial/test/scripttest.py -../twisted/trial/test/weird.py -../twisted/trial/test/test_assertions.py -../twisted/trial/test/mockcustomsuite.py -../twisted/trial/test/skipping.py -../twisted/trial/test/test_loader.py -../twisted/trial/test/test_reporter.py -../twisted/trial/test/novars.py -../twisted/trial/test/test_keyboard.py -../twisted/trial/test/moduletest.py -../twisted/trial/test/test_deferred.py -../twisted/trial/test/test_script.py -../twisted/trial/test/mockdoctest.py -../twisted/trial/test/test_testcase.py -../twisted/trial/test/test_util.py -../twisted/trial/test/ordertests.py -../twisted/trial/test/suppression.py -../twisted/trial/test/test_tests.py -../twisted/trial/test/test_warning.py -../twisted/trial/test/test_doctest.py -../twisted/trial/test/__init__.py -../twisted/trial/test/test_log.py -../twisted/trial/test/erroneous.py -../twisted/trial/test/test_plugins.py -../twisted/trial/test/test_asyncassertions.py -../twisted/trial/test/test_suppression.py -../twisted/trial/test/sample.py -../twisted/trial/test/detests.py -../twisted/trial/test/mockcustomsuite2.py -../twisted/trial/test/test_pyunitcompat.py -../twisted/trial/test/test_runner.py -../twisted/trial/test/test_output.py -../twisted/trial/test/mockcustomsuite3.py -../twisted/trial/test/moduleself.py -../twisted/trial/test/packages.py -../twisted/trial/_dist/managercommands.py -../twisted/trial/_dist/disttrial.py -../twisted/trial/_dist/workerreporter.py -../twisted/trial/_dist/distreporter.py -../twisted/trial/_dist/workertrial.py -../twisted/trial/_dist/__init__.py -../twisted/trial/_dist/workercommands.py -../twisted/trial/_dist/worker.py -../twisted/trial/_dist/options.py -../twisted/trial/_dist/test/test_workerreporter.py -../twisted/trial/_dist/test/test_worker.py -../twisted/trial/_dist/test/test_distreporter.py -../twisted/trial/_dist/test/test_workertrial.py -../twisted/trial/_dist/test/__init__.py -../twisted/trial/_dist/test/test_options.py -../twisted/trial/_dist/test/test_disttrial.py -../twisted/cred/error.py -../twisted/cred/portal.py -../twisted/cred/strcred.py -../twisted/cred/__init__.py -../twisted/cred/_digest.py -../twisted/cred/credentials.py -../twisted/cred/checkers.py -../twisted/cred/pamauth.py -../twisted/conch/error.py -../twisted/conch/stdio.py -../twisted/conch/manhole_tap.py -../twisted/conch/telnet.py -../twisted/conch/_version.py -../twisted/conch/unix.py -../twisted/conch/interfaces.py -../twisted/conch/endpoints.py -../twisted/conch/recvline.py -../twisted/conch/__init__.py -../twisted/conch/mixin.py -../twisted/conch/ls.py -../twisted/conch/checkers.py -../twisted/conch/avatar.py -../twisted/conch/manhole_ssh.py -../twisted/conch/ttymodes.py -../twisted/conch/manhole.py -../twisted/conch/tap.py -../twisted/conch/ui/tkvt100.py -../twisted/conch/ui/__init__.py -../twisted/conch/ui/ansi.py -../twisted/conch/client/connect.py -../twisted/conch/client/default.py -../twisted/conch/client/agent.py -../twisted/conch/client/direct.py -../twisted/conch/client/__init__.py -../twisted/conch/client/knownhosts.py -../twisted/conch/client/options.py -../twisted/conch/openssh_compat/primes.py -../twisted/conch/openssh_compat/__init__.py -../twisted/conch/openssh_compat/factory.py -../twisted/conch/scripts/conch.py -../twisted/conch/scripts/tkconch.py -../twisted/conch/scripts/cftp.py -../twisted/conch/scripts/ckeygen.py -../twisted/conch/scripts/__init__.py -../twisted/conch/ssh/session.py -../twisted/conch/ssh/channel.py -../twisted/conch/ssh/common.py -../twisted/conch/ssh/keys.py -../twisted/conch/ssh/userauth.py -../twisted/conch/ssh/forwarding.py -../twisted/conch/ssh/connection.py -../twisted/conch/ssh/agent.py -../twisted/conch/ssh/service.py -../twisted/conch/ssh/transport.py -../twisted/conch/ssh/__init__.py -../twisted/conch/ssh/sexpy.py -../twisted/conch/ssh/address.py -../twisted/conch/ssh/factory.py -../twisted/conch/ssh/filetransfer.py -../twisted/conch/test/test_openssh_compat.py -../twisted/conch/test/test_helper.py -../twisted/conch/test/test_knownhosts.py -../twisted/conch/test/keydata.py -../twisted/conch/test/test_ckeygen.py -../twisted/conch/test/test_cftp.py -../twisted/conch/test/test_conch.py -../twisted/conch/test/test_keys.py -../twisted/conch/test/test_filetransfer.py -../twisted/conch/test/test_scripts.py -../twisted/conch/test/test_text.py -../twisted/conch/test/test_recvline.py -../twisted/conch/test/test_endpoints.py -../twisted/conch/test/test_userauth.py -../twisted/conch/test/test_manhole.py -../twisted/conch/test/__init__.py -../twisted/conch/test/test_telnet.py -../twisted/conch/test/test_channel.py -../twisted/conch/test/test_mixin.py -../twisted/conch/test/test_agent.py -../twisted/conch/test/test_transport.py -../twisted/conch/test/test_window.py -../twisted/conch/test/test_checkers.py -../twisted/conch/test/test_address.py -../twisted/conch/test/test_tap.py -../twisted/conch/test/test_connection.py -../twisted/conch/test/test_insults.py -../twisted/conch/test/test_ssh.py -../twisted/conch/test/test_default.py -../twisted/conch/test/test_session.py -../twisted/conch/insults/client.py -../twisted/conch/insults/text.py -../twisted/conch/insults/colors.py -../twisted/conch/insults/helper.py -../twisted/conch/insults/window.py -../twisted/conch/insults/__init__.py -../twisted/conch/insults/insults.py -../twisted/python/logfile.py -../twisted/python/formmethod.py -../twisted/python/compat.py -../twisted/python/threadpool.py -../twisted/python/monkey.py -../twisted/python/log.py -../twisted/python/hook.py -../twisted/python/fakepwd.py -../twisted/python/usage.py -../twisted/python/dist3.py -../twisted/python/util.py -../twisted/python/syslog.py -../twisted/python/threadable.py -../twisted/python/text.py -../twisted/python/runtime.py -../twisted/python/context.py -../twisted/python/_textattributes.py -../twisted/python/roots.py -../twisted/python/win32.py -../twisted/python/randbytes.py -../twisted/python/hashlib.py -../twisted/python/components.py -../twisted/python/_inotify.py -../twisted/python/modules.py -../twisted/python/zippath.py -../twisted/python/versions.py -../twisted/python/_release.py -../twisted/python/deprecate.py -../twisted/python/failure.py -../twisted/python/urlpath.py -../twisted/python/reflect.py -../twisted/python/__init__.py -../twisted/python/rebuild.py -../twisted/python/procutils.py -../twisted/python/finalize.py -../twisted/python/zipstream.py -../twisted/python/filepath.py -../twisted/python/dist.py -../twisted/python/systemd.py -../twisted/python/constants.py -../twisted/python/_shellcomp.py -../twisted/python/shortcut.py -../twisted/python/release.py -../twisted/python/htmlizer.py -../twisted/python/lockfile.py -../twisted/python/test/test_zippath.py -../twisted/python/test/test_fakepwd.py -../twisted/python/test/test_release.py -../twisted/python/test/deprecatedattributes.py -../twisted/python/test/test_constants.py -../twisted/python/test/test_sendmsg.py -../twisted/python/test/test_textattributes.py -../twisted/python/test/test_shellcomp.py -../twisted/python/test/test_htmlizer.py -../twisted/python/test/test_runtime.py -../twisted/python/test/pullpipe.py -../twisted/python/test/test_deprecate.py -../twisted/python/test/test_util.py -../twisted/python/test/test_hashlib.py -../twisted/python/test/test_inotify.py -../twisted/python/test/__init__.py -../twisted/python/test/test_dist.py -../twisted/python/test/test_syslog.py -../twisted/python/test/test_zipstream.py -../twisted/python/test/test_urlpath.py -../twisted/python/test/test_components.py -../twisted/python/test/test_win32.py -../twisted/python/test/test_systemd.py -../twisted/python/test/test_versions.py -../twisted/python/test/test_dist3.py -../twisted/python/test/modules_helpers.py -../twisted/runner/procmon.py -../twisted/runner/_version.py -../twisted/runner/inetdconf.py -../twisted/runner/inetdtap.py -../twisted/runner/__init__.py -../twisted/runner/procmontap.py -../twisted/runner/inetd.py -../twisted/runner/test/test_procmon.py -../twisted/runner/test/test_procmontap.py -../twisted/runner/test/__init__.py -../twisted/tap/telnet.py -../twisted/tap/ftp.py -../twisted/tap/socks.py -../twisted/tap/portforward.py -../twisted/tap/__init__.py -../twisted/tap/manhole.py -../twisted/positioning/ipositioning.py -../twisted/positioning/__init__.py -../twisted/positioning/_sentence.py -../twisted/positioning/base.py -../twisted/positioning/nmea.py -../twisted/positioning/test/test_sentence.py -../twisted/positioning/test/test_base.py -../twisted/positioning/test/receiver.py -../twisted/positioning/test/__init__.py -../twisted/positioning/test/test_nmea.py -../twisted/spread/pb.py -../twisted/spread/util.py -../twisted/spread/banana.py -../twisted/spread/interfaces.py -../twisted/spread/jelly.py -../twisted/spread/__init__.py -../twisted/spread/flavors.py -../twisted/spread/publish.py -../twisted/spread/ui/gtk2util.py -../twisted/spread/ui/__init__.py -../twisted/spread/ui/tkutil.py -../twisted/spread/ui/tktree.py -../twisted/internet/error.py -../twisted/internet/default.py -../twisted/internet/qtreactor.py -../twisted/internet/win32eventreactor.py -../twisted/internet/stdio.py -../twisted/internet/cfreactor.py -../twisted/internet/_posixserialport.py -../twisted/internet/ssl.py -../twisted/internet/threads.py -../twisted/internet/_pollingfile.py -../twisted/internet/gtk2reactor.py -../twisted/internet/tksupport.py -../twisted/internet/gireactor.py -../twisted/internet/glib2reactor.py -../twisted/internet/_newtls.py -../twisted/internet/gtk3reactor.py -../twisted/internet/_baseprocess.py -../twisted/internet/abstract.py -../twisted/internet/inotify.py -../twisted/internet/unix.py -../twisted/internet/interfaces.py -../twisted/internet/protocol.py -../twisted/internet/_dumbwin32proc.py -../twisted/internet/tcp.py -../twisted/internet/endpoints.py -../twisted/internet/main.py -../twisted/internet/udp.py -../twisted/internet/wxsupport.py -../twisted/internet/pyuisupport.py -../twisted/internet/process.py -../twisted/internet/_signals.py -../twisted/internet/__init__.py -../twisted/internet/posixbase.py -../twisted/internet/pollreactor.py -../twisted/internet/serialport.py -../twisted/internet/_sslverify.py -../twisted/internet/kqreactor.py -../twisted/internet/fdesc.py -../twisted/internet/reactor.py -../twisted/internet/base.py -../twisted/internet/address.py -../twisted/internet/_threadedselect.py -../twisted/internet/_ssl.py -../twisted/internet/selectreactor.py -../twisted/internet/_win32serialport.py -../twisted/internet/wxreactor.py -../twisted/internet/epollreactor.py -../twisted/internet/defer.py -../twisted/internet/utils.py -../twisted/internet/task.py -../twisted/internet/_win32stdio.py -../twisted/internet/gtkreactor.py -../twisted/internet/_posixstdio.py -../twisted/internet/_glibbase.py -../twisted/internet/iocpreactor/abstract.py -../twisted/internet/iocpreactor/interfaces.py -../twisted/internet/iocpreactor/tcp.py -../twisted/internet/iocpreactor/udp.py -../twisted/internet/iocpreactor/const.py -../twisted/internet/iocpreactor/__init__.py -../twisted/internet/iocpreactor/reactor.py -../twisted/internet/iocpreactor/setup.py -../twisted/internet/test/test_posixbase.py -../twisted/internet/test/modulehelpers.py -../twisted/internet/test/test_stdio.py -../twisted/internet/test/test_qtreactor.py -../twisted/internet/test/test_serialport.py -../twisted/internet/test/test_time.py -../twisted/internet/test/process_helper.py -../twisted/internet/test/test_threads.py -../twisted/internet/test/test_core.py -../twisted/internet/test/test_posixprocess.py -../twisted/internet/test/test_filedescriptor.py -../twisted/internet/test/_win32ifaces.py -../twisted/internet/test/test_main.py -../twisted/internet/test/test_sigchld.py -../twisted/internet/test/test_unix.py -../twisted/internet/test/test_base.py -../twisted/internet/test/test_epollreactor.py -../twisted/internet/test/test_socket.py -../twisted/internet/test/test_endpoints.py -../twisted/internet/test/test_newtls.py -../twisted/internet/test/test_abstract.py -../twisted/internet/test/test_inotify.py -../twisted/internet/test/test_protocol.py -../twisted/internet/test/test_baseprocess.py -../twisted/internet/test/__init__.py -../twisted/internet/test/test_fdset.py -../twisted/internet/test/test_glibbase.py -../twisted/internet/test/test_gireactor.py -../twisted/internet/test/process_gireactornocompat.py -../twisted/internet/test/fakeendpoint.py -../twisted/internet/test/test_tcp.py -../twisted/internet/test/test_address.py -../twisted/internet/test/test_iocp.py -../twisted/internet/test/reactormixins.py -../twisted/internet/test/test_tls.py -../twisted/internet/test/_posixifaces.py -../twisted/internet/test/test_pollingfile.py -../twisted/internet/test/test_gtkreactor.py -../twisted/internet/test/test_udp.py -../twisted/internet/test/test_default.py -../twisted/internet/test/test_inlinecb.py -../twisted/internet/test/test_process.py -../twisted/internet/test/test_udp_internals.py -../twisted/internet/test/connectionmixins.py -../twisted/internet/test/test_win32events.py -../twisted/news/nntp.py -../twisted/news/database.py -../twisted/news/_version.py -../twisted/news/news.py -../twisted/news/__init__.py -../twisted/news/tap.py -../twisted/news/test/test_database.py -../twisted/news/test/__init__.py -../twisted/news/test/test_nntp.py -../twisted/news/test/test_news.py -../twisted/words/_version.py -../twisted/words/service.py -../twisted/words/iwords.py -../twisted/words/__init__.py -../twisted/words/ewords.py -../twisted/words/xmpproutertap.py -../twisted/words/tap.py -../twisted/words/xish/xpathparser.py -../twisted/words/xish/utility.py -../twisted/words/xish/xmlstream.py -../twisted/words/xish/__init__.py -../twisted/words/xish/xpath.py -../twisted/words/xish/domish.py -../twisted/words/im/basesupport.py -../twisted/words/im/baseaccount.py -../twisted/words/im/basechat.py -../twisted/words/im/interfaces.py -../twisted/words/im/ircsupport.py -../twisted/words/im/__init__.py -../twisted/words/im/pbsupport.py -../twisted/words/im/locals.py -../twisted/words/test/test_msn.py -../twisted/words/test/test_jabberjid.py -../twisted/words/test/test_ircsupport.py -../twisted/words/test/test_service.py -../twisted/words/test/test_jabbersaslmechanisms.py -../twisted/words/test/test_xmlstream.py -../twisted/words/test/test_irc.py -../twisted/words/test/test_xmpproutertap.py -../twisted/words/test/test_jabberxmlstream.py -../twisted/words/test/test_basesupport.py -../twisted/words/test/test_irc_service.py -../twisted/words/test/test_domish.py -../twisted/words/test/__init__.py -../twisted/words/test/test_jabbercomponent.py -../twisted/words/test/test_jabberxmppstringprep.py -../twisted/words/test/test_tap.py -../twisted/words/test/test_basechat.py -../twisted/words/test/test_oscar.py -../twisted/words/test/test_jabberjstrports.py -../twisted/words/test/test_jabberclient.py -../twisted/words/test/test_jabbersasl.py -../twisted/words/test/test_xpath.py -../twisted/words/test/test_xishutil.py -../twisted/words/test/test_jabbererror.py -../twisted/words/protocols/irc.py -../twisted/words/protocols/oscar.py -../twisted/words/protocols/__init__.py -../twisted/words/protocols/msn.py -../twisted/words/protocols/jabber/error.py -../twisted/words/protocols/jabber/client.py -../twisted/words/protocols/jabber/ijabber.py -../twisted/words/protocols/jabber/jid.py -../twisted/words/protocols/jabber/sasl_mechanisms.py -../twisted/words/protocols/jabber/xmpp_stringprep.py -../twisted/words/protocols/jabber/component.py -../twisted/words/protocols/jabber/xmlstream.py -../twisted/words/protocols/jabber/__init__.py -../twisted/words/protocols/jabber/jstrports.py -../twisted/words/protocols/jabber/sasl.py -../twisted/scripts/tapconvert.py -../twisted/scripts/tap2rpm.py -../twisted/scripts/twistd.py -../twisted/scripts/trial.py -../twisted/scripts/_twistd_unix.py -../twisted/scripts/_twistw.py -../twisted/scripts/tap2deb.py -../twisted/scripts/__init__.py -../twisted/scripts/tkunzip.py -../twisted/scripts/manhole.py -../twisted/scripts/htmlizer.py -../twisted/scripts/test/test_scripts.py -../twisted/scripts/test/test_tap2deb.py -../twisted/scripts/test/__init__.py -../twisted/scripts/test/test_tap2rpm.py -../twisted/lore/slides.py -../twisted/lore/lint.py -../twisted/lore/default.py -../twisted/lore/_version.py -../twisted/lore/numberer.py -../twisted/lore/docbook.py -../twisted/lore/htmlbook.py -../twisted/lore/process.py -../twisted/lore/__init__.py -../twisted/lore/man2lore.py -../twisted/lore/lmath.py -../twisted/lore/latex.py -../twisted/lore/indexer.py -../twisted/lore/tree.py -../twisted/lore/texi.py -../twisted/lore/scripts/lore.py -../twisted/lore/scripts/__init__.py -../twisted/lore/test/test_man2lore.py -../twisted/lore/test/test_lint.py -../twisted/lore/test/test_scripts.py -../twisted/lore/test/test_lmath.py -../twisted/lore/test/test_lore.py -../twisted/lore/test/test_latex.py -../twisted/lore/test/__init__.py -../twisted/lore/test/test_texi.py -../twisted/lore/test/test_docbook.py -../twisted/lore/test/test_slides.py -../twisted/web/error.py -../twisted/web/client.py -../twisted/web/twcgi.py -../twisted/web/soap.py -../twisted/web/xmlrpc.py -../twisted/web/server.py -../twisted/web/util.py -../twisted/web/_stan.py -../twisted/web/distrib.py -../twisted/web/_version.py -../twisted/web/http.py -../twisted/web/wsgi.py -../twisted/web/sux.py -../twisted/web/static.py -../twisted/web/http_headers.py -../twisted/web/domhelpers.py -../twisted/web/_newclient.py -../twisted/web/script.py -../twisted/web/iweb.py -../twisted/web/vhost.py -../twisted/web/guard.py -../twisted/web/_flatten.py -../twisted/web/template.py -../twisted/web/demo.py -../twisted/web/_responses.py -../twisted/web/resource.py -../twisted/web/proxy.py -../twisted/web/__init__.py -../twisted/web/microdom.py -../twisted/web/_element.py -../twisted/web/html.py -../twisted/web/rewrite.py -../twisted/web/tap.py -../twisted/web/_auth/digest.py -../twisted/web/_auth/wrapper.py -../twisted/web/_auth/__init__.py -../twisted/web/_auth/basic.py -../twisted/web/test/test_http_headers.py -../twisted/web/test/test_xml.py -../twisted/web/test/requesthelper.py -../twisted/web/test/test_httpauth.py -../twisted/web/test/test_error.py -../twisted/web/test/test_newclient.py -../twisted/web/test/test_stan.py -../twisted/web/test/test_script.py -../twisted/web/test/test_wsgi.py -../twisted/web/test/test_util.py -../twisted/web/test/test_cgi.py -../twisted/web/test/test_http.py -../twisted/web/test/_util.py -../twisted/web/test/__init__.py -../twisted/web/test/test_flatten.py -../twisted/web/test/test_static.py -../twisted/web/test/test_proxy.py -../twisted/web/test/test_agent.py -../twisted/web/test/test_soap.py -../twisted/web/test/test_webclient.py -../twisted/web/test/test_web.py -../twisted/web/test/test_tap.py -../twisted/web/test/test_template.py -../twisted/web/test/test_domhelpers.py -../twisted/web/test/test_distrib.py -../twisted/web/test/test_xmlrpc.py -../twisted/web/test/test_resource.py -../twisted/web/test/test_vhost.py -../twisted/pair/_version.py -../twisted/pair/ip.py -../twisted/pair/ethernet.py -../twisted/pair/__init__.py -../twisted/pair/rawudp.py -../twisted/pair/testing.py -../twisted/pair/raw.py -../twisted/pair/tuntap.py -../twisted/pair/test/test_ip.py -../twisted/pair/test/test_ethernet.py -../twisted/pair/test/__init__.py -../twisted/pair/test/test_tuntap.py -../twisted/pair/test/test_rawudp.py -../twisted/persisted/aot.py -../twisted/persisted/crefutil.py -../twisted/persisted/sob.py -../twisted/persisted/__init__.py -../twisted/persisted/dirdbm.py -../twisted/persisted/styles.py -../twisted/persisted/test/test_styles.py -../twisted/persisted/test/__init__.py -../twisted/application/reactors.py -../twisted/application/service.py -../twisted/application/internet.py -../twisted/application/__init__.py -../twisted/application/strports.py -../twisted/application/app.py -../twisted/application/test/__init__.py -../twisted/application/test/test_internet.py -../twisted/plugins/twisted_reactors.py -../twisted/plugins/twisted_lore.py -../twisted/plugins/twisted_runner.py -../twisted/plugins/twisted_conch.py -../twisted/plugins/twisted_portforward.py -../twisted/plugins/twisted_qtstub.py -../twisted/plugins/twisted_names.py -../twisted/plugins/twisted_news.py -../twisted/plugins/cred_memory.py -../twisted/plugins/cred_anonymous.py -../twisted/plugins/twisted_web.py -../twisted/plugins/twisted_ftp.py -../twisted/plugins/__init__.py -../twisted/plugins/twisted_mail.py -../twisted/plugins/twisted_socks.py -../twisted/plugins/twisted_words.py -../twisted/plugins/cred_file.py -../twisted/plugins/twisted_inet.py -../twisted/plugins/cred_sshkeys.py -../twisted/plugins/twisted_telnet.py -../twisted/plugins/twisted_core.py -../twisted/plugins/cred_unix.py -../twisted/plugins/twisted_trial.py -../twisted/plugins/twisted_manhole.py -../twisted/test/plugin_extra1.py -../twisted/test/test_stdio.py -../twisted/test/test_compat.py -../twisted/test/test_sip.py -../twisted/test/test_shortcut.py -../twisted/test/stdio_test_writeseq.py -../twisted/test/stdio_test_consumer.py -../twisted/test/test_rebuild.py -../twisted/test/process_echoer.py -../twisted/test/iosim.py -../twisted/test/stdio_test_write.py -../twisted/test/test_usage.py -../twisted/test/stdio_test_hostpeer.py -../twisted/test/test_dirdbm.py -../twisted/test/test_threads.py -../twisted/test/test_htb.py -../twisted/test/test_logfile.py -../twisted/test/process_tester.py -../twisted/test/test_monkey.py -../twisted/test/test_adbapi.py -../twisted/test/test_task.py -../twisted/test/test_strerror.py -../twisted/test/test_amp.py -../twisted/test/test_stringtransport.py -../twisted/test/test_threadpool.py -../twisted/test/test_error.py -../twisted/test/test_formmethod.py -../twisted/test/process_cmdline.py -../twisted/test/test_socks.py -../twisted/test/myrebuilder2.py -../twisted/test/test_sslverify.py -../twisted/test/test_defgen.py -../twisted/test/test_unix.py -../twisted/test/test_banana.py -../twisted/test/stdio_test_halfclose.py -../twisted/test/test_text.py -../twisted/test/test_iutils.py -../twisted/test/process_fds.py -../twisted/test/process_stdinreader.py -../twisted/test/test_twisted.py -../twisted/test/test_ftp_options.py -../twisted/test/reflect_helper_IE.py -../twisted/test/test_roots.py -../twisted/test/test_dict.py -../twisted/test/test_postfix.py -../twisted/test/test_ssl.py -../twisted/test/stdio_test_producer.py -../twisted/test/test_persisted.py -../twisted/test/test_defer.py -../twisted/test/test_jelly.py -../twisted/test/proto_helpers.py -../twisted/test/test_setup.py -../twisted/test/test_strcred.py -../twisted/test/test_abstract.py -../twisted/test/mock_win32process.py -../twisted/test/process_signal.py -../twisted/test/test_tcp_internals.py -../twisted/test/test_threadable.py -../twisted/test/test_doc.py -../twisted/test/test_manhole.py -../twisted/test/process_tty.py -../twisted/test/test_hook.py -../twisted/test/test_loopback.py -../twisted/test/__init__.py -../twisted/test/test_failure.py -../twisted/test/test_log.py -../twisted/test/stdio_test_lastwrite.py -../twisted/test/test_strports.py -../twisted/test/test_cooperator.py -../twisted/test/test_tpfile.py -../twisted/test/stdio_test_loseconn.py -../twisted/test/crash_test_dummy.py -../twisted/test/myrebuilder1.py -../twisted/test/test_ftp.py -../twisted/test/test_pcp.py -../twisted/test/plugin_basic.py -../twisted/test/test_protocols.py -../twisted/test/test_policies.py -../twisted/test/test_sob.py -../twisted/test/test_explorer.py -../twisted/test/test_factories.py -../twisted/test/test_tcp.py -../twisted/test/test_digestauth.py -../twisted/test/test_pb.py -../twisted/test/test_application.py -../twisted/test/test_context.py -../twisted/test/test_iosim.py -../twisted/test/process_reader.py -../twisted/test/test_stateful.py -../twisted/test/test_reflect.py -../twisted/test/test_pbfailure.py -../twisted/test/test_nmea.py -../twisted/test/plugin_extra2.py -../twisted/test/test_finger.py -../twisted/test/test_randbytes.py -../twisted/test/process_twisted.py -../twisted/test/ssl_helpers.py -../twisted/test/test_udp.py -../twisted/test/test_ident.py -../twisted/test/test_paths.py -../twisted/test/reflect_helper_ZDE.py -../twisted/test/test_twistd.py -../twisted/test/test_memcache.py -../twisted/test/reflect_helper_VE.py -../twisted/test/test_process.py -../twisted/test/test_newcred.py -../twisted/test/testutils.py -../twisted/test/test_modules.py -../twisted/test/test_plugin.py -../twisted/test/_preamble.py -../twisted/test/test_internet.py -../twisted/test/test_fdesc.py -../twisted/test/process_linger.py -../twisted/test/test_lockfile.py -../twisted/protocols/sip.py -../twisted/protocols/stateful.py -../twisted/protocols/telnet.py -../twisted/protocols/wire.py -../twisted/protocols/shoutcast.py -../twisted/protocols/dict.py -../twisted/protocols/ident.py -../twisted/protocols/ftp.py -../twisted/protocols/finger.py -../twisted/protocols/amp.py -../twisted/protocols/postfix.py -../twisted/protocols/socks.py -../twisted/protocols/portforward.py -../twisted/protocols/__init__.py -../twisted/protocols/tls.py -../twisted/protocols/basic.py -../twisted/protocols/memcache.py -../twisted/protocols/htb.py -../twisted/protocols/loopback.py -../twisted/protocols/policies.py -../twisted/protocols/pcp.py -../twisted/protocols/gps/__init__.py -../twisted/protocols/gps/rockwell.py -../twisted/protocols/gps/nmea.py -../twisted/protocols/mice/__init__.py -../twisted/protocols/mice/mouseman.py -../twisted/protocols/test/test_basic.py -../twisted/protocols/test/__init__.py -../twisted/protocols/test/test_tls.py -../twisted/enterprise/__init__.py -../twisted/enterprise/adbapi.py -../twisted/python/sendmsg.c -../twisted/runner/portmap.c -../twisted/internet/iocpreactor/iocpsupport/iocpsupport.c -../twisted/internet/iocpreactor/iocpsupport/winsock_pointers.c -../twisted/test/raiser.c -../twisted/copyright.pyc -../twisted/_version.pyc -../twisted/plugin.pyc -../twisted/__init__.pyc -../twisted/manhole/telnet.pyc -../twisted/manhole/explorer.pyc -../twisted/manhole/service.pyc -../twisted/manhole/_inspectro.pyc -../twisted/manhole/__init__.pyc -../twisted/manhole/gladereactor.pyc -../twisted/manhole/ui/gtk2manhole.pyc -../twisted/manhole/ui/__init__.pyc -../twisted/manhole/ui/test/__init__.pyc -../twisted/manhole/ui/test/test_gtk2manhole.pyc -../twisted/manhole/test/__init__.pyc -../twisted/manhole/test/test_explorer.pyc -../twisted/mail/pb.pyc -../twisted/mail/relaymanager.pyc -../twisted/mail/imap4.pyc -../twisted/mail/_version.pyc -../twisted/mail/relay.pyc -../twisted/mail/pop3client.pyc -../twisted/mail/bounce.pyc -../twisted/mail/pop3.pyc -../twisted/mail/mail.pyc -../twisted/mail/__init__.pyc -../twisted/mail/alias.pyc -../twisted/mail/smtp.pyc -../twisted/mail/protocols.pyc -../twisted/mail/maildir.pyc -../twisted/mail/tap.pyc -../twisted/mail/scripts/mailmail.pyc -../twisted/mail/scripts/__init__.pyc -../twisted/mail/test/test_pop3client.pyc -../twisted/mail/test/test_smtp.pyc -../twisted/mail/test/test_scripts.pyc -../twisted/mail/test/test_imap.pyc -../twisted/mail/test/test_bounce.pyc -../twisted/mail/test/pop3testserver.pyc -../twisted/mail/test/__init__.pyc -../twisted/mail/test/test_mail.pyc -../twisted/mail/test/test_pop3.pyc -../twisted/mail/test/test_options.pyc -../twisted/mail/test/test_mailmail.pyc -../twisted/names/error.pyc -../twisted/names/client.pyc -../twisted/names/common.pyc -../twisted/names/server.pyc -../twisted/names/_version.pyc -../twisted/names/root.pyc -../twisted/names/hosts.pyc -../twisted/names/_rfc1982.pyc -../twisted/names/dns.pyc -../twisted/names/resolve.pyc -../twisted/names/__init__.pyc -../twisted/names/secondary.pyc -../twisted/names/srvconnect.pyc -../twisted/names/cache.pyc -../twisted/names/authority.pyc -../twisted/names/tap.pyc -../twisted/names/test/test_rfc1982.pyc -../twisted/names/test/test_client.pyc -../twisted/names/test/test_hosts.pyc -../twisted/names/test/test_server.pyc -../twisted/names/test/test_names.pyc -../twisted/names/test/test_resolve.pyc -../twisted/names/test/test_common.pyc -../twisted/names/test/__init__.pyc -../twisted/names/test/test_examples.pyc -../twisted/names/test/test_cache.pyc -../twisted/names/test/test_tap.pyc -../twisted/names/test/test_rootresolve.pyc -../twisted/names/test/test_srvconnect.pyc -../twisted/names/test/test_dns.pyc -../twisted/trial/unittest.pyc -../twisted/trial/_synctest.pyc -../twisted/trial/util.pyc -../twisted/trial/__init__.pyc -../twisted/trial/reporter.pyc -../twisted/trial/itrial.pyc -../twisted/trial/_asynctest.pyc -../twisted/trial/runner.pyc -../twisted/trial/_asyncrunner.pyc -../twisted/trial/test/scripttest.pyc -../twisted/trial/test/weird.pyc -../twisted/trial/test/test_assertions.pyc -../twisted/trial/test/mockcustomsuite.pyc -../twisted/trial/test/skipping.pyc -../twisted/trial/test/test_loader.pyc -../twisted/trial/test/test_reporter.pyc -../twisted/trial/test/novars.pyc -../twisted/trial/test/test_keyboard.pyc -../twisted/trial/test/moduletest.pyc -../twisted/trial/test/test_deferred.pyc -../twisted/trial/test/test_script.pyc -../twisted/trial/test/mockdoctest.pyc -../twisted/trial/test/test_testcase.pyc -../twisted/trial/test/test_util.pyc -../twisted/trial/test/ordertests.pyc -../twisted/trial/test/suppression.pyc -../twisted/trial/test/test_tests.pyc -../twisted/trial/test/test_warning.pyc -../twisted/trial/test/test_doctest.pyc -../twisted/trial/test/__init__.pyc -../twisted/trial/test/test_log.pyc -../twisted/trial/test/erroneous.pyc -../twisted/trial/test/test_plugins.pyc -../twisted/trial/test/test_asyncassertions.pyc -../twisted/trial/test/test_suppression.pyc -../twisted/trial/test/sample.pyc -../twisted/trial/test/detests.pyc -../twisted/trial/test/mockcustomsuite2.pyc -../twisted/trial/test/test_pyunitcompat.pyc -../twisted/trial/test/test_runner.pyc -../twisted/trial/test/test_output.pyc -../twisted/trial/test/mockcustomsuite3.pyc -../twisted/trial/test/moduleself.pyc -../twisted/trial/test/packages.pyc -../twisted/trial/_dist/managercommands.pyc -../twisted/trial/_dist/disttrial.pyc -../twisted/trial/_dist/workerreporter.pyc -../twisted/trial/_dist/distreporter.pyc -../twisted/trial/_dist/workertrial.pyc -../twisted/trial/_dist/__init__.pyc -../twisted/trial/_dist/workercommands.pyc -../twisted/trial/_dist/worker.pyc -../twisted/trial/_dist/options.pyc -../twisted/trial/_dist/test/test_workerreporter.pyc -../twisted/trial/_dist/test/test_worker.pyc -../twisted/trial/_dist/test/test_distreporter.pyc -../twisted/trial/_dist/test/test_workertrial.pyc -../twisted/trial/_dist/test/__init__.pyc -../twisted/trial/_dist/test/test_options.pyc -../twisted/trial/_dist/test/test_disttrial.pyc -../twisted/cred/error.pyc -../twisted/cred/portal.pyc -../twisted/cred/strcred.pyc -../twisted/cred/__init__.pyc -../twisted/cred/_digest.pyc -../twisted/cred/credentials.pyc -../twisted/cred/checkers.pyc -../twisted/cred/pamauth.pyc -../twisted/conch/error.pyc -../twisted/conch/stdio.pyc -../twisted/conch/manhole_tap.pyc -../twisted/conch/telnet.pyc -../twisted/conch/_version.pyc -../twisted/conch/unix.pyc -../twisted/conch/interfaces.pyc -../twisted/conch/endpoints.pyc -../twisted/conch/recvline.pyc -../twisted/conch/__init__.pyc -../twisted/conch/mixin.pyc -../twisted/conch/ls.pyc -../twisted/conch/checkers.pyc -../twisted/conch/avatar.pyc -../twisted/conch/manhole_ssh.pyc -../twisted/conch/ttymodes.pyc -../twisted/conch/manhole.pyc -../twisted/conch/tap.pyc -../twisted/conch/ui/tkvt100.pyc -../twisted/conch/ui/__init__.pyc -../twisted/conch/ui/ansi.pyc -../twisted/conch/client/connect.pyc -../twisted/conch/client/default.pyc -../twisted/conch/client/agent.pyc -../twisted/conch/client/direct.pyc -../twisted/conch/client/__init__.pyc -../twisted/conch/client/knownhosts.pyc -../twisted/conch/client/options.pyc -../twisted/conch/openssh_compat/primes.pyc -../twisted/conch/openssh_compat/__init__.pyc -../twisted/conch/openssh_compat/factory.pyc -../twisted/conch/scripts/conch.pyc -../twisted/conch/scripts/tkconch.pyc -../twisted/conch/scripts/cftp.pyc -../twisted/conch/scripts/ckeygen.pyc -../twisted/conch/scripts/__init__.pyc -../twisted/conch/ssh/session.pyc -../twisted/conch/ssh/channel.pyc -../twisted/conch/ssh/common.pyc -../twisted/conch/ssh/keys.pyc -../twisted/conch/ssh/userauth.pyc -../twisted/conch/ssh/forwarding.pyc -../twisted/conch/ssh/connection.pyc -../twisted/conch/ssh/agent.pyc -../twisted/conch/ssh/service.pyc -../twisted/conch/ssh/transport.pyc -../twisted/conch/ssh/__init__.pyc -../twisted/conch/ssh/sexpy.pyc -../twisted/conch/ssh/address.pyc -../twisted/conch/ssh/factory.pyc -../twisted/conch/ssh/filetransfer.pyc -../twisted/conch/test/test_openssh_compat.pyc -../twisted/conch/test/test_helper.pyc -../twisted/conch/test/test_knownhosts.pyc -../twisted/conch/test/keydata.pyc -../twisted/conch/test/test_ckeygen.pyc -../twisted/conch/test/test_cftp.pyc -../twisted/conch/test/test_conch.pyc -../twisted/conch/test/test_keys.pyc -../twisted/conch/test/test_filetransfer.pyc -../twisted/conch/test/test_scripts.pyc -../twisted/conch/test/test_text.pyc -../twisted/conch/test/test_recvline.pyc -../twisted/conch/test/test_endpoints.pyc -../twisted/conch/test/test_userauth.pyc -../twisted/conch/test/test_manhole.pyc -../twisted/conch/test/__init__.pyc -../twisted/conch/test/test_telnet.pyc -../twisted/conch/test/test_channel.pyc -../twisted/conch/test/test_mixin.pyc -../twisted/conch/test/test_agent.pyc -../twisted/conch/test/test_transport.pyc -../twisted/conch/test/test_window.pyc -../twisted/conch/test/test_checkers.pyc -../twisted/conch/test/test_address.pyc -../twisted/conch/test/test_tap.pyc -../twisted/conch/test/test_connection.pyc -../twisted/conch/test/test_insults.pyc -../twisted/conch/test/test_ssh.pyc -../twisted/conch/test/test_default.pyc -../twisted/conch/test/test_session.pyc -../twisted/conch/insults/client.pyc -../twisted/conch/insults/text.pyc -../twisted/conch/insults/colors.pyc -../twisted/conch/insults/helper.pyc -../twisted/conch/insults/window.pyc -../twisted/conch/insults/__init__.pyc -../twisted/conch/insults/insults.pyc -../twisted/python/logfile.pyc -../twisted/python/formmethod.pyc -../twisted/python/compat.pyc -../twisted/python/threadpool.pyc -../twisted/python/monkey.pyc -../twisted/python/log.pyc -../twisted/python/hook.pyc -../twisted/python/fakepwd.pyc -../twisted/python/usage.pyc -../twisted/python/dist3.pyc -../twisted/python/util.pyc -../twisted/python/syslog.pyc -../twisted/python/threadable.pyc -../twisted/python/text.pyc -../twisted/python/runtime.pyc -../twisted/python/context.pyc -../twisted/python/_textattributes.pyc -../twisted/python/roots.pyc -../twisted/python/win32.pyc -../twisted/python/randbytes.pyc -../twisted/python/hashlib.pyc -../twisted/python/components.pyc -../twisted/python/_inotify.pyc -../twisted/python/modules.pyc -../twisted/python/zippath.pyc -../twisted/python/versions.pyc -../twisted/python/_release.pyc -../twisted/python/deprecate.pyc -../twisted/python/failure.pyc -../twisted/python/urlpath.pyc -../twisted/python/reflect.pyc -../twisted/python/__init__.pyc -../twisted/python/rebuild.pyc -../twisted/python/procutils.pyc -../twisted/python/finalize.pyc -../twisted/python/zipstream.pyc -../twisted/python/filepath.pyc -../twisted/python/dist.pyc -../twisted/python/systemd.pyc -../twisted/python/constants.pyc -../twisted/python/_shellcomp.pyc -../twisted/python/shortcut.pyc -../twisted/python/release.pyc -../twisted/python/htmlizer.pyc -../twisted/python/lockfile.pyc -../twisted/python/test/test_zippath.pyc -../twisted/python/test/test_fakepwd.pyc -../twisted/python/test/test_release.pyc -../twisted/python/test/deprecatedattributes.pyc -../twisted/python/test/test_constants.pyc -../twisted/python/test/test_sendmsg.pyc -../twisted/python/test/test_textattributes.pyc -../twisted/python/test/test_shellcomp.pyc -../twisted/python/test/test_htmlizer.pyc -../twisted/python/test/test_runtime.pyc -../twisted/python/test/pullpipe.pyc -../twisted/python/test/test_deprecate.pyc -../twisted/python/test/test_util.pyc -../twisted/python/test/test_hashlib.pyc -../twisted/python/test/test_inotify.pyc -../twisted/python/test/__init__.pyc -../twisted/python/test/test_dist.pyc -../twisted/python/test/test_syslog.pyc -../twisted/python/test/test_zipstream.pyc -../twisted/python/test/test_urlpath.pyc -../twisted/python/test/test_components.pyc -../twisted/python/test/test_win32.pyc -../twisted/python/test/test_systemd.pyc -../twisted/python/test/test_versions.pyc -../twisted/python/test/test_dist3.pyc -../twisted/python/test/modules_helpers.pyc -../twisted/runner/procmon.pyc -../twisted/runner/_version.pyc -../twisted/runner/inetdconf.pyc -../twisted/runner/inetdtap.pyc -../twisted/runner/__init__.pyc -../twisted/runner/procmontap.pyc -../twisted/runner/inetd.pyc -../twisted/runner/test/test_procmon.pyc -../twisted/runner/test/test_procmontap.pyc -../twisted/runner/test/__init__.pyc -../twisted/tap/telnet.pyc -../twisted/tap/ftp.pyc -../twisted/tap/socks.pyc -../twisted/tap/portforward.pyc -../twisted/tap/__init__.pyc -../twisted/tap/manhole.pyc -../twisted/positioning/ipositioning.pyc -../twisted/positioning/__init__.pyc -../twisted/positioning/_sentence.pyc -../twisted/positioning/base.pyc -../twisted/positioning/nmea.pyc -../twisted/positioning/test/test_sentence.pyc -../twisted/positioning/test/test_base.pyc -../twisted/positioning/test/receiver.pyc -../twisted/positioning/test/__init__.pyc -../twisted/positioning/test/test_nmea.pyc -../twisted/spread/pb.pyc -../twisted/spread/util.pyc -../twisted/spread/banana.pyc -../twisted/spread/interfaces.pyc -../twisted/spread/jelly.pyc -../twisted/spread/__init__.pyc -../twisted/spread/flavors.pyc -../twisted/spread/publish.pyc -../twisted/spread/ui/gtk2util.pyc -../twisted/spread/ui/__init__.pyc -../twisted/spread/ui/tkutil.pyc -../twisted/spread/ui/tktree.pyc -../twisted/internet/error.pyc -../twisted/internet/default.pyc -../twisted/internet/qtreactor.pyc -../twisted/internet/win32eventreactor.pyc -../twisted/internet/stdio.pyc -../twisted/internet/cfreactor.pyc -../twisted/internet/_posixserialport.pyc -../twisted/internet/ssl.pyc -../twisted/internet/threads.pyc -../twisted/internet/_pollingfile.pyc -../twisted/internet/gtk2reactor.pyc -../twisted/internet/tksupport.pyc -../twisted/internet/gireactor.pyc -../twisted/internet/glib2reactor.pyc -../twisted/internet/_newtls.pyc -../twisted/internet/gtk3reactor.pyc -../twisted/internet/_baseprocess.pyc -../twisted/internet/abstract.pyc -../twisted/internet/inotify.pyc -../twisted/internet/unix.pyc -../twisted/internet/interfaces.pyc -../twisted/internet/protocol.pyc -../twisted/internet/_dumbwin32proc.pyc -../twisted/internet/tcp.pyc -../twisted/internet/endpoints.pyc -../twisted/internet/main.pyc -../twisted/internet/udp.pyc -../twisted/internet/wxsupport.pyc -../twisted/internet/pyuisupport.pyc -../twisted/internet/process.pyc -../twisted/internet/_signals.pyc -../twisted/internet/__init__.pyc -../twisted/internet/posixbase.pyc -../twisted/internet/pollreactor.pyc -../twisted/internet/serialport.pyc -../twisted/internet/_sslverify.pyc -../twisted/internet/kqreactor.pyc -../twisted/internet/fdesc.pyc -../twisted/internet/reactor.pyc -../twisted/internet/base.pyc -../twisted/internet/address.pyc -../twisted/internet/_threadedselect.pyc -../twisted/internet/_ssl.pyc -../twisted/internet/selectreactor.pyc -../twisted/internet/_win32serialport.pyc -../twisted/internet/wxreactor.pyc -../twisted/internet/epollreactor.pyc -../twisted/internet/defer.pyc -../twisted/internet/utils.pyc -../twisted/internet/task.pyc -../twisted/internet/_win32stdio.pyc -../twisted/internet/gtkreactor.pyc -../twisted/internet/_posixstdio.pyc -../twisted/internet/_glibbase.pyc -../twisted/internet/iocpreactor/abstract.pyc -../twisted/internet/iocpreactor/interfaces.pyc -../twisted/internet/iocpreactor/tcp.pyc -../twisted/internet/iocpreactor/udp.pyc -../twisted/internet/iocpreactor/const.pyc -../twisted/internet/iocpreactor/__init__.pyc -../twisted/internet/iocpreactor/reactor.pyc -../twisted/internet/iocpreactor/setup.pyc -../twisted/internet/test/test_posixbase.pyc -../twisted/internet/test/modulehelpers.pyc -../twisted/internet/test/test_stdio.pyc -../twisted/internet/test/test_qtreactor.pyc -../twisted/internet/test/test_serialport.pyc -../twisted/internet/test/test_time.pyc -../twisted/internet/test/process_helper.pyc -../twisted/internet/test/test_threads.pyc -../twisted/internet/test/test_core.pyc -../twisted/internet/test/test_posixprocess.pyc -../twisted/internet/test/test_filedescriptor.pyc -../twisted/internet/test/_win32ifaces.pyc -../twisted/internet/test/test_main.pyc -../twisted/internet/test/test_sigchld.pyc -../twisted/internet/test/test_unix.pyc -../twisted/internet/test/test_base.pyc -../twisted/internet/test/test_epollreactor.pyc -../twisted/internet/test/test_socket.pyc -../twisted/internet/test/test_endpoints.pyc -../twisted/internet/test/test_newtls.pyc -../twisted/internet/test/test_abstract.pyc -../twisted/internet/test/test_inotify.pyc -../twisted/internet/test/test_protocol.pyc -../twisted/internet/test/test_baseprocess.pyc -../twisted/internet/test/__init__.pyc -../twisted/internet/test/test_fdset.pyc -../twisted/internet/test/test_glibbase.pyc -../twisted/internet/test/test_gireactor.pyc -../twisted/internet/test/process_gireactornocompat.pyc -../twisted/internet/test/fakeendpoint.pyc -../twisted/internet/test/test_tcp.pyc -../twisted/internet/test/test_address.pyc -../twisted/internet/test/test_iocp.pyc -../twisted/internet/test/reactormixins.pyc -../twisted/internet/test/test_tls.pyc -../twisted/internet/test/_posixifaces.pyc -../twisted/internet/test/test_pollingfile.pyc -../twisted/internet/test/test_gtkreactor.pyc -../twisted/internet/test/test_udp.pyc -../twisted/internet/test/test_default.pyc -../twisted/internet/test/test_inlinecb.pyc -../twisted/internet/test/test_process.pyc -../twisted/internet/test/test_udp_internals.pyc -../twisted/internet/test/connectionmixins.pyc -../twisted/internet/test/test_win32events.pyc -../twisted/news/nntp.pyc -../twisted/news/database.pyc -../twisted/news/_version.pyc -../twisted/news/news.pyc -../twisted/news/__init__.pyc -../twisted/news/tap.pyc -../twisted/news/test/test_database.pyc -../twisted/news/test/__init__.pyc -../twisted/news/test/test_nntp.pyc -../twisted/news/test/test_news.pyc -../twisted/words/_version.pyc -../twisted/words/service.pyc -../twisted/words/iwords.pyc -../twisted/words/__init__.pyc -../twisted/words/ewords.pyc -../twisted/words/xmpproutertap.pyc -../twisted/words/tap.pyc -../twisted/words/xish/xpathparser.pyc -../twisted/words/xish/utility.pyc -../twisted/words/xish/xmlstream.pyc -../twisted/words/xish/__init__.pyc -../twisted/words/xish/xpath.pyc -../twisted/words/xish/domish.pyc -../twisted/words/im/basesupport.pyc -../twisted/words/im/baseaccount.pyc -../twisted/words/im/basechat.pyc -../twisted/words/im/interfaces.pyc -../twisted/words/im/ircsupport.pyc -../twisted/words/im/__init__.pyc -../twisted/words/im/pbsupport.pyc -../twisted/words/im/locals.pyc -../twisted/words/test/test_msn.pyc -../twisted/words/test/test_jabberjid.pyc -../twisted/words/test/test_ircsupport.pyc -../twisted/words/test/test_service.pyc -../twisted/words/test/test_jabbersaslmechanisms.pyc -../twisted/words/test/test_xmlstream.pyc -../twisted/words/test/test_irc.pyc -../twisted/words/test/test_xmpproutertap.pyc -../twisted/words/test/test_jabberxmlstream.pyc -../twisted/words/test/test_basesupport.pyc -../twisted/words/test/test_irc_service.pyc -../twisted/words/test/test_domish.pyc -../twisted/words/test/__init__.pyc -../twisted/words/test/test_jabbercomponent.pyc -../twisted/words/test/test_jabberxmppstringprep.pyc -../twisted/words/test/test_tap.pyc -../twisted/words/test/test_basechat.pyc -../twisted/words/test/test_oscar.pyc -../twisted/words/test/test_jabberjstrports.pyc -../twisted/words/test/test_jabberclient.pyc -../twisted/words/test/test_jabbersasl.pyc -../twisted/words/test/test_xpath.pyc -../twisted/words/test/test_xishutil.pyc -../twisted/words/test/test_jabbererror.pyc -../twisted/words/protocols/irc.pyc -../twisted/words/protocols/oscar.pyc -../twisted/words/protocols/__init__.pyc -../twisted/words/protocols/msn.pyc -../twisted/words/protocols/jabber/error.pyc -../twisted/words/protocols/jabber/client.pyc -../twisted/words/protocols/jabber/ijabber.pyc -../twisted/words/protocols/jabber/jid.pyc -../twisted/words/protocols/jabber/sasl_mechanisms.pyc -../twisted/words/protocols/jabber/xmpp_stringprep.pyc -../twisted/words/protocols/jabber/component.pyc -../twisted/words/protocols/jabber/xmlstream.pyc -../twisted/words/protocols/jabber/__init__.pyc -../twisted/words/protocols/jabber/jstrports.pyc -../twisted/words/protocols/jabber/sasl.pyc -../twisted/scripts/tapconvert.pyc -../twisted/scripts/tap2rpm.pyc -../twisted/scripts/twistd.pyc -../twisted/scripts/trial.pyc -../twisted/scripts/_twistd_unix.pyc -../twisted/scripts/_twistw.pyc -../twisted/scripts/tap2deb.pyc -../twisted/scripts/__init__.pyc -../twisted/scripts/tkunzip.pyc -../twisted/scripts/manhole.pyc -../twisted/scripts/htmlizer.pyc -../twisted/scripts/test/test_scripts.pyc -../twisted/scripts/test/test_tap2deb.pyc -../twisted/scripts/test/__init__.pyc -../twisted/scripts/test/test_tap2rpm.pyc -../twisted/lore/slides.pyc -../twisted/lore/lint.pyc -../twisted/lore/default.pyc -../twisted/lore/_version.pyc -../twisted/lore/numberer.pyc -../twisted/lore/docbook.pyc -../twisted/lore/htmlbook.pyc -../twisted/lore/process.pyc -../twisted/lore/__init__.pyc -../twisted/lore/man2lore.pyc -../twisted/lore/lmath.pyc -../twisted/lore/latex.pyc -../twisted/lore/indexer.pyc -../twisted/lore/tree.pyc -../twisted/lore/texi.pyc -../twisted/lore/scripts/lore.pyc -../twisted/lore/scripts/__init__.pyc -../twisted/lore/test/test_man2lore.pyc -../twisted/lore/test/test_lint.pyc -../twisted/lore/test/test_scripts.pyc -../twisted/lore/test/test_lmath.pyc -../twisted/lore/test/test_lore.pyc -../twisted/lore/test/test_latex.pyc -../twisted/lore/test/__init__.pyc -../twisted/lore/test/test_texi.pyc -../twisted/lore/test/test_docbook.pyc -../twisted/lore/test/test_slides.pyc -../twisted/web/error.pyc -../twisted/web/client.pyc -../twisted/web/twcgi.pyc -../twisted/web/soap.pyc -../twisted/web/xmlrpc.pyc -../twisted/web/server.pyc -../twisted/web/util.pyc -../twisted/web/_stan.pyc -../twisted/web/distrib.pyc -../twisted/web/_version.pyc -../twisted/web/http.pyc -../twisted/web/wsgi.pyc -../twisted/web/sux.pyc -../twisted/web/static.pyc -../twisted/web/http_headers.pyc -../twisted/web/domhelpers.pyc -../twisted/web/_newclient.pyc -../twisted/web/script.pyc -../twisted/web/iweb.pyc -../twisted/web/vhost.pyc -../twisted/web/guard.pyc -../twisted/web/_flatten.pyc -../twisted/web/template.pyc -../twisted/web/demo.pyc -../twisted/web/_responses.pyc -../twisted/web/resource.pyc -../twisted/web/proxy.pyc -../twisted/web/__init__.pyc -../twisted/web/microdom.pyc -../twisted/web/_element.pyc -../twisted/web/html.pyc -../twisted/web/rewrite.pyc -../twisted/web/tap.pyc -../twisted/web/_auth/digest.pyc -../twisted/web/_auth/wrapper.pyc -../twisted/web/_auth/__init__.pyc -../twisted/web/_auth/basic.pyc -../twisted/web/test/test_http_headers.pyc -../twisted/web/test/test_xml.pyc -../twisted/web/test/requesthelper.pyc -../twisted/web/test/test_httpauth.pyc -../twisted/web/test/test_error.pyc -../twisted/web/test/test_newclient.pyc -../twisted/web/test/test_stan.pyc -../twisted/web/test/test_script.pyc -../twisted/web/test/test_wsgi.pyc -../twisted/web/test/test_util.pyc -../twisted/web/test/test_cgi.pyc -../twisted/web/test/test_http.pyc -../twisted/web/test/_util.pyc -../twisted/web/test/__init__.pyc -../twisted/web/test/test_flatten.pyc -../twisted/web/test/test_static.pyc -../twisted/web/test/test_proxy.pyc -../twisted/web/test/test_agent.pyc -../twisted/web/test/test_soap.pyc -../twisted/web/test/test_webclient.pyc -../twisted/web/test/test_web.pyc -../twisted/web/test/test_tap.pyc -../twisted/web/test/test_template.pyc -../twisted/web/test/test_domhelpers.pyc -../twisted/web/test/test_distrib.pyc -../twisted/web/test/test_xmlrpc.pyc -../twisted/web/test/test_resource.pyc -../twisted/web/test/test_vhost.pyc -../twisted/pair/_version.pyc -../twisted/pair/ip.pyc -../twisted/pair/ethernet.pyc -../twisted/pair/__init__.pyc -../twisted/pair/rawudp.pyc -../twisted/pair/testing.pyc -../twisted/pair/raw.pyc -../twisted/pair/tuntap.pyc -../twisted/pair/test/test_ip.pyc -../twisted/pair/test/test_ethernet.pyc -../twisted/pair/test/__init__.pyc -../twisted/pair/test/test_tuntap.pyc -../twisted/pair/test/test_rawudp.pyc -../twisted/persisted/aot.pyc -../twisted/persisted/crefutil.pyc -../twisted/persisted/sob.pyc -../twisted/persisted/__init__.pyc -../twisted/persisted/dirdbm.pyc -../twisted/persisted/styles.pyc -../twisted/persisted/test/test_styles.pyc -../twisted/persisted/test/__init__.pyc -../twisted/application/reactors.pyc -../twisted/application/service.pyc -../twisted/application/internet.pyc -../twisted/application/__init__.pyc -../twisted/application/strports.pyc -../twisted/application/app.pyc -../twisted/application/test/__init__.pyc -../twisted/application/test/test_internet.pyc -../twisted/plugins/twisted_reactors.pyc -../twisted/plugins/twisted_lore.pyc -../twisted/plugins/twisted_runner.pyc -../twisted/plugins/twisted_conch.pyc -../twisted/plugins/twisted_portforward.pyc -../twisted/plugins/twisted_qtstub.pyc -../twisted/plugins/twisted_names.pyc -../twisted/plugins/twisted_news.pyc -../twisted/plugins/cred_memory.pyc -../twisted/plugins/cred_anonymous.pyc -../twisted/plugins/twisted_web.pyc -../twisted/plugins/twisted_ftp.pyc -../twisted/plugins/__init__.pyc -../twisted/plugins/twisted_mail.pyc -../twisted/plugins/twisted_socks.pyc -../twisted/plugins/twisted_words.pyc -../twisted/plugins/cred_file.pyc -../twisted/plugins/twisted_inet.pyc -../twisted/plugins/cred_sshkeys.pyc -../twisted/plugins/twisted_telnet.pyc -../twisted/plugins/twisted_core.pyc -../twisted/plugins/cred_unix.pyc -../twisted/plugins/twisted_trial.pyc -../twisted/plugins/twisted_manhole.pyc -../twisted/test/plugin_extra1.pyc -../twisted/test/test_stdio.pyc -../twisted/test/test_compat.pyc -../twisted/test/test_sip.pyc -../twisted/test/test_shortcut.pyc -../twisted/test/stdio_test_writeseq.pyc -../twisted/test/stdio_test_consumer.pyc -../twisted/test/test_rebuild.pyc -../twisted/test/process_echoer.pyc -../twisted/test/iosim.pyc -../twisted/test/stdio_test_write.pyc -../twisted/test/test_usage.pyc -../twisted/test/stdio_test_hostpeer.pyc -../twisted/test/test_dirdbm.pyc -../twisted/test/test_threads.pyc -../twisted/test/test_htb.pyc -../twisted/test/test_logfile.pyc -../twisted/test/process_tester.pyc -../twisted/test/test_monkey.pyc -../twisted/test/test_adbapi.pyc -../twisted/test/test_task.pyc -../twisted/test/test_strerror.pyc -../twisted/test/test_amp.pyc -../twisted/test/test_stringtransport.pyc -../twisted/test/test_threadpool.pyc -../twisted/test/test_error.pyc -../twisted/test/test_formmethod.pyc -../twisted/test/process_cmdline.pyc -../twisted/test/test_socks.pyc -../twisted/test/myrebuilder2.pyc -../twisted/test/test_sslverify.pyc -../twisted/test/test_defgen.pyc -../twisted/test/test_unix.pyc -../twisted/test/test_banana.pyc -../twisted/test/stdio_test_halfclose.pyc -../twisted/test/test_text.pyc -../twisted/test/test_iutils.pyc -../twisted/test/process_fds.pyc -../twisted/test/process_stdinreader.pyc -../twisted/test/test_twisted.pyc -../twisted/test/test_ftp_options.pyc -../twisted/test/reflect_helper_IE.pyc -../twisted/test/test_roots.pyc -../twisted/test/test_dict.pyc -../twisted/test/test_postfix.pyc -../twisted/test/test_ssl.pyc -../twisted/test/stdio_test_producer.pyc -../twisted/test/test_persisted.pyc -../twisted/test/test_defer.pyc -../twisted/test/test_jelly.pyc -../twisted/test/proto_helpers.pyc -../twisted/test/test_setup.pyc -../twisted/test/test_strcred.pyc -../twisted/test/test_abstract.pyc -../twisted/test/mock_win32process.pyc -../twisted/test/process_signal.pyc -../twisted/test/test_tcp_internals.pyc -../twisted/test/test_threadable.pyc -../twisted/test/test_doc.pyc -../twisted/test/test_manhole.pyc -../twisted/test/process_tty.pyc -../twisted/test/test_hook.pyc -../twisted/test/test_loopback.pyc -../twisted/test/__init__.pyc -../twisted/test/test_failure.pyc -../twisted/test/test_log.pyc -../twisted/test/stdio_test_lastwrite.pyc -../twisted/test/test_strports.pyc -../twisted/test/test_cooperator.pyc -../twisted/test/test_tpfile.pyc -../twisted/test/stdio_test_loseconn.pyc -../twisted/test/crash_test_dummy.pyc -../twisted/test/myrebuilder1.pyc -../twisted/test/test_ftp.pyc -../twisted/test/test_pcp.pyc -../twisted/test/plugin_basic.pyc -../twisted/test/test_protocols.pyc -../twisted/test/test_policies.pyc -../twisted/test/test_sob.pyc -../twisted/test/test_explorer.pyc -../twisted/test/test_factories.pyc -../twisted/test/test_tcp.pyc -../twisted/test/test_digestauth.pyc -../twisted/test/test_pb.pyc -../twisted/test/test_application.pyc -../twisted/test/test_context.pyc -../twisted/test/test_iosim.pyc -../twisted/test/process_reader.pyc -../twisted/test/test_stateful.pyc -../twisted/test/test_reflect.pyc -../twisted/test/test_pbfailure.pyc -../twisted/test/test_nmea.pyc -../twisted/test/plugin_extra2.pyc -../twisted/test/test_finger.pyc -../twisted/test/test_randbytes.pyc -../twisted/test/process_twisted.pyc -../twisted/test/ssl_helpers.pyc -../twisted/test/test_udp.pyc -../twisted/test/test_ident.pyc -../twisted/test/test_paths.pyc -../twisted/test/reflect_helper_ZDE.pyc -../twisted/test/test_twistd.pyc -../twisted/test/test_memcache.pyc -../twisted/test/reflect_helper_VE.pyc -../twisted/test/test_process.pyc -../twisted/test/test_newcred.pyc -../twisted/test/testutils.pyc -../twisted/test/test_modules.pyc -../twisted/test/test_plugin.pyc -../twisted/test/_preamble.pyc -../twisted/test/test_internet.pyc -../twisted/test/test_fdesc.pyc -../twisted/test/process_linger.pyc -../twisted/test/test_lockfile.pyc -../twisted/protocols/sip.pyc -../twisted/protocols/stateful.pyc -../twisted/protocols/telnet.pyc -../twisted/protocols/wire.pyc -../twisted/protocols/shoutcast.pyc -../twisted/protocols/dict.pyc -../twisted/protocols/ident.pyc -../twisted/protocols/ftp.pyc -../twisted/protocols/finger.pyc -../twisted/protocols/amp.pyc -../twisted/protocols/postfix.pyc -../twisted/protocols/socks.pyc -../twisted/protocols/portforward.pyc -../twisted/protocols/__init__.pyc -../twisted/protocols/tls.pyc -../twisted/protocols/basic.pyc -../twisted/protocols/memcache.pyc -../twisted/protocols/htb.pyc -../twisted/protocols/loopback.pyc -../twisted/protocols/policies.pyc -../twisted/protocols/pcp.pyc -../twisted/protocols/gps/__init__.pyc -../twisted/protocols/gps/rockwell.pyc -../twisted/protocols/gps/nmea.pyc -../twisted/protocols/mice/__init__.pyc -../twisted/protocols/mice/mouseman.pyc -../twisted/protocols/test/test_basic.pyc -../twisted/protocols/test/__init__.pyc -../twisted/protocols/test/test_tls.pyc -../twisted/enterprise/__init__.pyc -../twisted/enterprise/adbapi.pyc -../twisted/runner/portmap.so -../twisted/test/raiser.so -../twisted/python/sendmsg.so -../twisted/manhole/inspectro.glade -../twisted/manhole/logview.glade -../twisted/manhole/gladereactor.glade -../twisted/manhole/ui/gtk2manhole.glade -../twisted/mail/topfiles/README -../twisted/mail/topfiles/NEWS -../twisted/mail/test/rfc822.message -../twisted/mail/test/server.pem -../twisted/names/topfiles/README -../twisted/names/topfiles/NEWS -../twisted/conch/topfiles/README -../twisted/conch/topfiles/NEWS -../twisted/python/sendmsg.c -../twisted/python/twisted-completion.zsh -../twisted/python/_initgroups.c -../twisted/python/zsh/_tkmktap -../twisted/python/zsh/_twistd -../twisted/python/zsh/_mktap -../twisted/python/zsh/_lore -../twisted/python/zsh/_pyhtmlizer -../twisted/python/zsh/_tap2deb -../twisted/python/zsh/_websetroot -../twisted/python/zsh/README.txt -../twisted/python/zsh/_cftp -../twisted/python/zsh/_conch -../twisted/python/zsh/_tkconch -../twisted/python/zsh/_manhole -../twisted/python/zsh/_tapconvert -../twisted/python/zsh/_ckeygen -../twisted/python/zsh/_trial -../twisted/python/zsh/_tap2rpm -../twisted/runner/portmap.c -../twisted/runner/topfiles/README -../twisted/runner/topfiles/NEWS -../twisted/spread/ui/login2.glade -../twisted/internet/iocpreactor/notes.txt -../twisted/internet/iocpreactor/build.bat -../twisted/internet/iocpreactor/iocpsupport/winsock_pointers.c -../twisted/internet/iocpreactor/iocpsupport/wsasend.pxi -../twisted/internet/iocpreactor/iocpsupport/acceptex.pxi -../twisted/internet/iocpreactor/iocpsupport/winsock_pointers.h -../twisted/internet/iocpreactor/iocpsupport/wsarecv.pxi -../twisted/internet/iocpreactor/iocpsupport/connectex.pxi -../twisted/internet/iocpreactor/iocpsupport/iocpsupport.pyx -../twisted/internet/iocpreactor/iocpsupport/iocpsupport.c -../twisted/internet/test/fake_CAs/chain.pem -../twisted/internet/test/fake_CAs/thing2-duplicate.pem -../twisted/internet/test/fake_CAs/thing1.pem -../twisted/internet/test/fake_CAs/not-a-certificate -../twisted/internet/test/fake_CAs/thing2.pem -../twisted/news/topfiles/README -../twisted/news/topfiles/NEWS -../twisted/topfiles/README -../twisted/topfiles/NEWS -../twisted/topfiles/CREDITS -../twisted/topfiles/ChangeLog.Old -../twisted/words/xish/xpathparser.g -../twisted/words/topfiles/README -../twisted/words/topfiles/NEWS -../twisted/words/im/instancemessenger.glade -../twisted/lore/xhtml-symbol.ent -../twisted/lore/xhtml-lat1.ent -../twisted/lore/template.mgp -../twisted/lore/xhtml1-transitional.dtd -../twisted/lore/xhtml-special.ent -../twisted/lore/xhtml1-strict.dtd -../twisted/lore/topfiles/README -../twisted/lore/topfiles/NEWS -../twisted/lore/test/lore_index_file_unnumbered_out.html -../twisted/lore/test/template.tpl -../twisted/lore/test/lore_index_file_out_multiple.html -../twisted/lore/test/lore_numbering_test_out.html -../twisted/lore/test/simple.html -../twisted/lore/test/lore_numbering_test_out2.html -../twisted/lore/test/lore_index_file_out.html -../twisted/lore/test/lore_index_test.xhtml -../twisted/lore/test/simple3.html -../twisted/lore/test/simple4.html -../twisted/lore/test/lore_index_test2.xhtml -../twisted/web/failure.xhtml -../twisted/web/topfiles/README -../twisted/web/topfiles/NEWS -../twisted/pair/topfiles/README -../twisted/pair/topfiles/NEWS -../twisted/test/raiser.c -../twisted/test/server.pem -../twisted/test/raiser.pyx -./ -requires.txt -SOURCES.txt -dependency_links.txt -PKG-INFO -not-zip-safe -top_level.txt -../../../../bin/manhole -../../../../bin/twistd -../../../../bin/tap2deb -../../../../bin/mailmail -../../../../bin/tkconch -../../../../bin/trial -../../../../bin/ckeygen -../../../../bin/conch -../../../../bin/tap2rpm -../../../../bin/pyhtmlizer -../../../../bin/lore -../../../../bin/tapconvert -../../../../bin/cftp diff --git a/Linux_i686/lib/python2.7/site-packages/Twisted-14.0.0.egg-info/not-zip-safe b/Linux_i686/lib/python2.7/site-packages/Twisted-14.0.0.egg-info/not-zip-safe deleted file mode 100644 index 8b13789..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Twisted-14.0.0.egg-info/not-zip-safe +++ /dev/null @@ -1 +0,0 @@ - diff --git a/Linux_i686/lib/python2.7/site-packages/Twisted-14.0.0.egg-info/requires.txt b/Linux_i686/lib/python2.7/site-packages/Twisted-14.0.0.egg-info/requires.txt deleted file mode 100644 index fcdfa93..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Twisted-14.0.0.egg-info/requires.txt +++ /dev/null @@ -1 +0,0 @@ -zope.interface >= 3.6.0 \ No newline at end of file diff --git a/Linux_i686/lib/python2.7/site-packages/Twisted-14.0.0.egg-info/top_level.txt b/Linux_i686/lib/python2.7/site-packages/Twisted-14.0.0.egg-info/top_level.txt deleted file mode 100644 index 3eb29f0..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Twisted-14.0.0.egg-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -twisted diff --git a/Linux_i686/lib/python2.7/site-packages/Werkzeug-0.9.4.egg-info/PKG-INFO b/Linux_i686/lib/python2.7/site-packages/Werkzeug-0.9.4.egg-info/PKG-INFO deleted file mode 100644 index a4d99cb..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Werkzeug-0.9.4.egg-info/PKG-INFO +++ /dev/null @@ -1,72 +0,0 @@ -Metadata-Version: 1.1 -Name: Werkzeug -Version: 0.9.4 -Summary: The Swiss Army knife of Python web development -Home-page: http://werkzeug.pocoo.org/ -Author: Armin Ronacher -Author-email: armin.ronacher@active-4.com -License: BSD -Description: - Werkzeug - ======== - - Werkzeug started as simple collection of various utilities for WSGI - applications and has become one of the most advanced WSGI utility - modules. It includes a powerful debugger, full featured request and - response objects, HTTP utilities to handle entity tags, cache control - headers, HTTP dates, cookie handling, file uploads, a powerful URL - routing system and a bunch of community contributed addon modules. - - Werkzeug is unicode aware and doesn't enforce a specific template - engine, database adapter or anything else. It doesn't even enforce - a specific way of handling requests and leaves all that up to the - developer. It's most useful for end user applications which should work - on as many server environments as possible (such as blogs, wikis, - bulletin boards, etc.). - - Details and example applications are available on the - `Werkzeug website `_. - - - Features - -------- - - - unicode awareness - - - request and response objects - - - various utility functions for dealing with HTTP headers such as - `Accept` and `Cache-Control` headers. - - - thread local objects with proper cleanup at request end - - - an interactive debugger - - - A simple WSGI server with support for threading and forking - with an automatic reloader. - - - a flexible URL routing system with REST support. - - - fully WSGI compatible - - - Development Version - ------------------- - - The Werkzeug development version can be installed by cloning the git - repository from `github`_:: - - git clone git@github.com:mitsuhiko/werkzeug.git - - .. _github: http://github.com/mitsuhiko/werkzeug - -Platform: any -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: Topic :: Internet :: WWW/HTTP :: Dynamic Content -Classifier: Topic :: Software Development :: Libraries :: Python Modules diff --git a/Linux_i686/lib/python2.7/site-packages/Werkzeug-0.9.4.egg-info/SOURCES.txt b/Linux_i686/lib/python2.7/site-packages/Werkzeug-0.9.4.egg-info/SOURCES.txt deleted file mode 100644 index be54ff7..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Werkzeug-0.9.4.egg-info/SOURCES.txt +++ /dev/null @@ -1,289 +0,0 @@ -AUTHORS -CHANGES -LICENSE -MANIFEST.in -Makefile -setup.cfg -setup.py -Werkzeug.egg-info/PKG-INFO -Werkzeug.egg-info/SOURCES.txt -Werkzeug.egg-info/dependency_links.txt -Werkzeug.egg-info/not-zip-safe -Werkzeug.egg-info/top_level.txt -artwork/logo.png -artwork/logo.svg -docs/Makefile -docs/changes.rst -docs/conf.py -docs/contents.rst.inc -docs/datastructures.rst -docs/debug.rst -docs/exceptions.rst -docs/http.rst -docs/index.rst -docs/installation.rst -docs/latexindex.rst -docs/levels.rst -docs/local.rst -docs/logo.pdf -docs/make.bat -docs/makearchive.py -docs/middlewares.rst -docs/python3.rst -docs/quickstart.rst -docs/request_data.rst -docs/routing.rst -docs/serving.rst -docs/terms.rst -docs/test.rst -docs/transition.rst -docs/tutorial.rst -docs/unicode.rst -docs/utils.rst -docs/werkzeugext.py -docs/werkzeugstyle.sty -docs/wrappers.rst -docs/wsgi.rst -docs/_static/background.png -docs/_static/codebackground.png -docs/_static/contents.png -docs/_static/debug-screenshot.png -docs/_static/favicon.ico -docs/_static/header.png -docs/_static/navigation.png -docs/_static/navigation_active.png -docs/_static/shortly.png -docs/_static/shorty-screenshot.png -docs/_static/style.css -docs/_static/werkzeug.js -docs/_static/werkzeug.png -docs/_templates/sidebarintro.html -docs/_templates/sidebarlogo.html -docs/_themes/LICENSE -docs/_themes/README -docs/_themes/werkzeug_theme_support.py -docs/_themes/werkzeug/layout.html -docs/_themes/werkzeug/relations.html -docs/_themes/werkzeug/theme.conf -docs/_themes/werkzeug/static/werkzeug.css_t -docs/contrib/atom.rst -docs/contrib/cache.rst -docs/contrib/fixers.rst -docs/contrib/index.rst -docs/contrib/iterio.rst -docs/contrib/lint.rst -docs/contrib/profiler.rst -docs/contrib/securecookie.rst -docs/contrib/sessions.rst -docs/contrib/wrappers.rst -docs/deployment/cgi.rst -docs/deployment/fastcgi.rst -docs/deployment/index.rst -docs/deployment/mod_wsgi.rst -docs/deployment/proxying.rst -examples/README -examples/cookieauth.py -examples/httpbasicauth.py -examples/manage-coolmagic.py -examples/manage-couchy.py -examples/manage-cupoftee.py -examples/manage-i18nurls.py -examples/manage-plnt.py -examples/manage-shorty.py -examples/manage-simplewiki.py -examples/manage-webpylike.py -examples/upload.py -examples/contrib/README -examples/contrib/securecookie.py -examples/contrib/sessions.py -examples/coolmagic/__init__.py -examples/coolmagic/application.py -examples/coolmagic/helpers.py -examples/coolmagic/utils.py -examples/coolmagic/public/style.css -examples/coolmagic/templates/layout.html -examples/coolmagic/templates/static/about.html -examples/coolmagic/templates/static/index.html -examples/coolmagic/templates/static/not_found.html -examples/coolmagic/views/__init__.py -examples/coolmagic/views/static.py -examples/couchy/README -examples/couchy/__init__.py -examples/couchy/application.py -examples/couchy/models.py -examples/couchy/utils.py -examples/couchy/views.py -examples/couchy/static/style.css -examples/couchy/templates/display.html -examples/couchy/templates/layout.html -examples/couchy/templates/list.html -examples/couchy/templates/new.html -examples/couchy/templates/not_found.html -examples/cupoftee/__init__.py -examples/cupoftee/application.py -examples/cupoftee/db.py -examples/cupoftee/network.py -examples/cupoftee/pages.py -examples/cupoftee/utils.py -examples/cupoftee/shared/content.png -examples/cupoftee/shared/down.png -examples/cupoftee/shared/favicon.ico -examples/cupoftee/shared/header.png -examples/cupoftee/shared/logo.png -examples/cupoftee/shared/style.css -examples/cupoftee/shared/up.png -examples/cupoftee/templates/layout.html -examples/cupoftee/templates/missingpage.html -examples/cupoftee/templates/search.html -examples/cupoftee/templates/server.html -examples/cupoftee/templates/serverlist.html -examples/i18nurls/__init__.py -examples/i18nurls/application.py -examples/i18nurls/urls.py -examples/i18nurls/views.py -examples/i18nurls/templates/about.html -examples/i18nurls/templates/blog.html -examples/i18nurls/templates/index.html -examples/i18nurls/templates/layout.html -examples/partial/README -examples/partial/complex_routing.py -examples/plnt/__init__.py -examples/plnt/database.py -examples/plnt/sync.py -examples/plnt/utils.py -examples/plnt/views.py -examples/plnt/webapp.py -examples/plnt/shared/style.css -examples/plnt/templates/about.html -examples/plnt/templates/index.html -examples/plnt/templates/layout.html -examples/shortly/shortly.py -examples/shortly/static/style.css -examples/shortly/templates/404.html -examples/shortly/templates/layout.html -examples/shortly/templates/new_url.html -examples/shortly/templates/short_link_details.html -examples/shorty/__init__.py -examples/shorty/application.py -examples/shorty/models.py -examples/shorty/utils.py -examples/shorty/views.py -examples/shorty/static/style.css -examples/shorty/templates/display.html -examples/shorty/templates/layout.html -examples/shorty/templates/list.html -examples/shorty/templates/new.html -examples/shorty/templates/not_found.html -examples/simplewiki/__init__.py -examples/simplewiki/actions.py -examples/simplewiki/application.py -examples/simplewiki/database.py -examples/simplewiki/specialpages.py -examples/simplewiki/utils.py -examples/simplewiki/shared/style.css -examples/simplewiki/templates/action_diff.html -examples/simplewiki/templates/action_edit.html -examples/simplewiki/templates/action_log.html -examples/simplewiki/templates/action_revert.html -examples/simplewiki/templates/action_show.html -examples/simplewiki/templates/layout.html -examples/simplewiki/templates/macros.xml -examples/simplewiki/templates/missing_action.html -examples/simplewiki/templates/page_index.html -examples/simplewiki/templates/page_missing.html -examples/simplewiki/templates/recent_changes.html -examples/webpylike/example.py -examples/webpylike/webpylike.py -werkzeug/__init__.py -werkzeug/_compat.py -werkzeug/_internal.py -werkzeug/datastructures.py -werkzeug/exceptions.py -werkzeug/formparser.py -werkzeug/http.py -werkzeug/local.py -werkzeug/posixemulation.py -werkzeug/routing.py -werkzeug/script.py -werkzeug/security.py -werkzeug/serving.py -werkzeug/test.py -werkzeug/testapp.py -werkzeug/urls.py -werkzeug/useragents.py -werkzeug/utils.py -werkzeug/wrappers.py -werkzeug/wsgi.py -werkzeug/contrib/__init__.py -werkzeug/contrib/atom.py -werkzeug/contrib/cache.py -werkzeug/contrib/fixers.py -werkzeug/contrib/iterio.py -werkzeug/contrib/jsrouting.py -werkzeug/contrib/limiter.py -werkzeug/contrib/lint.py -werkzeug/contrib/profiler.py -werkzeug/contrib/securecookie.py -werkzeug/contrib/sessions.py -werkzeug/contrib/testtools.py -werkzeug/contrib/wrappers.py -werkzeug/debug/__init__.py -werkzeug/debug/console.py -werkzeug/debug/repr.py -werkzeug/debug/tbtools.py -werkzeug/debug/shared/FONT_LICENSE -werkzeug/debug/shared/console.png -werkzeug/debug/shared/debugger.js -werkzeug/debug/shared/jquery.js -werkzeug/debug/shared/less.png -werkzeug/debug/shared/more.png -werkzeug/debug/shared/source.png -werkzeug/debug/shared/style.css -werkzeug/debug/shared/ubuntu.ttf -werkzeug/testsuite/__init__.py -werkzeug/testsuite/compat.py -werkzeug/testsuite/datastructures.py -werkzeug/testsuite/debug.py -werkzeug/testsuite/exceptions.py -werkzeug/testsuite/formparser.py -werkzeug/testsuite/http.py -werkzeug/testsuite/internal.py -werkzeug/testsuite/local.py -werkzeug/testsuite/routing.py -werkzeug/testsuite/security.py -werkzeug/testsuite/serving.py -werkzeug/testsuite/test.py -werkzeug/testsuite/urls.py -werkzeug/testsuite/utils.py -werkzeug/testsuite/wrappers.py -werkzeug/testsuite/wsgi.py -werkzeug/testsuite/contrib/__init__.py -werkzeug/testsuite/contrib/cache.py -werkzeug/testsuite/contrib/fixers.py -werkzeug/testsuite/contrib/iterio.py -werkzeug/testsuite/contrib/securecookie.py -werkzeug/testsuite/contrib/sessions.py -werkzeug/testsuite/contrib/wrappers.py -werkzeug/testsuite/multipart/collect.py -werkzeug/testsuite/multipart/ie7_full_path_request.txt -werkzeug/testsuite/multipart/firefox3-2png1txt/file1.png -werkzeug/testsuite/multipart/firefox3-2png1txt/file2.png -werkzeug/testsuite/multipart/firefox3-2png1txt/request.txt -werkzeug/testsuite/multipart/firefox3-2png1txt/text.txt -werkzeug/testsuite/multipart/firefox3-2pnglongtext/file1.png -werkzeug/testsuite/multipart/firefox3-2pnglongtext/file2.png -werkzeug/testsuite/multipart/firefox3-2pnglongtext/request.txt -werkzeug/testsuite/multipart/firefox3-2pnglongtext/text.txt -werkzeug/testsuite/multipart/ie6-2png1txt/file1.png -werkzeug/testsuite/multipart/ie6-2png1txt/file2.png -werkzeug/testsuite/multipart/ie6-2png1txt/request.txt -werkzeug/testsuite/multipart/ie6-2png1txt/text.txt -werkzeug/testsuite/multipart/opera8-2png1txt/file1.png -werkzeug/testsuite/multipart/opera8-2png1txt/file2.png -werkzeug/testsuite/multipart/opera8-2png1txt/request.txt -werkzeug/testsuite/multipart/opera8-2png1txt/text.txt -werkzeug/testsuite/multipart/webkit3-2png1txt/file1.png -werkzeug/testsuite/multipart/webkit3-2png1txt/file2.png -werkzeug/testsuite/multipart/webkit3-2png1txt/request.txt -werkzeug/testsuite/multipart/webkit3-2png1txt/text.txt -werkzeug/testsuite/res/test.txt \ No newline at end of file diff --git a/Linux_i686/lib/python2.7/site-packages/Werkzeug-0.9.4.egg-info/dependency_links.txt b/Linux_i686/lib/python2.7/site-packages/Werkzeug-0.9.4.egg-info/dependency_links.txt deleted file mode 100644 index 8b13789..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Werkzeug-0.9.4.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/Linux_i686/lib/python2.7/site-packages/Werkzeug-0.9.4.egg-info/installed-files.txt b/Linux_i686/lib/python2.7/site-packages/Werkzeug-0.9.4.egg-info/installed-files.txt deleted file mode 100644 index c213d9d..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Werkzeug-0.9.4.egg-info/installed-files.txt +++ /dev/null @@ -1,161 +0,0 @@ -../werkzeug/wrappers.py -../werkzeug/_compat.py -../werkzeug/security.py -../werkzeug/http.py -../werkzeug/wsgi.py -../werkzeug/useragents.py -../werkzeug/script.py -../werkzeug/exceptions.py -../werkzeug/datastructures.py -../werkzeug/posixemulation.py -../werkzeug/testapp.py -../werkzeug/urls.py -../werkzeug/local.py -../werkzeug/__init__.py -../werkzeug/serving.py -../werkzeug/formparser.py -../werkzeug/_internal.py -../werkzeug/test.py -../werkzeug/utils.py -../werkzeug/routing.py -../werkzeug/debug/repr.py -../werkzeug/debug/console.py -../werkzeug/debug/tbtools.py -../werkzeug/debug/__init__.py -../werkzeug/contrib/wrappers.py -../werkzeug/contrib/lint.py -../werkzeug/contrib/profiler.py -../werkzeug/contrib/iterio.py -../werkzeug/contrib/fixers.py -../werkzeug/contrib/sessions.py -../werkzeug/contrib/securecookie.py -../werkzeug/contrib/testtools.py -../werkzeug/contrib/__init__.py -../werkzeug/contrib/limiter.py -../werkzeug/contrib/jsrouting.py -../werkzeug/contrib/cache.py -../werkzeug/contrib/atom.py -../werkzeug/testsuite/wrappers.py -../werkzeug/testsuite/compat.py -../werkzeug/testsuite/internal.py -../werkzeug/testsuite/security.py -../werkzeug/testsuite/http.py -../werkzeug/testsuite/wsgi.py -../werkzeug/testsuite/exceptions.py -../werkzeug/testsuite/datastructures.py -../werkzeug/testsuite/urls.py -../werkzeug/testsuite/local.py -../werkzeug/testsuite/__init__.py -../werkzeug/testsuite/serving.py -../werkzeug/testsuite/formparser.py -../werkzeug/testsuite/test.py -../werkzeug/testsuite/debug.py -../werkzeug/testsuite/utils.py -../werkzeug/testsuite/routing.py -../werkzeug/testsuite/contrib/wrappers.py -../werkzeug/testsuite/contrib/iterio.py -../werkzeug/testsuite/contrib/fixers.py -../werkzeug/testsuite/contrib/sessions.py -../werkzeug/testsuite/contrib/securecookie.py -../werkzeug/testsuite/contrib/__init__.py -../werkzeug/testsuite/contrib/cache.py -../werkzeug/debug/shared/FONT_LICENSE -../werkzeug/debug/shared/console.png -../werkzeug/debug/shared/debugger.js -../werkzeug/debug/shared/jquery.js -../werkzeug/debug/shared/less.png -../werkzeug/debug/shared/more.png -../werkzeug/debug/shared/source.png -../werkzeug/debug/shared/style.css -../werkzeug/debug/shared/ubuntu.ttf -../werkzeug/testsuite/multipart/collect.py -../werkzeug/testsuite/multipart/ie7_full_path_request.txt -../werkzeug/testsuite/multipart/firefox3-2png1txt/file1.png -../werkzeug/testsuite/multipart/firefox3-2png1txt/file2.png -../werkzeug/testsuite/multipart/firefox3-2png1txt/request.txt -../werkzeug/testsuite/multipart/firefox3-2png1txt/text.txt -../werkzeug/testsuite/multipart/firefox3-2pnglongtext/file1.png -../werkzeug/testsuite/multipart/firefox3-2pnglongtext/file2.png -../werkzeug/testsuite/multipart/firefox3-2pnglongtext/request.txt -../werkzeug/testsuite/multipart/firefox3-2pnglongtext/text.txt -../werkzeug/testsuite/multipart/ie6-2png1txt/file1.png -../werkzeug/testsuite/multipart/ie6-2png1txt/file2.png -../werkzeug/testsuite/multipart/ie6-2png1txt/request.txt -../werkzeug/testsuite/multipart/ie6-2png1txt/text.txt -../werkzeug/testsuite/multipart/opera8-2png1txt/file1.png -../werkzeug/testsuite/multipart/opera8-2png1txt/file2.png -../werkzeug/testsuite/multipart/opera8-2png1txt/request.txt -../werkzeug/testsuite/multipart/opera8-2png1txt/text.txt -../werkzeug/testsuite/multipart/webkit3-2png1txt/file1.png -../werkzeug/testsuite/multipart/webkit3-2png1txt/file2.png -../werkzeug/testsuite/multipart/webkit3-2png1txt/request.txt -../werkzeug/testsuite/multipart/webkit3-2png1txt/text.txt -../werkzeug/testsuite/res/test.txt -../werkzeug/wrappers.pyc -../werkzeug/_compat.pyc -../werkzeug/security.pyc -../werkzeug/http.pyc -../werkzeug/wsgi.pyc -../werkzeug/useragents.pyc -../werkzeug/script.pyc -../werkzeug/exceptions.pyc -../werkzeug/datastructures.pyc -../werkzeug/posixemulation.pyc -../werkzeug/testapp.pyc -../werkzeug/urls.pyc -../werkzeug/local.pyc -../werkzeug/__init__.pyc -../werkzeug/serving.pyc -../werkzeug/formparser.pyc -../werkzeug/_internal.pyc -../werkzeug/test.pyc -../werkzeug/utils.pyc -../werkzeug/routing.pyc -../werkzeug/debug/repr.pyc -../werkzeug/debug/console.pyc -../werkzeug/debug/tbtools.pyc -../werkzeug/debug/__init__.pyc -../werkzeug/contrib/wrappers.pyc -../werkzeug/contrib/lint.pyc -../werkzeug/contrib/profiler.pyc -../werkzeug/contrib/iterio.pyc -../werkzeug/contrib/fixers.pyc -../werkzeug/contrib/sessions.pyc -../werkzeug/contrib/securecookie.pyc -../werkzeug/contrib/testtools.pyc -../werkzeug/contrib/__init__.pyc -../werkzeug/contrib/limiter.pyc -../werkzeug/contrib/jsrouting.pyc -../werkzeug/contrib/cache.pyc -../werkzeug/contrib/atom.pyc -../werkzeug/testsuite/wrappers.pyc -../werkzeug/testsuite/compat.pyc -../werkzeug/testsuite/internal.pyc -../werkzeug/testsuite/security.pyc -../werkzeug/testsuite/http.pyc -../werkzeug/testsuite/wsgi.pyc -../werkzeug/testsuite/exceptions.pyc -../werkzeug/testsuite/datastructures.pyc -../werkzeug/testsuite/urls.pyc -../werkzeug/testsuite/local.pyc -../werkzeug/testsuite/__init__.pyc -../werkzeug/testsuite/serving.pyc -../werkzeug/testsuite/formparser.pyc -../werkzeug/testsuite/test.pyc -../werkzeug/testsuite/debug.pyc -../werkzeug/testsuite/utils.pyc -../werkzeug/testsuite/routing.pyc -../werkzeug/testsuite/contrib/wrappers.pyc -../werkzeug/testsuite/contrib/iterio.pyc -../werkzeug/testsuite/contrib/fixers.pyc -../werkzeug/testsuite/contrib/sessions.pyc -../werkzeug/testsuite/contrib/securecookie.pyc -../werkzeug/testsuite/contrib/__init__.pyc -../werkzeug/testsuite/contrib/cache.pyc -../werkzeug/testsuite/multipart/collect.pyc -./ -SOURCES.txt -dependency_links.txt -PKG-INFO -not-zip-safe -top_level.txt diff --git a/Linux_i686/lib/python2.7/site-packages/Werkzeug-0.9.4.egg-info/not-zip-safe b/Linux_i686/lib/python2.7/site-packages/Werkzeug-0.9.4.egg-info/not-zip-safe deleted file mode 100644 index 8b13789..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Werkzeug-0.9.4.egg-info/not-zip-safe +++ /dev/null @@ -1 +0,0 @@ - diff --git a/Linux_i686/lib/python2.7/site-packages/Werkzeug-0.9.4.egg-info/top_level.txt b/Linux_i686/lib/python2.7/site-packages/Werkzeug-0.9.4.egg-info/top_level.txt deleted file mode 100644 index 6fe8da8..0000000 --- a/Linux_i686/lib/python2.7/site-packages/Werkzeug-0.9.4.egg-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -werkzeug diff --git a/Linux_i686/lib/python2.7/site-packages/_cffi_backend.so b/Linux_i686/lib/python2.7/site-packages/_cffi_backend.so index a42fe86560a27e13ded297011fae9cfceeae98df..999c09c4dd66d71515b29e7f738e98074d3307c0 100755 GIT binary patch delta 22081 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 B*LMH_ diff --git a/Linux_i686/lib/python2.7/site-packages/alembic-0.6.5.egg-info/PKG-INFO b/Linux_i686/lib/python2.7/site-packages/alembic-0.6.5.egg-info/PKG-INFO deleted file mode 100644 index 3e0ec60..0000000 --- a/Linux_i686/lib/python2.7/site-packages/alembic-0.6.5.egg-info/PKG-INFO +++ /dev/null @@ -1,96 +0,0 @@ -Metadata-Version: 1.1 -Name: alembic -Version: 0.6.5 -Summary: A database migration tool for SQLAlchemy. -Home-page: http://bitbucket.org/zzzeek/alembic -Author: Mike Bayer -Author-email: mike@zzzcomputing.com -License: MIT -Description: Alembic is a new database migrations tool, written by the author - of `SQLAlchemy `_. A migrations tool - offers the following functionality: - - * Can emit ALTER statements to a database in order to change - the structure of tables and other constructs - * Provides a system whereby "migration scripts" may be constructed; - each script indicates a particular series of steps that can "upgrade" a - target database to a new version, and optionally a series of steps that can - "downgrade" similarly, doing the same steps in reverse. - * Allows the scripts to execute in some sequential manner. - - The goals of Alembic are: - - * Very open ended and transparent configuration and operation. A new - Alembic environment is generated from a set of templates which is selected - among a set of options when setup first occurs. The templates then deposit a - series of scripts that define fully how database connectivity is established - and how migration scripts are invoked; the migration scripts themselves are - generated from a template within that series of scripts. The scripts can - then be further customized to define exactly how databases will be - interacted with and what structure new migration files should take. - * Full support for transactional DDL. The default scripts ensure that all - migrations occur within a transaction - for those databases which support - this (Postgresql, Microsoft SQL Server), migrations can be tested with no - need to manually undo changes upon failure. - * Minimalist script construction. Basic operations like renaming - tables/columns, adding/removing columns, changing column attributes can be - performed through one line commands like alter_column(), rename_table(), - add_constraint(). There is no need to recreate full SQLAlchemy Table - structures for simple operations like these - the functions themselves - generate minimalist schema structures behind the scenes to achieve the given - DDL sequence. - * "auto generation" of migrations. While real world migrations are far more - complex than what can be automatically determined, Alembic can still - eliminate the initial grunt work in generating new migration directives - from an altered schema. The ``--autogenerate`` feature will inspect the - current status of a database using SQLAlchemy's schema inspection - capabilities, compare it to the current state of the database model as - specified in Python, and generate a series of "candidate" migrations, - rendering them into a new migration script as Python directives. The - developer then edits the new file, adding additional directives and data - migrations as needed, to produce a finished migration. Table and column - level changes can be detected, with constraints and indexes to follow as - well. - * Full support for migrations generated as SQL scripts. Those of us who - work in corporate environments know that direct access to DDL commands on a - production database is a rare privilege, and DBAs want textual SQL scripts. - Alembic's usage model and commands are oriented towards being able to run a - series of migrations into a textual output file as easily as it runs them - directly to a database. Care must be taken in this mode to not invoke other - operations that rely upon in-memory SELECTs of rows - Alembic tries to - provide helper constructs like bulk_insert() to help with data-oriented - operations that are compatible with script-based DDL. - * Non-linear versioning. Scripts are given UUID identifiers similarly - to a DVCS, and the linkage of one script to the next is achieved via markers - within the scripts themselves. Through this open-ended mechanism, branches - containing other migration scripts can be merged - the linkages can be - manually edited within the script files to create the new sequence. - * Provide a library of ALTER constructs that can be used by any SQLAlchemy - application. The DDL constructs build upon SQLAlchemy's own DDLElement base - and can be used standalone by any application or script. - * Don't break our necks over SQLite's inability to ALTER things. SQLite - has almost no support for table or column alteration, and this is likely - intentional. Alembic's design - is kept simple by not contorting its core API around these limitations, - understanding that SQLite is simply not intended to support schema - changes. While Alembic's architecture can support SQLite's workarounds, and - we will support these features provided someone takes the initiative - to implement and test, until the SQLite developers decide - to provide a fully working version of ALTER, it's still vastly preferable - to use Alembic, or any migrations tool, with databases that - are designed to work under the assumption of in-place schema migrations - taking place. - - Documentation and status of Alembic is at http://readthedocs.org/docs/alembic/. - - -Keywords: SQLAlchemy migrations -Platform: UNKNOWN -Classifier: Development Status :: 4 - Beta -Classifier: Environment :: Console -Classifier: Intended Audience :: Developers -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: Implementation :: CPython -Classifier: Programming Language :: Python :: Implementation :: PyPy -Classifier: Topic :: Database :: Front-Ends diff --git a/Linux_i686/lib/python2.7/site-packages/alembic-0.6.5.egg-info/SOURCES.txt b/Linux_i686/lib/python2.7/site-packages/alembic-0.6.5.egg-info/SOURCES.txt deleted file mode 100644 index 19bf79b..0000000 --- a/Linux_i686/lib/python2.7/site-packages/alembic-0.6.5.egg-info/SOURCES.txt +++ /dev/null @@ -1,123 +0,0 @@ -CHANGES -LICENSE -MANIFEST.in -README.rst -README.unittests -setup.cfg -setup.py -test.cfg -alembic/__init__.py -alembic/command.py -alembic/compat.py -alembic/config.py -alembic/context.py -alembic/environment.py -alembic/migration.py -alembic/op.py -alembic/operations.py -alembic/script.py -alembic/util.py -alembic.egg-info/PKG-INFO -alembic.egg-info/SOURCES.txt -alembic.egg-info/dependency_links.txt -alembic.egg-info/entry_points.txt -alembic.egg-info/not-zip-safe -alembic.egg-info/requires.txt -alembic.egg-info/top_level.txt -alembic/autogenerate/__init__.py -alembic/autogenerate/api.py -alembic/autogenerate/compare.py -alembic/autogenerate/render.py -alembic/ddl/__init__.py -alembic/ddl/base.py -alembic/ddl/impl.py -alembic/ddl/mssql.py -alembic/ddl/mysql.py -alembic/ddl/oracle.py -alembic/ddl/postgresql.py -alembic/ddl/sqlite.py -alembic/templates/generic/README -alembic/templates/generic/alembic.ini.mako -alembic/templates/generic/env.py -alembic/templates/generic/script.py.mako -alembic/templates/multidb/README -alembic/templates/multidb/alembic.ini.mako -alembic/templates/multidb/env.py -alembic/templates/multidb/script.py.mako -alembic/templates/pylons/README -alembic/templates/pylons/alembic.ini.mako -alembic/templates/pylons/env.py -alembic/templates/pylons/script.py.mako -docs/api.html -docs/changelog.html -docs/cookbook.html -docs/front.html -docs/genindex.html -docs/index.html -docs/ops.html -docs/py-modindex.html -docs/search.html -docs/searchindex.js -docs/tutorial.html -docs/_images/api_overview.png -docs/_sources/api.txt -docs/_sources/changelog.txt -docs/_sources/cookbook.txt -docs/_sources/front.txt -docs/_sources/index.txt -docs/_sources/ops.txt -docs/_sources/tutorial.txt -docs/_static/basic.css -docs/_static/changelog.css -docs/_static/comment-bright.png -docs/_static/comment-close.png -docs/_static/comment.png -docs/_static/doctools.js -docs/_static/down-pressed.png -docs/_static/down.png -docs/_static/file.png -docs/_static/jquery.js -docs/_static/minus.png -docs/_static/nature.css -docs/_static/nature_override.css -docs/_static/plus.png -docs/_static/pygments.css -docs/_static/searchtools.js -docs/_static/sphinx_paramlinks.css -docs/_static/underscore.js -docs/_static/up-pressed.png -docs/_static/up.png -docs/_static/websupport.js -docs/build/Makefile -docs/build/api.rst -docs/build/api_overview.png -docs/build/changelog.rst -docs/build/conf.py -docs/build/cookbook.rst -docs/build/front.rst -docs/build/index.rst -docs/build/ops.rst -docs/build/requirements.txt -docs/build/tutorial.rst -docs/build/_static/nature_override.css -tests/__init__.py -tests/test_autogen_indexes.py -tests/test_autogen_render.py -tests/test_autogenerate.py -tests/test_bulk_insert.py -tests/test_command.py -tests/test_config.py -tests/test_environment.py -tests/test_mssql.py -tests/test_mysql.py -tests/test_offline_environment.py -tests/test_op.py -tests/test_op_naming_convention.py -tests/test_oracle.py -tests/test_postgresql.py -tests/test_revision_create.py -tests/test_revision_paths.py -tests/test_sql_script.py -tests/test_sqlite.py -tests/test_version_table.py -tests/test_versioning.py \ No newline at end of file diff --git a/Linux_i686/lib/python2.7/site-packages/alembic-0.6.5.egg-info/dependency_links.txt b/Linux_i686/lib/python2.7/site-packages/alembic-0.6.5.egg-info/dependency_links.txt deleted file mode 100644 index 8b13789..0000000 --- a/Linux_i686/lib/python2.7/site-packages/alembic-0.6.5.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/Linux_i686/lib/python2.7/site-packages/alembic-0.6.5.egg-info/entry_points.txt b/Linux_i686/lib/python2.7/site-packages/alembic-0.6.5.egg-info/entry_points.txt deleted file mode 100644 index 27ac374..0000000 --- a/Linux_i686/lib/python2.7/site-packages/alembic-0.6.5.egg-info/entry_points.txt +++ /dev/null @@ -1,3 +0,0 @@ -[console_scripts] -alembic = alembic.config:main - diff --git a/Linux_i686/lib/python2.7/site-packages/alembic-0.6.5.egg-info/installed-files.txt b/Linux_i686/lib/python2.7/site-packages/alembic-0.6.5.egg-info/installed-files.txt deleted file mode 100644 index 1c6e409..0000000 --- a/Linux_i686/lib/python2.7/site-packages/alembic-0.6.5.egg-info/installed-files.txt +++ /dev/null @@ -1,70 +0,0 @@ -../alembic/compat.py -../alembic/util.py -../alembic/script.py -../alembic/op.py -../alembic/context.py -../alembic/command.py -../alembic/__init__.py -../alembic/operations.py -../alembic/config.py -../alembic/migration.py -../alembic/environment.py -../alembic/ddl/impl.py -../alembic/ddl/mysql.py -../alembic/ddl/mssql.py -../alembic/ddl/__init__.py -../alembic/ddl/oracle.py -../alembic/ddl/sqlite.py -../alembic/ddl/base.py -../alembic/ddl/postgresql.py -../alembic/autogenerate/api.py -../alembic/autogenerate/compare.py -../alembic/autogenerate/render.py -../alembic/autogenerate/__init__.py -../alembic/templates/generic/README -../alembic/templates/generic/alembic.ini.mako -../alembic/templates/generic/env.py -../alembic/templates/generic/script.py.mako -../alembic/templates/multidb/README -../alembic/templates/multidb/alembic.ini.mako -../alembic/templates/multidb/env.py -../alembic/templates/multidb/script.py.mako -../alembic/templates/pylons/README -../alembic/templates/pylons/alembic.ini.mako -../alembic/templates/pylons/env.py -../alembic/templates/pylons/script.py.mako -../alembic/compat.pyc -../alembic/util.pyc -../alembic/script.pyc -../alembic/op.pyc -../alembic/context.pyc -../alembic/command.pyc -../alembic/__init__.pyc -../alembic/operations.pyc -../alembic/config.pyc -../alembic/migration.pyc -../alembic/environment.pyc -../alembic/ddl/impl.pyc -../alembic/ddl/mysql.pyc -../alembic/ddl/mssql.pyc -../alembic/ddl/__init__.pyc -../alembic/ddl/oracle.pyc -../alembic/ddl/sqlite.pyc -../alembic/ddl/base.pyc -../alembic/ddl/postgresql.pyc -../alembic/autogenerate/api.pyc -../alembic/autogenerate/compare.pyc -../alembic/autogenerate/render.pyc -../alembic/autogenerate/__init__.pyc -../alembic/templates/generic/env.pyc -../alembic/templates/multidb/env.pyc -../alembic/templates/pylons/env.pyc -./ -requires.txt -SOURCES.txt -entry_points.txt -dependency_links.txt -PKG-INFO -not-zip-safe -top_level.txt -../../../../bin/alembic diff --git a/Linux_i686/lib/python2.7/site-packages/alembic-0.6.5.egg-info/not-zip-safe b/Linux_i686/lib/python2.7/site-packages/alembic-0.6.5.egg-info/not-zip-safe deleted file mode 100644 index 8b13789..0000000 --- a/Linux_i686/lib/python2.7/site-packages/alembic-0.6.5.egg-info/not-zip-safe +++ /dev/null @@ -1 +0,0 @@ - diff --git a/Linux_i686/lib/python2.7/site-packages/alembic-0.6.5.egg-info/requires.txt b/Linux_i686/lib/python2.7/site-packages/alembic-0.6.5.egg-info/requires.txt deleted file mode 100644 index 39a2c32..0000000 --- a/Linux_i686/lib/python2.7/site-packages/alembic-0.6.5.egg-info/requires.txt +++ /dev/null @@ -1,2 +0,0 @@ -SQLAlchemy>=0.7.3 -Mako \ No newline at end of file diff --git a/Linux_i686/lib/python2.7/site-packages/alembic-0.6.5.egg-info/top_level.txt b/Linux_i686/lib/python2.7/site-packages/alembic-0.6.5.egg-info/top_level.txt deleted file mode 100644 index b5bd98d..0000000 --- a/Linux_i686/lib/python2.7/site-packages/alembic-0.6.5.egg-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -alembic diff --git a/Linux_i686/lib/python2.7/site-packages/alembic/__init__.py b/Linux_i686/lib/python2.7/site-packages/alembic/__init__.py deleted file mode 100644 index 6680966..0000000 --- a/Linux_i686/lib/python2.7/site-packages/alembic/__init__.py +++ /dev/null @@ -1,11 +0,0 @@ -from os import path - -__version__ = '0.6.5' - -package_dir = path.abspath(path.dirname(__file__)) - - -from . import op -from . import context - - diff --git a/Linux_i686/lib/python2.7/site-packages/alembic/autogenerate/__init__.py b/Linux_i686/lib/python2.7/site-packages/alembic/autogenerate/__init__.py deleted file mode 100644 index d0f54ba..0000000 --- a/Linux_i686/lib/python2.7/site-packages/alembic/autogenerate/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .api import compare_metadata, _produce_migration_diffs, _produce_net_changes diff --git a/Linux_i686/lib/python2.7/site-packages/alembic/autogenerate/api.py b/Linux_i686/lib/python2.7/site-packages/alembic/autogenerate/api.py deleted file mode 100644 index 148e352..0000000 --- a/Linux_i686/lib/python2.7/site-packages/alembic/autogenerate/api.py +++ /dev/null @@ -1,301 +0,0 @@ -"""Provide the 'autogenerate' feature which can produce migration operations -automatically.""" - -import logging -import re - -from sqlalchemy.engine.reflection import Inspector -from sqlalchemy.util import OrderedSet -from .compare import _compare_tables -from .render import _drop_table, _drop_column, _drop_index, _drop_constraint, \ - _add_table, _add_column, _add_index, _add_constraint, _modify_col -from .. import util - -log = logging.getLogger(__name__) - -################################################### -# public -def compare_metadata(context, metadata): - """Compare a database schema to that given in a - :class:`~sqlalchemy.schema.MetaData` instance. - - The database connection is presented in the context - of a :class:`.MigrationContext` object, which - provides database connectivity as well as optional - comparison functions to use for datatypes and - server defaults - see the "autogenerate" arguments - at :meth:`.EnvironmentContext.configure` - for details on these. - - The return format is a list of "diff" directives, - each representing individual differences:: - - from alembic.migration import MigrationContext - from alembic.autogenerate import compare_metadata - from sqlalchemy.schema import SchemaItem - from sqlalchemy.types import TypeEngine - from sqlalchemy import (create_engine, MetaData, Column, - Integer, String, Table) - import pprint - - engine = create_engine("sqlite://") - - engine.execute(''' - create table foo ( - id integer not null primary key, - old_data varchar, - x integer - )''') - - engine.execute(''' - create table bar ( - data varchar - )''') - - metadata = MetaData() - Table('foo', metadata, - Column('id', Integer, primary_key=True), - Column('data', Integer), - Column('x', Integer, nullable=False) - ) - Table('bat', metadata, - Column('info', String) - ) - - mc = MigrationContext.configure(engine.connect()) - - diff = compare_metadata(mc, metadata) - pprint.pprint(diff, indent=2, width=20) - - Output:: - - [ ( 'add_table', - Table('bat', MetaData(bind=None), - Column('info', String(), table=), schema=None)), - ( 'remove_table', - Table(u'bar', MetaData(bind=None), - Column(u'data', VARCHAR(), table=), schema=None)), - ( 'add_column', - None, - 'foo', - Column('data', Integer(), table=)), - ( 'remove_column', - None, - 'foo', - Column(u'old_data', VARCHAR(), table=None)), - [ ( 'modify_nullable', - None, - 'foo', - u'x', - { 'existing_server_default': None, - 'existing_type': INTEGER()}, - True, - False)]] - - - :param context: a :class:`.MigrationContext` - instance. - :param metadata: a :class:`~sqlalchemy.schema.MetaData` - instance. - - """ - autogen_context, connection = _autogen_context(context, None) - diffs = [] - - object_filters = _get_object_filters(context.opts) - include_schemas = context.opts.get('include_schemas', False) - - _produce_net_changes(connection, metadata, diffs, autogen_context, - object_filters, include_schemas) - - return diffs - -################################################### -# top level - -def _produce_migration_diffs(context, template_args, - imports, include_symbol=None, - include_object=None, - include_schemas=False): - opts = context.opts - metadata = opts['target_metadata'] - include_schemas = opts.get('include_schemas', include_schemas) - - object_filters = _get_object_filters(opts, include_symbol, include_object) - - if metadata is None: - raise util.CommandError( - "Can't proceed with --autogenerate option; environment " - "script %s does not provide " - "a MetaData object to the context." % ( - context.script.env_py_location - )) - autogen_context, connection = _autogen_context(context, imports) - - diffs = [] - _produce_net_changes(connection, metadata, diffs, - autogen_context, object_filters, include_schemas) - template_args[opts['upgrade_token']] = \ - _indent(_produce_upgrade_commands(diffs, autogen_context)) - template_args[opts['downgrade_token']] = \ - _indent(_produce_downgrade_commands(diffs, autogen_context)) - template_args['imports'] = "\n".join(sorted(imports)) - - -def _get_object_filters(context_opts, include_symbol=None, include_object=None): - include_symbol = context_opts.get('include_symbol', include_symbol) - include_object = context_opts.get('include_object', include_object) - - object_filters = [] - if include_symbol: - def include_symbol_filter(object, name, type_, reflected, compare_to): - if type_ == "table": - return include_symbol(name, object.schema) - else: - return True - object_filters.append(include_symbol_filter) - if include_object: - object_filters.append(include_object) - - return object_filters - - -def _autogen_context(context, imports): - opts = context.opts - connection = context.bind - return { - 'imports': imports, - 'connection': connection, - 'dialect': connection.dialect, - 'context': context, - 'opts': opts - }, connection - -def _indent(text): - text = "### commands auto generated by Alembic - "\ - "please adjust! ###\n" + text - text += "\n### end Alembic commands ###" - text = re.compile(r'^', re.M).sub(" ", text).strip() - return text - -################################################### -# walk structures - - -def _produce_net_changes(connection, metadata, diffs, autogen_context, - object_filters=(), - include_schemas=False): - inspector = Inspector.from_engine(connection) - # TODO: not hardcode alembic_version here ? - conn_table_names = set() - - default_schema = connection.dialect.default_schema_name - if include_schemas: - schemas = set(inspector.get_schema_names()) - # replace default schema name with None - schemas.discard("information_schema") - # replace the "default" schema with None - schemas.add(None) - schemas.discard(default_schema) - else: - schemas = [None] - - for s in schemas: - tables = set(inspector.get_table_names(schema=s)).\ - difference(['alembic_version']) - conn_table_names.update(zip([s] * len(tables), tables)) - - metadata_table_names = OrderedSet([(table.schema, table.name) - for table in metadata.sorted_tables]) - - _compare_tables(conn_table_names, metadata_table_names, - object_filters, - inspector, metadata, diffs, autogen_context) - - -################################################### -# element comparison - - -################################################### -# render python - - -################################################### -# produce command structure - -def _produce_upgrade_commands(diffs, autogen_context): - buf = [] - for diff in diffs: - buf.append(_invoke_command("upgrade", diff, autogen_context)) - if not buf: - buf = ["pass"] - return "\n".join(buf) - -def _produce_downgrade_commands(diffs, autogen_context): - buf = [] - for diff in reversed(diffs): - buf.append(_invoke_command("downgrade", diff, autogen_context)) - if not buf: - buf = ["pass"] - return "\n".join(buf) - -def _invoke_command(updown, args, autogen_context): - if isinstance(args, tuple): - return _invoke_adddrop_command(updown, args, autogen_context) - else: - return _invoke_modify_command(updown, args, autogen_context) - -def _invoke_adddrop_command(updown, args, autogen_context): - cmd_type = args[0] - adddrop, cmd_type = cmd_type.split("_") - - cmd_args = args[1:] + (autogen_context,) - - _commands = { - "table": (_drop_table, _add_table), - "column": (_drop_column, _add_column), - "index": (_drop_index, _add_index), - "constraint": (_drop_constraint, _add_constraint), - } - - cmd_callables = _commands[cmd_type] - - if ( - updown == "upgrade" and adddrop == "add" - ) or ( - updown == "downgrade" and adddrop == "remove" - ): - return cmd_callables[1](*cmd_args) - else: - return cmd_callables[0](*cmd_args) - -def _invoke_modify_command(updown, args, autogen_context): - sname, tname, cname = args[0][1:4] - kw = {} - - _arg_struct = { - "modify_type": ("existing_type", "type_"), - "modify_nullable": ("existing_nullable", "nullable"), - "modify_default": ("existing_server_default", "server_default"), - } - for diff in args: - diff_kw = diff[4] - for arg in ("existing_type", \ - "existing_nullable", \ - "existing_server_default"): - if arg in diff_kw: - kw.setdefault(arg, diff_kw[arg]) - old_kw, new_kw = _arg_struct[diff[0]] - if updown == "upgrade": - kw[new_kw] = diff[-1] - kw[old_kw] = diff[-2] - else: - kw[new_kw] = diff[-2] - kw[old_kw] = diff[-1] - - if "nullable" in kw: - kw.pop("existing_nullable", None) - if "server_default" in kw: - kw.pop("existing_server_default", None) - return _modify_col(tname, cname, autogen_context, schema=sname, **kw) diff --git a/Linux_i686/lib/python2.7/site-packages/alembic/autogenerate/compare.py b/Linux_i686/lib/python2.7/site-packages/alembic/autogenerate/compare.py deleted file mode 100644 index ec077fd..0000000 --- a/Linux_i686/lib/python2.7/site-packages/alembic/autogenerate/compare.py +++ /dev/null @@ -1,490 +0,0 @@ -from sqlalchemy.exc import NoSuchTableError -from sqlalchemy import schema as sa_schema, types as sqltypes -import logging -from .. import compat -from .render import _render_server_default -from sqlalchemy.util import OrderedSet - - -log = logging.getLogger(__name__) - -def _run_filters(object_, name, type_, reflected, compare_to, object_filters): - for fn in object_filters: - if not fn(object_, name, type_, reflected, compare_to): - return False - else: - return True - -def _compare_tables(conn_table_names, metadata_table_names, - object_filters, - inspector, metadata, diffs, autogen_context): - - default_schema = inspector.bind.dialect.default_schema_name - - # tables coming from the connection will not have "schema" - # set if it matches default_schema_name; so we need a list - # of table names from local metadata that also have "None" if schema - # == default_schema_name. Most setups will be like this anyway but - # some are not (see #170) - metadata_table_names_no_dflt_schema = OrderedSet([ - (schema if schema != default_schema else None, tname) - for schema, tname in metadata_table_names - ]) - - # to adjust for the MetaData collection storing the tables either - # as "schemaname.tablename" or just "tablename", create a new lookup - # which will match the "non-default-schema" keys to the Table object. - tname_to_table = dict( - ( - no_dflt_schema, - metadata.tables[sa_schema._get_table_key(tname, schema)] - ) - for no_dflt_schema, (schema, tname) in zip( - metadata_table_names_no_dflt_schema, - metadata_table_names) - ) - metadata_table_names = metadata_table_names_no_dflt_schema - - for s, tname in metadata_table_names.difference(conn_table_names): - name = '%s.%s' % (s, tname) if s else tname - metadata_table = tname_to_table[(s, tname)] - if _run_filters(metadata_table, tname, "table", False, None, object_filters): - diffs.append(("add_table", metadata_table)) - log.info("Detected added table %r", name) - _compare_indexes_and_uniques(s, tname, object_filters, - None, - metadata_table, - diffs, autogen_context, inspector) - - removal_metadata = sa_schema.MetaData() - for s, tname in conn_table_names.difference(metadata_table_names): - name = sa_schema._get_table_key(tname, s) - exists = name in removal_metadata.tables - t = sa_schema.Table(tname, removal_metadata, schema=s) - if not exists: - inspector.reflecttable(t, None) - if _run_filters(t, tname, "table", True, None, object_filters): - diffs.append(("remove_table", t)) - log.info("Detected removed table %r", name) - - existing_tables = conn_table_names.intersection(metadata_table_names) - - existing_metadata = sa_schema.MetaData() - conn_column_info = {} - for s, tname in existing_tables: - name = sa_schema._get_table_key(tname, s) - exists = name in existing_metadata.tables - t = sa_schema.Table(tname, existing_metadata, schema=s) - if not exists: - inspector.reflecttable(t, None) - conn_column_info[(s, tname)] = t - - for s, tname in sorted(existing_tables): - name = '%s.%s' % (s, tname) if s else tname - metadata_table = tname_to_table[(s, tname)] - conn_table = existing_metadata.tables[name] - - if _run_filters(metadata_table, tname, "table", False, conn_table, object_filters): - _compare_columns(s, tname, object_filters, - conn_table, - metadata_table, - diffs, autogen_context, inspector) - _compare_indexes_and_uniques(s, tname, object_filters, - conn_table, - metadata_table, - diffs, autogen_context, inspector) - - # TODO: - # table constraints - # sequences - -def _make_index(params, conn_table): - return sa_schema.Index( - params['name'], - *[conn_table.c[cname] for cname in params['column_names']], - unique=params['unique'] - ) - -def _make_unique_constraint(params, conn_table): - return sa_schema.UniqueConstraint( - *[conn_table.c[cname] for cname in params['column_names']], - name=params['name'] - ) - -def _compare_columns(schema, tname, object_filters, conn_table, metadata_table, - diffs, autogen_context, inspector): - name = '%s.%s' % (schema, tname) if schema else tname - metadata_cols_by_name = dict((c.name, c) for c in metadata_table.c) - conn_col_names = dict((c.name, c) for c in conn_table.c) - metadata_col_names = OrderedSet(sorted(metadata_cols_by_name)) - - for cname in metadata_col_names.difference(conn_col_names): - if _run_filters(metadata_cols_by_name[cname], cname, - "column", False, None, object_filters): - diffs.append( - ("add_column", schema, tname, metadata_cols_by_name[cname]) - ) - log.info("Detected added column '%s.%s'", name, cname) - - for cname in set(conn_col_names).difference(metadata_col_names): - if _run_filters(conn_table.c[cname], cname, - "column", True, None, object_filters): - diffs.append( - ("remove_column", schema, tname, conn_table.c[cname]) - ) - log.info("Detected removed column '%s.%s'", name, cname) - - for colname in metadata_col_names.intersection(conn_col_names): - metadata_col = metadata_cols_by_name[colname] - conn_col = conn_table.c[colname] - if not _run_filters( - metadata_col, colname, "column", False, conn_col, object_filters): - continue - col_diff = [] - _compare_type(schema, tname, colname, - conn_col, - metadata_col, - col_diff, autogen_context - ) - _compare_nullable(schema, tname, colname, - conn_col, - metadata_col.nullable, - col_diff, autogen_context - ) - _compare_server_default(schema, tname, colname, - conn_col, - metadata_col, - col_diff, autogen_context - ) - if col_diff: - diffs.append(col_diff) - -class _constraint_sig(object): - def __eq__(self, other): - return self.const == other.const - - def __ne__(self, other): - return self.const != other.const - - def __hash__(self): - return hash(self.const) - -class _uq_constraint_sig(_constraint_sig): - is_index = False - is_unique = True - - def __init__(self, const): - self.const = const - self.name = const.name - self.sig = tuple(sorted([col.name for col in const.columns])) - - @property - def column_names(self): - return [col.name for col in self.const.columns] - -class _ix_constraint_sig(_constraint_sig): - is_index = True - - def __init__(self, const): - self.const = const - self.name = const.name - self.sig = tuple(sorted([col.name for col in const.columns])) - self.is_unique = bool(const.unique) - - @property - def column_names(self): - return _get_index_column_names(self.const) - -def _get_index_column_names(idx): - if compat.sqla_08: - return [getattr(exp, "name", None) for exp in idx.expressions] - else: - return [getattr(col, "name", None) for col in idx.columns] - -def _compare_indexes_and_uniques(schema, tname, object_filters, conn_table, - metadata_table, diffs, autogen_context, inspector): - - is_create_table = conn_table is None - - # 1a. get raw indexes and unique constraints from metadata ... - metadata_unique_constraints = set(uq for uq in metadata_table.constraints - if isinstance(uq, sa_schema.UniqueConstraint) - ) - metadata_indexes = set(metadata_table.indexes) - - conn_uniques = conn_indexes = frozenset() - - supports_unique_constraints = False - - if conn_table is not None: - # 1b. ... and from connection, if the table exists - if hasattr(inspector, "get_unique_constraints"): - try: - conn_uniques = inspector.get_unique_constraints( - tname, schema=schema) - supports_unique_constraints = True - except NotImplementedError: - pass - try: - conn_indexes = inspector.get_indexes(tname, schema=schema) - except NotImplementedError: - pass - - # 2. convert conn-level objects from raw inspector records - # into schema objects - conn_uniques = set(_make_unique_constraint(uq_def, conn_table) - for uq_def in conn_uniques) - conn_indexes = set(_make_index(ix, conn_table) for ix in conn_indexes) - - # 3. give the dialect a chance to omit indexes and constraints that - # we know are either added implicitly by the DB or that the DB - # can't accurately report on - autogen_context['context'].impl.\ - correct_for_autogen_constraints( - conn_uniques, conn_indexes, - metadata_unique_constraints, - metadata_indexes - ) - - # 4. organize the constraints into "signature" collections, the - # _constraint_sig() objects provide a consistent facade over both - # Index and UniqueConstraint so we can easily work with them - # interchangeably - metadata_unique_constraints = set(_uq_constraint_sig(uq) - for uq in metadata_unique_constraints - ) - - metadata_indexes = set(_ix_constraint_sig(ix) for ix in metadata_indexes) - - conn_unique_constraints = set(_uq_constraint_sig(uq) for uq in conn_uniques) - - conn_indexes = set(_ix_constraint_sig(ix) for ix in conn_indexes) - - # 5. index things by name, for those objects that have names - metadata_names = dict( - (c.name, c) for c in - metadata_unique_constraints.union(metadata_indexes) - if c.name is not None) - - conn_uniques_by_name = dict((c.name, c) for c in conn_unique_constraints) - conn_indexes_by_name = dict((c.name, c) for c in conn_indexes) - - conn_names = dict((c.name, c) for c in - conn_unique_constraints.union(conn_indexes) - if c.name is not None) - - doubled_constraints = dict( - (name, (conn_uniques_by_name[name], conn_indexes_by_name[name])) - for name in set(conn_uniques_by_name).intersection(conn_indexes_by_name) - ) - - # 6. index things by "column signature", to help with unnamed unique - # constraints. - conn_uniques_by_sig = dict((uq.sig, uq) for uq in conn_unique_constraints) - metadata_uniques_by_sig = dict( - (uq.sig, uq) for uq in metadata_unique_constraints) - metadata_indexes_by_sig = dict( - (ix.sig, ix) for ix in metadata_indexes) - unnamed_metadata_uniques = dict((uq.sig, uq) for uq in - metadata_unique_constraints if uq.name is None) - - # assumptions: - # 1. a unique constraint or an index from the connection *always* - # has a name. - # 2. an index on the metadata side *always* has a name. - # 3. a unique constraint on the metadata side *might* have a name. - # 4. The backend may double up indexes as unique constraints and - # vice versa (e.g. MySQL, Postgresql) - - def obj_added(obj): - if obj.is_index: - diffs.append(("add_index", obj.const)) - log.info("Detected added index '%s' on %s", - obj.name, ', '.join([ - "'%s'" % obj.column_names - ]) - ) - else: - if not supports_unique_constraints: - # can't report unique indexes as added if we don't - # detect them - return - if is_create_table: - # unique constraints are created inline with table defs - return - diffs.append(("add_constraint", obj.const)) - log.info("Detected added unique constraint '%s' on %s", - obj.name, ', '.join([ - "'%s'" % obj.column_names - ]) - ) - - def obj_removed(obj): - if obj.is_index: - if obj.is_unique and not supports_unique_constraints: - # many databases double up unique constraints - # as unique indexes. without that list we can't - # be sure what we're doing here - return - - diffs.append(("remove_index", obj.const)) - log.info("Detected removed index '%s' on '%s'", obj.name, tname) - else: - diffs.append(("remove_constraint", obj.const)) - log.info("Detected removed unique constraint '%s' on '%s'", - obj.name, tname - ) - - def obj_changed(old, new, msg): - if old.is_index: - log.info("Detected changed index '%s' on '%s':%s", - old.name, tname, ', '.join(msg) - ) - diffs.append(("remove_index", old.const)) - diffs.append(("add_index", new.const)) - else: - log.info("Detected changed unique constraint '%s' on '%s':%s", - old.name, tname, ', '.join(msg) - ) - diffs.append(("remove_constraint", old.const)) - diffs.append(("add_constraint", new.const)) - - for added_name in sorted(set(metadata_names).difference(conn_names)): - obj = metadata_names[added_name] - obj_added(obj) - - - for existing_name in sorted(set(metadata_names).intersection(conn_names)): - metadata_obj = metadata_names[existing_name] - - if existing_name in doubled_constraints: - conn_uq, conn_idx = doubled_constraints[existing_name] - if metadata_obj.is_index: - conn_obj = conn_idx - else: - conn_obj = conn_uq - else: - conn_obj = conn_names[existing_name] - - if conn_obj.is_index != metadata_obj.is_index: - obj_removed(conn_obj) - obj_added(metadata_obj) - else: - msg = [] - if conn_obj.is_unique != metadata_obj.is_unique: - msg.append(' unique=%r to unique=%r' % ( - conn_obj.is_unique, metadata_obj.is_unique - )) - if conn_obj.sig != metadata_obj.sig: - msg.append(' columns %r to %r' % ( - conn_obj.sig, metadata_obj.sig - )) - - if msg: - obj_changed(conn_obj, metadata_obj, msg) - - - for removed_name in sorted(set(conn_names).difference(metadata_names)): - conn_obj = conn_names[removed_name] - if not conn_obj.is_index and conn_obj.sig in unnamed_metadata_uniques: - continue - elif removed_name in doubled_constraints: - if conn_obj.sig not in metadata_indexes_by_sig and \ - conn_obj.sig not in metadata_uniques_by_sig: - conn_uq, conn_idx = doubled_constraints[removed_name] - obj_removed(conn_uq) - obj_removed(conn_idx) - else: - obj_removed(conn_obj) - - for uq_sig in unnamed_metadata_uniques: - if uq_sig not in conn_uniques_by_sig: - obj_added(unnamed_metadata_uniques[uq_sig]) - - -def _compare_nullable(schema, tname, cname, conn_col, - metadata_col_nullable, diffs, - autogen_context): - conn_col_nullable = conn_col.nullable - if conn_col_nullable is not metadata_col_nullable: - diffs.append( - ("modify_nullable", schema, tname, cname, - { - "existing_type": conn_col.type, - "existing_server_default": conn_col.server_default, - }, - conn_col_nullable, - metadata_col_nullable), - ) - log.info("Detected %s on column '%s.%s'", - "NULL" if metadata_col_nullable else "NOT NULL", - tname, - cname - ) - -def _compare_type(schema, tname, cname, conn_col, - metadata_col, diffs, - autogen_context): - - conn_type = conn_col.type - metadata_type = metadata_col.type - if conn_type._type_affinity is sqltypes.NullType: - log.info("Couldn't determine database type " - "for column '%s.%s'", tname, cname) - return - if metadata_type._type_affinity is sqltypes.NullType: - log.info("Column '%s.%s' has no type within " - "the model; can't compare", tname, cname) - return - - isdiff = autogen_context['context']._compare_type(conn_col, metadata_col) - - if isdiff: - - diffs.append( - ("modify_type", schema, tname, cname, - { - "existing_nullable": conn_col.nullable, - "existing_server_default": conn_col.server_default, - }, - conn_type, - metadata_type), - ) - log.info("Detected type change from %r to %r on '%s.%s'", - conn_type, metadata_type, tname, cname - ) - -def _compare_server_default(schema, tname, cname, conn_col, metadata_col, - diffs, autogen_context): - - metadata_default = metadata_col.server_default - conn_col_default = conn_col.server_default - if conn_col_default is None and metadata_default is None: - return False - rendered_metadata_default = _render_server_default( - metadata_default, autogen_context) - rendered_conn_default = conn_col.server_default.arg.text \ - if conn_col.server_default else None - isdiff = autogen_context['context']._compare_server_default( - conn_col, metadata_col, - rendered_metadata_default, - rendered_conn_default - ) - if isdiff: - conn_col_default = rendered_conn_default - diffs.append( - ("modify_default", schema, tname, cname, - { - "existing_nullable": conn_col.nullable, - "existing_type": conn_col.type, - }, - conn_col_default, - metadata_default), - ) - log.info("Detected server default on column '%s.%s'", - tname, - cname - ) - - - diff --git a/Linux_i686/lib/python2.7/site-packages/alembic/autogenerate/render.py b/Linux_i686/lib/python2.7/site-packages/alembic/autogenerate/render.py deleted file mode 100644 index ed9536c..0000000 --- a/Linux_i686/lib/python2.7/site-packages/alembic/autogenerate/render.py +++ /dev/null @@ -1,457 +0,0 @@ -from sqlalchemy import schema as sa_schema, types as sqltypes, sql -import logging -from .. import compat -import re -from ..compat import string_types - -log = logging.getLogger(__name__) - -try: - from sqlalchemy.sql.naming import conv - def _render_gen_name(autogen_context, name): - if isinstance(name, conv): - return _f_name(_alembic_autogenerate_prefix(autogen_context), name) - else: - return name -except ImportError: - def _render_gen_name(autogen_context, name): - return name - -class _f_name(object): - def __init__(self, prefix, name): - self.prefix = prefix - self.name = name - - def __repr__(self): - return "%sf(%r)" % (self.prefix, self.name) - -def _render_potential_expr(value, autogen_context): - if isinstance(value, sql.ClauseElement): - if compat.sqla_08: - compile_kw = dict(compile_kwargs={'literal_binds': True}) - else: - compile_kw = {} - - return "%(prefix)stext(%(sql)r)" % { - "prefix": _sqlalchemy_autogenerate_prefix(autogen_context), - "sql": str( - value.compile(dialect=autogen_context['dialect'], - **compile_kw) - ) - } - - else: - return repr(value) - -def _add_table(table, autogen_context): - text = "%(prefix)screate_table(%(tablename)r,\n%(args)s" % { - 'tablename': table.name, - 'prefix': _alembic_autogenerate_prefix(autogen_context), - 'args': ',\n'.join( - [col for col in - [_render_column(col, autogen_context) for col in table.c] - if col] + - sorted([rcons for rcons in - [_render_constraint(cons, autogen_context) for cons in - table.constraints] - if rcons is not None - ]) - ) - } - if table.schema: - text += ",\nschema=%r" % table.schema - for k in sorted(table.kwargs): - text += ",\n%s=%r" % (k.replace(" ", "_"), table.kwargs[k]) - text += "\n)" - return text - -def _drop_table(table, autogen_context): - text = "%(prefix)sdrop_table(%(tname)r" % { - "prefix": _alembic_autogenerate_prefix(autogen_context), - "tname": table.name - } - if table.schema: - text += ", schema=%r" % table.schema - text += ")" - return text - -def _add_index(index, autogen_context): - """ - Generate Alembic operations for the CREATE INDEX of an - :class:`~sqlalchemy.schema.Index` instance. - """ - from .compare import _get_index_column_names - - text = "%(prefix)screate_index(%(name)r, '%(table)s', %(columns)s, "\ - "unique=%(unique)r%(schema)s%(kwargs)s)" % { - 'prefix': _alembic_autogenerate_prefix(autogen_context), - 'name': _render_gen_name(autogen_context, index.name), - 'table': index.table.name, - 'columns': _get_index_column_names(index), - 'unique': index.unique or False, - 'schema': (", schema='%s'" % index.table.schema) if index.table.schema else '', - 'kwargs': (', '+', '.join( - ["%s=%s" % (key, _render_potential_expr(val, autogen_context)) - for key, val in index.kwargs.items()]))\ - if len(index.kwargs) else '' - } - return text - -def _drop_index(index, autogen_context): - """ - Generate Alembic operations for the DROP INDEX of an - :class:`~sqlalchemy.schema.Index` instance. - """ - text = "%(prefix)sdrop_index(%(name)r, "\ - "table_name='%(table_name)s'%(schema)s)" % { - 'prefix': _alembic_autogenerate_prefix(autogen_context), - 'name': _render_gen_name(autogen_context, index.name), - 'table_name': index.table.name, - 'schema': ((", schema='%s'" % index.table.schema) - if index.table.schema else '') - } - return text - - -def _render_unique_constraint(constraint, autogen_context): - rendered = _user_defined_render("unique", constraint, autogen_context) - if rendered is not False: - return rendered - - return _uq_constraint(constraint, autogen_context, False) - - -def _add_unique_constraint(constraint, autogen_context): - """ - Generate Alembic operations for the ALTER TABLE .. ADD CONSTRAINT ... - UNIQUE of a :class:`~sqlalchemy.schema.UniqueConstraint` instance. - """ - return _uq_constraint(constraint, autogen_context, True) - -def _uq_constraint(constraint, autogen_context, alter): - opts = [] - if constraint.deferrable: - opts.append(("deferrable", str(constraint.deferrable))) - if constraint.initially: - opts.append(("initially", str(constraint.initially))) - if alter and constraint.table.schema: - opts.append(("schema", str(constraint.table.schema))) - if not alter and constraint.name: - opts.append(("name", _render_gen_name(autogen_context, constraint.name))) - - if alter: - args = [repr(_render_gen_name(autogen_context, constraint.name)), - repr(constraint.table.name)] - args.append(repr([col.name for col in constraint.columns])) - args.extend(["%s=%r" % (k, v) for k, v in opts]) - return "%(prefix)screate_unique_constraint(%(args)s)" % { - 'prefix': _alembic_autogenerate_prefix(autogen_context), - 'args': ", ".join(args) - } - else: - args = [repr(col.name) for col in constraint.columns] - args.extend(["%s=%r" % (k, v) for k, v in opts]) - return "%(prefix)sUniqueConstraint(%(args)s)" % { - "prefix": _sqlalchemy_autogenerate_prefix(autogen_context), - "args": ", ".join(args) - } - - -def _add_fk_constraint(constraint, autogen_context): - raise NotImplementedError() - -def _add_pk_constraint(constraint, autogen_context): - raise NotImplementedError() - -def _add_check_constraint(constraint, autogen_context): - raise NotImplementedError() - -def _add_constraint(constraint, autogen_context): - """ - Dispatcher for the different types of constraints. - """ - funcs = { - "unique_constraint": _add_unique_constraint, - "foreign_key_constraint": _add_fk_constraint, - "primary_key_constraint": _add_pk_constraint, - "check_constraint": _add_check_constraint, - "column_check_constraint": _add_check_constraint, - } - return funcs[constraint.__visit_name__](constraint, autogen_context) - -def _drop_constraint(constraint, autogen_context): - """ - Generate Alembic operations for the ALTER TABLE ... DROP CONSTRAINT - of a :class:`~sqlalchemy.schema.UniqueConstraint` instance. - """ - text = "%(prefix)sdrop_constraint(%(name)r, '%(table_name)s'%(schema)s)" % { - 'prefix': _alembic_autogenerate_prefix(autogen_context), - 'name': _render_gen_name(autogen_context, constraint.name), - 'table_name': constraint.table.name, - 'schema': (", schema='%s'" % constraint.table.schema) - if constraint.table.schema else '', - } - return text - -def _add_column(schema, tname, column, autogen_context): - text = "%(prefix)sadd_column(%(tname)r, %(column)s" % { - "prefix": _alembic_autogenerate_prefix(autogen_context), - "tname": tname, - "column": _render_column(column, autogen_context) - } - if schema: - text += ", schema=%r" % schema - text += ")" - return text - -def _drop_column(schema, tname, column, autogen_context): - text = "%(prefix)sdrop_column(%(tname)r, %(cname)r" % { - "prefix": _alembic_autogenerate_prefix(autogen_context), - "tname": tname, - "cname": column.name - } - if schema: - text += ", schema=%r" % schema - text += ")" - return text - -def _modify_col(tname, cname, - autogen_context, - server_default=False, - type_=None, - nullable=None, - existing_type=None, - existing_nullable=None, - existing_server_default=False, - schema=None): - indent = " " * 11 - text = "%(prefix)salter_column(%(tname)r, %(cname)r" % { - 'prefix': _alembic_autogenerate_prefix( - autogen_context), - 'tname': tname, - 'cname': cname} - text += ",\n%sexisting_type=%s" % (indent, - _repr_type(existing_type, autogen_context)) - if server_default is not False: - rendered = _render_server_default( - server_default, autogen_context) - text += ",\n%sserver_default=%s" % (indent, rendered) - - if type_ is not None: - text += ",\n%stype_=%s" % (indent, - _repr_type(type_, autogen_context)) - if nullable is not None: - text += ",\n%snullable=%r" % ( - indent, nullable,) - if existing_nullable is not None: - text += ",\n%sexisting_nullable=%r" % ( - indent, existing_nullable) - if existing_server_default: - rendered = _render_server_default( - existing_server_default, - autogen_context) - text += ",\n%sexisting_server_default=%s" % ( - indent, rendered) - if schema: - text += ",\n%sschema=%r" % (indent, schema) - text += ")" - return text - -def _user_autogenerate_prefix(autogen_context): - prefix = autogen_context['opts']['user_module_prefix'] - if prefix is None: - return _sqlalchemy_autogenerate_prefix(autogen_context) - else: - return prefix - -def _sqlalchemy_autogenerate_prefix(autogen_context): - return autogen_context['opts']['sqlalchemy_module_prefix'] or '' - -def _alembic_autogenerate_prefix(autogen_context): - return autogen_context['opts']['alembic_module_prefix'] or '' - -def _user_defined_render(type_, object_, autogen_context): - if 'opts' in autogen_context and \ - 'render_item' in autogen_context['opts']: - render = autogen_context['opts']['render_item'] - if render: - rendered = render(type_, object_, autogen_context) - if rendered is not False: - return rendered - return False - -def _render_column(column, autogen_context): - rendered = _user_defined_render("column", column, autogen_context) - if rendered is not False: - return rendered - - opts = [] - if column.server_default: - rendered = _render_server_default( - column.server_default, autogen_context - ) - if rendered: - opts.append(("server_default", rendered)) - - if not column.autoincrement: - opts.append(("autoincrement", column.autoincrement)) - - if column.nullable is not None: - opts.append(("nullable", column.nullable)) - - # TODO: for non-ascii colname, assign a "key" - return "%(prefix)sColumn(%(name)r, %(type)s, %(kw)s)" % { - 'prefix': _sqlalchemy_autogenerate_prefix(autogen_context), - 'name': column.name, - 'type': _repr_type(column.type, autogen_context), - 'kw': ", ".join(["%s=%s" % (kwname, val) for kwname, val in opts]) - } - -def _render_server_default(default, autogen_context): - rendered = _user_defined_render("server_default", default, autogen_context) - if rendered is not False: - return rendered - - if isinstance(default, sa_schema.DefaultClause): - if isinstance(default.arg, string_types): - default = default.arg - else: - default = str(default.arg.compile( - dialect=autogen_context['dialect'])) - if isinstance(default, string_types): - # TODO: this is just a hack to get - # tests to pass until we figure out - # WTF sqlite is doing - default = re.sub(r"^'|'$", "", default) - return repr(default) - else: - return None - -def _repr_type(type_, autogen_context): - rendered = _user_defined_render("type", type_, autogen_context) - if rendered is not False: - return rendered - - mod = type(type_).__module__ - imports = autogen_context.get('imports', None) - if mod.startswith("sqlalchemy.dialects"): - dname = re.match(r"sqlalchemy\.dialects\.(\w+)", mod).group(1) - if imports is not None: - imports.add("from sqlalchemy.dialects import %s" % dname) - return "%s.%r" % (dname, type_) - elif mod.startswith("sqlalchemy"): - prefix = _sqlalchemy_autogenerate_prefix(autogen_context) - return "%s%r" % (prefix, type_) - else: - prefix = _user_autogenerate_prefix(autogen_context) - return "%s%r" % (prefix, type_) - -def _render_constraint(constraint, autogen_context): - renderer = _constraint_renderers.get(type(constraint), None) - if renderer: - return renderer(constraint, autogen_context) - else: - return None - -def _render_primary_key(constraint, autogen_context): - rendered = _user_defined_render("primary_key", constraint, autogen_context) - if rendered is not False: - return rendered - - if not constraint.columns: - return None - - opts = [] - if constraint.name: - opts.append(("name", repr(_render_gen_name(autogen_context, constraint.name)))) - return "%(prefix)sPrimaryKeyConstraint(%(args)s)" % { - "prefix": _sqlalchemy_autogenerate_prefix(autogen_context), - "args": ", ".join( - [repr(c.key) for c in constraint.columns] + - ["%s=%s" % (kwname, val) for kwname, val in opts] - ), - } - -def _fk_colspec(fk, metadata_schema): - """Implement a 'safe' version of ForeignKey._get_colspec() that - never tries to resolve the remote table. - - """ - if metadata_schema is None: - return fk._get_colspec() - else: - # need to render schema breaking up tokens by hand, since the - # ForeignKeyConstraint here may not actually have a remote - # Table present - tokens = fk._colspec.split(".") - # no schema in the colspec, render it - if len(tokens) == 2: - return "%s.%s" % (metadata_schema, fk._colspec) - else: - return fk._colspec - -def _render_foreign_key(constraint, autogen_context): - rendered = _user_defined_render("foreign_key", constraint, autogen_context) - if rendered is not False: - return rendered - - opts = [] - if constraint.name: - opts.append(("name", repr(_render_gen_name(autogen_context, constraint.name)))) - if constraint.onupdate: - opts.append(("onupdate", repr(constraint.onupdate))) - if constraint.ondelete: - opts.append(("ondelete", repr(constraint.ondelete))) - if constraint.initially: - opts.append(("initially", repr(constraint.initially))) - if constraint.deferrable: - opts.append(("deferrable", repr(constraint.deferrable))) - if constraint.use_alter: - opts.append(("use_alter", repr(constraint.use_alter))) - - apply_metadata_schema = constraint.parent.metadata.schema - return "%(prefix)sForeignKeyConstraint([%(cols)s], "\ - "[%(refcols)s], %(args)s)" % { - "prefix": _sqlalchemy_autogenerate_prefix(autogen_context), - "cols": ", ".join("'%s'" % f.parent.key for f in constraint.elements), - "refcols": ", ".join(repr(_fk_colspec(f, apply_metadata_schema)) - for f in constraint.elements), - "args": ", ".join( - ["%s=%s" % (kwname, val) for kwname, val in opts] - ), - } - -def _render_check_constraint(constraint, autogen_context): - rendered = _user_defined_render("check", constraint, autogen_context) - if rendered is not False: - return rendered - - # detect the constraint being part of - # a parent type which is probably in the Table already. - # ideally SQLAlchemy would give us more of a first class - # way to detect this. - if constraint._create_rule and \ - hasattr(constraint._create_rule, 'target') and \ - isinstance(constraint._create_rule.target, - sqltypes.TypeEngine): - return None - opts = [] - if constraint.name: - opts.append(("name", repr(_render_gen_name(autogen_context, constraint.name)))) - return "%(prefix)sCheckConstraint(%(sqltext)r%(opts)s)" % { - "prefix": _sqlalchemy_autogenerate_prefix(autogen_context), - "opts": ", " + (", ".join("%s=%s" % (k, v) - for k, v in opts)) if opts else "", - "sqltext": str( - constraint.sqltext.compile( - dialect=autogen_context['dialect'] - ) - ) - } - -_constraint_renderers = { - sa_schema.PrimaryKeyConstraint: _render_primary_key, - sa_schema.ForeignKeyConstraint: _render_foreign_key, - sa_schema.UniqueConstraint: _render_unique_constraint, - sa_schema.CheckConstraint: _render_check_constraint -} diff --git a/Linux_i686/lib/python2.7/site-packages/alembic/command.py b/Linux_i686/lib/python2.7/site-packages/alembic/command.py deleted file mode 100644 index f1c5962..0000000 --- a/Linux_i686/lib/python2.7/site-packages/alembic/command.py +++ /dev/null @@ -1,266 +0,0 @@ -import os - -from .script import ScriptDirectory -from .environment import EnvironmentContext -from . import util, autogenerate as autogen - -def list_templates(config): - """List available templates""" - - config.print_stdout("Available templates:\n") - for tempname in os.listdir(config.get_template_directory()): - with open(os.path.join( - config.get_template_directory(), - tempname, - 'README')) as readme: - synopsis = next(readme) - config.print_stdout("%s - %s", tempname, synopsis) - - config.print_stdout("\nTemplates are used via the 'init' command, e.g.:") - config.print_stdout("\n alembic init --template pylons ./scripts") - -def init(config, directory, template='generic'): - """Initialize a new scripts directory.""" - - if os.access(directory, os.F_OK): - raise util.CommandError("Directory %s already exists" % directory) - - template_dir = os.path.join(config.get_template_directory(), - template) - if not os.access(template_dir, os.F_OK): - raise util.CommandError("No such template %r" % template) - - util.status("Creating directory %s" % os.path.abspath(directory), - os.makedirs, directory) - - versions = os.path.join(directory, 'versions') - util.status("Creating directory %s" % os.path.abspath(versions), - os.makedirs, versions) - - script = ScriptDirectory(directory) - - for file_ in os.listdir(template_dir): - file_path = os.path.join(template_dir, file_) - if file_ == 'alembic.ini.mako': - config_file = os.path.abspath(config.config_file_name) - if os.access(config_file, os.F_OK): - util.msg("File %s already exists, skipping" % config_file) - else: - script._generate_template( - file_path, - config_file, - script_location=directory - ) - elif os.path.isfile(file_path): - output_file = os.path.join(directory, file_) - script._copy_file( - file_path, - output_file - ) - - util.msg("Please edit configuration/connection/logging "\ - "settings in %r before proceeding." % config_file) - -def revision(config, message=None, autogenerate=False, sql=False): - """Create a new revision file.""" - - script = ScriptDirectory.from_config(config) - template_args = { - 'config': config # Let templates use config for - # e.g. multiple databases - } - imports = set() - - environment = util.asbool( - config.get_main_option("revision_environment") - ) - - if autogenerate: - environment = True - def retrieve_migrations(rev, context): - if script.get_revision(rev) is not script.get_revision("head"): - raise util.CommandError("Target database is not up to date.") - autogen._produce_migration_diffs(context, template_args, imports) - return [] - elif environment: - def retrieve_migrations(rev, context): - return [] - - if environment: - with EnvironmentContext( - config, - script, - fn=retrieve_migrations, - as_sql=sql, - template_args=template_args, - ): - script.run_env() - return script.generate_revision(util.rev_id(), message, refresh=True, - **template_args) - - -def upgrade(config, revision, sql=False, tag=None): - """Upgrade to a later version.""" - - script = ScriptDirectory.from_config(config) - - starting_rev = None - if ":" in revision: - if not sql: - raise util.CommandError("Range revision not allowed") - starting_rev, revision = revision.split(':', 2) - - def upgrade(rev, context): - return script._upgrade_revs(revision, rev) - - with EnvironmentContext( - config, - script, - fn=upgrade, - as_sql=sql, - starting_rev=starting_rev, - destination_rev=revision, - tag=tag - ): - script.run_env() - -def downgrade(config, revision, sql=False, tag=None): - """Revert to a previous version.""" - - script = ScriptDirectory.from_config(config) - starting_rev = None - if ":" in revision: - if not sql: - raise util.CommandError("Range revision not allowed") - starting_rev, revision = revision.split(':', 2) - elif sql: - raise util.CommandError("downgrade with --sql requires :") - - def downgrade(rev, context): - return script._downgrade_revs(revision, rev) - - with EnvironmentContext( - config, - script, - fn=downgrade, - as_sql=sql, - starting_rev=starting_rev, - destination_rev=revision, - tag=tag - ): - script.run_env() - -def history(config, rev_range=None): - """List changeset scripts in chronological order.""" - - script = ScriptDirectory.from_config(config) - if rev_range is not None: - if ":" not in rev_range: - raise util.CommandError( - "History range requires [start]:[end], " - "[start]:, or :[end]") - base, head = rev_range.strip().split(":") - else: - base = head = None - - def _display_history(config, script, base, head): - for sc in script.walk_revisions( - base=base or "base", - head=head or "head"): - if sc.is_head: - config.print_stdout("") - config.print_stdout(sc.log_entry) - - def _display_history_w_current(config, script, base=None, head=None): - def _display_current_history(rev, context): - if head is None: - _display_history(config, script, base, rev) - elif base is None: - _display_history(config, script, rev, head) - return [] - - with EnvironmentContext( - config, - script, - fn=_display_current_history - ): - script.run_env() - - if base == "current": - _display_history_w_current(config, script, head=head) - elif head == "current": - _display_history_w_current(config, script, base=base) - else: - _display_history(config, script, base, head) - - -def branches(config): - """Show current un-spliced branch points""" - script = ScriptDirectory.from_config(config) - for sc in script.walk_revisions(): - if sc.is_branch_point: - config.print_stdout(sc) - for rev in sc.nextrev: - config.print_stdout("%s -> %s", - " " * len(str(sc.down_revision)), - script.get_revision(rev) - ) - -def current(config, head_only=False): - """Display the current revision for each database.""" - - script = ScriptDirectory.from_config(config) - def display_version(rev, context): - rev = script.get_revision(rev) - - if head_only: - config.print_stdout("%s%s" % ( - rev.revision if rev else None, - " (head)" if rev and rev.is_head else "")) - - else: - config.print_stdout("Current revision for %s: %s", - util.obfuscate_url_pw( - context.connection.engine.url), - rev) - return [] - - with EnvironmentContext( - config, - script, - fn=display_version - ): - script.run_env() - -def stamp(config, revision, sql=False, tag=None): - """'stamp' the revision table with the given revision; don't - run any migrations.""" - - script = ScriptDirectory.from_config(config) - def do_stamp(rev, context): - if sql: - current = False - else: - current = context._current_rev() - dest = script.get_revision(revision) - if dest is not None: - dest = dest.revision - context._update_current_rev(current, dest) - return [] - with EnvironmentContext( - config, - script, - fn=do_stamp, - as_sql=sql, - destination_rev=revision, - tag=tag - ): - script.run_env() - -def splice(config, parent, child): - """'splice' two branches, creating a new revision file. - - this command isn't implemented right now. - - """ - raise NotImplementedError() diff --git a/Linux_i686/lib/python2.7/site-packages/alembic/compat.py b/Linux_i686/lib/python2.7/site-packages/alembic/compat.py deleted file mode 100644 index aac0560..0000000 --- a/Linux_i686/lib/python2.7/site-packages/alembic/compat.py +++ /dev/null @@ -1,130 +0,0 @@ -import io -import sys -from sqlalchemy import __version__ as sa_version - -if sys.version_info < (2, 6): - raise NotImplementedError("Python 2.6 or greater is required.") - -sqla_08 = sa_version >= '0.8.0' -sqla_09 = sa_version >= '0.9.0' - -py2k = sys.version_info < (3, 0) -py3k = sys.version_info >= (3, 0) -py33 = sys.version_info >= (3, 3) - -if py3k: - import builtins as compat_builtins - string_types = str, - binary_type = bytes - text_type = str - def callable(fn): - return hasattr(fn, '__call__') - - def u(s): - return s - -else: - import __builtin__ as compat_builtins - string_types = basestring, - binary_type = str - text_type = unicode - callable = callable - - def u(s): - return unicode(s, "utf-8") - -if py3k: - from configparser import ConfigParser as SafeConfigParser - import configparser -else: - from ConfigParser import SafeConfigParser - import ConfigParser as configparser - -if py2k: - from mako.util import parse_encoding - -if py33: - from importlib import machinery - def load_module_py(module_id, path): - return machinery.SourceFileLoader(module_id, path).load_module(module_id) - - def load_module_pyc(module_id, path): - return machinery.SourcelessFileLoader(module_id, path).load_module(module_id) - -else: - import imp - def load_module_py(module_id, path): - with open(path, 'rb') as fp: - mod = imp.load_source(module_id, path, fp) - if py2k: - source_encoding = parse_encoding(fp) - if source_encoding: - mod._alembic_source_encoding = source_encoding - return mod - - def load_module_pyc(module_id, path): - with open(path, 'rb') as fp: - mod = imp.load_compiled(module_id, path, fp) - # no source encoding here - return mod - -try: - exec_ = getattr(compat_builtins, 'exec') -except AttributeError: - # Python 2 - def exec_(func_text, globals_, lcl): - exec('exec func_text in globals_, lcl') - -################################################ -# cross-compatible metaclass implementation -# Copyright (c) 2010-2012 Benjamin Peterson -def with_metaclass(meta, base=object): - """Create a base class with a metaclass.""" - return meta("%sBase" % meta.__name__, (base,), {}) -################################################ - - -# produce a wrapper that allows encoded text to stream -# into a given buffer, but doesn't close it. -# not sure of a more idiomatic approach to this. -class EncodedIO(io.TextIOWrapper): - def close(self): - pass - -if py2k: - # in Py2K, the io.* package is awkward because it does not - # easily wrap the file type (e.g. sys.stdout) and I can't - # figure out at all how to wrap StringIO.StringIO (used by nosetests) - # and also might be user specified too. So create a full - # adapter. - - class ActLikePy3kIO(object): - """Produce an object capable of wrapping either - sys.stdout (e.g. file) *or* StringIO.StringIO(). - - """ - def _false(self): - return False - - def _true(self): - return True - - readable = seekable = _false - writable = _true - closed = False - - def __init__(self, file_): - self.file_ = file_ - - def write(self, text): - return self.file_.write(text) - - def flush(self): - return self.file_.flush() - - class EncodedIO(EncodedIO): - def __init__(self, file_, encoding): - super(EncodedIO, self).__init__( - ActLikePy3kIO(file_), encoding=encoding) - - diff --git a/Linux_i686/lib/python2.7/site-packages/alembic/config.py b/Linux_i686/lib/python2.7/site-packages/alembic/config.py deleted file mode 100644 index 86ff1df..0000000 --- a/Linux_i686/lib/python2.7/site-packages/alembic/config.py +++ /dev/null @@ -1,301 +0,0 @@ -from argparse import ArgumentParser -from .compat import SafeConfigParser -import inspect -import os -import sys - -from . import command, util, package_dir, compat - -class Config(object): - """Represent an Alembic configuration. - - Within an ``env.py`` script, this is available - via the :attr:`.EnvironmentContext.config` attribute, - which in turn is available at ``alembic.context``:: - - from alembic import context - - some_param = context.config.get_main_option("my option") - - When invoking Alembic programatically, a new - :class:`.Config` can be created by passing - the name of an .ini file to the constructor:: - - from alembic.config import Config - alembic_cfg = Config("/path/to/yourapp/alembic.ini") - - With a :class:`.Config` object, you can then - run Alembic commands programmatically using the directives - in :mod:`alembic.command`. - - The :class:`.Config` object can also be constructed without - a filename. Values can be set programmatically, and - new sections will be created as needed:: - - from alembic.config import Config - alembic_cfg = Config() - alembic_cfg.set_main_option("script_location", "myapp:migrations") - alembic_cfg.set_main_option("url", "postgresql://foo/bar") - alembic_cfg.set_section_option("mysection", "foo", "bar") - - :param file_: name of the .ini file to open. - :param ini_section: name of the main Alembic section within the - .ini file - :param output_buffer: optional file-like input buffer which - will be passed to the :class:`.MigrationContext` - used to redirect - the output of "offline generation" when using Alembic programmatically. - :param stdout: buffer where the "print" output of commands will be sent. - Defaults to ``sys.stdout``. - - ..versionadded:: 0.4 - - """ - def __init__(self, file_=None, ini_section='alembic', output_buffer=None, - stdout=sys.stdout, cmd_opts=None): - """Construct a new :class:`.Config` - - """ - self.config_file_name = file_ - self.config_ini_section = ini_section - self.output_buffer = output_buffer - self.stdout = stdout - self.cmd_opts = cmd_opts - - cmd_opts = None - """The command-line options passed to the ``alembic`` script. - - Within an ``env.py`` script this can be accessed via the - :attr:`.EnvironmentContext.config` attribute. - - .. versionadded:: 0.6.0 - - .. seealso:: - - :meth:`.EnvironmentContext.get_x_argument` - - """ - - config_file_name = None - """Filesystem path to the .ini file in use.""" - - config_ini_section = None - """Name of the config file section to read basic configuration - from. Defaults to ``alembic``, that is the ``[alembic]`` section - of the .ini file. This value is modified using the ``-n/--name`` - option to the Alembic runnier. - - """ - - def print_stdout(self, text, *arg): - """Render a message to standard out.""" - - util.write_outstream( - self.stdout, - (compat.text_type(text) % arg), - "\n" - ) - - @util.memoized_property - def file_config(self): - """Return the underlying :class:`ConfigParser` object. - - Direct access to the .ini file is available here, - though the :meth:`.Config.get_section` and - :meth:`.Config.get_main_option` - methods provide a possibly simpler interface. - - """ - - if self.config_file_name: - here = os.path.abspath(os.path.dirname(self.config_file_name)) - else: - here = "" - file_config = SafeConfigParser({'here': here}) - if self.config_file_name: - file_config.read([self.config_file_name]) - else: - file_config.add_section(self.config_ini_section) - return file_config - - def get_template_directory(self): - """Return the directory where Alembic setup templates are found. - - This method is used by the alembic ``init`` and ``list_templates`` - commands. - - """ - return os.path.join(package_dir, 'templates') - - def get_section(self, name): - """Return all the configuration options from a given .ini file section - as a dictionary. - - """ - return dict(self.file_config.items(name)) - - def set_main_option(self, name, value): - """Set an option programmatically within the 'main' section. - - This overrides whatever was in the .ini file. - - """ - self.file_config.set(self.config_ini_section, name, value) - - def remove_main_option(self, name): - self.file_config.remove_option(self.config_ini_section, name) - - def set_section_option(self, section, name, value): - """Set an option programmatically within the given section. - - The section is created if it doesn't exist already. - The value here will override whatever was in the .ini - file. - - """ - if not self.file_config.has_section(section): - self.file_config.add_section(section) - self.file_config.set(section, name, value) - - def get_section_option(self, section, name, default=None): - """Return an option from the given section of the .ini file. - - """ - if not self.file_config.has_section(section): - raise util.CommandError("No config file %r found, or file has no " - "'[%s]' section" % - (self.config_file_name, section)) - if self.file_config.has_option(section, name): - return self.file_config.get(section, name) - else: - return default - - def get_main_option(self, name, default=None): - """Return an option from the 'main' section of the .ini file. - - This defaults to being a key from the ``[alembic]`` - section, unless the ``-n/--name`` flag were used to - indicate a different section. - - """ - return self.get_section_option(self.config_ini_section, name, default) - - -class CommandLine(object): - def __init__(self, prog=None): - self._generate_args(prog) - - - def _generate_args(self, prog): - def add_options(parser, positional, kwargs): - if 'template' in kwargs: - parser.add_argument("-t", "--template", - default='generic', - type=str, - help="Setup template for use with 'init'") - if 'message' in kwargs: - parser.add_argument("-m", "--message", - type=str, - help="Message string to use with 'revision'") - if 'sql' in kwargs: - parser.add_argument("--sql", - action="store_true", - help="Don't emit SQL to database - dump to " - "standard output/file instead") - if 'tag' in kwargs: - parser.add_argument("--tag", - type=str, - help="Arbitrary 'tag' name - can be used by " - "custom env.py scripts.") - if 'autogenerate' in kwargs: - parser.add_argument("--autogenerate", - action="store_true", - help="Populate revision script with candidate " - "migration operations, based on comparison " - "of database to model.") - # "current" command - if 'head_only' in kwargs: - parser.add_argument("--head-only", - action="store_true", - help="Only show current version and " - "whether or not this is the head revision.") - - if 'rev_range' in kwargs: - parser.add_argument("-r", "--rev-range", - action="store", - help="Specify a revision range; " - "format is [start]:[end]") - - - positional_help = { - 'directory': "location of scripts directory", - 'revision': "revision identifier" - } - for arg in positional: - subparser.add_argument(arg, help=positional_help.get(arg)) - - parser = ArgumentParser(prog=prog) - parser.add_argument("-c", "--config", - type=str, - default="alembic.ini", - help="Alternate config file") - parser.add_argument("-n", "--name", - type=str, - default="alembic", - help="Name of section in .ini file to " - "use for Alembic config") - parser.add_argument("-x", action="append", - help="Additional arguments consumed by " - "custom env.py scripts, e.g. -x " - "setting1=somesetting -x setting2=somesetting") - - subparsers = parser.add_subparsers() - - for fn in [getattr(command, n) for n in dir(command)]: - if inspect.isfunction(fn) and \ - fn.__name__[0] != '_' and \ - fn.__module__ == 'alembic.command': - - spec = inspect.getargspec(fn) - if spec[3]: - positional = spec[0][1:-len(spec[3])] - kwarg = spec[0][-len(spec[3]):] - else: - positional = spec[0][1:] - kwarg = [] - - subparser = subparsers.add_parser( - fn.__name__, - help=fn.__doc__) - add_options(subparser, positional, kwarg) - subparser.set_defaults(cmd=(fn, positional, kwarg)) - self.parser = parser - - def run_cmd(self, config, options): - fn, positional, kwarg = options.cmd - - try: - fn(config, - *[getattr(options, k) for k in positional], - **dict((k, getattr(options, k)) for k in kwarg) - ) - except util.CommandError as e: - util.err(str(e)) - - def main(self, argv=None): - options = self.parser.parse_args(argv) - if not hasattr(options, "cmd"): - # see http://bugs.python.org/issue9253, argparse - # behavior changed incompatibly in py3.3 - self.parser.error("too few arguments") - else: - cfg = Config(file_=options.config, - ini_section=options.name, cmd_opts=options) - self.run_cmd(cfg, options) - -def main(argv=None, prog=None, **kwargs): - """The console runner function for Alembic.""" - - CommandLine(prog=prog).main(argv=argv) - -if __name__ == '__main__': - main() \ No newline at end of file diff --git a/Linux_i686/lib/python2.7/site-packages/alembic/context.py b/Linux_i686/lib/python2.7/site-packages/alembic/context.py deleted file mode 100644 index 9c0f676..0000000 --- a/Linux_i686/lib/python2.7/site-packages/alembic/context.py +++ /dev/null @@ -1,6 +0,0 @@ -from .environment import EnvironmentContext -from . import util - -# create proxy functions for -# each method on the EnvironmentContext class. -util.create_module_class_proxy(EnvironmentContext, globals(), locals()) diff --git a/Linux_i686/lib/python2.7/site-packages/alembic/ddl/__init__.py b/Linux_i686/lib/python2.7/site-packages/alembic/ddl/__init__.py deleted file mode 100644 index bfc8ab4..0000000 --- a/Linux_i686/lib/python2.7/site-packages/alembic/ddl/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -from . import postgresql, mysql, sqlite, mssql, oracle -from .impl import DefaultImpl diff --git a/Linux_i686/lib/python2.7/site-packages/alembic/ddl/base.py b/Linux_i686/lib/python2.7/site-packages/alembic/ddl/base.py deleted file mode 100644 index 5d703a5..0000000 --- a/Linux_i686/lib/python2.7/site-packages/alembic/ddl/base.py +++ /dev/null @@ -1,161 +0,0 @@ -import functools - -from sqlalchemy.ext.compiler import compiles -from sqlalchemy.schema import DDLElement, Column -from sqlalchemy import Integer -from sqlalchemy import types as sqltypes - -class AlterTable(DDLElement): - """Represent an ALTER TABLE statement. - - Only the string name and optional schema name of the table - is required, not a full Table object. - - """ - def __init__(self, table_name, schema=None): - self.table_name = table_name - self.schema = schema - -class RenameTable(AlterTable): - def __init__(self, old_table_name, new_table_name, schema=None): - super(RenameTable, self).__init__(old_table_name, schema=schema) - self.new_table_name = new_table_name - -class AlterColumn(AlterTable): - def __init__(self, name, column_name, schema=None, - existing_type=None, - existing_nullable=None, - existing_server_default=None): - super(AlterColumn, self).__init__(name, schema=schema) - self.column_name = column_name - self.existing_type=sqltypes.to_instance(existing_type) \ - if existing_type is not None else None - self.existing_nullable=existing_nullable - self.existing_server_default=existing_server_default - -class ColumnNullable(AlterColumn): - def __init__(self, name, column_name, nullable, **kw): - super(ColumnNullable, self).__init__(name, column_name, - **kw) - self.nullable = nullable - -class ColumnType(AlterColumn): - def __init__(self, name, column_name, type_, **kw): - super(ColumnType, self).__init__(name, column_name, - **kw) - self.type_ = sqltypes.to_instance(type_) - -class ColumnName(AlterColumn): - def __init__(self, name, column_name, newname, **kw): - super(ColumnName, self).__init__(name, column_name, **kw) - self.newname = newname - -class ColumnDefault(AlterColumn): - def __init__(self, name, column_name, default, **kw): - super(ColumnDefault, self).__init__(name, column_name, **kw) - self.default = default - -class AddColumn(AlterTable): - def __init__(self, name, column, schema=None): - super(AddColumn, self).__init__(name, schema=schema) - self.column = column - -class DropColumn(AlterTable): - def __init__(self, name, column, schema=None): - super(DropColumn, self).__init__(name, schema=schema) - self.column = column - - -@compiles(RenameTable) -def visit_rename_table(element, compiler, **kw): - return "%s RENAME TO %s" % ( - alter_table(compiler, element.table_name, element.schema), - format_table_name(compiler, element.new_table_name, element.schema) - ) - -@compiles(AddColumn) -def visit_add_column(element, compiler, **kw): - return "%s %s" % ( - alter_table(compiler, element.table_name, element.schema), - add_column(compiler, element.column, **kw) - ) - -@compiles(DropColumn) -def visit_drop_column(element, compiler, **kw): - return "%s %s" % ( - alter_table(compiler, element.table_name, element.schema), - drop_column(compiler, element.column.name, **kw) - ) - -@compiles(ColumnNullable) -def visit_column_nullable(element, compiler, **kw): - return "%s %s %s" % ( - alter_table(compiler, element.table_name, element.schema), - alter_column(compiler, element.column_name), - "DROP NOT NULL" if element.nullable else "SET NOT NULL" - ) - -@compiles(ColumnType) -def visit_column_type(element, compiler, **kw): - return "%s %s %s" % ( - alter_table(compiler, element.table_name, element.schema), - alter_column(compiler, element.column_name), - "TYPE %s" % format_type(compiler, element.type_) - ) - -@compiles(ColumnName) -def visit_column_name(element, compiler, **kw): - return "%s RENAME %s TO %s" % ( - alter_table(compiler, element.table_name, element.schema), - format_column_name(compiler, element.column_name), - format_column_name(compiler, element.newname) - ) - -@compiles(ColumnDefault) -def visit_column_default(element, compiler, **kw): - return "%s %s %s" % ( - alter_table(compiler, element.table_name, element.schema), - alter_column(compiler, element.column_name), - "SET DEFAULT %s" % - format_server_default(compiler, element.default) - if element.default is not None - else "DROP DEFAULT" - ) - -def quote_dotted(name, quote): - """quote the elements of a dotted name""" - - result = '.'.join([quote(x) for x in name.split('.')]) - return result - -def format_table_name(compiler, name, schema): - quote = functools.partial(compiler.preparer.quote, force=None) - if schema: - return quote_dotted(schema, quote) + "." + quote(name) - else: - return quote(name) - -def format_column_name(compiler, name): - return compiler.preparer.quote(name, None) - -def format_server_default(compiler, default): - return compiler.get_column_default_string( - Column("x", Integer, server_default=default) - ) - -def format_type(compiler, type_): - return compiler.dialect.type_compiler.process(type_) - -def alter_table(compiler, name, schema): - return "ALTER TABLE %s" % format_table_name(compiler, name, schema) - -def drop_column(compiler, name): - return 'DROP COLUMN %s' % format_column_name(compiler, name) - -def alter_column(compiler, name): - return 'ALTER COLUMN %s' % format_column_name(compiler, name) - -def add_column(compiler, column, **kw): - return "ADD COLUMN %s" % compiler.get_column_specification(column, **kw) - - diff --git a/Linux_i686/lib/python2.7/site-packages/alembic/ddl/impl.py b/Linux_i686/lib/python2.7/site-packages/alembic/ddl/impl.py deleted file mode 100644 index 79cbd36..0000000 --- a/Linux_i686/lib/python2.7/site-packages/alembic/ddl/impl.py +++ /dev/null @@ -1,279 +0,0 @@ -from sqlalchemy.sql.expression import _BindParamClause -from sqlalchemy.ext.compiler import compiles -from sqlalchemy import schema, text -from sqlalchemy import types as sqltypes - -from ..compat import string_types, text_type, with_metaclass -from .. import util -from . import base - -class ImplMeta(type): - def __init__(cls, classname, bases, dict_): - newtype = type.__init__(cls, classname, bases, dict_) - if '__dialect__' in dict_: - _impls[dict_['__dialect__']] = cls - return newtype - -_impls = {} - -class DefaultImpl(with_metaclass(ImplMeta)): - """Provide the entrypoint for major migration operations, - including database-specific behavioral variances. - - While individual SQL/DDL constructs already provide - for database-specific implementations, variances here - allow for entirely different sequences of operations - to take place for a particular migration, such as - SQL Server's special 'IDENTITY INSERT' step for - bulk inserts. - - """ - __dialect__ = 'default' - - transactional_ddl = False - command_terminator = ";" - - def __init__(self, dialect, connection, as_sql, - transactional_ddl, output_buffer, - context_opts): - self.dialect = dialect - self.connection = connection - self.as_sql = as_sql - self.output_buffer = output_buffer - self.memo = {} - self.context_opts = context_opts - if transactional_ddl is not None: - self.transactional_ddl = transactional_ddl - - @classmethod - def get_by_dialect(cls, dialect): - return _impls[dialect.name] - - def static_output(self, text): - self.output_buffer.write(text_type(text + "\n\n")) - self.output_buffer.flush() - - @property - def bind(self): - return self.connection - - def _exec(self, construct, execution_options=None, - multiparams=(), - params=util.immutabledict()): - if isinstance(construct, string_types): - construct = text(construct) - if self.as_sql: - if multiparams or params: - # TODO: coverage - raise Exception("Execution arguments not allowed with as_sql") - self.static_output(text_type( - construct.compile(dialect=self.dialect) - ).replace("\t", " ").strip() + self.command_terminator) - else: - conn = self.connection - if execution_options: - conn = conn.execution_options(**execution_options) - conn.execute(construct, *multiparams, **params) - - def execute(self, sql, execution_options=None): - self._exec(sql, execution_options) - - def alter_column(self, table_name, column_name, - nullable=None, - server_default=False, - name=None, - type_=None, - schema=None, - autoincrement=None, - existing_type=None, - existing_server_default=None, - existing_nullable=None, - existing_autoincrement=None - ): - if autoincrement is not None or existing_autoincrement is not None: - util.warn("nautoincrement and existing_autoincrement only make sense for MySQL") - if nullable is not None: - self._exec(base.ColumnNullable(table_name, column_name, - nullable, schema=schema, - existing_type=existing_type, - existing_server_default=existing_server_default, - existing_nullable=existing_nullable, - )) - if server_default is not False: - self._exec(base.ColumnDefault( - table_name, column_name, server_default, - schema=schema, - existing_type=existing_type, - existing_server_default=existing_server_default, - existing_nullable=existing_nullable, - )) - if type_ is not None: - self._exec(base.ColumnType( - table_name, column_name, type_, schema=schema, - existing_type=existing_type, - existing_server_default=existing_server_default, - existing_nullable=existing_nullable, - )) - # do the new name last ;) - if name is not None: - self._exec(base.ColumnName( - table_name, column_name, name, schema=schema, - existing_type=existing_type, - existing_server_default=existing_server_default, - existing_nullable=existing_nullable, - )) - - def add_column(self, table_name, column, schema=None): - self._exec(base.AddColumn(table_name, column, schema=schema)) - - def drop_column(self, table_name, column, schema=None, **kw): - self._exec(base.DropColumn(table_name, column, schema=schema)) - - def add_constraint(self, const): - if const._create_rule is None or \ - const._create_rule(self): - self._exec(schema.AddConstraint(const)) - - def drop_constraint(self, const): - self._exec(schema.DropConstraint(const)) - - def rename_table(self, old_table_name, new_table_name, schema=None): - self._exec(base.RenameTable(old_table_name, - new_table_name, schema=schema)) - - def create_table(self, table): - if util.sqla_07: - table.dispatch.before_create(table, self.connection, - checkfirst=False, - _ddl_runner=self) - self._exec(schema.CreateTable(table)) - if util.sqla_07: - table.dispatch.after_create(table, self.connection, - checkfirst=False, - _ddl_runner=self) - for index in table.indexes: - self._exec(schema.CreateIndex(index)) - - def drop_table(self, table): - self._exec(schema.DropTable(table)) - - def create_index(self, index): - self._exec(schema.CreateIndex(index)) - - def drop_index(self, index): - self._exec(schema.DropIndex(index)) - - def bulk_insert(self, table, rows, multiinsert=True): - if not isinstance(rows, list): - raise TypeError("List expected") - elif rows and not isinstance(rows[0], dict): - raise TypeError("List of dictionaries expected") - if self.as_sql: - for row in rows: - self._exec(table.insert(inline=True).values(**dict( - (k, - _literal_bindparam(k, v, type_=table.c[k].type) - if not isinstance(v, _literal_bindparam) else v) - for k, v in row.items() - ))) - else: - # work around http://www.sqlalchemy.org/trac/ticket/2461 - if not hasattr(table, '_autoincrement_column'): - table._autoincrement_column = None - if rows: - if multiinsert: - self._exec(table.insert(inline=True), multiparams=rows) - else: - for row in rows: - self._exec(table.insert(inline=True).values(**row)) - - def compare_type(self, inspector_column, metadata_column): - - conn_type = inspector_column.type - metadata_type = metadata_column.type - - metadata_impl = metadata_type.dialect_impl(self.dialect) - - # work around SQLAlchemy bug "stale value for type affinity" - # fixed in 0.7.4 - metadata_impl.__dict__.pop('_type_affinity', None) - - if conn_type._compare_type_affinity( - metadata_impl - ): - comparator = _type_comparators.get(conn_type._type_affinity, None) - - return comparator and comparator(metadata_type, conn_type) - else: - return True - - def compare_server_default(self, inspector_column, - metadata_column, - rendered_metadata_default, - rendered_inspector_default): - return rendered_inspector_default != rendered_metadata_default - - def correct_for_autogen_constraints(self, conn_uniques, conn_indexes, - metadata_unique_constraints, - metadata_indexes): - pass - - def start_migrations(self): - """A hook called when :meth:`.EnvironmentContext.run_migrations` - is called. - - Implementations can set up per-migration-run state here. - - """ - - def emit_begin(self): - """Emit the string ``BEGIN``, or the backend-specific - equivalent, on the current connection context. - - This is used in offline mode and typically - via :meth:`.EnvironmentContext.begin_transaction`. - - """ - self.static_output("BEGIN" + self.command_terminator) - - def emit_commit(self): - """Emit the string ``COMMIT``, or the backend-specific - equivalent, on the current connection context. - - This is used in offline mode and typically - via :meth:`.EnvironmentContext.begin_transaction`. - - """ - self.static_output("COMMIT" + self.command_terminator) - -class _literal_bindparam(_BindParamClause): - pass - -@compiles(_literal_bindparam) -def _render_literal_bindparam(element, compiler, **kw): - return compiler.render_literal_bindparam(element, **kw) - - -def _string_compare(t1, t2): - return \ - t1.length is not None and \ - t1.length != t2.length - -def _numeric_compare(t1, t2): - return \ - ( - t1.precision is not None and \ - t1.precision != t2.precision - ) or \ - ( - t1.scale is not None and \ - t1.scale != t2.scale - ) -_type_comparators = { - sqltypes.String:_string_compare, - sqltypes.Numeric:_numeric_compare -} - - - - diff --git a/Linux_i686/lib/python2.7/site-packages/alembic/ddl/mssql.py b/Linux_i686/lib/python2.7/site-packages/alembic/ddl/mssql.py deleted file mode 100644 index fece08b..0000000 --- a/Linux_i686/lib/python2.7/site-packages/alembic/ddl/mssql.py +++ /dev/null @@ -1,217 +0,0 @@ -from sqlalchemy.ext.compiler import compiles - -from .. import util -from .impl import DefaultImpl -from .base import alter_table, AddColumn, ColumnName, \ - format_table_name, format_column_name, ColumnNullable, alter_column,\ - format_server_default,ColumnDefault, format_type, ColumnType -from sqlalchemy.sql.expression import ClauseElement, Executable - -class MSSQLImpl(DefaultImpl): - __dialect__ = 'mssql' - transactional_ddl = True - batch_separator = "GO" - - def __init__(self, *arg, **kw): - super(MSSQLImpl, self).__init__(*arg, **kw) - self.batch_separator = self.context_opts.get( - "mssql_batch_separator", - self.batch_separator) - - def _exec(self, construct, *args, **kw): - super(MSSQLImpl, self)._exec(construct, *args, **kw) - if self.as_sql and self.batch_separator: - self.static_output(self.batch_separator) - - def emit_begin(self): - self.static_output("BEGIN TRANSACTION" + self.command_terminator) - - def emit_commit(self): - super(MSSQLImpl, self).emit_commit() - if self.as_sql and self.batch_separator: - self.static_output(self.batch_separator) - - def alter_column(self, table_name, column_name, - nullable=None, - server_default=False, - name=None, - type_=None, - schema=None, - autoincrement=None, - existing_type=None, - existing_server_default=None, - existing_nullable=None, - existing_autoincrement=None - ): - - if nullable is not None and existing_type is None: - if type_ is not None: - existing_type = type_ - # the NULL/NOT NULL alter will handle - # the type alteration - type_ = None - else: - raise util.CommandError( - "MS-SQL ALTER COLUMN operations " - "with NULL or NOT NULL require the " - "existing_type or a new type_ be passed.") - - super(MSSQLImpl, self).alter_column( - table_name, column_name, - nullable=nullable, - type_=type_, - schema=schema, - autoincrement=autoincrement, - existing_type=existing_type, - existing_nullable=existing_nullable, - existing_autoincrement=existing_autoincrement - ) - - if server_default is not False: - if existing_server_default is not False or \ - server_default is None: - self._exec( - _ExecDropConstraint( - table_name, column_name, - 'sys.default_constraints') - ) - if server_default is not None: - super(MSSQLImpl, self).alter_column( - table_name, column_name, - schema=schema, - server_default=server_default) - - if name is not None: - super(MSSQLImpl, self).alter_column( - table_name, column_name, - schema=schema, - name=name) - - def bulk_insert(self, table, rows, **kw): - if self.as_sql: - self._exec( - "SET IDENTITY_INSERT %s ON" % - self.dialect.identifier_preparer.format_table(table) - ) - super(MSSQLImpl, self).bulk_insert(table, rows, **kw) - self._exec( - "SET IDENTITY_INSERT %s OFF" % - self.dialect.identifier_preparer.format_table(table) - ) - else: - super(MSSQLImpl, self).bulk_insert(table, rows, **kw) - - - def drop_column(self, table_name, column, **kw): - drop_default = kw.pop('mssql_drop_default', False) - if drop_default: - self._exec( - _ExecDropConstraint( - table_name, column, - 'sys.default_constraints') - ) - drop_check = kw.pop('mssql_drop_check', False) - if drop_check: - self._exec( - _ExecDropConstraint( - table_name, column, - 'sys.check_constraints') - ) - drop_fks = kw.pop('mssql_drop_foreign_key', False) - if drop_fks: - self._exec( - _ExecDropFKConstraint(table_name, column) - ) - super(MSSQLImpl, self).drop_column(table_name, column) - -class _ExecDropConstraint(Executable, ClauseElement): - def __init__(self, tname, colname, type_): - self.tname = tname - self.colname = colname - self.type_ = type_ - -class _ExecDropFKConstraint(Executable, ClauseElement): - def __init__(self, tname, colname): - self.tname = tname - self.colname = colname - - -@compiles(_ExecDropConstraint, 'mssql') -def _exec_drop_col_constraint(element, compiler, **kw): - tname, colname, type_ = element.tname, element.colname, element.type_ - # from http://www.mssqltips.com/sqlservertip/1425/working-with-default-constraints-in-sql-server/ - # TODO: needs table formatting, etc. - return """declare @const_name varchar(256) -select @const_name = [name] from %(type)s -where parent_object_id = object_id('%(tname)s') -and col_name(parent_object_id, parent_column_id) = '%(colname)s' -exec('alter table %(tname_quoted)s drop constraint ' + @const_name)""" % { - 'type': type_, - 'tname': tname, - 'colname': colname, - 'tname_quoted': format_table_name(compiler, tname, None), - } - -@compiles(_ExecDropFKConstraint, 'mssql') -def _exec_drop_col_fk_constraint(element, compiler, **kw): - tname, colname = element.tname, element.colname - - return """declare @const_name varchar(256) -select @const_name = [name] from - sys.foreign_keys fk join sys.foreign_key_columns fkc - on fk.object_id=fkc.constraint_object_id -where fkc.parent_object_id = object_id('%(tname)s') -and col_name(fkc.parent_object_id, fkc.parent_column_id) = '%(colname)s' -exec('alter table %(tname_quoted)s drop constraint ' + @const_name)""" % { - 'tname': tname, - 'colname': colname, - 'tname_quoted': format_table_name(compiler, tname, None), - } - - - -@compiles(AddColumn, 'mssql') -def visit_add_column(element, compiler, **kw): - return "%s %s" % ( - alter_table(compiler, element.table_name, element.schema), - mssql_add_column(compiler, element.column, **kw) - ) - -def mssql_add_column(compiler, column, **kw): - return "ADD %s" % compiler.get_column_specification(column, **kw) - -@compiles(ColumnNullable, 'mssql') -def visit_column_nullable(element, compiler, **kw): - return "%s %s %s %s" % ( - alter_table(compiler, element.table_name, element.schema), - alter_column(compiler, element.column_name), - format_type(compiler, element.existing_type), - "NULL" if element.nullable else "NOT NULL" - ) - -@compiles(ColumnDefault, 'mssql') -def visit_column_default(element, compiler, **kw): - # TODO: there can also be a named constraint - # with ADD CONSTRAINT here - return "%s ADD DEFAULT %s FOR %s" % ( - alter_table(compiler, element.table_name, element.schema), - format_server_default(compiler, element.default), - format_column_name(compiler, element.column_name) - ) - -@compiles(ColumnName, 'mssql') -def visit_rename_column(element, compiler, **kw): - return "EXEC sp_rename '%s.%s', %s, 'COLUMN'" % ( - format_table_name(compiler, element.table_name, element.schema), - format_column_name(compiler, element.column_name), - format_column_name(compiler, element.newname) - ) - -@compiles(ColumnType, 'mssql') -def visit_column_type(element, compiler, **kw): - return "%s %s %s" % ( - alter_table(compiler, element.table_name, element.schema), - alter_column(compiler, element.column_name), - format_type(compiler, element.type_) - ) - diff --git a/Linux_i686/lib/python2.7/site-packages/alembic/ddl/mysql.py b/Linux_i686/lib/python2.7/site-packages/alembic/ddl/mysql.py deleted file mode 100644 index 96f42f3..0000000 --- a/Linux_i686/lib/python2.7/site-packages/alembic/ddl/mysql.py +++ /dev/null @@ -1,212 +0,0 @@ -from sqlalchemy.ext.compiler import compiles -from sqlalchemy import types as sqltypes -from sqlalchemy import schema - -from ..compat import string_types -from .. import util -from .impl import DefaultImpl -from .base import ColumnNullable, ColumnName, ColumnDefault, \ - ColumnType, AlterColumn, format_column_name, \ - format_server_default -from .base import alter_table - -class MySQLImpl(DefaultImpl): - __dialect__ = 'mysql' - - transactional_ddl = False - - def alter_column(self, table_name, column_name, - nullable=None, - server_default=False, - name=None, - type_=None, - schema=None, - autoincrement=None, - existing_type=None, - existing_server_default=None, - existing_nullable=None, - existing_autoincrement=None - ): - if name is not None: - self._exec( - MySQLChangeColumn( - table_name, column_name, - schema=schema, - newname=name, - nullable=nullable if nullable is not None else - existing_nullable - if existing_nullable is not None - else True, - type_=type_ if type_ is not None else existing_type, - default=server_default if server_default is not False - else existing_server_default, - autoincrement=autoincrement if autoincrement is not None - else existing_autoincrement - ) - ) - elif nullable is not None or \ - type_ is not None or \ - autoincrement is not None: - self._exec( - MySQLModifyColumn( - table_name, column_name, - schema=schema, - newname=name if name is not None else column_name, - nullable=nullable if nullable is not None else - existing_nullable - if existing_nullable is not None - else True, - type_=type_ if type_ is not None else existing_type, - default=server_default if server_default is not False - else existing_server_default, - autoincrement=autoincrement if autoincrement is not None - else existing_autoincrement - ) - ) - elif server_default is not False: - self._exec( - MySQLAlterDefault( - table_name, column_name, server_default, - schema=schema, - ) - ) - - def correct_for_autogen_constraints(self, conn_unique_constraints, - conn_indexes, - metadata_unique_constraints, - metadata_indexes): - removed = set() - for idx in list(conn_indexes): - # MySQL puts implicit indexes on FK columns, even if - # composite and even if MyISAM, so can't check this too easily - if idx.name == idx.columns.keys()[0]: - conn_indexes.remove(idx) - removed.add(idx.name) - - # then remove indexes from the "metadata_indexes" - # that we've removed from reflected, otherwise they come out - # as adds (see #202) - for idx in list(metadata_indexes): - if idx.name in removed: - metadata_indexes.remove(idx) - -class MySQLAlterDefault(AlterColumn): - def __init__(self, name, column_name, default, schema=None): - super(AlterColumn, self).__init__(name, schema=schema) - self.column_name = column_name - self.default = default - - -class MySQLChangeColumn(AlterColumn): - def __init__(self, name, column_name, schema=None, - newname=None, - type_=None, - nullable=None, - default=False, - autoincrement=None): - super(AlterColumn, self).__init__(name, schema=schema) - self.column_name = column_name - self.nullable = nullable - self.newname = newname - self.default = default - self.autoincrement = autoincrement - if type_ is None: - raise util.CommandError( - "All MySQL CHANGE/MODIFY COLUMN operations " - "require the existing type." - ) - - self.type_ = sqltypes.to_instance(type_) - -class MySQLModifyColumn(MySQLChangeColumn): - pass - - -@compiles(ColumnNullable, 'mysql') -@compiles(ColumnName, 'mysql') -@compiles(ColumnDefault, 'mysql') -@compiles(ColumnType, 'mysql') -def _mysql_doesnt_support_individual(element, compiler, **kw): - raise NotImplementedError( - "Individual alter column constructs not supported by MySQL" - ) - - -@compiles(MySQLAlterDefault, "mysql") -def _mysql_alter_default(element, compiler, **kw): - return "%s ALTER COLUMN %s %s" % ( - alter_table(compiler, element.table_name, element.schema), - format_column_name(compiler, element.column_name), - "SET DEFAULT %s" % format_server_default(compiler, element.default) - if element.default is not None - else "DROP DEFAULT" - ) - -@compiles(MySQLModifyColumn, "mysql") -def _mysql_modify_column(element, compiler, **kw): - return "%s MODIFY %s %s" % ( - alter_table(compiler, element.table_name, element.schema), - format_column_name(compiler, element.column_name), - _mysql_colspec( - compiler, - nullable=element.nullable, - server_default=element.default, - type_=element.type_, - autoincrement=element.autoincrement - ), - ) - - -@compiles(MySQLChangeColumn, "mysql") -def _mysql_change_column(element, compiler, **kw): - return "%s CHANGE %s %s %s" % ( - alter_table(compiler, element.table_name, element.schema), - format_column_name(compiler, element.column_name), - format_column_name(compiler, element.newname), - _mysql_colspec( - compiler, - nullable=element.nullable, - server_default=element.default, - type_=element.type_, - autoincrement=element.autoincrement - ), - ) - -def _render_value(compiler, expr): - if isinstance(expr, string_types): - return "'%s'" % expr - else: - return compiler.sql_compiler.process(expr) - -def _mysql_colspec(compiler, nullable, server_default, type_, - autoincrement): - spec = "%s %s" % ( - compiler.dialect.type_compiler.process(type_), - "NULL" if nullable else "NOT NULL" - ) - if autoincrement: - spec += " AUTO_INCREMENT" - if server_default is not False and server_default is not None: - spec += " DEFAULT %s" % _render_value(compiler, server_default) - - return spec - -@compiles(schema.DropConstraint, "mysql") -def _mysql_drop_constraint(element, compiler, **kw): - """Redefine SQLAlchemy's drop constraint to - raise errors for invalid constraint type.""" - - constraint = element.element - if isinstance(constraint, (schema.ForeignKeyConstraint, - schema.PrimaryKeyConstraint, - schema.UniqueConstraint) - ): - return compiler.visit_drop_constraint(element, **kw) - elif isinstance(constraint, schema.CheckConstraint): - raise NotImplementedError( - "MySQL does not support CHECK constraints.") - else: - raise NotImplementedError( - "No generic 'DROP CONSTRAINT' in MySQL - " - "please specify constraint type") - diff --git a/Linux_i686/lib/python2.7/site-packages/alembic/ddl/oracle.py b/Linux_i686/lib/python2.7/site-packages/alembic/ddl/oracle.py deleted file mode 100644 index 28eb246..0000000 --- a/Linux_i686/lib/python2.7/site-packages/alembic/ddl/oracle.py +++ /dev/null @@ -1,77 +0,0 @@ -from sqlalchemy.ext.compiler import compiles - -from .impl import DefaultImpl -from .base import alter_table, AddColumn, ColumnName, \ - format_column_name, ColumnNullable, \ - format_server_default,ColumnDefault, format_type, ColumnType - -class OracleImpl(DefaultImpl): - __dialect__ = 'oracle' - transactional_ddl = True - batch_separator = "/" - command_terminator = "" - - def __init__(self, *arg, **kw): - super(OracleImpl, self).__init__(*arg, **kw) - self.batch_separator = self.context_opts.get( - "oracle_batch_separator", - self.batch_separator) - - def _exec(self, construct, *args, **kw): - super(OracleImpl, self)._exec(construct, *args, **kw) - if self.as_sql and self.batch_separator: - self.static_output(self.batch_separator) - - def emit_begin(self): - self._exec("SET TRANSACTION READ WRITE") - - def emit_commit(self): - self._exec("COMMIT") - -@compiles(AddColumn, 'oracle') -def visit_add_column(element, compiler, **kw): - return "%s %s" % ( - alter_table(compiler, element.table_name, element.schema), - add_column(compiler, element.column, **kw), - ) - -@compiles(ColumnNullable, 'oracle') -def visit_column_nullable(element, compiler, **kw): - return "%s %s %s" % ( - alter_table(compiler, element.table_name, element.schema), - alter_column(compiler, element.column_name), - "NULL" if element.nullable else "NOT NULL" - ) - -@compiles(ColumnType, 'oracle') -def visit_column_type(element, compiler, **kw): - return "%s %s %s" % ( - alter_table(compiler, element.table_name, element.schema), - alter_column(compiler, element.column_name), - "%s" % format_type(compiler, element.type_) - ) - -@compiles(ColumnName, 'oracle') -def visit_column_name(element, compiler, **kw): - return "%s RENAME COLUMN %s TO %s" % ( - alter_table(compiler, element.table_name, element.schema), - format_column_name(compiler, element.column_name), - format_column_name(compiler, element.newname) - ) - -@compiles(ColumnDefault, 'oracle') -def visit_column_default(element, compiler, **kw): - return "%s %s %s" % ( - alter_table(compiler, element.table_name, element.schema), - alter_column(compiler, element.column_name), - "DEFAULT %s" % - format_server_default(compiler, element.default) - if element.default is not None - else "DEFAULT NULL" - ) - -def alter_column(compiler, name): - return 'MODIFY %s' % format_column_name(compiler, name) - -def add_column(compiler, column, **kw): - return "ADD %s" % compiler.get_column_specification(column, **kw) diff --git a/Linux_i686/lib/python2.7/site-packages/alembic/ddl/postgresql.py b/Linux_i686/lib/python2.7/site-packages/alembic/ddl/postgresql.py deleted file mode 100644 index 5ca0d1f..0000000 --- a/Linux_i686/lib/python2.7/site-packages/alembic/ddl/postgresql.py +++ /dev/null @@ -1,43 +0,0 @@ -import re - -from sqlalchemy import types as sqltypes - -from .base import compiles, alter_table, format_table_name, RenameTable -from .impl import DefaultImpl - -class PostgresqlImpl(DefaultImpl): - __dialect__ = 'postgresql' - transactional_ddl = True - - def compare_server_default(self, inspector_column, - metadata_column, - rendered_metadata_default, - rendered_inspector_default): - - # don't do defaults for SERIAL columns - if metadata_column.primary_key and \ - metadata_column is metadata_column.table._autoincrement_column: - return False - - conn_col_default = rendered_inspector_default - - if None in (conn_col_default, rendered_metadata_default): - return conn_col_default != rendered_metadata_default - - if metadata_column.type._type_affinity is not sqltypes.String: - rendered_metadata_default = re.sub(r"^'|'$", "", rendered_metadata_default) - - return not self.connection.scalar( - "SELECT %s = %s" % ( - conn_col_default, - rendered_metadata_default - ) - ) - - -@compiles(RenameTable, "postgresql") -def visit_rename_table(element, compiler, **kw): - return "%s RENAME TO %s" % ( - alter_table(compiler, element.table_name, element.schema), - format_table_name(compiler, element.new_table_name, None) - ) diff --git a/Linux_i686/lib/python2.7/site-packages/alembic/ddl/sqlite.py b/Linux_i686/lib/python2.7/site-packages/alembic/ddl/sqlite.py deleted file mode 100644 index a3c73ce..0000000 --- a/Linux_i686/lib/python2.7/site-packages/alembic/ddl/sqlite.py +++ /dev/null @@ -1,73 +0,0 @@ -from .. import util -from .impl import DefaultImpl - -#from sqlalchemy.ext.compiler import compiles -#from .base import AddColumn, alter_table -#from sqlalchemy.schema import AddConstraint - -class SQLiteImpl(DefaultImpl): - __dialect__ = 'sqlite' - - transactional_ddl = False - """SQLite supports transactional DDL, but pysqlite does not: - see: http://bugs.python.org/issue10740 - """ - - def add_constraint(self, const): - # attempt to distinguish between an - # auto-gen constraint and an explicit one - if const._create_rule is None: - raise NotImplementedError( - "No support for ALTER of constraints in SQLite dialect") - elif const._create_rule(self): - util.warn("Skipping unsupported ALTER for " - "creation of implicit constraint") - - - def drop_constraint(self, const): - if const._create_rule is None: - raise NotImplementedError( - "No support for ALTER of constraints in SQLite dialect") - - def correct_for_autogen_constraints(self, conn_unique_constraints, conn_indexes, - metadata_unique_constraints, - metadata_indexes): - - def uq_sig(uq): - return tuple(sorted(uq.columns.keys())) - - conn_unique_sigs = set( - uq_sig(uq) - for uq in conn_unique_constraints - ) - - for idx in list(metadata_unique_constraints): - # SQLite backend can't report on unnamed UNIQUE constraints, - # so remove these, unless we see an exact signature match - if idx.name is None and uq_sig(idx) not in conn_unique_sigs: - metadata_unique_constraints.remove(idx) - - for idx in list(conn_unique_constraints): - # just in case we fix the backend such that it does report - # on them, blow them out of the reflected collection too otherwise - # they will come up as removed. if the backend supports this now, - # add a version check here for the dialect. - if idx.name is None: - conn_uniques.remove(idx) - -#@compiles(AddColumn, 'sqlite') -#def visit_add_column(element, compiler, **kw): -# return "%s %s" % ( -# alter_table(compiler, element.table_name, element.schema), -# add_column(compiler, element.column, **kw) -# ) - - -#def add_column(compiler, column, **kw): -# text = "ADD COLUMN %s" % compiler.get_column_specification(column, **kw) -# # need to modify SQLAlchemy so that the CHECK associated with a Boolean -# # or Enum gets placed as part of the column constraints, not the Table -# # see ticket 98 -# for const in column.constraints: -# text += compiler.process(AddConstraint(const)) -# return text diff --git a/Linux_i686/lib/python2.7/site-packages/alembic/environment.py b/Linux_i686/lib/python2.7/site-packages/alembic/environment.py deleted file mode 100644 index f8875a2..0000000 --- a/Linux_i686/lib/python2.7/site-packages/alembic/environment.py +++ /dev/null @@ -1,791 +0,0 @@ -from .operations import Operations -from .migration import MigrationContext -from . import util - -class EnvironmentContext(object): - """Represent the state made available to an ``env.py`` script. - - :class:`.EnvironmentContext` is normally instantiated - by the commands present in the :mod:`alembic.command` - module. From within an ``env.py`` script, the current - :class:`.EnvironmentContext` is available via the - ``alembic.context`` datamember. - - :class:`.EnvironmentContext` is also a Python context - manager, that is, is intended to be used using the - ``with:`` statement. A typical use of :class:`.EnvironmentContext`:: - - from alembic.config import Config - from alembic.script import ScriptDirectory - - config = Config() - config.set_main_option("script_location", "myapp:migrations") - script = ScriptDirectory.from_config(config) - - def my_function(rev, context): - '''do something with revision "rev", which - will be the current database revision, - and "context", which is the MigrationContext - that the env.py will create''' - - with EnvironmentContext( - config, - script, - fn = my_function, - as_sql = False, - starting_rev = 'base', - destination_rev = 'head', - tag = "sometag" - ): - script.run_env() - - The above script will invoke the ``env.py`` script - within the migration environment. If and when ``env.py`` - calls :meth:`.MigrationContext.run_migrations`, the - ``my_function()`` function above will be called - by the :class:`.MigrationContext`, given the context - itself as well as the current revision in the database. - - .. note:: - - For most API usages other than full blown - invocation of migration scripts, the :class:`.MigrationContext` - and :class:`.ScriptDirectory` objects can be created and - used directly. The :class:`.EnvironmentContext` object - is *only* needed when you need to actually invoke the - ``env.py`` module present in the migration environment. - - """ - - _migration_context = None - - config = None - """An instance of :class:`.Config` representing the - configuration file contents as well as other variables - set programmatically within it.""" - - script = None - """An instance of :class:`.ScriptDirectory` which provides - programmatic access to version files within the ``versions/`` - directory. - - """ - - def __init__(self, config, script, **kw): - """Construct a new :class:`.EnvironmentContext`. - - :param config: a :class:`.Config` instance. - :param script: a :class:`.ScriptDirectory` instance. - :param \**kw: keyword options that will be ultimately - passed along to the :class:`.MigrationContext` when - :meth:`.EnvironmentContext.configure` is called. - - """ - self.config = config - self.script = script - self.context_opts = kw - - def __enter__(self): - """Establish a context which provides a - :class:`.EnvironmentContext` object to - env.py scripts. - - The :class:`.EnvironmentContext` will - be made available as ``from alembic import context``. - - """ - from .context import _install_proxy - _install_proxy(self) - return self - - def __exit__(self, *arg, **kw): - from . import context, op - context._remove_proxy() - op._remove_proxy() - - def is_offline_mode(self): - """Return True if the current migrations environment - is running in "offline mode". - - This is ``True`` or ``False`` depending - on the the ``--sql`` flag passed. - - This function does not require that the :class:`.MigrationContext` - has been configured. - - """ - return self.context_opts.get('as_sql', False) - - def is_transactional_ddl(self): - """Return True if the context is configured to expect a - transactional DDL capable backend. - - This defaults to the type of database in use, and - can be overridden by the ``transactional_ddl`` argument - to :meth:`.configure` - - This function requires that a :class:`.MigrationContext` - has first been made available via :meth:`.configure`. - - """ - return self.get_context().impl.transactional_ddl - - def requires_connection(self): - return not self.is_offline_mode() - - def get_head_revision(self): - """Return the hex identifier of the 'head' revision. - - This function does not require that the :class:`.MigrationContext` - has been configured. - - """ - return self.script._as_rev_number("head") - - def get_starting_revision_argument(self): - """Return the 'starting revision' argument, - if the revision was passed using ``start:end``. - - This is only meaningful in "offline" mode. - Returns ``None`` if no value is available - or was configured. - - This function does not require that the :class:`.MigrationContext` - has been configured. - - """ - if self._migration_context is not None: - return self.script._as_rev_number( - self.get_context()._start_from_rev) - elif 'starting_rev' in self.context_opts: - return self.script._as_rev_number( - self.context_opts['starting_rev']) - else: - raise util.CommandError( - "No starting revision argument is available.") - - def get_revision_argument(self): - """Get the 'destination' revision argument. - - This is typically the argument passed to the - ``upgrade`` or ``downgrade`` command. - - If it was specified as ``head``, the actual - version number is returned; if specified - as ``base``, ``None`` is returned. - - This function does not require that the :class:`.MigrationContext` - has been configured. - - """ - return self.script._as_rev_number( - self.context_opts['destination_rev']) - - def get_tag_argument(self): - """Return the value passed for the ``--tag`` argument, if any. - - The ``--tag`` argument is not used directly by Alembic, - but is available for custom ``env.py`` configurations that - wish to use it; particularly for offline generation scripts - that wish to generate tagged filenames. - - This function does not require that the :class:`.MigrationContext` - has been configured. - - .. seealso:: - - :meth:`.EnvironmentContext.get_x_argument` - a newer and more - open ended system of extending ``env.py`` scripts via the command - line. - - """ - return self.context_opts.get('tag', None) - - def get_x_argument(self, as_dictionary=False): - """Return the value(s) passed for the ``-x`` argument, if any. - - The ``-x`` argument is an open ended flag that allows any user-defined - value or values to be passed on the command line, then available - here for consumption by a custom ``env.py`` script. - - The return value is a list, returned directly from the ``argparse`` - structure. If ``as_dictionary=True`` is passed, the ``x`` arguments - are parsed using ``key=value`` format into a dictionary that is - then returned. - - For example, to support passing a database URL on the command line, - the standard ``env.py`` script can be modified like this:: - - cmd_line_url = context.get_x_argument(as_dictionary=True).get('dbname') - if cmd_line_url: - engine = create_engine(cmd_line_url) - else: - engine = engine_from_config( - config.get_section(config.config_ini_section), - prefix='sqlalchemy.', - poolclass=pool.NullPool) - - This then takes effect by running the ``alembic`` script as:: - - alembic -x dbname=postgresql://user:pass@host/dbname upgrade head - - This function does not require that the :class:`.MigrationContext` - has been configured. - - .. versionadded:: 0.6.0 - - .. seealso:: - - :meth:`.EnvironmentContext.get_tag_argument` - - :attr:`.Config.cmd_opts` - - """ - if self.config.cmd_opts is not None: - value = self.config.cmd_opts.x or [] - else: - value = [] - if as_dictionary: - value = dict( - arg.split('=', 1) for arg in value - ) - return value - - def configure(self, - connection=None, - url=None, - dialect_name=None, - transactional_ddl=None, - transaction_per_migration=False, - output_buffer=None, - starting_rev=None, - tag=None, - template_args=None, - target_metadata=None, - include_symbol=None, - include_object=None, - include_schemas=False, - compare_type=False, - compare_server_default=False, - render_item=None, - upgrade_token="upgrades", - downgrade_token="downgrades", - alembic_module_prefix="op.", - sqlalchemy_module_prefix="sa.", - user_module_prefix=None, - **kw - ): - """Configure a :class:`.MigrationContext` within this - :class:`.EnvironmentContext` which will provide database - connectivity and other configuration to a series of - migration scripts. - - Many methods on :class:`.EnvironmentContext` require that - this method has been called in order to function, as they - ultimately need to have database access or at least access - to the dialect in use. Those which do are documented as such. - - The important thing needed by :meth:`.configure` is a - means to determine what kind of database dialect is in use. - An actual connection to that database is needed only if - the :class:`.MigrationContext` is to be used in - "online" mode. - - If the :meth:`.is_offline_mode` function returns ``True``, - then no connection is needed here. Otherwise, the - ``connection`` parameter should be present as an - instance of :class:`sqlalchemy.engine.Connection`. - - This function is typically called from the ``env.py`` - script within a migration environment. It can be called - multiple times for an invocation. The most recent - :class:`~sqlalchemy.engine.Connection` - for which it was called is the one that will be operated upon - by the next call to :meth:`.run_migrations`. - - General parameters: - - :param connection: a :class:`~sqlalchemy.engine.Connection` - to use - for SQL execution in "online" mode. When present, is also - used to determine the type of dialect in use. - :param url: a string database url, or a - :class:`sqlalchemy.engine.url.URL` object. - The type of dialect to be used will be derived from this if - ``connection`` is not passed. - :param dialect_name: string name of a dialect, such as - "postgresql", "mssql", etc. - The type of dialect to be used will be derived from this if - ``connection`` and ``url`` are not passed. - :param transactional_ddl: Force the usage of "transactional" - DDL on or off; - this otherwise defaults to whether or not the dialect in - use supports it. - :param transaction_per_migration: if True, nest each migration script - in a transaction rather than the full series of migrations to - run. - - .. versionadded:: 0.6.5 - - :param output_buffer: a file-like object that will be used - for textual output - when the ``--sql`` option is used to generate SQL scripts. - Defaults to - ``sys.stdout`` if not passed here and also not present on - the :class:`.Config` - object. The value here overrides that of the :class:`.Config` - object. - :param output_encoding: when using ``--sql`` to generate SQL - scripts, apply this encoding to the string output. - - .. versionadded:: 0.5.0 - - :param starting_rev: Override the "starting revision" argument - when using ``--sql`` mode. - :param tag: a string tag for usage by custom ``env.py`` scripts. - Set via the ``--tag`` option, can be overridden here. - :param template_args: dictionary of template arguments which - will be added to the template argument environment when - running the "revision" command. Note that the script environment - is only run within the "revision" command if the --autogenerate - option is used, or if the option "revision_environment=true" - is present in the alembic.ini file. - - .. versionadded:: 0.3.3 - - :param version_table: The name of the Alembic version table. - The default is ``'alembic_version'``. - :param version_table_schema: Optional schema to place version - table within. - - .. versionadded:: 0.5.0 - - Parameters specific to the autogenerate feature, when - ``alembic revision`` is run with the ``--autogenerate`` feature: - - :param target_metadata: a :class:`sqlalchemy.schema.MetaData` - object that - will be consulted during autogeneration. The tables present - will be compared against - what is locally available on the target - :class:`~sqlalchemy.engine.Connection` - to produce candidate upgrade/downgrade operations. - - :param compare_type: Indicates type comparison behavior during - an autogenerate - operation. Defaults to ``False`` which disables type - comparison. Set to - ``True`` to turn on default type comparison, which has varied - accuracy depending on backend. - - To customize type comparison behavior, a callable may be - specified which - can filter type comparisons during an autogenerate operation. - The format of this callable is:: - - def my_compare_type(context, inspected_column, - metadata_column, inspected_type, metadata_type): - # return True if the types are different, - # False if not, or None to allow the default implementation - # to compare these types - return None - - context.configure( - # ... - compare_type = my_compare_type - ) - - - ``inspected_column`` is a :class:`sqlalchemy.schema.Column` as returned by - :meth:`sqlalchemy.engine.reflection.Inspector.reflecttable`, whereas - ``metadata_column`` is a :class:`sqlalchemy.schema.Column` from - the local model environment. - - A return value of ``None`` indicates to allow default type - comparison to proceed. - - .. seealso:: - - :paramref:`.EnvironmentContext.configure.compare_server_default` - - :param compare_server_default: Indicates server default comparison - behavior during - an autogenerate operation. Defaults to ``False`` which disables - server default - comparison. Set to ``True`` to turn on server default comparison, - which has - varied accuracy depending on backend. - - To customize server default comparison behavior, a callable may - be specified - which can filter server default comparisons during an - autogenerate operation. - defaults during an autogenerate operation. The format of this - callable is:: - - def my_compare_server_default(context, inspected_column, - metadata_column, inspected_default, metadata_default, - rendered_metadata_default): - # return True if the defaults are different, - # False if not, or None to allow the default implementation - # to compare these defaults - return None - - context.configure( - # ... - compare_server_default = my_compare_server_default - ) - - ``inspected_column`` is a dictionary structure as returned by - :meth:`sqlalchemy.engine.reflection.Inspector.get_columns`, whereas - ``metadata_column`` is a :class:`sqlalchemy.schema.Column` from - the local model environment. - - A return value of ``None`` indicates to allow default server default - comparison - to proceed. Note that some backends such as Postgresql actually - execute - the two defaults on the database side to compare for equivalence. - - .. seealso:: - - :paramref:`.EnvironmentContext.configure.compare_type` - - :param include_object: A callable function which is given - the chance to return ``True`` or ``False`` for any object, - indicating if the given object should be considered in the - autogenerate sweep. - - The function accepts the following positional arguments: - - * ``object``: a :class:`~sqlalchemy.schema.SchemaItem` object such as a - :class:`~sqlalchemy.schema.Table` or :class:`~sqlalchemy.schema.Column` - object - * ``name``: the name of the object. This is typically available - via ``object.name``. - * ``type``: a string describing the type of object; currently - ``"table"`` or ``"column"`` - * ``reflected``: ``True`` if the given object was produced based on - table reflection, ``False`` if it's from a local :class:`.MetaData` - object. - * ``compare_to``: the object being compared against, if available, - else ``None``. - - E.g.:: - - def include_object(object, name, type_, reflected, compare_to): - if (type_ == "column" and - not reflected and - object.info.get("skip_autogenerate", False)): - return False - else: - return True - - context.configure( - # ... - include_object = include_object - ) - - :paramref:`.EnvironmentContext.configure.include_object` can also - be used to filter on specific schemas to include or omit, when - the :paramref:`.EnvironmentContext.configure.include_schemas` - flag is set to ``True``. The :attr:`.Table.schema` attribute - on each :class:`.Table` object reflected will indicate the name of the - schema from which the :class:`.Table` originates. - - .. versionadded:: 0.6.0 - - .. seealso:: - - :paramref:`.EnvironmentContext.configure.include_schemas` - - :param include_symbol: A callable function which, given a table name - and schema name (may be ``None``), returns ``True`` or ``False``, indicating - if the given table should be considered in the autogenerate sweep. - - .. deprecated:: 0.6.0 :paramref:`.EnvironmentContext.configure.include_symbol` - is superceded by the more generic - :paramref:`.EnvironmentContext.configure.include_object` - parameter. - - E.g.:: - - def include_symbol(tablename, schema): - return tablename not in ("skip_table_one", "skip_table_two") - - context.configure( - # ... - include_symbol = include_symbol - ) - - .. seealso:: - - :paramref:`.EnvironmentContext.configure.include_schemas` - - :paramref:`.EnvironmentContext.configure.include_object` - - :param include_schemas: If True, autogenerate will scan across - all schemas located by the SQLAlchemy - :meth:`~sqlalchemy.engine.reflection.Inspector.get_schema_names` - method, and include all differences in tables found across all - those schemas. When using this option, you may want to also - use the :paramref:`.EnvironmentContext.configure.include_object` - option to specify a callable which - can filter the tables/schemas that get included. - - .. versionadded :: 0.4.0 - - .. seealso:: - - :paramref:`.EnvironmentContext.configure.include_object` - - :param render_item: Callable that can be used to override how - any schema item, i.e. column, constraint, type, - etc., is rendered for autogenerate. The callable receives a - string describing the type of object, the object, and - the autogen context. If it returns False, the - default rendering method will be used. If it returns None, - the item will not be rendered in the context of a Table - construct, that is, can be used to skip columns or constraints - within op.create_table():: - - def my_render_column(type_, col, autogen_context): - if type_ == "column" and isinstance(col, MySpecialCol): - return repr(col) - else: - return False - - context.configure( - # ... - render_item = my_render_column - ) - - Available values for the type string include: ``"column"``, - ``"primary_key"``, ``"foreign_key"``, ``"unique"``, ``"check"``, - ``"type"``, ``"server_default"``. - - .. versionadded:: 0.5.0 - - .. seealso:: - - :ref:`autogen_render_types` - - :param upgrade_token: When autogenerate completes, the text of the - candidate upgrade operations will be present in this template - variable when ``script.py.mako`` is rendered. Defaults to - ``upgrades``. - :param downgrade_token: When autogenerate completes, the text of the - candidate downgrade operations will be present in this - template variable when ``script.py.mako`` is rendered. Defaults to - ``downgrades``. - - :param alembic_module_prefix: When autogenerate refers to Alembic - :mod:`alembic.operations` constructs, this prefix will be used - (i.e. ``op.create_table``) Defaults to "``op.``". - Can be ``None`` to indicate no prefix. - - :param sqlalchemy_module_prefix: When autogenerate refers to - SQLAlchemy - :class:`~sqlalchemy.schema.Column` or type classes, this prefix - will be used - (i.e. ``sa.Column("somename", sa.Integer)``) Defaults to "``sa.``". - Can be ``None`` to indicate no prefix. - Note that when dialect-specific types are rendered, autogenerate - will render them using the dialect module name, i.e. ``mssql.BIT()``, - ``postgresql.UUID()``. - - :param user_module_prefix: When autogenerate refers to a SQLAlchemy - type (e.g. :class:`.TypeEngine`) where the module name is not - under the ``sqlalchemy`` namespace, this prefix will be used - within autogenerate, if non-``None``; if left at its default of - ``None``, the - :paramref:`.EnvironmentContext.configure.sqlalchemy_module_prefix` - is used instead. - - .. versionadded:: 0.6.3 added - :paramref:`.EnvironmentContext.configure.user_module_prefix` - - .. seealso:: - - :ref:`autogen_module_prefix` - - Parameters specific to individual backends: - - :param mssql_batch_separator: The "batch separator" which will - be placed between each statement when generating offline SQL Server - migrations. Defaults to ``GO``. Note this is in addition to the - customary semicolon ``;`` at the end of each statement; SQL Server - considers the "batch separator" to denote the end of an - individual statement execution, and cannot group certain - dependent operations in one step. - :param oracle_batch_separator: The "batch separator" which will - be placed between each statement when generating offline - Oracle migrations. Defaults to ``/``. Oracle doesn't add a - semicolon between statements like most other backends. - - """ - opts = self.context_opts - if transactional_ddl is not None: - opts["transactional_ddl"] = transactional_ddl - if output_buffer is not None: - opts["output_buffer"] = output_buffer - elif self.config.output_buffer is not None: - opts["output_buffer"] = self.config.output_buffer - if starting_rev: - opts['starting_rev'] = starting_rev - if tag: - opts['tag'] = tag - if template_args and 'template_args' in opts: - opts['template_args'].update(template_args) - opts["transaction_per_migration"] = transaction_per_migration - opts['target_metadata'] = target_metadata - opts['include_symbol'] = include_symbol - opts['include_object'] = include_object - opts['include_schemas'] = include_schemas - opts['upgrade_token'] = upgrade_token - opts['downgrade_token'] = downgrade_token - opts['sqlalchemy_module_prefix'] = sqlalchemy_module_prefix - opts['alembic_module_prefix'] = alembic_module_prefix - opts['user_module_prefix'] = user_module_prefix - if render_item is not None: - opts['render_item'] = render_item - if compare_type is not None: - opts['compare_type'] = compare_type - if compare_server_default is not None: - opts['compare_server_default'] = compare_server_default - opts['script'] = self.script - - opts.update(kw) - - self._migration_context = MigrationContext.configure( - connection=connection, - url=url, - dialect_name=dialect_name, - opts=opts - ) - - def run_migrations(self, **kw): - """Run migrations as determined by the current command line - configuration - as well as versioning information present (or not) in the current - database connection (if one is present). - - The function accepts optional ``**kw`` arguments. If these are - passed, they are sent directly to the ``upgrade()`` and - ``downgrade()`` - functions within each target revision file. By modifying the - ``script.py.mako`` file so that the ``upgrade()`` and ``downgrade()`` - functions accept arguments, parameters can be passed here so that - contextual information, usually information to identify a particular - database in use, can be passed from a custom ``env.py`` script - to the migration functions. - - This function requires that a :class:`.MigrationContext` has - first been made available via :meth:`.configure`. - - """ - with Operations.context(self._migration_context): - self.get_context().run_migrations(**kw) - - def execute(self, sql, execution_options=None): - """Execute the given SQL using the current change context. - - The behavior of :meth:`.execute` is the same - as that of :meth:`.Operations.execute`. Please see that - function's documentation for full detail including - caveats and limitations. - - This function requires that a :class:`.MigrationContext` has - first been made available via :meth:`.configure`. - - """ - self.get_context().execute(sql, - execution_options=execution_options) - - def static_output(self, text): - """Emit text directly to the "offline" SQL stream. - - Typically this is for emitting comments that - start with --. The statement is not treated - as a SQL execution, no ; or batch separator - is added, etc. - - """ - self.get_context().impl.static_output(text) - - - def begin_transaction(self): - """Return a context manager that will - enclose an operation within a "transaction", - as defined by the environment's offline - and transactional DDL settings. - - e.g.:: - - with context.begin_transaction(): - context.run_migrations() - - :meth:`.begin_transaction` is intended to - "do the right thing" regardless of - calling context: - - * If :meth:`.is_transactional_ddl` is ``False``, - returns a "do nothing" context manager - which otherwise produces no transactional - state or directives. - * If :meth:`.is_offline_mode` is ``True``, - returns a context manager that will - invoke the :meth:`.DefaultImpl.emit_begin` - and :meth:`.DefaultImpl.emit_commit` - methods, which will produce the string - directives ``BEGIN`` and ``COMMIT`` on - the output stream, as rendered by the - target backend (e.g. SQL Server would - emit ``BEGIN TRANSACTION``). - * Otherwise, calls :meth:`sqlalchemy.engine.Connection.begin` - on the current online connection, which - returns a :class:`sqlalchemy.engine.Transaction` - object. This object demarcates a real - transaction and is itself a context manager, - which will roll back if an exception - is raised. - - Note that a custom ``env.py`` script which - has more specific transactional needs can of course - manipulate the :class:`~sqlalchemy.engine.Connection` - directly to produce transactional state in "online" - mode. - - """ - - return self.get_context().begin_transaction() - - - def get_context(self): - """Return the current :class:`.MigrationContext` object. - - If :meth:`.EnvironmentContext.configure` has not been - called yet, raises an exception. - - """ - - if self._migration_context is None: - raise Exception("No context has been configured yet.") - return self._migration_context - - def get_bind(self): - """Return the current 'bind'. - - In "online" mode, this is the - :class:`sqlalchemy.engine.Connection` currently being used - to emit SQL to the database. - - This function requires that a :class:`.MigrationContext` - has first been made available via :meth:`.configure`. - - """ - return self.get_context().bind - - def get_impl(self): - return self.get_context().impl - diff --git a/Linux_i686/lib/python2.7/site-packages/alembic/migration.py b/Linux_i686/lib/python2.7/site-packages/alembic/migration.py deleted file mode 100644 index e554515..0000000 --- a/Linux_i686/lib/python2.7/site-packages/alembic/migration.py +++ /dev/null @@ -1,352 +0,0 @@ -import io -import logging -import sys -from contextlib import contextmanager - - -from sqlalchemy import MetaData, Table, Column, String, literal_column -from sqlalchemy import create_engine -from sqlalchemy.engine import url as sqla_url - -from .compat import callable, EncodedIO -from . import ddl, util - -log = logging.getLogger(__name__) - -class MigrationContext(object): - """Represent the database state made available to a migration - script. - - :class:`.MigrationContext` is the front end to an actual - database connection, or alternatively a string output - stream given a particular database dialect, - from an Alembic perspective. - - When inside the ``env.py`` script, the :class:`.MigrationContext` - is available via the - :meth:`.EnvironmentContext.get_context` method, - which is available at ``alembic.context``:: - - # from within env.py script - from alembic import context - migration_context = context.get_context() - - For usage outside of an ``env.py`` script, such as for - utility routines that want to check the current version - in the database, the :meth:`.MigrationContext.configure` - method to create new :class:`.MigrationContext` objects. - For example, to get at the current revision in the - database using :meth:`.MigrationContext.get_current_revision`:: - - # in any application, outside of an env.py script - from alembic.migration import MigrationContext - from sqlalchemy import create_engine - - engine = create_engine("postgresql://mydatabase") - conn = engine.connect() - - context = MigrationContext.configure(conn) - current_rev = context.get_current_revision() - - The above context can also be used to produce - Alembic migration operations with an :class:`.Operations` - instance:: - - # in any application, outside of the normal Alembic environment - from alembic.operations import Operations - op = Operations(context) - op.alter_column("mytable", "somecolumn", nullable=True) - - """ - def __init__(self, dialect, connection, opts): - self.opts = opts - self.dialect = dialect - self.script = opts.get('script') - - as_sql = opts.get('as_sql', False) - transactional_ddl = opts.get("transactional_ddl") - - self._transaction_per_migration = opts.get( - "transaction_per_migration", False) - - if as_sql: - self.connection = self._stdout_connection(connection) - assert self.connection is not None - else: - self.connection = connection - self._migrations_fn = opts.get('fn') - self.as_sql = as_sql - - if "output_encoding" in opts: - self.output_buffer = EncodedIO( - opts.get("output_buffer") or sys.stdout, - opts['output_encoding'] - ) - else: - self.output_buffer = opts.get("output_buffer", sys.stdout) - - self._user_compare_type = opts.get('compare_type', False) - self._user_compare_server_default = opts.get( - 'compare_server_default', - False) - version_table = opts.get('version_table', 'alembic_version') - version_table_schema = opts.get('version_table_schema', None) - self._version = Table( - version_table, MetaData(), - Column('version_num', String(32), nullable=False), - schema=version_table_schema) - - self._start_from_rev = opts.get("starting_rev") - self.impl = ddl.DefaultImpl.get_by_dialect(dialect)( - dialect, self.connection, self.as_sql, - transactional_ddl, - self.output_buffer, - opts - ) - log.info("Context impl %s.", self.impl.__class__.__name__) - if self.as_sql: - log.info("Generating static SQL") - log.info("Will assume %s DDL.", - "transactional" if self.impl.transactional_ddl - else "non-transactional") - - @classmethod - def configure(cls, - connection=None, - url=None, - dialect_name=None, - opts={}, - ): - """Create a new :class:`.MigrationContext`. - - This is a factory method usually called - by :meth:`.EnvironmentContext.configure`. - - :param connection: a :class:`~sqlalchemy.engine.Connection` - to use for SQL execution in "online" mode. When present, - is also used to determine the type of dialect in use. - :param url: a string database url, or a - :class:`sqlalchemy.engine.url.URL` object. - The type of dialect to be used will be derived from this if - ``connection`` is not passed. - :param dialect_name: string name of a dialect, such as - "postgresql", "mssql", etc. The type of dialect to be used will be - derived from this if ``connection`` and ``url`` are not passed. - :param opts: dictionary of options. Most other options - accepted by :meth:`.EnvironmentContext.configure` are passed via - this dictionary. - - """ - if connection: - dialect = connection.dialect - elif url: - url = sqla_url.make_url(url) - dialect = url.get_dialect()() - elif dialect_name: - url = sqla_url.make_url("%s://" % dialect_name) - dialect = url.get_dialect()() - else: - raise Exception("Connection, url, or dialect_name is required.") - - return MigrationContext(dialect, connection, opts) - - - def begin_transaction(self, _per_migration=False): - transaction_now = _per_migration == self._transaction_per_migration - - if not transaction_now: - @contextmanager - def do_nothing(): - yield - return do_nothing() - - elif not self.impl.transactional_ddl: - @contextmanager - def do_nothing(): - yield - return do_nothing() - elif self.as_sql: - @contextmanager - def begin_commit(): - self.impl.emit_begin() - yield - self.impl.emit_commit() - return begin_commit() - else: - return self.bind.begin() - - def get_current_revision(self): - """Return the current revision, usually that which is present - in the ``alembic_version`` table in the database. - - If this :class:`.MigrationContext` was configured in "offline" - mode, that is with ``as_sql=True``, the ``starting_rev`` - parameter is returned instead, if any. - - """ - if self.as_sql: - return self._start_from_rev - else: - if self._start_from_rev: - raise util.CommandError( - "Can't specify current_rev to context " - "when using a database connection") - self._version.create(self.connection, checkfirst=True) - return self.connection.scalar(self._version.select()) - - _current_rev = get_current_revision - """The 0.2 method name, for backwards compat.""" - - def _update_current_rev(self, old, new): - if old == new: - return - if new is None: - self.impl._exec(self._version.delete()) - elif old is None: - self.impl._exec(self._version.insert(). - values(version_num=literal_column("'%s'" % new)) - ) - else: - self.impl._exec(self._version.update(). - values(version_num=literal_column("'%s'" % new)) - ) - - def run_migrations(self, **kw): - """Run the migration scripts established for this :class:`.MigrationContext`, - if any. - - The commands in :mod:`alembic.command` will set up a function - that is ultimately passed to the :class:`.MigrationContext` - as the ``fn`` argument. This function represents the "work" - that will be done when :meth:`.MigrationContext.run_migrations` - is called, typically from within the ``env.py`` script of the - migration environment. The "work function" then provides an iterable - of version callables and other version information which - in the case of the ``upgrade`` or ``downgrade`` commands are the - list of version scripts to invoke. Other commands yield nothing, - in the case that a command wants to run some other operation - against the database such as the ``current`` or ``stamp`` commands. - - :param \**kw: keyword arguments here will be passed to each - migration callable, that is the ``upgrade()`` or ``downgrade()`` - method within revision scripts. - - """ - current_rev = rev = False - stamp_per_migration = not self.impl.transactional_ddl or \ - self._transaction_per_migration - - self.impl.start_migrations() - for change, prev_rev, rev, doc in self._migrations_fn( - self.get_current_revision(), - self): - with self.begin_transaction(_per_migration=True): - if current_rev is False: - current_rev = prev_rev - if self.as_sql and not current_rev: - self._version.create(self.connection) - if doc: - log.info("Running %s %s -> %s, %s", change.__name__, prev_rev, - rev, doc) - else: - log.info("Running %s %s -> %s", change.__name__, prev_rev, rev) - if self.as_sql: - self.impl.static_output( - "-- Running %s %s -> %s" % - (change.__name__, prev_rev, rev) - ) - change(**kw) - if stamp_per_migration: - self._update_current_rev(prev_rev, rev) - prev_rev = rev - - if rev is not False: - if not stamp_per_migration: - self._update_current_rev(current_rev, rev) - - if self.as_sql and not rev: - self._version.drop(self.connection) - - def execute(self, sql, execution_options=None): - """Execute a SQL construct or string statement. - - The underlying execution mechanics are used, that is - if this is "offline mode" the SQL is written to the - output buffer, otherwise the SQL is emitted on - the current SQLAlchemy connection. - - """ - self.impl._exec(sql, execution_options) - - def _stdout_connection(self, connection): - def dump(construct, *multiparams, **params): - self.impl._exec(construct) - - return create_engine("%s://" % self.dialect.name, - strategy="mock", executor=dump) - - @property - def bind(self): - """Return the current "bind". - - In online mode, this is an instance of - :class:`sqlalchemy.engine.Connection`, and is suitable - for ad-hoc execution of any kind of usage described - in :ref:`sqlexpression_toplevel` as well as - for usage with the :meth:`sqlalchemy.schema.Table.create` - and :meth:`sqlalchemy.schema.MetaData.create_all` methods - of :class:`~sqlalchemy.schema.Table`, :class:`~sqlalchemy.schema.MetaData`. - - Note that when "standard output" mode is enabled, - this bind will be a "mock" connection handler that cannot - return results and is only appropriate for a very limited - subset of commands. - - """ - return self.connection - - def _compare_type(self, inspector_column, metadata_column): - if self._user_compare_type is False: - return False - - if callable(self._user_compare_type): - user_value = self._user_compare_type( - self, - inspector_column, - metadata_column, - inspector_column.type, - metadata_column.type - ) - if user_value is not None: - return user_value - - return self.impl.compare_type( - inspector_column, - metadata_column) - - def _compare_server_default(self, inspector_column, - metadata_column, - rendered_metadata_default, - rendered_column_default): - - if self._user_compare_server_default is False: - return False - - if callable(self._user_compare_server_default): - user_value = self._user_compare_server_default( - self, - inspector_column, - metadata_column, - rendered_column_default, - metadata_column.server_default, - rendered_metadata_default - ) - if user_value is not None: - return user_value - - return self.impl.compare_server_default( - inspector_column, - metadata_column, - rendered_metadata_default, - rendered_column_default) - diff --git a/Linux_i686/lib/python2.7/site-packages/alembic/op.py b/Linux_i686/lib/python2.7/site-packages/alembic/op.py deleted file mode 100644 index 8e5f777..0000000 --- a/Linux_i686/lib/python2.7/site-packages/alembic/op.py +++ /dev/null @@ -1,6 +0,0 @@ -from .operations import Operations -from . import util - -# create proxy functions for -# each method on the Operations class. -util.create_module_class_proxy(Operations, globals(), locals()) diff --git a/Linux_i686/lib/python2.7/site-packages/alembic/operations.py b/Linux_i686/lib/python2.7/site-packages/alembic/operations.py deleted file mode 100644 index f1d06a5..0000000 --- a/Linux_i686/lib/python2.7/site-packages/alembic/operations.py +++ /dev/null @@ -1,1037 +0,0 @@ -from contextlib import contextmanager - -from sqlalchemy.types import NULLTYPE, Integer -from sqlalchemy import schema as sa_schema - -from . import util -from .compat import string_types -from .ddl import impl - -__all__ = ('Operations',) - -try: - from sqlalchemy.sql.naming import conv -except: - conv = None - -class Operations(object): - """Define high level migration operations. - - Each operation corresponds to some schema migration operation, - executed against a particular :class:`.MigrationContext` - which in turn represents connectivity to a database, - or a file output stream. - - While :class:`.Operations` is normally configured as - part of the :meth:`.EnvironmentContext.run_migrations` - method called from an ``env.py`` script, a standalone - :class:`.Operations` instance can be - made for use cases external to regular Alembic - migrations by passing in a :class:`.MigrationContext`:: - - from alembic.migration import MigrationContext - from alembic.operations import Operations - - conn = myengine.connect() - ctx = MigrationContext.configure(conn) - op = Operations(ctx) - - op.alter_column("t", "c", nullable=True) - - """ - def __init__(self, migration_context): - """Construct a new :class:`.Operations` - - :param migration_context: a :class:`.MigrationContext` - instance. - - """ - self.migration_context = migration_context - self.impl = migration_context.impl - - @classmethod - @contextmanager - def context(cls, migration_context): - from .op import _install_proxy, _remove_proxy - op = Operations(migration_context) - _install_proxy(op) - yield op - _remove_proxy() - - - def _primary_key_constraint(self, name, table_name, cols, schema=None): - m = self._metadata() - columns = [sa_schema.Column(n, NULLTYPE) for n in cols] - t1 = sa_schema.Table(table_name, m, - *columns, - schema=schema) - p = sa_schema.PrimaryKeyConstraint(*columns, name=name) - t1.append_constraint(p) - return p - - def _foreign_key_constraint(self, name, source, referent, - local_cols, remote_cols, - onupdate=None, ondelete=None, - deferrable=None, source_schema=None, - referent_schema=None, initially=None, - match=None, **dialect_kw): - m = self._metadata() - if source == referent: - t1_cols = local_cols + remote_cols - else: - t1_cols = local_cols - sa_schema.Table(referent, m, - *[sa_schema.Column(n, NULLTYPE) for n in remote_cols], - schema=referent_schema) - - t1 = sa_schema.Table(source, m, - *[sa_schema.Column(n, NULLTYPE) for n in t1_cols], - schema=source_schema) - - tname = "%s.%s" % (referent_schema, referent) if referent_schema \ - else referent - f = sa_schema.ForeignKeyConstraint(local_cols, - ["%s.%s" % (tname, n) - for n in remote_cols], - name=name, - onupdate=onupdate, - ondelete=ondelete, - deferrable=deferrable, - initially=initially, - match=match, - **dialect_kw - ) - t1.append_constraint(f) - - return f - - def _unique_constraint(self, name, source, local_cols, schema=None, **kw): - t = sa_schema.Table(source, self._metadata(), - *[sa_schema.Column(n, NULLTYPE) for n in local_cols], - schema=schema) - kw['name'] = name - uq = sa_schema.UniqueConstraint(*[t.c[n] for n in local_cols], **kw) - # TODO: need event tests to ensure the event - # is fired off here - t.append_constraint(uq) - return uq - - def _check_constraint(self, name, source, condition, schema=None, **kw): - t = sa_schema.Table(source, self._metadata(), - sa_schema.Column('x', Integer), schema=schema) - ck = sa_schema.CheckConstraint(condition, name=name, **kw) - t.append_constraint(ck) - return ck - - def _metadata(self): - kw = {} - if 'target_metadata' in self.migration_context.opts: - mt = self.migration_context.opts['target_metadata'] - if hasattr(mt, 'naming_convention'): - kw['naming_convention'] = mt.naming_convention - return sa_schema.MetaData(**kw) - - def _table(self, name, *columns, **kw): - m = self._metadata() - t = sa_schema.Table(name, m, *columns, **kw) - for f in t.foreign_keys: - self._ensure_table_for_fk(m, f) - return t - - def _column(self, name, type_, **kw): - return sa_schema.Column(name, type_, **kw) - - def _index(self, name, tablename, columns, schema=None, **kw): - t = sa_schema.Table(tablename or 'no_table', self._metadata(), - *[sa_schema.Column(n, NULLTYPE) for n in columns], - schema=schema - ) - return sa_schema.Index(name, *[t.c[n] for n in columns], **kw) - - def _parse_table_key(self, table_key): - if '.' in table_key: - tokens = table_key.split('.') - sname = ".".join(tokens[0:-1]) - tname = tokens[-1] - else: - tname = table_key - sname = None - return (sname, tname) - - def _ensure_table_for_fk(self, metadata, fk): - """create a placeholder Table object for the referent of a - ForeignKey. - - """ - if isinstance(fk._colspec, string_types): - table_key, cname = fk._colspec.rsplit('.', 1) - sname, tname = self._parse_table_key(table_key) - if table_key not in metadata.tables: - rel_t = sa_schema.Table(tname, metadata, schema=sname) - else: - rel_t = metadata.tables[table_key] - if cname not in rel_t.c: - rel_t.append_column(sa_schema.Column(cname, NULLTYPE)) - - def get_context(self): - """Return the :class:`.MigrationContext` object that's - currently in use. - - """ - - return self.migration_context - - def rename_table(self, old_table_name, new_table_name, schema=None): - """Emit an ALTER TABLE to rename a table. - - :param old_table_name: old name. - :param new_table_name: new name. - :param schema: Optional schema name to operate within. - - """ - self.impl.rename_table( - old_table_name, - new_table_name, - schema=schema - ) - - @util._with_legacy_names([('name', 'new_column_name')]) - def alter_column(self, table_name, column_name, - nullable=None, - server_default=False, - new_column_name=None, - type_=None, - autoincrement=None, - existing_type=None, - existing_server_default=False, - existing_nullable=None, - existing_autoincrement=None, - schema=None - ): - """Issue an "alter column" instruction using the - current migration context. - - Generally, only that aspect of the column which - is being changed, i.e. name, type, nullability, - default, needs to be specified. Multiple changes - can also be specified at once and the backend should - "do the right thing", emitting each change either - separately or together as the backend allows. - - MySQL has special requirements here, since MySQL - cannot ALTER a column without a full specification. - When producing MySQL-compatible migration files, - it is recommended that the ``existing_type``, - ``existing_server_default``, and ``existing_nullable`` - parameters be present, if not being altered. - - Type changes which are against the SQLAlchemy - "schema" types :class:`~sqlalchemy.types.Boolean` - and :class:`~sqlalchemy.types.Enum` may also - add or drop constraints which accompany those - types on backends that don't support them natively. - The ``existing_server_default`` argument is - used in this case as well to remove a previous - constraint. - - :param table_name: string name of the target table. - :param column_name: string name of the target column, - as it exists before the operation begins. - :param nullable: Optional; specify ``True`` or ``False`` - to alter the column's nullability. - :param server_default: Optional; specify a string - SQL expression, :func:`~sqlalchemy.sql.expression.text`, - or :class:`~sqlalchemy.schema.DefaultClause` to indicate - an alteration to the column's default value. - Set to ``None`` to have the default removed. - :param new_column_name: Optional; specify a string name here to - indicate the new name within a column rename operation. - - .. versionchanged:: 0.5.0 - The ``name`` parameter is now named ``new_column_name``. - The old name will continue to function for backwards - compatibility. - - :param ``type_``: Optional; a :class:`~sqlalchemy.types.TypeEngine` - type object to specify a change to the column's type. - For SQLAlchemy types that also indicate a constraint (i.e. - :class:`~sqlalchemy.types.Boolean`, :class:`~sqlalchemy.types.Enum`), - the constraint is also generated. - :param autoincrement: set the ``AUTO_INCREMENT`` flag of the column; - currently understood by the MySQL dialect. - :param existing_type: Optional; a - :class:`~sqlalchemy.types.TypeEngine` - type object to specify the previous type. This - is required for all MySQL column alter operations that - don't otherwise specify a new type, as well as for - when nullability is being changed on a SQL Server - column. It is also used if the type is a so-called - SQLlchemy "schema" type which may define a constraint (i.e. - :class:`~sqlalchemy.types.Boolean`, - :class:`~sqlalchemy.types.Enum`), - so that the constraint can be dropped. - :param existing_server_default: Optional; The existing - default value of the column. Required on MySQL if - an existing default is not being changed; else MySQL - removes the default. - :param existing_nullable: Optional; the existing nullability - of the column. Required on MySQL if the existing nullability - is not being changed; else MySQL sets this to NULL. - :param existing_autoincrement: Optional; the existing autoincrement - of the column. Used for MySQL's system of altering a column - that specifies ``AUTO_INCREMENT``. - :param schema: Optional schema name to operate within. - - .. versionadded:: 0.4.0 - - """ - - compiler = self.impl.dialect.statement_compiler( - self.impl.dialect, - None - ) - def _count_constraint(constraint): - return not isinstance(constraint, sa_schema.PrimaryKeyConstraint) and \ - (not constraint._create_rule or - constraint._create_rule(compiler)) - - if existing_type and type_: - t = self._table(table_name, - sa_schema.Column(column_name, existing_type), - schema=schema - ) - for constraint in t.constraints: - if _count_constraint(constraint): - self.impl.drop_constraint(constraint) - - self.impl.alter_column(table_name, column_name, - nullable=nullable, - server_default=server_default, - name=new_column_name, - type_=type_, - schema=schema, - autoincrement=autoincrement, - existing_type=existing_type, - existing_server_default=existing_server_default, - existing_nullable=existing_nullable, - existing_autoincrement=existing_autoincrement - ) - - if type_: - t = self._table(table_name, - sa_schema.Column(column_name, type_), - schema=schema - ) - for constraint in t.constraints: - if _count_constraint(constraint): - self.impl.add_constraint(constraint) - - def f(self, name): - """Indicate a string name that has already had a naming convention - applied to it. - - This feature combines with the SQLAlchemy ``naming_convention`` feature - to disambiguate constraint names that have already had naming - conventions applied to them, versus those that have not. This is - necessary in the case that the ``"%(constraint_name)s"`` token - is used within a naming convention, so that it can be identified - that this particular name should remain fixed. - - If the :meth:`.Operations.f` is used on a constraint, the naming - convention will not take effect:: - - op.add_column('t', 'x', Boolean(name=op.f('ck_bool_t_x'))) - - Above, the CHECK constraint generated will have the name ``ck_bool_t_x`` - regardless of whether or not a naming convention is in use. - - Alternatively, if a naming convention is in use, and 'f' is not used, - names will be converted along conventions. If the ``target_metadata`` - contains the naming convention - ``{"ck": "ck_bool_%(table_name)s_%(constraint_name)s"}``, then the - output of the following: - - op.add_column('t', 'x', Boolean(name='x')) - - will be:: - - CONSTRAINT ck_bool_t_x CHECK (x in (1, 0))) - - The function is rendered in the output of autogenerate when - a particular constraint name is already converted, for SQLAlchemy - version **0.9.4 and greater only**. Even though ``naming_convention`` - was introduced in 0.9.2, the string disambiguation service is new - as of 0.9.4. - - .. versionadded:: 0.6.4 - - """ - if conv: - return conv(name) - else: - raise NotImplementedError( - "op.f() feature requires SQLAlchemy 0.9.4 or greater.") - - def add_column(self, table_name, column, schema=None): - """Issue an "add column" instruction using the current - migration context. - - e.g.:: - - from alembic import op - from sqlalchemy import Column, String - - op.add_column('organization', - Column('name', String()) - ) - - The provided :class:`~sqlalchemy.schema.Column` object can also - specify a :class:`~sqlalchemy.schema.ForeignKey`, referencing - a remote table name. Alembic will automatically generate a stub - "referenced" table and emit a second ALTER statement in order - to add the constraint separately:: - - from alembic import op - from sqlalchemy import Column, INTEGER, ForeignKey - - op.add_column('organization', - Column('account_id', INTEGER, ForeignKey('accounts.id')) - ) - - Note that this statement uses the :class:`~sqlalchemy.schema.Column` - construct as is from the SQLAlchemy library. In particular, - default values to be created on the database side are - specified using the ``server_default`` parameter, and not - ``default`` which only specifies Python-side defaults:: - - from alembic import op - from sqlalchemy import Column, TIMESTAMP, func - - # specify "DEFAULT NOW" along with the column add - op.add_column('account', - Column('timestamp', TIMESTAMP, server_default=func.now()) - ) - - :param table_name: String name of the parent table. - :param column: a :class:`sqlalchemy.schema.Column` object - representing the new column. - :param schema: Optional schema name to operate within. - - .. versionadded:: 0.4.0 - - """ - - t = self._table(table_name, column, schema=schema) - self.impl.add_column( - table_name, - column, - schema=schema - ) - for constraint in t.constraints: - if not isinstance(constraint, sa_schema.PrimaryKeyConstraint): - self.impl.add_constraint(constraint) - - def drop_column(self, table_name, column_name, **kw): - """Issue a "drop column" instruction using the current - migration context. - - e.g.:: - - drop_column('organization', 'account_id') - - :param table_name: name of table - :param column_name: name of column - :param schema: Optional schema name to operate within. - - .. versionadded:: 0.4.0 - - :param mssql_drop_check: Optional boolean. When ``True``, on - Microsoft SQL Server only, first - drop the CHECK constraint on the column using a - SQL-script-compatible - block that selects into a @variable from sys.check_constraints, - then exec's a separate DROP CONSTRAINT for that constraint. - :param mssql_drop_default: Optional boolean. When ``True``, on - Microsoft SQL Server only, first - drop the DEFAULT constraint on the column using a - SQL-script-compatible - block that selects into a @variable from sys.default_constraints, - then exec's a separate DROP CONSTRAINT for that default. - :param mssql_drop_foreign_key: Optional boolean. When ``True``, on - Microsoft SQL Server only, first - drop a single FOREIGN KEY constraint on the column using a - SQL-script-compatible - block that selects into a @variable from - sys.foreign_keys/sys.foreign_key_columns, - then exec's a separate DROP CONSTRAINT for that default. Only - works if the column has exactly one FK constraint which refers to - it, at the moment. - - .. versionadded:: 0.6.2 - - """ - - self.impl.drop_column( - table_name, - self._column(column_name, NULLTYPE), - **kw - ) - - - def create_primary_key(self, name, table_name, cols, schema=None): - """Issue a "create primary key" instruction using the current - migration context. - - e.g.:: - - from alembic import op - op.create_primary_key( - "pk_my_table", "my_table", - ["id", "version"] - ) - - This internally generates a :class:`~sqlalchemy.schema.Table` object - containing the necessary columns, then generates a new - :class:`~sqlalchemy.schema.PrimaryKeyConstraint` - object which it then associates with the :class:`~sqlalchemy.schema.Table`. - Any event listeners associated with this action will be fired - off normally. The :class:`~sqlalchemy.schema.AddConstraint` - construct is ultimately used to generate the ALTER statement. - - .. versionadded:: 0.5.0 - - :param name: Name of the primary key constraint. The name is necessary - so that an ALTER statement can be emitted. For setups that - use an automated naming scheme such as that described at - `NamingConventions `_, - ``name`` here can be ``None``, as the event listener will - apply the name to the constraint object when it is associated - with the table. - :param table_name: String name of the target table. - :param cols: a list of string column names to be applied to the - primary key constraint. - :param schema: Optional schema name of the table. - - """ - self.impl.add_constraint( - self._primary_key_constraint(name, table_name, cols, - schema) - ) - - - def create_foreign_key(self, name, source, referent, local_cols, - remote_cols, onupdate=None, ondelete=None, - deferrable=None, initially=None, match=None, - source_schema=None, referent_schema=None, - **dialect_kw): - """Issue a "create foreign key" instruction using the - current migration context. - - e.g.:: - - from alembic import op - op.create_foreign_key( - "fk_user_address", "address", - "user", ["user_id"], ["id"]) - - This internally generates a :class:`~sqlalchemy.schema.Table` object - containing the necessary columns, then generates a new - :class:`~sqlalchemy.schema.ForeignKeyConstraint` - object which it then associates with the :class:`~sqlalchemy.schema.Table`. - Any event listeners associated with this action will be fired - off normally. The :class:`~sqlalchemy.schema.AddConstraint` - construct is ultimately used to generate the ALTER statement. - - :param name: Name of the foreign key constraint. The name is necessary - so that an ALTER statement can be emitted. For setups that - use an automated naming scheme such as that described at - `NamingConventions `_, - ``name`` here can be ``None``, as the event listener will - apply the name to the constraint object when it is associated - with the table. - :param source: String name of the source table. - :param referent: String name of the destination table. - :param local_cols: a list of string column names in the - source table. - :param remote_cols: a list of string column names in the - remote table. - :param onupdate: Optional string. If set, emit ON UPDATE when - issuing DDL for this constraint. Typical values include CASCADE, - DELETE and RESTRICT. - :param ondelete: Optional string. If set, emit ON DELETE when - issuing DDL for this constraint. Typical values include CASCADE, - DELETE and RESTRICT. - :param deferrable: optional bool. If set, emit DEFERRABLE or NOT - DEFERRABLE when issuing DDL for this constraint. - :param source_schema: Optional schema name of the source table. - :param referent_schema: Optional schema name of the destination table. - - """ - - self.impl.add_constraint( - self._foreign_key_constraint(name, source, referent, - local_cols, remote_cols, - onupdate=onupdate, ondelete=ondelete, - deferrable=deferrable, source_schema=source_schema, - referent_schema=referent_schema, - initially=initially, match=match, **dialect_kw) - ) - - def create_unique_constraint(self, name, source, local_cols, - schema=None, **kw): - """Issue a "create unique constraint" instruction using the - current migration context. - - e.g.:: - - from alembic import op - op.create_unique_constraint("uq_user_name", "user", ["name"]) - - This internally generates a :class:`~sqlalchemy.schema.Table` object - containing the necessary columns, then generates a new - :class:`~sqlalchemy.schema.UniqueConstraint` - object which it then associates with the :class:`~sqlalchemy.schema.Table`. - Any event listeners associated with this action will be fired - off normally. The :class:`~sqlalchemy.schema.AddConstraint` - construct is ultimately used to generate the ALTER statement. - - :param name: Name of the unique constraint. The name is necessary - so that an ALTER statement can be emitted. For setups that - use an automated naming scheme such as that described at - `NamingConventions `_, - ``name`` here can be ``None``, as the event listener will - apply the name to the constraint object when it is associated - with the table. - :param source: String name of the source table. Dotted schema names are - supported. - :param local_cols: a list of string column names in the - source table. - :param deferrable: optional bool. If set, emit DEFERRABLE or NOT DEFERRABLE when - issuing DDL for this constraint. - :param initially: optional string. If set, emit INITIALLY when issuing DDL - for this constraint. - :param schema: Optional schema name to operate within. - - .. versionadded:: 0.4.0 - - """ - - self.impl.add_constraint( - self._unique_constraint(name, source, local_cols, - schema=schema, **kw) - ) - - def create_check_constraint(self, name, source, condition, - schema=None, **kw): - """Issue a "create check constraint" instruction using the - current migration context. - - e.g.:: - - from alembic import op - from sqlalchemy.sql import column, func - - op.create_check_constraint( - "ck_user_name_len", - "user", - func.len(column('name')) > 5 - ) - - CHECK constraints are usually against a SQL expression, so ad-hoc - table metadata is usually needed. The function will convert the given - arguments into a :class:`sqlalchemy.schema.CheckConstraint` bound - to an anonymous table in order to emit the CREATE statement. - - :param name: Name of the check constraint. The name is necessary - so that an ALTER statement can be emitted. For setups that - use an automated naming scheme such as that described at - `NamingConventions `_, - ``name`` here can be ``None``, as the event listener will - apply the name to the constraint object when it is associated - with the table. - :param source: String name of the source table. - :param condition: SQL expression that's the condition of the constraint. - Can be a string or SQLAlchemy expression language structure. - :param deferrable: optional bool. If set, emit DEFERRABLE or NOT DEFERRABLE when - issuing DDL for this constraint. - :param initially: optional string. If set, emit INITIALLY when issuing DDL - for this constraint. - :param schema: Optional schema name to operate within. - - ..versionadded:: 0.4.0 - - """ - self.impl.add_constraint( - self._check_constraint(name, source, condition, schema=schema, **kw) - ) - - def create_table(self, name, *columns, **kw): - """Issue a "create table" instruction using the current migration context. - - This directive receives an argument list similar to that of the - traditional :class:`sqlalchemy.schema.Table` construct, but without the - metadata:: - - from sqlalchemy import INTEGER, VARCHAR, NVARCHAR, Column - from alembic import op - - op.create_table( - 'account', - Column('id', INTEGER, primary_key=True), - Column('name', VARCHAR(50), nullable=False), - Column('description', NVARCHAR(200)) - Column('timestamp', TIMESTAMP, server_default=func.now()) - ) - - Note that :meth:`.create_table` accepts :class:`~sqlalchemy.schema.Column` - constructs directly from the SQLAlchemy library. In particular, - default values to be created on the database side are - specified using the ``server_default`` parameter, and not - ``default`` which only specifies Python-side defaults:: - - from alembic import op - from sqlalchemy import Column, TIMESTAMP, func - - # specify "DEFAULT NOW" along with the "timestamp" column - op.create_table('account', - Column('id', INTEGER, primary_key=True), - Column('timestamp', TIMESTAMP, server_default=func.now()) - ) - - :param name: Name of the table - :param \*columns: collection of :class:`~sqlalchemy.schema.Column` - objects within - the table, as well as optional :class:`~sqlalchemy.schema.Constraint` - objects - and :class:`~.sqlalchemy.schema.Index` objects. - :param schema: Optional schema name to operate within. - :param \**kw: Other keyword arguments are passed to the underlying - :class:`sqlalchemy.schema.Table` object created for the command. - - """ - self.impl.create_table( - self._table(name, *columns, **kw) - ) - - def drop_table(self, name, **kw): - """Issue a "drop table" instruction using the current - migration context. - - - e.g.:: - - drop_table("accounts") - - :param name: Name of the table - :param schema: Optional schema name to operate within. - - .. versionadded:: 0.4.0 - - :param \**kw: Other keyword arguments are passed to the underlying - :class:`sqlalchemy.schema.Table` object created for the command. - - """ - self.impl.drop_table( - self._table(name, **kw) - ) - - def create_index(self, name, table_name, columns, schema=None, **kw): - """Issue a "create index" instruction using the current - migration context. - - e.g.:: - - from alembic import op - op.create_index('ik_test', 't1', ['foo', 'bar']) - - :param name: name of the index. - :param table_name: name of the owning table. - - .. versionchanged:: 0.5.0 - The ``tablename`` parameter is now named ``table_name``. - As this is a positional argument, the old name is no - longer present. - - :param columns: a list of string column names in the - table. - :param schema: Optional schema name to operate within. - - .. versionadded:: 0.4.0 - - """ - - self.impl.create_index( - self._index(name, table_name, columns, schema=schema, **kw) - ) - - @util._with_legacy_names([('tablename', 'table_name')]) - def drop_index(self, name, table_name=None, schema=None): - """Issue a "drop index" instruction using the current - migration context. - - e.g.:: - - drop_index("accounts") - - :param name: name of the index. - :param table_name: name of the owning table. Some - backends such as Microsoft SQL Server require this. - - .. versionchanged:: 0.5.0 - The ``tablename`` parameter is now named ``table_name``. - The old name will continue to function for backwards - compatibility. - - :param schema: Optional schema name to operate within. - - .. versionadded:: 0.4.0 - - """ - # need a dummy column name here since SQLAlchemy - # 0.7.6 and further raises on Index with no columns - self.impl.drop_index( - self._index(name, table_name, ['x'], schema=schema) - ) - - @util._with_legacy_names([("type", "type_")]) - def drop_constraint(self, name, table_name, type_=None, schema=None): - """Drop a constraint of the given name, typically via DROP CONSTRAINT. - - :param name: name of the constraint. - :param table_name: table name. - - .. versionchanged:: 0.5.0 - The ``tablename`` parameter is now named ``table_name``. - As this is a positional argument, the old name is no - longer present. - - :param ``type_``: optional, required on MySQL. can be - 'foreignkey', 'primary', 'unique', or 'check'. - - .. versionchanged:: 0.5.0 - The ``type`` parameter is now named ``type_``. The old name - ``type`` will remain for backwards compatibility. - - .. versionadded:: 0.3.6 'primary' qualfier to enable - dropping of MySQL primary key constraints. - - :param schema: Optional schema name to operate within. - - .. versionadded:: 0.4.0 - - """ - - t = self._table(table_name, schema=schema) - types = { - 'foreignkey': lambda name: sa_schema.ForeignKeyConstraint( - [], [], name=name), - 'primary': sa_schema.PrimaryKeyConstraint, - 'unique': sa_schema.UniqueConstraint, - 'check': lambda name: sa_schema.CheckConstraint("", name=name), - None: sa_schema.Constraint - } - try: - const = types[type_] - except KeyError: - raise TypeError("'type' can be one of %s" % - ", ".join(sorted(repr(x) for x in types))) - - const = const(name=name) - t.append_constraint(const) - self.impl.drop_constraint(const) - - def bulk_insert(self, table, rows, multiinsert=True): - """Issue a "bulk insert" operation using the current - migration context. - - This provides a means of representing an INSERT of multiple rows - which works equally well in the context of executing on a live - connection as well as that of generating a SQL script. In the - case of a SQL script, the values are rendered inline into the - statement. - - e.g.:: - - from alembic import op - from datetime import date - from sqlalchemy.sql import table, column - from sqlalchemy import String, Integer, Date - - # Create an ad-hoc table to use for the insert statement. - accounts_table = table('account', - column('id', Integer), - column('name', String), - column('create_date', Date) - ) - - op.bulk_insert(accounts_table, - [ - {'id':1, 'name':'John Smith', - 'create_date':date(2010, 10, 5)}, - {'id':2, 'name':'Ed Williams', - 'create_date':date(2007, 5, 27)}, - {'id':3, 'name':'Wendy Jones', - 'create_date':date(2008, 8, 15)}, - ] - ) - - When using --sql mode, some datatypes may not render inline automatically, - such as dates and other special types. When this issue is present, - :meth:`.Operations.inline_literal` may be used:: - - op.bulk_insert(accounts_table, - [ - {'id':1, 'name':'John Smith', - 'create_date':op.inline_literal("2010-10-05")}, - {'id':2, 'name':'Ed Williams', - 'create_date':op.inline_literal("2007-05-27")}, - {'id':3, 'name':'Wendy Jones', - 'create_date':op.inline_literal("2008-08-15")}, - ], - multiinsert=False - ) - - When using :meth:`.Operations.inline_literal` in conjunction with - :meth:`.Operations.bulk_insert`, in order for the statement to work - in "online" (e.g. non --sql) mode, the - :paramref:`~.Operations.bulk_insert.multiinsert` - flag should be set to ``False``, which will have the effect of - individual INSERT statements being emitted to the database, each - with a distinct VALUES clause, so that the "inline" values can - still be rendered, rather than attempting to pass the values - as bound parameters. - - .. versionadded:: 0.6.4 :meth:`.Operations.inline_literal` can now - be used with :meth:`.Operations.bulk_insert`, and the - :paramref:`~.Operations.bulk_insert.multiinsert` flag has - been added to assist in this usage when running in "online" - mode. - - :param table: a table object which represents the target of the INSERT. - - :param rows: a list of dictionaries indicating rows. - - :param multiinsert: when at its default of True and --sql mode is not - enabled, the INSERT statement will be executed using - "executemany()" style, where all elements in the list of dictionaries - are passed as bound parameters in a single list. Setting this - to False results in individual INSERT statements being emitted - per parameter set, and is needed in those cases where non-literal - values are present in the parameter sets. - - .. versionadded:: 0.6.4 - - """ - self.impl.bulk_insert(table, rows, multiinsert=multiinsert) - - def inline_literal(self, value, type_=None): - """Produce an 'inline literal' expression, suitable for - using in an INSERT, UPDATE, or DELETE statement. - - When using Alembic in "offline" mode, CRUD operations - aren't compatible with SQLAlchemy's default behavior surrounding - literal values, - which is that they are converted into bound values and passed - separately into the ``execute()`` method of the DBAPI cursor. - An offline SQL - script needs to have these rendered inline. While it should - always be noted that inline literal values are an **enormous** - security hole in an application that handles untrusted input, - a schema migration is not run in this context, so - literals are safe to render inline, with the caveat that - advanced types like dates may not be supported directly - by SQLAlchemy. - - See :meth:`.execute` for an example usage of - :meth:`.inline_literal`. - - :param value: The value to render. Strings, integers, and simple - numerics should be supported. Other types like boolean, - dates, etc. may or may not be supported yet by various - backends. - :param ``type_``: optional - a :class:`sqlalchemy.types.TypeEngine` - subclass stating the type of this value. In SQLAlchemy - expressions, this is usually derived automatically - from the Python type of the value itself, as well as - based on the context in which the value is used. - - """ - return impl._literal_bindparam(None, value, type_=type_) - - def execute(self, sql, execution_options=None): - """Execute the given SQL using the current migration context. - - In a SQL script context, the statement is emitted directly to the - output stream. There is *no* return result, however, as this - function is oriented towards generating a change script - that can run in "offline" mode. For full interaction - with a connected database, use the "bind" available - from the context:: - - from alembic import op - connection = op.get_bind() - - Also note that any parameterized statement here *will not work* - in offline mode - INSERT, UPDATE and DELETE statements which refer - to literal values would need to render - inline expressions. For simple use cases, the - :meth:`.inline_literal` function can be used for **rudimentary** - quoting of string values. For "bulk" inserts, consider using - :meth:`.bulk_insert`. - - For example, to emit an UPDATE statement which is equally - compatible with both online and offline mode:: - - from sqlalchemy.sql import table, column - from sqlalchemy import String - from alembic import op - - account = table('account', - column('name', String) - ) - op.execute( - account.update().\\ - where(account.c.name==op.inline_literal('account 1')).\\ - values({'name':op.inline_literal('account 2')}) - ) - - Note above we also used the SQLAlchemy - :func:`sqlalchemy.sql.expression.table` - and :func:`sqlalchemy.sql.expression.column` constructs to make a brief, - ad-hoc table construct just for our UPDATE statement. A full - :class:`~sqlalchemy.schema.Table` construct of course works perfectly - fine as well, though note it's a recommended practice to at least ensure - the definition of a table is self-contained within the migration script, - rather than imported from a module that may break compatibility with - older migrations. - - :param sql: Any legal SQLAlchemy expression, including: - - * a string - * a :func:`sqlalchemy.sql.expression.text` construct. - * a :func:`sqlalchemy.sql.expression.insert` construct. - * a :func:`sqlalchemy.sql.expression.update`, - :func:`sqlalchemy.sql.expression.insert`, - or :func:`sqlalchemy.sql.expression.delete` construct. - * Pretty much anything that's "executable" as described - in :ref:`sqlexpression_toplevel`. - - :param execution_options: Optional dictionary of - execution options, will be passed to - :meth:`sqlalchemy.engine.Connection.execution_options`. - """ - self.migration_context.impl.execute(sql, - execution_options=execution_options) - - def get_bind(self): - """Return the current 'bind'. - - Under normal circumstances, this is the - :class:`~sqlalchemy.engine.Connection` currently being used - to emit SQL to the database. - - In a SQL script context, this value is ``None``. [TODO: verify this] - - """ - return self.migration_context.impl.bind - diff --git a/Linux_i686/lib/python2.7/site-packages/alembic/script.py b/Linux_i686/lib/python2.7/site-packages/alembic/script.py deleted file mode 100644 index 3294366..0000000 --- a/Linux_i686/lib/python2.7/site-packages/alembic/script.py +++ /dev/null @@ -1,513 +0,0 @@ -import datetime -import os -import re -import shutil -from . import util - -_sourceless_rev_file = re.compile(r'(.*\.py)(c|o)?$') -_only_source_rev_file = re.compile(r'(.*\.py)$') -_legacy_rev = re.compile(r'([a-f0-9]+)\.py$') -_mod_def_re = re.compile(r'(upgrade|downgrade)_([a-z0-9]+)') -_slug_re = re.compile(r'\w+') -_default_file_template = "%(rev)s_%(slug)s" -_relative_destination = re.compile(r'(?:\+|-)\d+') - -class ScriptDirectory(object): - """Provides operations upon an Alembic script directory. - - This object is useful to get information as to current revisions, - most notably being able to get at the "head" revision, for schemes - that want to test if the current revision in the database is the most - recent:: - - from alembic.script import ScriptDirectory - from alembic.config import Config - config = Config() - config.set_main_option("script_location", "myapp:migrations") - script = ScriptDirectory.from_config(config) - - head_revision = script.get_current_head() - - - - """ - def __init__(self, dir, file_template=_default_file_template, - truncate_slug_length=40, - sourceless=False): - self.dir = dir - self.versions = os.path.join(self.dir, 'versions') - self.file_template = file_template - self.truncate_slug_length = truncate_slug_length or 40 - self.sourceless = sourceless - - if not os.access(dir, os.F_OK): - raise util.CommandError("Path doesn't exist: %r. Please use " - "the 'init' command to create a new " - "scripts folder." % dir) - - @classmethod - def from_config(cls, config): - """Produce a new :class:`.ScriptDirectory` given a :class:`.Config` - instance. - - The :class:`.Config` need only have the ``script_location`` key - present. - - """ - script_location = config.get_main_option('script_location') - if script_location is None: - raise util.CommandError("No 'script_location' key " - "found in configuration.") - truncate_slug_length = config.get_main_option("truncate_slug_length") - if truncate_slug_length is not None: - truncate_slug_length = int(truncate_slug_length) - return ScriptDirectory( - util.coerce_resource_to_filename(script_location), - file_template=config.get_main_option( - 'file_template', - _default_file_template), - truncate_slug_length=truncate_slug_length, - sourceless=config.get_main_option("sourceless") == "true" - ) - - def walk_revisions(self, base="base", head="head"): - """Iterate through all revisions. - - This is actually a breadth-first tree traversal, - with leaf nodes being heads. - - """ - if head == "head": - heads = set(self.get_heads()) - else: - heads = set([head]) - while heads: - todo = set(heads) - heads = set() - for head in todo: - if head in heads: - break - for sc in self.iterate_revisions(head, base): - if sc.is_branch_point and sc.revision not in todo: - heads.add(sc.revision) - break - else: - yield sc - - def get_revision(self, id_): - """Return the :class:`.Script` instance with the given rev id.""" - - id_ = self.as_revision_number(id_) - try: - return self._revision_map[id_] - except KeyError: - # do a partial lookup - revs = [x for x in self._revision_map - if x is not None and x.startswith(id_)] - if not revs: - raise util.CommandError("No such revision '%s'" % id_) - elif len(revs) > 1: - raise util.CommandError( - "Multiple revisions start " - "with '%s', %s..." % ( - id_, - ", ".join("'%s'" % r for r in revs[0:3]) - )) - else: - return self._revision_map[revs[0]] - - _get_rev = get_revision - - def as_revision_number(self, id_): - """Convert a symbolic revision, i.e. 'head' or 'base', into - an actual revision number.""" - - if id_ == 'head': - id_ = self.get_current_head() - elif id_ == 'base': - id_ = None - return id_ - - _as_rev_number = as_revision_number - - def iterate_revisions(self, upper, lower): - """Iterate through script revisions, starting at the given - upper revision identifier and ending at the lower. - - The traversal uses strictly the `down_revision` - marker inside each migration script, so - it is a requirement that upper >= lower, - else you'll get nothing back. - - The iterator yields :class:`.Script` objects. - - """ - if upper is not None and _relative_destination.match(upper): - relative = int(upper) - revs = list(self._iterate_revisions("head", lower)) - revs = revs[-relative:] - if len(revs) != abs(relative): - raise util.CommandError("Relative revision %s didn't " - "produce %d migrations" % (upper, abs(relative))) - return iter(revs) - elif lower is not None and _relative_destination.match(lower): - relative = int(lower) - revs = list(self._iterate_revisions(upper, "base")) - revs = revs[0:-relative] - if len(revs) != abs(relative): - raise util.CommandError("Relative revision %s didn't " - "produce %d migrations" % (lower, abs(relative))) - return iter(revs) - else: - return self._iterate_revisions(upper, lower) - - def _iterate_revisions(self, upper, lower): - lower = self.get_revision(lower) - upper = self.get_revision(upper) - orig = lower.revision if lower else 'base', \ - upper.revision if upper else 'base' - script = upper - while script != lower: - if script is None and lower is not None: - raise util.CommandError( - "Revision %s is not an ancestor of %s" % orig) - yield script - downrev = script.down_revision - script = self._revision_map[downrev] - - def _upgrade_revs(self, destination, current_rev): - revs = self.iterate_revisions(destination, current_rev) - return [ - (script.module.upgrade, script.down_revision, script.revision, - script.doc) - for script in reversed(list(revs)) - ] - - def _downgrade_revs(self, destination, current_rev): - revs = self.iterate_revisions(current_rev, destination) - return [ - (script.module.downgrade, script.revision, script.down_revision, - script.doc) - for script in revs - ] - - def run_env(self): - """Run the script environment. - - This basically runs the ``env.py`` script present - in the migration environment. It is called exclusively - by the command functions in :mod:`alembic.command`. - - - """ - util.load_python_file(self.dir, 'env.py') - - @property - def env_py_location(self): - return os.path.abspath(os.path.join(self.dir, "env.py")) - - @util.memoized_property - def _revision_map(self): - map_ = {} - for file_ in os.listdir(self.versions): - script = Script._from_filename(self, self.versions, file_) - if script is None: - continue - if script.revision in map_: - util.warn("Revision %s is present more than once" % - script.revision) - map_[script.revision] = script - for rev in map_.values(): - if rev.down_revision is None: - continue - if rev.down_revision not in map_: - util.warn("Revision %s referenced from %s is not present" - % (rev.down_revision, rev)) - rev.down_revision = None - else: - map_[rev.down_revision].add_nextrev(rev.revision) - map_[None] = None - return map_ - - def _rev_path(self, rev_id, message, create_date): - slug = "_".join(_slug_re.findall(message or "")).lower() - if len(slug) > self.truncate_slug_length: - slug = slug[:self.truncate_slug_length].rsplit('_', 1)[0] + '_' - filename = "%s.py" % ( - self.file_template % { - 'rev': rev_id, - 'slug': slug, - 'year': create_date.year, - 'month': create_date.month, - 'day': create_date.day, - 'hour': create_date.hour, - 'minute': create_date.minute, - 'second': create_date.second - } - ) - return os.path.join(self.versions, filename) - - def get_current_head(self): - """Return the current head revision. - - If the script directory has multiple heads - due to branching, an error is raised. - - Returns a string revision number. - - """ - current_heads = self.get_heads() - if len(current_heads) > 1: - raise util.CommandError('Only a single head is supported. The ' - 'script directory has multiple heads (due to branching), which ' - 'must be resolved by manually editing the revision files to ' - 'form a linear sequence. Run `alembic branches` to see the ' - 'divergence(s).') - - if current_heads: - return current_heads[0] - else: - return None - - _current_head = get_current_head - """the 0.2 name, for backwards compat.""" - - def get_heads(self): - """Return all "head" revisions as strings. - - Returns a list of string revision numbers. - - This is normally a list of length one, - unless branches are present. The - :meth:`.ScriptDirectory.get_current_head()` method - can be used normally when a script directory - has only one head. - - """ - heads = [] - for script in self._revision_map.values(): - if script and script.is_head: - heads.append(script.revision) - return heads - - def get_base(self): - """Return the "base" revision as a string. - - This is the revision number of the script that - has a ``down_revision`` of None. - - Behavior is not defined if more than one script - has a ``down_revision`` of None. - - """ - for script in self._revision_map.values(): - if script and script.down_revision is None \ - and script.revision in self._revision_map: - return script.revision - else: - return None - - def _generate_template(self, src, dest, **kw): - util.status("Generating %s" % os.path.abspath(dest), - util.template_to_file, - src, - dest, - **kw - ) - - def _copy_file(self, src, dest): - util.status("Generating %s" % os.path.abspath(dest), - shutil.copy, - src, dest) - - def generate_revision(self, revid, message, refresh=False, **kw): - """Generate a new revision file. - - This runs the ``script.py.mako`` template, given - template arguments, and creates a new file. - - :param revid: String revision id. Typically this - comes from ``alembic.util.rev_id()``. - :param message: the revision message, the one passed - by the -m argument to the ``revision`` command. - :param refresh: when True, the in-memory state of this - :class:`.ScriptDirectory` will be updated with a new - :class:`.Script` instance representing the new revision; - the :class:`.Script` instance is returned. - If False, the file is created but the state of the - :class:`.ScriptDirectory` is unmodified; ``None`` - is returned. - - """ - current_head = self.get_current_head() - create_date = datetime.datetime.now() - path = self._rev_path(revid, message, create_date) - self._generate_template( - os.path.join(self.dir, "script.py.mako"), - path, - up_revision=str(revid), - down_revision=current_head, - create_date=create_date, - message=message if message is not None else ("empty message"), - **kw - ) - if refresh: - script = Script._from_path(self, path) - self._revision_map[script.revision] = script - if script.down_revision: - self._revision_map[script.down_revision].\ - add_nextrev(script.revision) - return script - else: - return None - - -class Script(object): - """Represent a single revision file in a ``versions/`` directory. - - The :class:`.Script` instance is returned by methods - such as :meth:`.ScriptDirectory.iterate_revisions`. - - """ - - nextrev = frozenset() - - def __init__(self, module, rev_id, path): - self.module = module - self.revision = rev_id - self.path = path - self.down_revision = getattr(module, 'down_revision', None) - - revision = None - """The string revision number for this :class:`.Script` instance.""" - - module = None - """The Python module representing the actual script itself.""" - - path = None - """Filesystem path of the script.""" - - down_revision = None - """The ``down_revision`` identifier within the migration script.""" - - @property - def doc(self): - """Return the docstring given in the script.""" - - return re.split("\n\n", self.longdoc)[0] - - @property - def longdoc(self): - """Return the docstring given in the script.""" - - doc = self.module.__doc__ - if doc: - if hasattr(self.module, "_alembic_source_encoding"): - doc = doc.decode(self.module._alembic_source_encoding) - return doc.strip() - else: - return "" - - def add_nextrev(self, rev): - self.nextrev = self.nextrev.union([rev]) - - @property - def is_head(self): - """Return True if this :class:`.Script` is a 'head' revision. - - This is determined based on whether any other :class:`.Script` - within the :class:`.ScriptDirectory` refers to this - :class:`.Script`. Multiple heads can be present. - - """ - return not bool(self.nextrev) - - @property - def is_branch_point(self): - """Return True if this :class:`.Script` is a branch point. - - A branchpoint is defined as a :class:`.Script` which is referred - to by more than one succeeding :class:`.Script`, that is more - than one :class:`.Script` has a `down_revision` identifier pointing - here. - - """ - return len(self.nextrev) > 1 - - @property - def log_entry(self): - return \ - "Rev: %s%s%s\n" \ - "Parent: %s\n" \ - "Path: %s\n" \ - "\n%s\n" % ( - self.revision, - " (head)" if self.is_head else "", - " (branchpoint)" if self.is_branch_point else "", - self.down_revision, - self.path, - "\n".join( - " %s" % para - for para in self.longdoc.splitlines() - ) - ) - - def __str__(self): - return "%s -> %s%s%s, %s" % ( - self.down_revision, - self.revision, - " (head)" if self.is_head else "", - " (branchpoint)" if self.is_branch_point else "", - self.doc) - - @classmethod - def _from_path(cls, scriptdir, path): - dir_, filename = os.path.split(path) - return cls._from_filename(scriptdir, dir_, filename) - - @classmethod - def _from_filename(cls, scriptdir, dir_, filename): - if scriptdir.sourceless: - py_match = _sourceless_rev_file.match(filename) - else: - py_match = _only_source_rev_file.match(filename) - - if not py_match: - return None - - py_filename = py_match.group(1) - - if scriptdir.sourceless: - is_c = py_match.group(2) == 'c' - is_o = py_match.group(2) == 'o' - else: - is_c = is_o = False - - if is_o or is_c: - py_exists = os.path.exists(os.path.join(dir_, py_filename)) - pyc_exists = os.path.exists(os.path.join(dir_, py_filename + "c")) - - # prefer .py over .pyc because we'd like to get the - # source encoding; prefer .pyc over .pyo because we'd like to - # have the docstrings which a -OO file would not have - if py_exists or is_o and pyc_exists: - return None - - module = util.load_python_file(dir_, filename) - - if not hasattr(module, "revision"): - # attempt to get the revision id from the script name, - # this for legacy only - m = _legacy_rev.match(filename) - if not m: - raise util.CommandError( - "Could not determine revision id from filename %s. " - "Be sure the 'revision' variable is " - "declared inside the script (please see 'Upgrading " - "from Alembic 0.1 to 0.2' in the documentation)." - % filename) - else: - revision = m.group(1) - else: - revision = module.revision - return Script(module, revision, os.path.join(dir_, filename)) diff --git a/Linux_i686/lib/python2.7/site-packages/alembic/templates/generic/README b/Linux_i686/lib/python2.7/site-packages/alembic/templates/generic/README deleted file mode 100644 index 98e4f9c..0000000 --- a/Linux_i686/lib/python2.7/site-packages/alembic/templates/generic/README +++ /dev/null @@ -1 +0,0 @@ -Generic single-database configuration. \ No newline at end of file diff --git a/Linux_i686/lib/python2.7/site-packages/alembic/templates/generic/alembic.ini.mako b/Linux_i686/lib/python2.7/site-packages/alembic/templates/generic/alembic.ini.mako deleted file mode 100644 index a738a24..0000000 --- a/Linux_i686/lib/python2.7/site-packages/alembic/templates/generic/alembic.ini.mako +++ /dev/null @@ -1,59 +0,0 @@ -# A generic, single database configuration. - -[alembic] -# path to migration scripts -script_location = ${script_location} - -# template used to generate migration files -# file_template = %%(rev)s_%%(slug)s - -# max length of characters to apply to the -# "slug" field -#truncate_slug_length = 40 - -# set to 'true' to run the environment during -# the 'revision' command, regardless of autogenerate -# revision_environment = false - -# set to 'true' to allow .pyc and .pyo files without -# a source .py file to be detected as revisions in the -# versions/ directory -# sourceless = false - -sqlalchemy.url = driver://user:pass@localhost/dbname - - -# Logging configuration -[loggers] -keys = root,sqlalchemy,alembic - -[handlers] -keys = console - -[formatters] -keys = generic - -[logger_root] -level = WARN -handlers = console -qualname = - -[logger_sqlalchemy] -level = WARN -handlers = -qualname = sqlalchemy.engine - -[logger_alembic] -level = INFO -handlers = -qualname = alembic - -[handler_console] -class = StreamHandler -args = (sys.stderr,) -level = NOTSET -formatter = generic - -[formatter_generic] -format = %(levelname)-5.5s [%(name)s] %(message)s -datefmt = %H:%M:%S diff --git a/Linux_i686/lib/python2.7/site-packages/alembic/templates/generic/env.py b/Linux_i686/lib/python2.7/site-packages/alembic/templates/generic/env.py deleted file mode 100644 index 712b616..0000000 --- a/Linux_i686/lib/python2.7/site-packages/alembic/templates/generic/env.py +++ /dev/null @@ -1,71 +0,0 @@ -from __future__ import with_statement -from alembic import context -from sqlalchemy import engine_from_config, pool -from logging.config import fileConfig - -# this is the Alembic Config object, which provides -# access to the values within the .ini file in use. -config = context.config - -# Interpret the config file for Python logging. -# This line sets up loggers basically. -fileConfig(config.config_file_name) - -# add your model's MetaData object here -# for 'autogenerate' support -# from myapp import mymodel -# target_metadata = mymodel.Base.metadata -target_metadata = None - -# other values from the config, defined by the needs of env.py, -# can be acquired: -# my_important_option = config.get_main_option("my_important_option") -# ... etc. - -def run_migrations_offline(): - """Run migrations in 'offline' mode. - - This configures the context with just a URL - and not an Engine, though an Engine is acceptable - here as well. By skipping the Engine creation - we don't even need a DBAPI to be available. - - Calls to context.execute() here emit the given string to the - script output. - - """ - url = config.get_main_option("sqlalchemy.url") - context.configure(url=url, target_metadata=target_metadata) - - with context.begin_transaction(): - context.run_migrations() - -def run_migrations_online(): - """Run migrations in 'online' mode. - - In this scenario we need to create an Engine - and associate a connection with the context. - - """ - engine = engine_from_config( - config.get_section(config.config_ini_section), - prefix='sqlalchemy.', - poolclass=pool.NullPool) - - connection = engine.connect() - context.configure( - connection=connection, - target_metadata=target_metadata - ) - - try: - with context.begin_transaction(): - context.run_migrations() - finally: - connection.close() - -if context.is_offline_mode(): - run_migrations_offline() -else: - run_migrations_online() - diff --git a/Linux_i686/lib/python2.7/site-packages/alembic/templates/generic/script.py.mako b/Linux_i686/lib/python2.7/site-packages/alembic/templates/generic/script.py.mako deleted file mode 100644 index 9570201..0000000 --- a/Linux_i686/lib/python2.7/site-packages/alembic/templates/generic/script.py.mako +++ /dev/null @@ -1,22 +0,0 @@ -"""${message} - -Revision ID: ${up_revision} -Revises: ${down_revision} -Create Date: ${create_date} - -""" - -# revision identifiers, used by Alembic. -revision = ${repr(up_revision)} -down_revision = ${repr(down_revision)} - -from alembic import op -import sqlalchemy as sa -${imports if imports else ""} - -def upgrade(): - ${upgrades if upgrades else "pass"} - - -def downgrade(): - ${downgrades if downgrades else "pass"} diff --git a/Linux_i686/lib/python2.7/site-packages/alembic/templates/multidb/README b/Linux_i686/lib/python2.7/site-packages/alembic/templates/multidb/README deleted file mode 100644 index 5db219f..0000000 --- a/Linux_i686/lib/python2.7/site-packages/alembic/templates/multidb/README +++ /dev/null @@ -1 +0,0 @@ -Rudimentary multi-database configuration. \ No newline at end of file diff --git a/Linux_i686/lib/python2.7/site-packages/alembic/templates/multidb/alembic.ini.mako b/Linux_i686/lib/python2.7/site-packages/alembic/templates/multidb/alembic.ini.mako deleted file mode 100644 index 132b246..0000000 --- a/Linux_i686/lib/python2.7/site-packages/alembic/templates/multidb/alembic.ini.mako +++ /dev/null @@ -1,65 +0,0 @@ -# a multi-database configuration. - -[alembic] -# path to migration scripts -script_location = ${script_location} - -# template used to generate migration files -# file_template = %%(rev)s_%%(slug)s - -# max length of characters to apply to the -# "slug" field -#truncate_slug_length = 40 - -# set to 'true' to run the environment during -# the 'revision' command, regardless of autogenerate -# revision_environment = false - -# set to 'true' to allow .pyc and .pyo files without -# a source .py file to be detected as revisions in the -# versions/ directory -# sourceless = false - -databases = engine1, engine2 - -[engine1] -sqlalchemy.url = driver://user:pass@localhost/dbname - -[engine2] -sqlalchemy.url = driver://user:pass@localhost/dbname2 - - -# Logging configuration -[loggers] -keys = root,sqlalchemy,alembic - -[handlers] -keys = console - -[formatters] -keys = generic - -[logger_root] -level = WARN -handlers = console -qualname = - -[logger_sqlalchemy] -level = WARN -handlers = -qualname = sqlalchemy.engine - -[logger_alembic] -level = INFO -handlers = -qualname = alembic - -[handler_console] -class = StreamHandler -args = (sys.stderr,) -level = NOTSET -formatter = generic - -[formatter_generic] -format = %(levelname)-5.5s [%(name)s] %(message)s -datefmt = %H:%M:%S diff --git a/Linux_i686/lib/python2.7/site-packages/alembic/templates/multidb/env.py b/Linux_i686/lib/python2.7/site-packages/alembic/templates/multidb/env.py deleted file mode 100644 index e3511de..0000000 --- a/Linux_i686/lib/python2.7/site-packages/alembic/templates/multidb/env.py +++ /dev/null @@ -1,130 +0,0 @@ -from __future__ import with_statement -from alembic import context -from sqlalchemy import engine_from_config, pool -from logging.config import fileConfig -import logging -import re - -USE_TWOPHASE = False - -# this is the Alembic Config object, which provides -# access to the values within the .ini file in use. -config = context.config - -# Interpret the config file for Python logging. -# This line sets up loggers basically. -fileConfig(config.config_file_name) -logger = logging.getLogger('alembic.env') - -# gather section names referring to different -# databases. These are named "engine1", "engine2" -# in the sample .ini file. -db_names = config.get_main_option('databases') - -# add your model's MetaData objects here -# for 'autogenerate' support. These must be set -# up to hold just those tables targeting a -# particular database. table.tometadata() may be -# helpful here in case a "copy" of -# a MetaData is needed. -# from myapp import mymodel -# target_metadata = { -# 'engine1':mymodel.metadata1, -# 'engine2':mymodel.metadata2 -#} -target_metadata = {} - -# other values from the config, defined by the needs of env.py, -# can be acquired: -# my_important_option = config.get_main_option("my_important_option") -# ... etc. - -def run_migrations_offline(): - """Run migrations in 'offline' mode. - - This configures the context with just a URL - and not an Engine, though an Engine is acceptable - here as well. By skipping the Engine creation - we don't even need a DBAPI to be available. - - Calls to context.execute() here emit the given string to the - script output. - - """ - # for the --sql use case, run migrations for each URL into - # individual files. - - engines = {} - for name in re.split(r',\s*', db_names): - engines[name] = rec = {} - rec['url'] = context.config.get_section_option(name, - "sqlalchemy.url") - - for name, rec in engines.items(): - logger.info("Migrating database %s" % name) - file_ = "%s.sql" % name - logger.info("Writing output to %s" % file_) - with open(file_, 'w') as buffer: - context.configure(url=rec['url'], output_buffer=buffer, - target_metadata=target_metadata.get(name)) - with context.begin_transaction(): - context.run_migrations(engine_name=name) - -def run_migrations_online(): - """Run migrations in 'online' mode. - - In this scenario we need to create an Engine - and associate a connection with the context. - - """ - - # for the direct-to-DB use case, start a transaction on all - # engines, then run all migrations, then commit all transactions. - - engines = {} - for name in re.split(r',\s*', db_names): - engines[name] = rec = {} - rec['engine'] = engine_from_config( - context.config.get_section(name), - prefix='sqlalchemy.', - poolclass=pool.NullPool) - - for name, rec in engines.items(): - engine = rec['engine'] - rec['connection'] = conn = engine.connect() - - if USE_TWOPHASE: - rec['transaction'] = conn.begin_twophase() - else: - rec['transaction'] = conn.begin() - - try: - for name, rec in engines.items(): - logger.info("Migrating database %s" % name) - context.configure( - connection=rec['connection'], - upgrade_token="%s_upgrades" % name, - downgrade_token="%s_downgrades" % name, - target_metadata=target_metadata.get(name) - ) - context.run_migrations(engine_name=name) - - if USE_TWOPHASE: - for rec in engines.values(): - rec['transaction'].prepare() - - for rec in engines.values(): - rec['transaction'].commit() - except: - for rec in engines.values(): - rec['transaction'].rollback() - raise - finally: - for rec in engines.values(): - rec['connection'].close() - - -if context.is_offline_mode(): - run_migrations_offline() -else: - run_migrations_online() diff --git a/Linux_i686/lib/python2.7/site-packages/alembic/templates/multidb/script.py.mako b/Linux_i686/lib/python2.7/site-packages/alembic/templates/multidb/script.py.mako deleted file mode 100644 index 1e7f79a..0000000 --- a/Linux_i686/lib/python2.7/site-packages/alembic/templates/multidb/script.py.mako +++ /dev/null @@ -1,43 +0,0 @@ -<%! -import re - -%>"""${message} - -Revision ID: ${up_revision} -Revises: ${down_revision} -Create Date: ${create_date} - -""" - -# revision identifiers, used by Alembic. -revision = ${repr(up_revision)} -down_revision = ${repr(down_revision)} - -from alembic import op -import sqlalchemy as sa -${imports if imports else ""} - -def upgrade(engine_name): - eval("upgrade_%s" % engine_name)() - - -def downgrade(engine_name): - eval("downgrade_%s" % engine_name)() - -<% - db_names = config.get_main_option("databases") -%> - -## generate an "upgrade_() / downgrade_()" function -## for each database name in the ini file. - -% for db_name in re.split(r',\s*', db_names): - -def upgrade_${db_name}(): - ${context.get("%s_upgrades" % db_name, "pass")} - - -def downgrade_${db_name}(): - ${context.get("%s_downgrades" % db_name, "pass")} - -% endfor diff --git a/Linux_i686/lib/python2.7/site-packages/alembic/templates/pylons/README b/Linux_i686/lib/python2.7/site-packages/alembic/templates/pylons/README deleted file mode 100644 index ed3c28e..0000000 --- a/Linux_i686/lib/python2.7/site-packages/alembic/templates/pylons/README +++ /dev/null @@ -1 +0,0 @@ -Configuration that reads from a Pylons project environment. \ No newline at end of file diff --git a/Linux_i686/lib/python2.7/site-packages/alembic/templates/pylons/alembic.ini.mako b/Linux_i686/lib/python2.7/site-packages/alembic/templates/pylons/alembic.ini.mako deleted file mode 100644 index 771c027..0000000 --- a/Linux_i686/lib/python2.7/site-packages/alembic/templates/pylons/alembic.ini.mako +++ /dev/null @@ -1,25 +0,0 @@ -# a Pylons configuration. - -[alembic] -# path to migration scripts -script_location = ${script_location} - -# template used to generate migration files -# file_template = %%(rev)s_%%(slug)s - -# max length of characters to apply to the -# "slug" field -#truncate_slug_length = 40 - -# set to 'true' to run the environment during -# the 'revision' command, regardless of autogenerate -# revision_environment = false - -# set to 'true' to allow .pyc and .pyo files without -# a source .py file to be detected as revisions in the -# versions/ directory -# sourceless = false - -pylons_config_file = ./development.ini - -# that's it ! \ No newline at end of file diff --git a/Linux_i686/lib/python2.7/site-packages/alembic/templates/pylons/env.py b/Linux_i686/lib/python2.7/site-packages/alembic/templates/pylons/env.py deleted file mode 100644 index 36c3fca..0000000 --- a/Linux_i686/lib/python2.7/site-packages/alembic/templates/pylons/env.py +++ /dev/null @@ -1,86 +0,0 @@ -"""Pylons bootstrap environment. - -Place 'pylons_config_file' into alembic.ini, and the application will -be loaded from there. - -""" -from alembic import context -from paste.deploy import loadapp -from logging.config import fileConfig -from sqlalchemy.engine.base import Engine - - -try: - # if pylons app already in, don't create a new app - from pylons import config as pylons_config - pylons_config['__file__'] -except: - config = context.config - # can use config['__file__'] here, i.e. the Pylons - # ini file, instead of alembic.ini - config_file = config.get_main_option('pylons_config_file') - fileConfig(config_file) - wsgi_app = loadapp('config:%s' % config_file, relative_to='.') - - -# customize this section for non-standard engine configurations. -meta = __import__("%s.model.meta" % wsgi_app.config['pylons.package']).model.meta - -# add your model's MetaData object here -# for 'autogenerate' support -# from myapp import mymodel -# target_metadata = mymodel.Base.metadata -target_metadata = None - - -def run_migrations_offline(): - """Run migrations in 'offline' mode. - - This configures the context with just a URL - and not an Engine, though an Engine is acceptable - here as well. By skipping the Engine creation - we don't even need a DBAPI to be available. - - Calls to context.execute() here emit the given string to the - script output. - - """ - context.configure( - url=meta.engine.url, target_metadata=target_metadata) - with context.begin_transaction(): - context.run_migrations() - - -def run_migrations_online(): - """Run migrations in 'online' mode. - - In this scenario we need to create an Engine - and associate a connection with the context. - - """ - # specify here how the engine is acquired - # engine = meta.engine - raise NotImplementedError("Please specify engine connectivity here") - - if isinstance(engine, Engine): - connection = engine.connect() - else: - raise Exception( - 'Expected engine instance got %s instead' % type(engine) - ) - - context.configure( - connection=connection, - target_metadata=target_metadata - ) - - try: - with context.begin_transaction(): - context.run_migrations() - finally: - connection.close() - -if context.is_offline_mode(): - run_migrations_offline() -else: - run_migrations_online() diff --git a/Linux_i686/lib/python2.7/site-packages/alembic/templates/pylons/script.py.mako b/Linux_i686/lib/python2.7/site-packages/alembic/templates/pylons/script.py.mako deleted file mode 100644 index 9570201..0000000 --- a/Linux_i686/lib/python2.7/site-packages/alembic/templates/pylons/script.py.mako +++ /dev/null @@ -1,22 +0,0 @@ -"""${message} - -Revision ID: ${up_revision} -Revises: ${down_revision} -Create Date: ${create_date} - -""" - -# revision identifiers, used by Alembic. -revision = ${repr(up_revision)} -down_revision = ${repr(down_revision)} - -from alembic import op -import sqlalchemy as sa -${imports if imports else ""} - -def upgrade(): - ${upgrades if upgrades else "pass"} - - -def downgrade(): - ${downgrades if downgrades else "pass"} diff --git a/Linux_i686/lib/python2.7/site-packages/alembic/util.py b/Linux_i686/lib/python2.7/site-packages/alembic/util.py deleted file mode 100644 index 63e9269..0000000 --- a/Linux_i686/lib/python2.7/site-packages/alembic/util.py +++ /dev/null @@ -1,348 +0,0 @@ -import sys -import os -import textwrap -import warnings -import re -import inspect -import uuid - -from mako.template import Template -from sqlalchemy.engine import url -from sqlalchemy import __version__ - -from .compat import callable, exec_, load_module_py, load_module_pyc, binary_type - -class CommandError(Exception): - pass - -def _safe_int(value): - try: - return int(value) - except: - return value -_vers = tuple([_safe_int(x) for x in re.findall(r'(\d+|[abc]\d)', __version__)]) -sqla_07 = _vers > (0, 7, 2) -sqla_08 = _vers >= (0, 8, 0, 'b2') -sqla_09 = _vers >= (0, 9, 0) -sqla_092 = _vers >= (0, 9, 2) -sqla_094 = _vers >= (0, 9, 4) -if not sqla_07: - raise CommandError( - "SQLAlchemy 0.7.3 or greater is required. ") - -from sqlalchemy.util import format_argspec_plus, update_wrapper -from sqlalchemy.util.compat import inspect_getfullargspec - - -try: - import fcntl - import termios - import struct - ioctl = fcntl.ioctl(0, termios.TIOCGWINSZ, - struct.pack('HHHH', 0, 0, 0, 0)) - _h, TERMWIDTH, _hp, _wp = struct.unpack('HHHH', ioctl) - if TERMWIDTH <= 0: # can occur if running in emacs pseudo-tty - TERMWIDTH = None -except (ImportError, IOError): - TERMWIDTH = None - - -def template_to_file(template_file, dest, **kw): - with open(dest, 'w') as f: - f.write( - Template(filename=template_file).render(**kw) - ) - -def create_module_class_proxy(cls, globals_, locals_): - """Create module level proxy functions for the - methods on a given class. - - The functions will have a compatible signature - as the methods. A proxy is established - using the ``_install_proxy(obj)`` function, - and removed using ``_remove_proxy()``, both - installed by calling this function. - - """ - attr_names = set() - - def _install_proxy(obj): - globals_['_proxy'] = obj - for name in attr_names: - globals_[name] = getattr(obj, name) - - def _remove_proxy(): - globals_['_proxy'] = None - for name in attr_names: - del globals_[name] - - globals_['_install_proxy'] = _install_proxy - globals_['_remove_proxy'] = _remove_proxy - - def _create_op_proxy(name): - fn = getattr(cls, name) - spec = inspect.getargspec(fn) - if spec[0] and spec[0][0] == 'self': - spec[0].pop(0) - args = inspect.formatargspec(*spec) - num_defaults = 0 - if spec[3]: - num_defaults += len(spec[3]) - name_args = spec[0] - if num_defaults: - defaulted_vals = name_args[0 - num_defaults:] - else: - defaulted_vals = () - - apply_kw = inspect.formatargspec( - name_args, spec[1], spec[2], - defaulted_vals, - formatvalue=lambda x: '=' + x) - - def _name_error(name): - raise NameError( - "Can't invoke function '%s', as the proxy object has "\ - "not yet been " - "established for the Alembic '%s' class. " - "Try placing this code inside a callable." % ( - name, cls.__name__ - )) - globals_['_name_error'] = _name_error - - func_text = textwrap.dedent("""\ - def %(name)s(%(args)s): - %(doc)r - try: - p = _proxy - except NameError: - _name_error('%(name)s') - return _proxy.%(name)s(%(apply_kw)s) - e - """ % { - 'name': name, - 'args': args[1:-1], - 'apply_kw': apply_kw[1:-1], - 'doc': fn.__doc__, - }) - lcl = {} - exec_(func_text, globals_, lcl) - return lcl[name] - - for methname in dir(cls): - if not methname.startswith('_'): - if callable(getattr(cls, methname)): - locals_[methname] = _create_op_proxy(methname) - else: - attr_names.add(methname) - -def write_outstream(stream, *text): - encoding = getattr(stream, 'encoding', 'ascii') or 'ascii' - for t in text: - if not isinstance(t, binary_type): - t = t.encode(encoding, 'replace') - t = t.decode(encoding) - try: - stream.write(t) - except IOError: - # suppress "broken pipe" errors. - # no known way to handle this on Python 3 however - # as the exception is "ignored" (noisily) in TextIOWrapper. - break - -def coerce_resource_to_filename(fname): - """Interpret a filename as either a filesystem location or as a package resource. - - Names that are non absolute paths and contain a colon - are interpreted as resources and coerced to a file location. - - """ - if not os.path.isabs(fname) and ":" in fname: - import pkg_resources - fname = pkg_resources.resource_filename(*fname.split(':')) - return fname - -def status(_statmsg, fn, *arg, **kw): - msg(_statmsg + " ...", False) - try: - ret = fn(*arg, **kw) - write_outstream(sys.stdout, " done\n") - return ret - except: - write_outstream(sys.stdout, " FAILED\n") - raise - -def err(message): - msg(message) - sys.exit(-1) - -def obfuscate_url_pw(u): - u = url.make_url(u) - if u.password: - u.password = 'XXXXX' - return str(u) - -def asbool(value): - return value is not None and \ - value.lower() == 'true' - -def warn(msg): - warnings.warn(msg) - -def msg(msg, newline=True): - if TERMWIDTH is None: - write_outstream(sys.stdout, msg) - if newline: - write_outstream(sys.stdout, "\n") - else: - # left indent output lines - lines = textwrap.wrap(msg, TERMWIDTH) - if len(lines) > 1: - for line in lines[0:-1]: - write_outstream(sys.stdout, " ", line, "\n") - write_outstream(sys.stdout, " ", lines[-1], ("\n" if newline else "")) - -def load_python_file(dir_, filename): - """Load a file from the given path as a Python module.""" - - module_id = re.sub(r'\W', "_", filename) - path = os.path.join(dir_, filename) - _, ext = os.path.splitext(filename) - if ext == ".py": - if os.path.exists(path): - module = load_module_py(module_id, path) - elif os.path.exists(simple_pyc_file_from_path(path)): - # look for sourceless load - module = load_module_pyc(module_id, simple_pyc_file_from_path(path)) - else: - raise ImportError("Can't find Python file %s" % path) - elif ext in (".pyc", ".pyo"): - module = load_module_pyc(module_id, path) - del sys.modules[module_id] - return module - -def simple_pyc_file_from_path(path): - """Given a python source path, return the so-called - "sourceless" .pyc or .pyo path. - - This just a .pyc or .pyo file where the .py file would be. - - Even with PEP-3147, which normally puts .pyc/.pyo files in __pycache__, - this use case remains supported as a so-called "sourceless module import". - - """ - if sys.flags.optimize: - return path + "o" # e.g. .pyo - else: - return path + "c" # e.g. .pyc - -def pyc_file_from_path(path): - """Given a python source path, locate the .pyc. - - See http://www.python.org/dev/peps/pep-3147/ - #detecting-pep-3147-availability - http://www.python.org/dev/peps/pep-3147/#file-extension-checks - - """ - import imp - has3147 = hasattr(imp, 'get_tag') - if has3147: - return imp.cache_from_source(path) - else: - return simple_pyc_file_from_path(path) - -def rev_id(): - val = int(uuid.uuid4()) % 100000000000000 - return hex(val)[2:-1] - -class memoized_property(object): - """A read-only @property that is only evaluated once.""" - - def __init__(self, fget, doc=None): - self.fget = fget - self.__doc__ = doc or fget.__doc__ - self.__name__ = fget.__name__ - - def __get__(self, obj, cls): - if obj is None: - return None - obj.__dict__[self.__name__] = result = self.fget(obj) - return result - - -class immutabledict(dict): - - def _immutable(self, *arg, **kw): - raise TypeError("%s object is immutable" % self.__class__.__name__) - - __delitem__ = __setitem__ = __setattr__ = \ - clear = pop = popitem = setdefault = \ - update = _immutable - - def __new__(cls, *args): - new = dict.__new__(cls) - dict.__init__(new, *args) - return new - - def __init__(self, *args): - pass - - def __reduce__(self): - return immutabledict, (dict(self), ) - - def union(self, d): - if not self: - return immutabledict(d) - else: - d2 = immutabledict(self) - dict.update(d2, d) - return d2 - - def __repr__(self): - return "immutabledict(%s)" % dict.__repr__(self) - - -def _with_legacy_names(translations): - def decorate(fn): - - spec = inspect_getfullargspec(fn) - metadata = dict(target='target', fn='fn') - metadata.update(format_argspec_plus(spec, grouped=False)) - - has_keywords = bool(spec[2]) - - if not has_keywords: - metadata['args'] += ", **kw" - metadata['apply_kw'] += ", **kw" - - def go(*arg, **kw): - names = set(kw).difference(spec[0]) - for oldname, newname in translations: - if oldname in kw: - kw[newname] = kw.pop(oldname) - names.discard(oldname) - - warnings.warn( - "Argument '%s' is now named '%s' for function '%s'" % - (oldname, newname, fn.__name__)) - if not has_keywords and names: - raise TypeError("Unknown arguments: %s" % ", ".join(names)) - return fn(*arg, **kw) - - code = 'lambda %(args)s: %(target)s(%(apply_kw)s)' % ( - metadata) - decorated = eval(code, {"target": go}) - decorated.__defaults__ = getattr(fn, '__func__', fn).__defaults__ - update_wrapper(decorated, fn) - if hasattr(decorated, '__wrapped__'): - # update_wrapper in py3k applies __wrapped__, which causes - # inspect.getargspec() to ignore the extra arguments on our - # wrapper as of Python 3.4. We need this for the - # "module class proxy" thing though, so just del the __wrapped__ - # for now. See #175 as well as bugs.python.org/issue17482 - del decorated.__wrapped__ - return decorated - - return decorate - - - diff --git a/Linux_i686/lib/python2.7/site-packages/cffi-0.8.2.egg-info/dependency_links.txt b/Linux_i686/lib/python2.7/site-packages/cffi-0.8.2.egg-info/dependency_links.txt deleted file mode 100644 index 8b13789..0000000 --- a/Linux_i686/lib/python2.7/site-packages/cffi-0.8.2.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/Linux_i686/lib/python2.7/site-packages/cffi-0.8.2.egg-info/not-zip-safe b/Linux_i686/lib/python2.7/site-packages/cffi-0.8.2.egg-info/not-zip-safe deleted file mode 100644 index 8b13789..0000000 --- a/Linux_i686/lib/python2.7/site-packages/cffi-0.8.2.egg-info/not-zip-safe +++ /dev/null @@ -1 +0,0 @@ - diff --git a/Linux_i686/lib/python2.7/site-packages/cffi-0.8.2.egg-info/PKG-INFO b/Linux_i686/lib/python2.7/site-packages/cffi-0.8.6.egg-info/PKG-INFO similarity index 98% rename from Linux_i686/lib/python2.7/site-packages/cffi-0.8.2.egg-info/PKG-INFO rename to Linux_i686/lib/python2.7/site-packages/cffi-0.8.6.egg-info/PKG-INFO index 23f2982..e19ce47 100644 --- a/Linux_i686/lib/python2.7/site-packages/cffi-0.8.2.egg-info/PKG-INFO +++ b/Linux_i686/lib/python2.7/site-packages/cffi-0.8.6.egg-info/PKG-INFO @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: cffi -Version: 0.8.2 +Version: 0.8.6 Summary: Foreign Function Interface for Python calling C code. Home-page: http://cffi.readthedocs.org Author: Armin Rigo, Maciej Fijalkowski diff --git a/Linux_i686/lib/python2.7/site-packages/cffi-0.8.2.egg-info/SOURCES.txt b/Linux_i686/lib/python2.7/site-packages/cffi-0.8.6.egg-info/SOURCES.txt similarity index 81% rename from Linux_i686/lib/python2.7/site-packages/cffi-0.8.2.egg-info/SOURCES.txt rename to Linux_i686/lib/python2.7/site-packages/cffi-0.8.6.egg-info/SOURCES.txt index 0fe9fb2..599d5cc 100644 --- a/Linux_i686/lib/python2.7/site-packages/cffi-0.8.2.egg-info/SOURCES.txt +++ b/Linux_i686/lib/python2.7/site-packages/cffi-0.8.6.egg-info/SOURCES.txt @@ -4,7 +4,6 @@ setup.cfg setup.py setup_base.py c/_cffi_backend.c -c/check__thread.c c/file_emulator.h c/malloc_closure.h c/minibuffer.h @@ -12,7 +11,6 @@ c/misc_thread.h c/misc_win32.h c/test_c.py c/wchar_helper.h -c/x.py c/libffi_msvc/ffi.c c/libffi_msvc/ffi.h c/libffi_msvc/ffi_common.h @@ -41,7 +39,6 @@ cffi.egg-info/dependency_links.txt cffi.egg-info/not-zip-safe cffi.egg-info/requires.txt cffi.egg-info/top_level.txt -demo/_csvmodule.py demo/_curses.py demo/api.py demo/bsdopendirtype.py @@ -49,20 +46,15 @@ demo/btrfs-snap.py demo/cffi-cocoa.py demo/fastcsv.py demo/gmp.py -demo/image.py demo/pwuid.py demo/py.cleanup demo/pyobj.py demo/readdir.py demo/readdir2.py demo/readdir_ctypes.py -demo/sarvi.py demo/setup.py -demo/syslog.py -demo/ui.py demo/winclipboard.py demo/xclient.py -demo/y.py doc/Makefile doc/design.rst doc/make.bat @@ -91,22 +83,22 @@ testing/test_zintegration.py testing/udir.py testing/snippets/distutils_module/setup.py testing/snippets/distutils_module/snip_basic_verify.py -testing/snippets/distutils_module/build/lib.linux-x86_64-3.2/snip_basic_verify.py +testing/snippets/distutils_module/build/lib.linux-x86_64-2.7/snip_basic_verify.py testing/snippets/distutils_package_1/setup.py -testing/snippets/distutils_package_1/build/lib.linux-x86_64-3.2/snip_basic_verify1/__init__.py +testing/snippets/distutils_package_1/build/lib.linux-x86_64-2.7/snip_basic_verify1/__init__.py testing/snippets/distutils_package_1/snip_basic_verify1/__init__.py testing/snippets/distutils_package_2/setup.py -testing/snippets/distutils_package_2/build/lib.linux-x86_64-3.2/snip_basic_verify2/__init__.py +testing/snippets/distutils_package_2/build/lib.linux-x86_64-2.7/snip_basic_verify2/__init__.py testing/snippets/distutils_package_2/snip_basic_verify2/__init__.py testing/snippets/infrastructure/setup.py -testing/snippets/infrastructure/build/lib/snip_infrastructure/__init__.py +testing/snippets/infrastructure/build/lib.linux-x86_64-2.7/snip_infrastructure/__init__.py testing/snippets/infrastructure/snip_infrastructure/__init__.py testing/snippets/setuptools_module/setup.py testing/snippets/setuptools_module/snip_setuptools_verify.py -testing/snippets/setuptools_module/build/lib.linux-x86_64-3.2/snip_setuptools_verify.py +testing/snippets/setuptools_module/build/lib.linux-x86_64-2.7/snip_setuptools_verify.py testing/snippets/setuptools_package_1/setup.py -testing/snippets/setuptools_package_1/build/lib.linux-x86_64-3.2/snip_setuptools_verify1/__init__.py +testing/snippets/setuptools_package_1/build/lib.linux-x86_64-2.7/snip_setuptools_verify1/__init__.py testing/snippets/setuptools_package_1/snip_setuptools_verify1/__init__.py testing/snippets/setuptools_package_2/setup.py -testing/snippets/setuptools_package_2/build/lib.linux-x86_64-3.2/snip_setuptools_verify2/__init__.py +testing/snippets/setuptools_package_2/build/lib.linux-x86_64-2.7/snip_setuptools_verify2/__init__.py testing/snippets/setuptools_package_2/snip_setuptools_verify2/__init__.py \ No newline at end of file diff --git a/Linux_i686/lib/python2.7/site-packages/Flask-0.10.1.egg-info/dependency_links.txt b/Linux_i686/lib/python2.7/site-packages/cffi-0.8.6.egg-info/dependency_links.txt similarity index 100% rename from Linux_i686/lib/python2.7/site-packages/Flask-0.10.1.egg-info/dependency_links.txt rename to Linux_i686/lib/python2.7/site-packages/cffi-0.8.6.egg-info/dependency_links.txt diff --git a/Linux_i686/lib/python2.7/site-packages/cffi-0.8.2.egg-info/installed-files.txt b/Linux_i686/lib/python2.7/site-packages/cffi-0.8.6.egg-info/installed-files.txt similarity index 100% rename from Linux_i686/lib/python2.7/site-packages/cffi-0.8.2.egg-info/installed-files.txt rename to Linux_i686/lib/python2.7/site-packages/cffi-0.8.6.egg-info/installed-files.txt diff --git a/Linux_i686/lib/python2.7/site-packages/Flask-0.10.1.egg-info/not-zip-safe b/Linux_i686/lib/python2.7/site-packages/cffi-0.8.6.egg-info/not-zip-safe similarity index 100% rename from Linux_i686/lib/python2.7/site-packages/Flask-0.10.1.egg-info/not-zip-safe rename to Linux_i686/lib/python2.7/site-packages/cffi-0.8.6.egg-info/not-zip-safe diff --git a/Linux_i686/lib/python2.7/site-packages/cffi-0.8.2.egg-info/requires.txt b/Linux_i686/lib/python2.7/site-packages/cffi-0.8.6.egg-info/requires.txt similarity index 100% rename from Linux_i686/lib/python2.7/site-packages/cffi-0.8.2.egg-info/requires.txt rename to Linux_i686/lib/python2.7/site-packages/cffi-0.8.6.egg-info/requires.txt diff --git a/Linux_i686/lib/python2.7/site-packages/cffi-0.8.2.egg-info/top_level.txt b/Linux_i686/lib/python2.7/site-packages/cffi-0.8.6.egg-info/top_level.txt similarity index 100% rename from Linux_i686/lib/python2.7/site-packages/cffi-0.8.2.egg-info/top_level.txt rename to Linux_i686/lib/python2.7/site-packages/cffi-0.8.6.egg-info/top_level.txt diff --git a/Linux_i686/lib/python2.7/site-packages/cffi/__init__.py b/Linux_i686/lib/python2.7/site-packages/cffi/__init__.py index fa9e86f..df981fd 100644 --- a/Linux_i686/lib/python2.7/site-packages/cffi/__init__.py +++ b/Linux_i686/lib/python2.7/site-packages/cffi/__init__.py @@ -4,5 +4,5 @@ __all__ = ['FFI', 'VerificationError', 'VerificationMissing', 'CDefError', from .api import FFI, CDefError, FFIError from .ffiplatform import VerificationError, VerificationMissing -__version__ = "0.8.2" -__version_info__ = (0, 8, 2) +__version__ = "0.8.6" +__version_info__ = (0, 8, 6) diff --git a/Linux_i686/lib/python2.7/site-packages/cffi/api.py b/Linux_i686/lib/python2.7/site-packages/cffi/api.py index f44f086..aed9715 100644 --- a/Linux_i686/lib/python2.7/site-packages/cffi/api.py +++ b/Linux_i686/lib/python2.7/site-packages/cffi/api.py @@ -55,8 +55,7 @@ class FFI(object): # _cffi_backend.so compiled. import _cffi_backend as backend from . import __version__ - assert (backend.__version__ == __version__ or - backend.__version__ == __version__[:3]) + assert backend.__version__ == __version__ # (If you insist you can also try to pass the option # 'backend=backend_ctypes.CTypesBackend()', but don't # rely on it! It's probably not going to work well.) @@ -443,6 +442,10 @@ def _make_ffi_library(ffi, libname, flags): for enumname, enumval in zip(tp.enumerators, tp.enumvalues): if enumname not in library.__dict__: library.__dict__[enumname] = enumval + for key, val in ffi._parser._int_constants.items(): + if key not in library.__dict__: + library.__dict__[key] = val + copied_enums.append(True) if name in library.__dict__: return diff --git a/Linux_i686/lib/python2.7/site-packages/cffi/cparser.py b/Linux_i686/lib/python2.7/site-packages/cffi/cparser.py index 99998ac..a53d4c3 100644 --- a/Linux_i686/lib/python2.7/site-packages/cffi/cparser.py +++ b/Linux_i686/lib/python2.7/site-packages/cffi/cparser.py @@ -24,6 +24,7 @@ _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]+u?l?$", re.IGNORECASE) def _get_parser(): global _parser_cache @@ -99,6 +100,7 @@ class Parser(object): self._structnode2type = weakref.WeakKeyDictionary() self._override = False self._packed = False + self._int_constants = {} def _parse(self, csource): csource, macros = _preprocess(csource) @@ -128,9 +130,10 @@ class Parser(object): finally: if lock is not None: lock.release() - return ast, macros + # csource will be used to find buggy source text + return ast, macros, csource - def convert_pycparser_error(self, e, csource): + def _convert_pycparser_error(self, e, csource): # xxx look for ":NUM:" at the start of str(e) and try to interpret # it as a line number line = None @@ -142,6 +145,12 @@ class Parser(object): 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: @@ -160,14 +169,9 @@ class Parser(object): self._packed = prev_packed def _internal_parse(self, csource): - ast, macros = self._parse(csource) + ast, macros, csource = self._parse(csource) # add the macros - for key, value in macros.items(): - value = value.strip() - if value != '...': - raise api.CDefError('only supports the syntax "#define ' - '%s ..." for now (literally)' % key) - self._declare('macro ' + key, value) + 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) @@ -175,27 +179,61 @@ class Parser(object): if decl.name == '__dotdotdot__': break # - for decl in iterator: - if isinstance(decl, pycparser.c_ast.Decl): - self._parse_decl(decl) - elif isinstance(decl, pycparser.c_ast.Typedef): - if not decl.name: - raise api.CDefError("typedef does not declare any name", - decl) - if (isinstance(decl.type.type, pycparser.c_ast.IdentifierType) - and decl.type.type.names == ['__dotdotdot__']): - realtype = model.unknown_type(decl.name) - 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 == ['__dotdotdot__']): - realtype = model.unknown_ptr_type(decl.name) + try: + for decl in iterator: + if isinstance(decl, pycparser.c_ast.Decl): + self._parse_decl(decl) + elif isinstance(decl, pycparser.c_ast.Typedef): + if not decl.name: + raise api.CDefError("typedef does not declare any name", + decl) + if (isinstance(decl.type.type, pycparser.c_ast.IdentifierType) + and decl.type.type.names == ['__dotdotdot__']): + realtype = model.unknown_type(decl.name) + 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 == ['__dotdotdot__']): + realtype = model.unknown_ptr_type(decl.name) + else: + realtype = self._get_type(decl.type, name=decl.name) + self._declare('typedef ' + decl.name, realtype) else: - realtype = self._get_type(decl.type, name=decl.name) - self._declare('typedef ' + decl.name, realtype) + raise api.CDefError("unrecognized construct", decl) + except api.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: + raise api.FFIError( + "multiple declarations of constant: %s" % (key,)) + self._int_constants[key] = val + + def _process_macros(self, macros): + for key, value in macros.items(): + value = value.strip() + match = _r_int_literal.search(value) + if match is not None: + int_str = match.group(0).lower().rstrip("ul") + + # "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) + self._add_constants(key, pyvalue) + elif value == '...': + self._declare('macro ' + key, value) else: - raise api.CDefError("unrecognized construct", decl) + raise api.CDefError('only supports the syntax "#define ' + '%s ..." (literally) or "#define ' + '%s 0x1FF" for now' % (key, key)) def _parse_decl(self, decl): node = decl.type @@ -227,7 +265,7 @@ class Parser(object): self._declare('variable ' + decl.name, tp) def parse_type(self, cdecl): - ast, macros = self._parse('void __dummy(\n%s\n);' % 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): @@ -306,7 +344,8 @@ class Parser(object): if ident == 'void': return model.void_type if ident == '__dotdotdot__': - raise api.FFIError('bad usage of "..."') + raise api.FFIError(':%d: bad usage of "..."' % + typenode.coord.line) return resolve_common_type(ident) # if isinstance(type, pycparser.c_ast.Struct): @@ -333,7 +372,8 @@ class Parser(object): return self._get_struct_union_enum_type('union', typenode, name, nested=True) # - raise api.FFIError("bad or unsupported type declaration") + raise api.FFIError(":%d: bad or unsupported type declaration" % + typenode.coord.line) def _parse_function_type(self, typenode, funcname=None): params = list(getattr(typenode.args, 'params', [])) @@ -499,6 +539,10 @@ class Parser(object): 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 partial_length_ok: if (isinstance(exprnode, pycparser.c_ast.ID) and @@ -506,8 +550,8 @@ class Parser(object): self._partial_length = True return '...' # - raise api.FFIError("unsupported expression: expected a " - "simple numeric constant") + raise api.FFIError(":%d: unsupported expression: expected a " + "simple numeric constant" % exprnode.coord.line) def _build_enum_type(self, explicit_name, decls): if decls is not None: @@ -522,6 +566,7 @@ class Parser(object): if enum.value is not None: nextenumvalue = self._parse_constant(enum.value) enumvalues.append(nextenumvalue) + self._add_constants(enum.name, nextenumvalue) nextenumvalue += 1 enumvalues = tuple(enumvalues) tp = model.EnumType(explicit_name, enumerators, enumvalues) @@ -535,3 +580,5 @@ class Parser(object): kind = name.split(' ', 1)[0] if kind in ('typedef', 'struct', 'union', 'enum'): self._declare(name, tp) + for k, v in other._int_constants.items(): + self._add_constants(k, v) diff --git a/Linux_i686/lib/python2.7/site-packages/cffi/ffiplatform.py b/Linux_i686/lib/python2.7/site-packages/cffi/ffiplatform.py index 460ba90..4515d6c 100644 --- a/Linux_i686/lib/python2.7/site-packages/cffi/ffiplatform.py +++ b/Linux_i686/lib/python2.7/site-packages/cffi/ffiplatform.py @@ -38,6 +38,7 @@ def _build(tmpdir, ext): import distutils.errors # dist = Distribution({'ext_modules': [ext]}) + dist.parse_config_files() options = dist.get_option_dict('build_ext') options['force'] = ('ffiplatform', True) options['build_lib'] = ('ffiplatform', tmpdir) diff --git a/Linux_i686/lib/python2.7/site-packages/cffi/vengine_cpy.py b/Linux_i686/lib/python2.7/site-packages/cffi/vengine_cpy.py index d9af334..31793f0 100644 --- a/Linux_i686/lib/python2.7/site-packages/cffi/vengine_cpy.py +++ b/Linux_i686/lib/python2.7/site-packages/cffi/vengine_cpy.py @@ -89,43 +89,54 @@ class VCPythonEngine(object): # by generate_cpy_function_method(). prnt('static PyMethodDef _cffi_methods[] = {') self._generate("method") - prnt(' {"_cffi_setup", _cffi_setup, METH_VARARGS},') - prnt(' {NULL, NULL} /* Sentinel */') + prnt(' {"_cffi_setup", _cffi_setup, METH_VARARGS, NULL},') + prnt(' {NULL, NULL, 0, NULL} /* Sentinel */') prnt('};') prnt() # # standard init. modname = self.verifier.get_module_name() - if sys.version_info >= (3,): - 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() - initname = 'PyInit_%s' % modname - createmod = 'PyModule_Create(&_cffi_module_def)' - errorcase = 'return NULL' - finalreturn = 'return lib' - else: - initname = 'init%s' % modname - createmod = 'Py_InitModule("%s", _cffi_methods)' % modname - errorcase = 'return' - finalreturn = 'return' + 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('%s(void)' % initname) + prnt('PyInit_%s(void)' % modname) prnt('{') prnt(' PyObject *lib;') - prnt(' lib = %s;' % createmod) - prnt(' if (lib == NULL || %s < 0)' % ( - self._chained_list_constants[False],)) - prnt(' %s;' % errorcase) - prnt(' _cffi_init();') - prnt(' %s;' % finalreturn) + 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): # XXX review all usages of 'self' here! @@ -394,7 +405,7 @@ class VCPythonEngine(object): meth = 'METH_O' else: meth = 'METH_VARARGS' - self._prnt(' {"%s", _cffi_f_%s, %s},' % (name, name, meth)) + self._prnt(' {"%s", _cffi_f_%s, %s, NULL},' % (name, name, meth)) _loading_cpy_function = _loaded_noop @@ -481,8 +492,8 @@ class VCPythonEngine(object): 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},' % (layoutfuncname, - layoutfuncname)) + self._prnt(' {"%s", %s, METH_NOARGS, NULL},' % (layoutfuncname, + layoutfuncname)) def _loading_struct_or_union(self, tp, prefix, name, module): if tp.fldnames is None: @@ -589,13 +600,7 @@ class VCPythonEngine(object): 'variable type'),)) assert delayed else: - prnt(' if (LONG_MIN <= (%s) && (%s) <= LONG_MAX)' % (name, name)) - prnt(' o = PyInt_FromLong((long)(%s));' % (name,)) - prnt(' else if ((%s) <= 0)' % (name,)) - prnt(' o = PyLong_FromLongLong((long long)(%s));' % (name,)) - prnt(' else') - prnt(' o = PyLong_FromUnsignedLongLong(' - '(unsigned long long)(%s));' % (name,)) + prnt(' o = _cffi_from_c_int_const(%s);' % name) prnt(' if (o == NULL)') prnt(' return -1;') if size_too: @@ -632,13 +637,18 @@ class VCPythonEngine(object): # ---------- # enums + 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 = '_cffi_e_%s_%s' % (prefix, name) + funcname = self._enum_funcname(prefix, name) prnt = self._prnt prnt('static int %s(PyObject *lib)' % funcname) prnt('{') @@ -760,17 +770,30 @@ cffimod_header = r''' #include #include -#ifdef MS_WIN32 -#include /* for alloca() */ -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 unsigned char _Bool; +/* this block of #ifs should be kept exactly identical between + c/_cffi_backend.c, cffi/vengine_cpy.py, cffi/vengine_gen.py */ +#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; +# else +# include +# endif +# if _MSC_VER < 1800 /* MSVC < 2013 */ + typedef unsigned char _Bool; +# endif +#else +# include +# if (defined (__SVR4) && defined (__sun)) || defined(_AIX) +# include +# endif #endif #if PY_MAJOR_VERSION < 3 @@ -795,6 +818,15 @@ typedef unsigned char _Bool; #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(x) : \ @@ -804,14 +836,14 @@ typedef unsigned char _Bool; PyLong_FromLongLong(x))) #define _cffi_to_c_int(o, type) \ - (sizeof(type) == 1 ? (((type)-1) > 0 ? _cffi_to_c_u8(o) \ - : _cffi_to_c_i8(o)) : \ - sizeof(type) == 2 ? (((type)-1) > 0 ? _cffi_to_c_u16(o) \ - : _cffi_to_c_i16(o)) : \ - sizeof(type) == 4 ? (((type)-1) > 0 ? _cffi_to_c_u32(o) \ - : _cffi_to_c_i32(o)) : \ - sizeof(type) == 8 ? (((type)-1) > 0 ? _cffi_to_c_u64(o) \ - : _cffi_to_c_i64(o)) : \ + (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), 0)) #define _cffi_to_c_i8 \ @@ -885,25 +917,32 @@ static PyObject *_cffi_setup(PyObject *self, PyObject *args) return PyBool_FromLong(was_alive); } -static void _cffi_init(void) +static int _cffi_init(void) { - PyObject *module = PyImport_ImportModule("_cffi_backend"); - PyObject *c_api_object; + PyObject *module, *c_api_object = NULL; + module = PyImport_ImportModule("_cffi_backend"); if (module == NULL) - return; + goto failure; c_api_object = PyObject_GetAttrString(module, "_C_API"); if (c_api_object == NULL) - return; + goto failure; if (!PyCapsule_CheckExact(c_api_object)) { - Py_DECREF(c_api_object); PyErr_SetNone(PyExc_ImportError); - return; + 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/Linux_i686/lib/python2.7/site-packages/cffi/vengine_gen.py b/Linux_i686/lib/python2.7/site-packages/cffi/vengine_gen.py index f8715c7..133ec7f 100644 --- a/Linux_i686/lib/python2.7/site-packages/cffi/vengine_gen.py +++ b/Linux_i686/lib/python2.7/site-packages/cffi/vengine_gen.py @@ -249,10 +249,10 @@ class VGenericEngine(object): prnt(' /* %s */' % str(e)) # cannot verify it, ignore prnt('}') self.export_symbols.append(layoutfuncname) - prnt('ssize_t %s(ssize_t i)' % (layoutfuncname,)) + prnt('intptr_t %s(intptr_t i)' % (layoutfuncname,)) prnt('{') prnt(' struct _cffi_aligncheck { char x; %s y; };' % cname) - prnt(' static ssize_t nums[] = {') + prnt(' static intptr_t nums[] = {') prnt(' sizeof(%s),' % cname) prnt(' offsetof(struct _cffi_aligncheck, y),') for fname, ftype, fbitsize in tp.enumfields(): @@ -276,7 +276,7 @@ class VGenericEngine(object): return # nothing to do with opaque structs layoutfuncname = '_cffi_layout_%s_%s' % (prefix, name) # - BFunc = self.ffi._typeof_locked("ssize_t(*)(ssize_t)")[0] + BFunc = self.ffi._typeof_locked("intptr_t(*)(intptr_t)")[0] function = module.load_function(BFunc, layoutfuncname) layout = [] num = 0 @@ -410,13 +410,18 @@ class VGenericEngine(object): # ---------- # enums + def _enum_funcname(self, prefix, name): + # "$enum_$1" => "___D_enum____D_1" + name = name.replace('$', '___D_') + return '_cffi_e_%s_%s' % (prefix, name) + def _generate_gen_enum_decl(self, tp, name, prefix='enum'): if tp.partial: for enumerator in tp.enumerators: self._generate_gen_const(True, enumerator) return # - funcname = '_cffi_e_%s_%s' % (prefix, name) + funcname = self._enum_funcname(prefix, name) self.export_symbols.append(funcname) prnt = self._prnt prnt('int %s(char *out_error)' % funcname) @@ -430,14 +435,14 @@ class VGenericEngine(object): enumerator, enumerator, enumvalue)) prnt(' char buf[64];') prnt(' if ((%s) < 0)' % enumerator) - prnt(' snprintf(buf, 63, "%%ld", (long)(%s));' % enumerator) + prnt(' sprintf(buf, "%%ld", (long)(%s));' % enumerator) prnt(' else') - prnt(' snprintf(buf, 63, "%%lu", (unsigned long)(%s));' % + prnt(' sprintf(buf, "%%lu", (unsigned long)(%s));' % enumerator) - prnt(' snprintf(out_error, 255,' + prnt(' sprintf(out_error,' ' "%s has the real value %s, not %s",') prnt(' "%s", buf, "%d");' % ( - enumerator, enumvalue)) + enumerator[:100], enumvalue)) prnt(' return -1;') prnt(' }') prnt(' return 0;') @@ -453,7 +458,7 @@ class VGenericEngine(object): else: BType = self.ffi._typeof_locked("char[]")[0] BFunc = self.ffi._typeof_locked("int(*)(char*)")[0] - funcname = '_cffi_e_%s_%s' % (prefix, name) + funcname = self._enum_funcname(prefix, name) function = module.load_function(BFunc, funcname) p = self.ffi.new(BType, 256) if function(p) < 0: @@ -547,20 +552,29 @@ cffimod_header = r''' #include #include /* XXX for ssize_t on some platforms */ -#ifdef _WIN32 -# include -# define snprintf _snprintf -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 SSIZE_T ssize_t; -typedef unsigned char _Bool; -#else +/* this block of #ifs should be kept exactly identical between + c/_cffi_backend.c, cffi/vengine_cpy.py, cffi/vengine_gen.py */ +#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; +# else # include +# endif +# if _MSC_VER < 1800 /* MSVC < 2013 */ + typedef unsigned char _Bool; +# endif +#else +# include +# if (defined (__SVR4) && defined (__sun)) || defined(_AIX) +# include +# endif #endif ''' diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography-0.4.egg-info/dependency_links.txt b/Linux_i686/lib/python2.7/site-packages/cryptography-0.4.egg-info/dependency_links.txt deleted file mode 100644 index 8b13789..0000000 --- a/Linux_i686/lib/python2.7/site-packages/cryptography-0.4.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography-0.4.egg-info/not-zip-safe b/Linux_i686/lib/python2.7/site-packages/cryptography-0.4.egg-info/not-zip-safe deleted file mode 100644 index 8b13789..0000000 --- a/Linux_i686/lib/python2.7/site-packages/cryptography-0.4.egg-info/not-zip-safe +++ /dev/null @@ -1 +0,0 @@ - diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography-0.4.egg-info/PKG-INFO b/Linux_i686/lib/python2.7/site-packages/cryptography-0.5.4.egg-info/PKG-INFO similarity index 94% rename from Linux_i686/lib/python2.7/site-packages/cryptography-0.4.egg-info/PKG-INFO rename to Linux_i686/lib/python2.7/site-packages/cryptography-0.5.4.egg-info/PKG-INFO index a3eb033..40d0e13 100644 --- a/Linux_i686/lib/python2.7/site-packages/cryptography-0.4.egg-info/PKG-INFO +++ b/Linux_i686/lib/python2.7/site-packages/cryptography-0.5.4.egg-info/PKG-INFO @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: cryptography -Version: 0.4 +Version: 0.5.4 Summary: cryptography is a package which provides cryptographic recipes and primitives to Python developers. Home-page: https://github.com/pyca/cryptography Author: The cryptography developers @@ -9,6 +9,10 @@ License: Apache License, Version 2.0 Description: Cryptography ============ + .. image:: https://pypip.in/version/cryptography/badge.svg + :target: https://pypi.python.org/pypi/cryptography/ + :alt: Latest Version + .. image:: https://travis-ci.org/pyca/cryptography.svg?branch=master :target: https://travis-ci.org/pyca/cryptography diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography-0.4.egg-info/SOURCES.txt b/Linux_i686/lib/python2.7/site-packages/cryptography-0.5.4.egg-info/SOURCES.txt similarity index 83% rename from Linux_i686/lib/python2.7/site-packages/cryptography-0.4.egg-info/SOURCES.txt rename to Linux_i686/lib/python2.7/site-packages/cryptography-0.5.4.egg-info/SOURCES.txt index d15cf6e..064a501 100644 --- a/Linux_i686/lib/python2.7/site-packages/cryptography-0.4.egg-info/SOURCES.txt +++ b/Linux_i686/lib/python2.7/site-packages/cryptography-0.5.4.egg-info/SOURCES.txt @@ -23,18 +23,34 @@ cryptography/hazmat/backends/interfaces.py cryptography/hazmat/backends/multibackend.py cryptography/hazmat/backends/commoncrypto/__init__.py cryptography/hazmat/backends/commoncrypto/backend.py +cryptography/hazmat/backends/commoncrypto/ciphers.py +cryptography/hazmat/backends/commoncrypto/hashes.py +cryptography/hazmat/backends/commoncrypto/hmac.py cryptography/hazmat/backends/openssl/__init__.py cryptography/hazmat/backends/openssl/backend.py +cryptography/hazmat/backends/openssl/ciphers.py +cryptography/hazmat/backends/openssl/cmac.py +cryptography/hazmat/backends/openssl/dsa.py +cryptography/hazmat/backends/openssl/ec.py +cryptography/hazmat/backends/openssl/hashes.py +cryptography/hazmat/backends/openssl/hmac.py +cryptography/hazmat/backends/openssl/rsa.py cryptography/hazmat/bindings/__init__.py cryptography/hazmat/bindings/utils.py -cryptography/hazmat/bindings/__pycache__/_Cryptography_cffi_444d7397xa22f8491.c -cryptography/hazmat/bindings/__pycache__/_Cryptography_cffi_be05eb56x6daa9a79.c +cryptography/hazmat/bindings/__pycache__/_Cryptography_cffi_4ed9e37dx4000d087.c +cryptography/hazmat/bindings/__pycache__/_Cryptography_cffi_d62b3d91x972e1c0b.c cryptography/hazmat/bindings/commoncrypto/__init__.py cryptography/hazmat/bindings/commoncrypto/binding.py +cryptography/hazmat/bindings/commoncrypto/cf.py cryptography/hazmat/bindings/commoncrypto/common_cryptor.py cryptography/hazmat/bindings/commoncrypto/common_digest.py cryptography/hazmat/bindings/commoncrypto/common_hmac.py cryptography/hazmat/bindings/commoncrypto/common_key_derivation.py +cryptography/hazmat/bindings/commoncrypto/secimport.py +cryptography/hazmat/bindings/commoncrypto/secitem.py +cryptography/hazmat/bindings/commoncrypto/seckey.py +cryptography/hazmat/bindings/commoncrypto/seckeychain.py +cryptography/hazmat/bindings/commoncrypto/sectransform.py cryptography/hazmat/bindings/openssl/__init__.py cryptography/hazmat/bindings/openssl/aes.py cryptography/hazmat/bindings/openssl/asn1.py @@ -65,6 +81,7 @@ cryptography/hazmat/bindings/openssl/rand.py cryptography/hazmat/bindings/openssl/rsa.py cryptography/hazmat/bindings/openssl/ssl.py cryptography/hazmat/bindings/openssl/x509.py +cryptography/hazmat/bindings/openssl/x509_vfy.py cryptography/hazmat/bindings/openssl/x509name.py cryptography/hazmat/bindings/openssl/x509v3.py cryptography/hazmat/primitives/__init__.py @@ -74,10 +91,12 @@ cryptography/hazmat/primitives/hashes.py cryptography/hazmat/primitives/hmac.py cryptography/hazmat/primitives/interfaces.py cryptography/hazmat/primitives/padding.py +cryptography/hazmat/primitives/serialization.py cryptography/hazmat/primitives/__pycache__/_Cryptography_cffi_684bb40axf342507b.c cryptography/hazmat/primitives/__pycache__/_Cryptography_cffi_8f86901cxc1767c5a.c cryptography/hazmat/primitives/asymmetric/__init__.py cryptography/hazmat/primitives/asymmetric/dsa.py +cryptography/hazmat/primitives/asymmetric/ec.py cryptography/hazmat/primitives/asymmetric/padding.py cryptography/hazmat/primitives/asymmetric/rsa.py cryptography/hazmat/primitives/ciphers/__init__.py @@ -109,6 +128,7 @@ docs/random-numbers.rst docs/security.rst docs/spelling_wordlist.txt docs/_static/.keep +docs/development/c-bindings.rst docs/development/getting-started.rst docs/development/index.rst docs/development/reviewing-patches.rst @@ -140,9 +160,11 @@ docs/hazmat/primitives/padding.rst docs/hazmat/primitives/symmetric-encryption.rst docs/hazmat/primitives/twofactor.rst docs/hazmat/primitives/asymmetric/dsa.rst +docs/hazmat/primitives/asymmetric/ec.rst docs/hazmat/primitives/asymmetric/index.rst docs/hazmat/primitives/asymmetric/padding.rst docs/hazmat/primitives/asymmetric/rsa.rst +docs/hazmat/primitives/asymmetric/serialization.rst docs/hazmat/primitives/mac/cmac.rst docs/hazmat/primitives/mac/hmac.rst docs/hazmat/primitives/mac/index.rst @@ -160,6 +182,8 @@ tests/hazmat/bindings/test_commoncrypto.py tests/hazmat/bindings/test_openssl.py tests/hazmat/bindings/test_utils.py tests/hazmat/primitives/__init__.py +tests/hazmat/primitives/fixtures_dsa.py +tests/hazmat/primitives/fixtures_rsa.py tests/hazmat/primitives/test_3des.py tests/hazmat/primitives/test_aes.py tests/hazmat/primitives/test_arc4.py @@ -171,6 +195,7 @@ tests/hazmat/primitives/test_ciphers.py tests/hazmat/primitives/test_cmac.py tests/hazmat/primitives/test_constant_time.py tests/hazmat/primitives/test_dsa.py +tests/hazmat/primitives/test_ec.py tests/hazmat/primitives/test_hash_vectors.py tests/hazmat/primitives/test_hashes.py tests/hazmat/primitives/test_hkdf.py @@ -183,6 +208,7 @@ tests/hazmat/primitives/test_pbkdf2hmac.py tests/hazmat/primitives/test_pbkdf2hmac_vectors.py tests/hazmat/primitives/test_rsa.py tests/hazmat/primitives/test_seed.py +tests/hazmat/primitives/test_serialization.py tests/hazmat/primitives/utils.py tests/hazmat/primitives/twofactor/__init__.py tests/hazmat/primitives/twofactor/test_hotp.py diff --git a/Linux_i686/lib/python2.7/site-packages/Flask_Migrate-1.2.0.egg-info/dependency_links.txt b/Linux_i686/lib/python2.7/site-packages/cryptography-0.5.4.egg-info/dependency_links.txt similarity index 100% rename from Linux_i686/lib/python2.7/site-packages/Flask_Migrate-1.2.0.egg-info/dependency_links.txt rename to Linux_i686/lib/python2.7/site-packages/cryptography-0.5.4.egg-info/dependency_links.txt diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography-0.4.egg-info/installed-files.txt b/Linux_i686/lib/python2.7/site-packages/cryptography-0.5.4.egg-info/installed-files.txt similarity index 78% rename from Linux_i686/lib/python2.7/site-packages/cryptography-0.4.egg-info/installed-files.txt rename to Linux_i686/lib/python2.7/site-packages/cryptography-0.5.4.egg-info/installed-files.txt index 2f17187..91ce4dd 100644 --- a/Linux_i686/lib/python2.7/site-packages/cryptography-0.4.egg-info/installed-files.txt +++ b/Linux_i686/lib/python2.7/site-packages/cryptography-0.5.4.egg-info/installed-files.txt @@ -11,14 +11,25 @@ ../cryptography/hazmat/primitives/hashes.py ../cryptography/hazmat/primitives/cmac.py ../cryptography/hazmat/primitives/interfaces.py +../cryptography/hazmat/primitives/serialization.py ../cryptography/hazmat/primitives/constant_time.py ../cryptography/hazmat/primitives/__init__.py ../cryptography/hazmat/primitives/padding.py ../cryptography/hazmat/bindings/__init__.py ../cryptography/hazmat/bindings/utils.py +../cryptography/hazmat/backends/openssl/hmac.py +../cryptography/hazmat/backends/openssl/rsa.py +../cryptography/hazmat/backends/openssl/hashes.py +../cryptography/hazmat/backends/openssl/cmac.py +../cryptography/hazmat/backends/openssl/dsa.py ../cryptography/hazmat/backends/openssl/__init__.py +../cryptography/hazmat/backends/openssl/ciphers.py ../cryptography/hazmat/backends/openssl/backend.py +../cryptography/hazmat/backends/openssl/ec.py +../cryptography/hazmat/backends/commoncrypto/hmac.py +../cryptography/hazmat/backends/commoncrypto/hashes.py ../cryptography/hazmat/backends/commoncrypto/__init__.py +../cryptography/hazmat/backends/commoncrypto/ciphers.py ../cryptography/hazmat/backends/commoncrypto/backend.py ../cryptography/hazmat/primitives/twofactor/totp.py ../cryptography/hazmat/primitives/twofactor/__init__.py @@ -30,6 +41,7 @@ ../cryptography/hazmat/primitives/asymmetric/dsa.py ../cryptography/hazmat/primitives/asymmetric/__init__.py ../cryptography/hazmat/primitives/asymmetric/padding.py +../cryptography/hazmat/primitives/asymmetric/ec.py ../cryptography/hazmat/primitives/ciphers/modes.py ../cryptography/hazmat/primitives/ciphers/__init__.py ../cryptography/hazmat/primitives/ciphers/base.py @@ -50,6 +62,7 @@ ../cryptography/hazmat/bindings/openssl/x509.py ../cryptography/hazmat/bindings/openssl/err.py ../cryptography/hazmat/bindings/openssl/dsa.py +../cryptography/hazmat/bindings/openssl/x509_vfy.py ../cryptography/hazmat/bindings/openssl/dh.py ../cryptography/hazmat/bindings/openssl/pkcs12.py ../cryptography/hazmat/bindings/openssl/__init__.py @@ -69,9 +82,15 @@ ../cryptography/hazmat/bindings/commoncrypto/common_cryptor.py ../cryptography/hazmat/bindings/commoncrypto/binding.py ../cryptography/hazmat/bindings/commoncrypto/common_key_derivation.py +../cryptography/hazmat/bindings/commoncrypto/seckey.py ../cryptography/hazmat/bindings/commoncrypto/common_hmac.py ../cryptography/hazmat/bindings/commoncrypto/common_digest.py ../cryptography/hazmat/bindings/commoncrypto/__init__.py +../cryptography/hazmat/bindings/commoncrypto/sectransform.py +../cryptography/hazmat/bindings/commoncrypto/secitem.py +../cryptography/hazmat/bindings/commoncrypto/secimport.py +../cryptography/hazmat/bindings/commoncrypto/cf.py +../cryptography/hazmat/bindings/commoncrypto/seckeychain.py ../cryptography/exceptions.pyc ../cryptography/__init__.pyc ../cryptography/fernet.pyc @@ -85,14 +104,25 @@ ../cryptography/hazmat/primitives/hashes.pyc ../cryptography/hazmat/primitives/cmac.pyc ../cryptography/hazmat/primitives/interfaces.pyc +../cryptography/hazmat/primitives/serialization.pyc ../cryptography/hazmat/primitives/constant_time.pyc ../cryptography/hazmat/primitives/__init__.pyc ../cryptography/hazmat/primitives/padding.pyc ../cryptography/hazmat/bindings/__init__.pyc ../cryptography/hazmat/bindings/utils.pyc +../cryptography/hazmat/backends/openssl/hmac.pyc +../cryptography/hazmat/backends/openssl/rsa.pyc +../cryptography/hazmat/backends/openssl/hashes.pyc +../cryptography/hazmat/backends/openssl/cmac.pyc +../cryptography/hazmat/backends/openssl/dsa.pyc ../cryptography/hazmat/backends/openssl/__init__.pyc +../cryptography/hazmat/backends/openssl/ciphers.pyc ../cryptography/hazmat/backends/openssl/backend.pyc +../cryptography/hazmat/backends/openssl/ec.pyc +../cryptography/hazmat/backends/commoncrypto/hmac.pyc +../cryptography/hazmat/backends/commoncrypto/hashes.pyc ../cryptography/hazmat/backends/commoncrypto/__init__.pyc +../cryptography/hazmat/backends/commoncrypto/ciphers.pyc ../cryptography/hazmat/backends/commoncrypto/backend.pyc ../cryptography/hazmat/primitives/twofactor/totp.pyc ../cryptography/hazmat/primitives/twofactor/__init__.pyc @@ -104,6 +134,7 @@ ../cryptography/hazmat/primitives/asymmetric/dsa.pyc ../cryptography/hazmat/primitives/asymmetric/__init__.pyc ../cryptography/hazmat/primitives/asymmetric/padding.pyc +../cryptography/hazmat/primitives/asymmetric/ec.pyc ../cryptography/hazmat/primitives/ciphers/modes.pyc ../cryptography/hazmat/primitives/ciphers/__init__.pyc ../cryptography/hazmat/primitives/ciphers/base.pyc @@ -124,6 +155,7 @@ ../cryptography/hazmat/bindings/openssl/x509.pyc ../cryptography/hazmat/bindings/openssl/err.pyc ../cryptography/hazmat/bindings/openssl/dsa.pyc +../cryptography/hazmat/bindings/openssl/x509_vfy.pyc ../cryptography/hazmat/bindings/openssl/dh.pyc ../cryptography/hazmat/bindings/openssl/pkcs12.pyc ../cryptography/hazmat/bindings/openssl/__init__.pyc @@ -143,10 +175,16 @@ ../cryptography/hazmat/bindings/commoncrypto/common_cryptor.pyc ../cryptography/hazmat/bindings/commoncrypto/binding.pyc ../cryptography/hazmat/bindings/commoncrypto/common_key_derivation.pyc +../cryptography/hazmat/bindings/commoncrypto/seckey.pyc ../cryptography/hazmat/bindings/commoncrypto/common_hmac.pyc ../cryptography/hazmat/bindings/commoncrypto/common_digest.pyc ../cryptography/hazmat/bindings/commoncrypto/__init__.pyc -../cryptography/_Cryptography_cffi_444d7397xa22f8491.so +../cryptography/hazmat/bindings/commoncrypto/sectransform.pyc +../cryptography/hazmat/bindings/commoncrypto/secitem.pyc +../cryptography/hazmat/bindings/commoncrypto/secimport.pyc +../cryptography/hazmat/bindings/commoncrypto/cf.pyc +../cryptography/hazmat/bindings/commoncrypto/seckeychain.pyc +../cryptography/_Cryptography_cffi_4ed9e37dx4000d087.so ../cryptography/_Cryptography_cffi_684bb40axf342507b.so ../cryptography/_Cryptography_cffi_8f86901cxc1767c5a.so ./ diff --git a/Linux_i686/lib/python2.7/site-packages/Flask_Migrate-1.2.0.egg-info/not-zip-safe b/Linux_i686/lib/python2.7/site-packages/cryptography-0.5.4.egg-info/not-zip-safe similarity index 100% rename from Linux_i686/lib/python2.7/site-packages/Flask_Migrate-1.2.0.egg-info/not-zip-safe rename to Linux_i686/lib/python2.7/site-packages/cryptography-0.5.4.egg-info/not-zip-safe diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography-0.4.egg-info/requires.txt b/Linux_i686/lib/python2.7/site-packages/cryptography-0.5.4.egg-info/requires.txt similarity index 100% rename from Linux_i686/lib/python2.7/site-packages/cryptography-0.4.egg-info/requires.txt rename to Linux_i686/lib/python2.7/site-packages/cryptography-0.5.4.egg-info/requires.txt diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography-0.4.egg-info/top_level.txt b/Linux_i686/lib/python2.7/site-packages/cryptography-0.5.4.egg-info/top_level.txt similarity index 70% rename from Linux_i686/lib/python2.7/site-packages/cryptography-0.4.egg-info/top_level.txt rename to Linux_i686/lib/python2.7/site-packages/cryptography-0.5.4.egg-info/top_level.txt index 2cead95..c05850b 100644 --- a/Linux_i686/lib/python2.7/site-packages/cryptography-0.4.egg-info/top_level.txt +++ b/Linux_i686/lib/python2.7/site-packages/cryptography-0.5.4.egg-info/top_level.txt @@ -1,4 +1,4 @@ -_Cryptography_cffi_444d7397xa22f8491 _Cryptography_cffi_684bb40axf342507b +_Cryptography_cffi_4ed9e37dx4000d087 cryptography _Cryptography_cffi_8f86901cxc1767c5a diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/_Cryptography_cffi_444d7397xa22f8491.so b/Linux_i686/lib/python2.7/site-packages/cryptography/_Cryptography_cffi_444d7397xa22f8491.so deleted file mode 100755 index 6bbdaa7c087b51c2407529304c870ea6fdc60b64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1242449 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%0DO+@~6S>f%(~hZlagffi_Q) zpX%_kir$~_fuc_peH@R>S)#uUuu}9bFiuCGA^PbRy-x5?M4u`8?y&Dg|198N(aS=@ zS@hYWA6wC@1&@D9@{8Vs)rI-@0NMc}MKDHtkYDrzD|!j=ZlVv>MOGX3qUa-l8KRdp zhY9Ets1A3l=w-lHiau5JePLgSekkCa=)ax9@sB=3^zABozrz0&eWvLDf|cnB2-Cg~ zh{*Cp;#1@oyxRRrL12&xt-&^k2gYJqtK9qzk z9d7cpcn#szsEDSDJ{8sy=C=hrDf$8!)6r*$eqDlhCwz$L zGeut+HbwMx0INkWODT)dXN!JLg4Y|qL-e_#9|HSP^e+QKz0mJ}o8uq-NzuQR;Qa_M zMnyD~jO;g9GR(gUXfJwMb!qbq`Kb<%Oz=K{KPmcD(JzH%ihdp71JTdGI30b4=zAr2 zE8wd|pDFsyuzjNc6mUWGvOsedeYWU3C3pwnq27{T^xwnE!~9($ojSobhD*EEEZK5v^I4b&Nj7QLC zh`wxs*8+Y)^qHb>54*Jw;88#gKtz^(5_^-M>hR48UQ>7zDx$ffzYo?$^bZ4ui~gU< z9RKJ~ivG_EUJ)94L-e5r$nJtI5q%ZFXQG!CqTT2ds1E;B!5auaD*9B>zXZD~`U!xN z&!Yc~_Dl64zv%Z@@V$3_oj1Tr$xU7kgqR#S$8V*EcqLvf472n9A1)&XetH% zSy)4ue;Lq0^p9gqN1q}3S1Wk^;5|j3Df*GHF`^#}m?L^wqFRhTTl51ectu&>Stt5j z(U*fA5Pfw(p6C-XUPXUW^iNdq8pHEFC;1y8YYnRi^V0y$01;WuYSWkeREO`c;I)Q# z5PhoXJHYyj{xQH?qW?XM;~#y7=%W?90yH#7^qHbB3j0{}WdJ8cFAHC1(PxXkY6Wj3 zJWuqwq8|?{@;qQNpf(`#5$#8xBfseHsNn5~H=`mNiXb}3mtro8tmyx;)IFZwK46`21%pgAD2p7zqwXNbOIdG9lLC(&n${vd3S z=uZG9i(Z!g7NgG={XONq&G7l6&lUYn*mlwH1Dq6nCdRAiPl~>7dGBrb@1p1CjrYW1 zMF#>F1L^@HvP#%y0Qsp7mnrZ425(M9G*$H1U>Ty%&l=iGqQ4*Gbo3dbFI3)p96nj} znWFCvlV5@G2La^A9wM@!cou!O=&zLXD#K5TK3DYhVE>8U2b3Lzz9h!zKs2KNv7DC( zuSZ2R)EHSq*aI;CZospmm$k_8Y%Q9u+Ao7cTNjYyKyet*bT+zP=YYg+}0n$akoECe48o_US0e!CM?}62X`S%0b03!J@4o81d^iP-dO2WH}KGY0ZCD;q1uMK!t z^s-XC8+`)R;fKq5ec($)pDOyHQY-pQz!}l+dz0h;1@enNwXF98{BO}`iv9xZ&JlpW z0F3|XSCQuKF~^_Iim6@4fb*(TU} z(QgMF6uqoJ7aBo+s>3&x^$x+$h(1;H@`KR%M*_|PDgh!rF{Y!>5d9xzykYQ0R75jH zKL+-&=qCaOh+dYe7o*P>{SRflo8t*8`drbMfXx+s1wgLolQ3RIe^T^cmhqay4~jl? z53&bgmqecqxP26QS=DYclKfPMx0dnlhF78@nkxFXuvD1e5%7fQufM_Zk3K{6i_3V0 zX=s4xGeut-Hc9lA0V_l=3*cwbXN!Jn8E+6gSM<4}e;M|j=wAcKZ+}O2(SE~G9zE?M_(k`Zza-e*>8`!Xr$KoyVmN$ z9LXQnKUPcrh2>D}8F8 z`WWn2YwGZ?Is4U`HvBb>RQT&PZTNrGKMx&Blr{J85o6!&>_?paXpH@svmZD1(Fd?^ zGWMHl+OcnP_AN2?tw^jbrR7&fdh>ulT0`&m(awIghTHEN>HS{A?e`k`pgqV|0{&Tb+HIv6t{k=@et*H)uO_ixdw7VJli zeUq~varUDz_G8X|+}K}QjeV1`|K;qPoPA4-eXFx?GxkjGfWp&_JyO?>eY&&1A7h{4 z>@$tM_~+P%8~YGvAMWfUV(cTGeU!0Znua~y*w;CGy0dqQv3GU$$Bg~$(b%KL{=2hB zoxO34J;m9Z82gk?*h?9E{d#unrJVh)7<(CKFKg^y?!toc(Hbx8F6=`@Oo` z@748wKhGmX_=vIRIQtQ2KN@2{=IqCfJwtZfCS$+o?3Hd?5}cT5*}jgJ)C`rvk!~04_Ee3;zI>7wKt~e&eYzS9*Qw_Fs4-! zw1zS5b*385R4c|*+nDNoiz%Nm#UN%azRtAKnKs9mwir{s4VWey(;R1->`YT)Oz#*|>BE?wHKwnf=~-ub zF2?k{F{PzqYGq8f*0&SU%9-wsF|{$KF{?0DFs4*zs^Cl&V@#Ed>9MMq{;sNLZ-_Jf zUDeLsb&b^Q{Zm!X-tOv{4jR)^XFBLihht1%8`BGX8xUS$Oy4`x3TIjsW6Ck6YbP*` zH>TnZ>_m)rrq^OjuN%|Hn=y4aru&?!yEFBOF+F8W`(|NEF{YQCDaDzZ#+dFlru3zl zN*L2xXDZ=LcgC1X8B@zmm@b-k>d!jUMfXnqrI>f>FPnGjCzinUxiOV%XeZ)xXZl}^ z=?i1}yc(u?#?--?<~h@X7}G*y8u|&Q7maDWGrj0cFUOcNwJEu;-1!gJ_ufgo>@#;h zPi0(eX5DXJ_!+KlzVCX8hf03@mJt{*AgD3ZpjPgo6TuDJM!%O zP-r@BCh(jU9$U+M5uS}Q+D0C{UW0uO^QQnV3z!Xvf0-vXdE4j$#{Oa)Qp=kSk5Unx zF2-fB?l6Bn;B^6?02Yg}HZ3%Nna4pf_N?XI4c{-uJTbO~<;=1R3}7Ij zk${%~4+A3oXd!hpZ%&D^KrL@Hd?XdoBVwEgn-BBf1?&|t5AZ7>A`fFzF@{=Uyi(Jf z0WbC{#zYGIMX)9?e>I?|fDZv<0FfkGIEOJ!jHhdQ&Ed<$I9!Ym!VZZ(9q_M!rvPQf zVwC5%X0Na|AjZQry`%6JR77`+@eHgl%+CW%74Q#WEg*7fF29q4F%MmMXH733EgqvH zTB6L~Lq9WRh0>3J3Cd{t~*dibWuon$_ASHKxSPe4ST60%-X1mI^tWDqUHy~>MM=)z-bdSl_Y^CS>Wr@)^Ki^BXFfbIeo0bT|~ z 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

    Cl%|%?0`j@#*6KrR9k)UC3KB#Os>Vec&_2@2hH- z(tj17Eq*nv(oKY1LUTe`+ajysbH%?`)ikE3F%iiZe*GQ=Gy)*V9+B)%*3H!xs2c<)I)*l1Eys8;MKQ2C<0q=g=-{Qv*;?m%Cb?(LRnc^2z zHOchmOhmH9-$?61^EwcQi`Qn$DfnFRk5@Gd=u^b!i+_o>RQ#)iE#h^_@Nhco7yoco z^A~-;_~c zKY03Z@!3T@?a3mZuu8nPa2nmg`o(u)J@hT&^Tl8DD@PMwnQ&3OF0MWvzEFG{ZZG|s zo8hCYg1tn$mgc=mXio@hw`UK$-WVIYp8J#DM|`^Y8)@UjcOWbjuPeUC_F(+yKe zSBcLSe?M)P_%VbN;;~Fk@oflG#cL0#R8Q8=bm(#wqrb_yP<*=h)wEpkxr9%}7tG-H!Dos;UBz6W zpAerd{$JXE;!AV~~tVj)eaRHxR4{CL&svwX8Jkt>Ed_N z%6BGwOh_VxKj8T9!e@&AB*q-3w_zfZE&e;&UE+TxOcbw8!m|BYzxW+7<}7`V_F~-oVGZBfd4c4C4n&x#S^c1gM$}{lEOov9snA!AU;?u=1 zrp*waLs%ica2jVk16aTKfidPP4zx*pw)l#)FT~d%{3>1>nzP|^#dnV}JLo04YW?E( z)9TZ_LxeO!_&tt)6uwY=yBPBcy{Gu-I$&SX9uogOVZM0neI^ZL{Y-~$h%p!GE5xUZ zkNTZgMB>X5j*Fj(I0-&e{IxM=3H?{`+2U8yDs>~gNoY<8S4aE^K39D87}JEF#zZ7v zd~4bu@i!5sh`$3dZV>AiUna)fL!U1`x-Qs*v~}Vq684MNj_L^bWTr!ZRW^g@$Hk|M zA3^(D{5V2fclg?f@4{z_|E03Ij^3P!NVfPCS{Isk3t_l;ZN8ShoArzTwz7GKK1F=K z_~o>v;$I_d5&vTr&wuzr@t;>Vf717hkB$c`$ze~6uSB>e9bWsiufr!Z9okjd?4`#s z5lI(+kQSkN#|eGJZ{T=W;4{T4;P;;KA-la_@jhX;pthrUI8 zzW6ei^!kcWg>X^)qlio43&lTQ+03V3a|e8M0@w?*YiZspLVH43yT51PlbH@ZUD>px z_hBNEF1{^o9L?)QSV#zWLQEOV`o%w5+4QHcVj_|)ei&^R&C4X5AcVD1JR3fj>Cl6f z&3*KXOhodLdBi6zBZw3FZgkYo8dFXSEy`e((5o0$ritmmP+$pB=jTvANwb9 zZ(Ht`vi9PoS1N|=um8%riE3`e)Jk)nL+W6qQBLaMq)q|pHY>&dfRtpV z6;4WWQnP^6+)CFaAXT)|mrknar09TD*-F3ZD_yYHu`XZPzauWx_CLttVsR?^TlT-( z>sX)Nh;-OW?VNPjNk;b5c$~df7_5 zUPYR2r2;2SchZc2^n{f@oPadUO4VZgJ7SoV?hi=At)%xyhdNuSvy(bI>Gpus)k-V# zkgl`RR3}~Mq~w6q!b;8fu^Ni8(ncr6IH_tts%E7Z${}5{SD-)bq)WB@2ltQSRP^Bf zS*yRk9VX8C9OQ?dZh@(#WIv{;xrT*iPwp*#EleRl4FCe{dr5o==T4AN9oV3D8 zD+AIhD{bk6G}B7koHWx(PX(k|R@&DOX@r$7IBA5F9tcRItaLReM4@h0YFyR7Bf2>$ zJs{m-r8A9?T3TsT=9eZ0xyC>$F202la4#7ARwKv(u5GwPAer>^Y4hAPWm7q?Y7d5k07nK z(oiR@cG8-F^qQ5v(98PSR$A($*-n}hkmg!x1FwKXqpkFrlSVr!Gax-=rR$d=^{`Tj zSpPQla8j>;)Z0p}N+5-;Zs2 zCDQ9w;(fpNXYT7xS{snoStKl;yS!uamlBQTGwuXP3Qk-;SKx$*9%HJZ@wNe)+)pb%rK&oe@6IGC| zvQn0lu5wa|fK<{-L-dX1RE^?i#3m=5s^LE)ekx8y5ANw2#Sd<-etdppr87?Y$Vndu zq))7LU=`AvR*J9b-w|&*DK{Xkw~{{UCbZB>y_~erNzVqPMOLah3TeERW;toRlO_bD ziB`Hl2dTf6wmYf6lLiE&fmYf*7^$t5esfY=C#40Xc2;WL8>zmP665?kqP~+F2Bd4P z)ORsbDJuks2BQ)hK8>YDrM zZ!!@%qO-bjv@dDiV}vMP9)$H)qub!48o)QGYrdq{Wg?QufcHJEBhCATkSV?%;vD#N z@zv^@8|d@IXNkXwwp09VgtOvx=Jc7?BmSDYraWgIWq2_YIU>FWttHK?Pq>Q^{`oo1 zouc~A2rt8~Yq%`03ypgnX-uh zEb)EC|4iE;{u1Gs_!@{w!+GD0_*r#K68%r{Ys80X_3t925xNkBD761KW_O0O)8pDsOV}7Ua65ojdFT`Pg7GI7~Z2-K^9iv9@zF?Da)aQbnt%;tS{{6Do#J^E|nv&1*2eJI`#PKwug?lAZq z@#kwB-WM75hxk14Ni_Yf4X+iU6(M|d5%(~Bf%p@(&Cm3XOhlrR!2X~O6@L}Se_Xsy ziA#-Q{Y;0xsBLupk;UTE#NSQZD1JEMfcRA$p$~k9_}#V5JM@#{v&8SBU7bPrgiwzV z*4guF_#E-?)HYAiTQL#I6aOr&hxlcLO!1kBm*5M;zgF8!r#~*9>)7zg1GJaLFCpv@ zuM_PKqgg-Gp%-eKZS(`;)5Pzi6^j3YP>~<3;Z(%M@EPLg);3+~^_YlciSI|diRRry z7${!nZ@=ZXK9HcxzM&RExqFNGL>koAjysJ5v=-yuG#8CXNwH{!1& z{3Twe?=#^Om=4`j+cc(E9HRA$zk$|_=CvVoCWJqKmghfwhWOsK&G+*e?RRb@nZ--iGLAsJbZz8ueN!U{+IZu=3wvAYTiTm zfM5t=Z3^sxPhdLKw6C1 ze8M5|+CLZupCi6fZL^2|llVOG2WX}4C45b2NC>w?+zekJK2+P>LN`oAqOJo=r}Y-! zpDpeye5vqR$kcCjJ`EzgLQ{OxP*@pJ#af!)J&;S<6)7K!?O0`x5T@QAO zwm^I#;Vtpn!00fR^)nrMua+4~-zh##{6n+?@skPvihl-iF?@#jb+ybYdgWnSzxegE z>uKJ5gsz0J_Bu|%=ZIfk%Pgg5h|d$xUpa|-OnffkMe&0W!{hj>;uq91ne?~BMs~L0R_1;}Z9-#0Seq?-;1l$+xJxbL(Nma+q=~nLY!g%pJIDYJS)-S$IE%P~j zmiR33-_Twa|07|ycXgy7yl?BGy-0`J*(k!m=0ZzGe_uEnTX_x|AE$$=A9#?i%&qj1YaQjbew5P zzejx34Pb3))5LcoEElhhp$-#RKhvROai#*BDjUS7iLXh^7vF$zPW;&gJpbV{#D5ZJ z{-K9PYW?ENaM*a7SB21q5Y`^jDfk@mJL1gE^mOrg;=9pCi|{{w~Tf@!D>h37^mk{*^fM2>qP+GzPrKY2_av%q1id!qX5B!)J(J z6lb2Hw_zfZC4M>WF7dAsCW_b2RHI3(U;LACW-Wb=_&o7jXs?UkN!Tm?cEs`U1>z^h znL+ep;-gxFjiCK0ejK6tD0ppR?SW5VIy5rQoS-K$5lIvO3#}8)yG$4+zB*#;WY#Z! zV4P_}pC~>{d~4cs;%_2s60iNPVemQPyT_SW`d;yQ;_K5+iEl)Pq znTz!5Ohlr>U{M^lHO(ta=qX-XW2L6Bex^e=#F;MiVdB%o-$|PxelTH$_;nnw4}6CB zYvarg`X=#N;`h_O5Pyj9t9b3At%lDLUp>xb(Mvq2^^2cFt55S56VeFb35b{A3&fX+ zGqdSE#YY)ow1>p!5ax^5hFgb6SwGXEziOII^cCXM#J^9=6ThEuTzq@P#qb&8f2nDD z(|;A8C4MliQYK*}p*bO}y}48HIpV*qY0l8on26+wzeF1(KB{^sYKr)Z+5GP@)-V3^ znkIohpNRLe8zBM84A^5N6^ZbX; z5WlIWIZJQOL?lc6Wm*@S7vlKC#cRi}(Nxwi{?(eM7k!HOJnMM2pb8<%B-sA4H7J zV*TPDt!bvwhl|e=KbQ8T_~!_##A_dM7<`WS2Wy(`^ey7^#D7FPEdC(jqWBcV&F}@{ z2iG*W)2|t;^{0UKrCm$&h7j5l!rF2yHI4N%9qL)r{6_C1K27|8v~l9g)Zj!?d`ZMU z@EPK7t!b*$SBcLO-+;DDd~?DH@!FkS4WA?4)HM3I=!@d>#J8fwj3cn$6_rc~=g;H$ z4__d@Nlo(|y*(3=s8q0Xw87&4AWRjnjm!?ySwGXES~bl;`a9Yweixz6!|>YkJO!U4{=XWAeZ#0^CL(#_m(jY>yfuUe z#1BIZKhFBa|60RLpidPabtBje+Dqc+5#AH8?a`U=2~3B+uVFr#J#eYL6 zJ089T;$ip<@rP=d_VhYTM6$$pr=`-oeuRGFwUgRt2J099VGZ*){Q>cL;!Cr=I9q%S zVU75|=kolAFA%@AhN;Mb-V-0y1}u*DmH37PeTrFFo34A{6POOYQNy&LmwiO*7vF}K zNb@=pIuODia{SmQSiks}YM8I+{lsU9KS_H;{CUD6@!Fpq2A?B-eho8>u8*0Ev&2uPy)FI;!sp_(>$@60NBo^NOg{Yw@p6WaEg#X2qz+5f-ew%TMd&!zk!KJ)Jcp@h;I(hfj$?XRm9Wu;h|nFLWN0M58^5K9P#n2hn~PhBu{(? zT3eczP8cA5JI4<{#rnlp=JwL{8LE+}G_bE}bH$$`ydhrO&NJZ?m=0ad{Yl?0K27{& z+SlTrAY2hY3-K^~hWOvBn-}O6CTsoTU!^srdFu(c5yIM`ZZwPai~q5@SxFxtK2N+p z41JRLcL__x_d*;GUm*Ug>Sh@I4e?R!z{b$_iJwCFQM@*@_rNDG9ok>rd_}(^K27{d zT8$}$^8|ewbT}R{b~fu5zpc7yLBEZONS63EwEM(&Bs?Kr``*LgbHu+@-Be^tdx`iw z@o_YLGPc){a8Uf2r+L>be1Z6vtDC>+KZ=jK8LTviE%_)RhR}fUfAF8gqOI654U2z0 zHRuNaR|I1k`oEqUSDcEr_8)H8pZiE3EHJ*IF034tsJkrG!|E?Ny@%6#1@zud?_>4O zo6%cZ{cESUbb70R-rDJ5t2birBNSuxTCM!W$2h%eK(FTXSgQ}qK)=wS__p_V`h^Dm zZNFHYif;Sw4gA}FsX_5=|LK3|2dw_Q(+@cPU_d|Q^utzPn1#N<>PMWu!RZ?V`X;Au zw))Uo=nJi0y|sVa7drjffWFA-i>-c=?;oKtR`28VF-{*B&>wdCc&n#Ahu*{Li=5uW z>AeDaZ>RUM`rbw8EvdaTvIcnkeP z{o=>Hhtn_AcaM8!N$mxr%KH~}WF;?&9^f68!7tkMe`gp7N{1&~3 z)#p0Bhtqon^xjVIWA(19(OX*mW2d)tdaHom+Ua4dU*UyTD8}mLBK~cUaeCE&Ud`#T zR)2jE`h|MMk9%jQU#RCE_u^FixYu)!d%fbvJ@Xj)0jtk)`T?gO4CsfPe%R`T)6q9r zeXr9uIDKP4-{kboR=-yd+(N5gjcsd2_ZesA$>q(@n`D%kl;TZP8Fx3r^Am4!lDw_Tm!t< zN;90a*GV4*r2SSZzYl4xm9{!*t&`piNN-uG2kZ!cnTqoV=q_zR+CM!*EhLm8XolZ({ zQvHC`z)BBsDjzCgrOQq#;iOUl=^88L{f_igeDQ_-2N_$l6haL*K{q6hbEeDQ-D z`UL4?D-Cwi$4>e*Abn<~JJ%uQT4}M9a-FmxAiZs+rSBm$)YwX=1|XHT(m^Mcc2e1ZRL)9Q^s@11`*!#;ZT&mqXZLpabAh+RpSN#^ z|0NbF-%4$rl<%Yi0qF}XwX2G>(Mn^Tw9!eM1JXNIy6twPC01JFq$N&T8jxPFQqFm# zDOUQ%NmHEkSU{R;rBjWO23aZQCjX8YTL98D|K|z%}%-{Al+IlwP<`A zX<_k8?c6zRtG>-S9Oq0s`|vC5q6@t(EPAbdfib-+=-Hyy;xYeSL5qrBefOu|$mzr4 zqF3Oht}fa0nyBUBZ7caWoVlDfa#j{v-q3tTp8y%@q|>xxw3lh#Ny0}8zY=~Tg!PuB zQHYrm=QlJh=+RRVmq=_w^Jrd2!Vra?ge*e%F^;ekF;C*uh9;Z7Mq;7F7inLMUri{P zMc6=SKnUv$sro#Y+8*)2h9;AK7ZZ_A40uy$GsMp%tW#J>*iQ)G#1S4q%#?U{LvsiH zHzp!WBo3t2o<_KjaI3;t!aanrPO9EV%#+x?p?Qn`G!v1ZB)&)6D1JBL8->pae@Tqu z2(k0ILvBI5siBFXH<*qXVZf_PyPf7G5*}7)MR|6WS4yy=8d3iAk06T>zp!SA-f+E-)dma(1$V+ zDcuq55^bLNC{DlDDwHSeAcS|X;EiX9$#9|N4a}GHADM{sWx)HM7X1|A7lNnoC*e*) zSf`<1B4$aP-@r7XPh}#qMq+E)8u2#~K3C{MI4^M~M`-p8zn+vhwSieeuRaU0P~u8j zYnt~ap{K&TgkglR&RpjqMt4Gduz|Us{+PsM2E1{!7sWqDcvoRI;S-4+IYJ?#{&sfg z?gpkG{iMW9i9=~u^ODzlkWf!yGNBbAtdrdy&+>3c?B2kD6tXkbMeW9^9nZ-u42O~tn=g8Mcl^Q5U+1wPSN9- zh$J)MU7$s1-rs~i3Z*%x)Mu21_r1*bQAGX4?ofOKbBsPsVy46&Y0Jg`O4z3G4o&Ja1b$H z;!X8UeR=~XB83vKqqU=X5yIUHw-Cli)V@Xd1#V+k#Ov#uN(AJ2*NZ6wg z6$wRsCGqp+yxkWuU1EHF^F94niJ215(<&__{7Go8P?E2hMhI)G;|gN7#7gx|9eQ6T zBDoTq(8i0uf$*%tO@vn^F62-HUgS1P{I8x_N!OchB83ujX?l~5_b%Ztg*}9d&md}d zWIJMXH^lSx%m8{LCL+lUc=yw8p?PBnLlhn(JS?#%M@V>y+bHqddS)nnuEb1<57FKb zKbf#k;Yq^R61AZ+9Wh(tXZ6er^otU6CB90Fd6uxAkgTwc(4G*k$`O7*%$K;Mo@qqC zi-|~~#FjL@ty?{|0?`VsLaM? z_|P(5Eh45%Twc%oNN>VKBvayVw2n0IAHqb8RQ z_kjN=!8D^E7N5+37olAge={NGdHA`A%iz<+pHDE$>DMw5$rS$vtv$`#L>Mey+g9h` zv&ElCFoWsi#OI11MO!HT5kju`zKCsKVg2I2NH8PlyTliYA5S|WK8x_5cC6Om*Fyz;aMig?0o@mo25-Bqk#{8ZLMe@T3%_%CVii9bR3O1!q%M#E=| ze~8;l|5<#l_;$3ipk5b3A|X73|80lQ7k>};Cq0$_B8B2tkoxhTx0e4s!hd1y##LO+ z`g_Co=JBG>W+IZzfH$7DMtl}wkNEEVZxDRC_>Mdu=wI<)Bvbq-(q;bhbnI%}M`3N; zy$PQ!-sAa3Ph=vJEB*~y2b#BuaIg3{#DC%Q#W&^oOn*dtq4)@Gk@%YlZ;RI+U$<9T ze;@cd3FaVukN9K;yaL(};?EGS;?HFGB=_Ai_;m4=63k_~{?tY?#b3=~Z=iV<2zQ9r zcHlYqZ1JH4Q--ayd&TF9uST0LKAw;xK9}RQUBmjt{}yj{(%%+eDE?F0=i-kL&WqR1 z;XL^0JK;~po3`|;_;wyiX29!AOQ3nZ2yF@B$%x0{)5U)oZ|2hP5T7ajdD?^GUm?sD zuT945USs{@_r;sB^c?ZI;-}KKi=RdKT6_n@$KdnDzZY-%()Ge2QYijjS_NJ-c%unT z31RI=ehMGm7k*v5SwnBjL?oF3ZzFAh`0a#A;wvN8eVz4-UmkB7(C3QJ6n{PK4e=gf zpLlIuj)u<`zaZXxL;qTQuK3fmE8>46)ZkTV_-p>GZimko|9HGPM{mkRq)_}7+HEwi z1joNmymmP&zQOwY!9N^tV(62^Co|yHr7aPkNZ2g?RgN$SK3)8M@n$Psr$LcS@w;h1 zivNsIlJl#uHbmcq&lcY=-gKnbU?P$$z9%hA^9B-ni64XbFMPiEF7ajt{XX%9;h1N@af{Ok2l@vB{`vwWQxCw z)_~>>CA1@iwat1CKAY)Ky?C>p-b;M0_-(W?;y)y0i!Y7Xb{*>%UnSne(O(f?D83O* zn>e1nscXL`tR2~T@X>d{my9>3=oiE%GvHmIMXx0MO}LH_{^EI_|M2PJFV{6E>Ft<^ zWQzZlcDMMy2#<=_=IwQFvN-Xl>zZ10ZN^1%#W$wCDZT~aWAV!nAA`>qf2^+254CT_ z7mEKM?H}=b2(?zhYoGU1_~-%fpVT$!^y`?2Bs1U*pxsXMh7m@HAC6e}E!Ho7M_n_S z{;2p&@lVoT5Wj%1RlK%@N5f}}UtiZeLH}5MuJ{GCGvZ$$lwJ+r3UNDpzW7(_nhx|@ zOhgLB_n>(+Zvf#=@!CDEn9KSH!Y`_8-ldNapUi-_hxU~Ce8Ot+zc1nW51%gn$-3qm z4zyK#ruZtfFU8j({I1Z1Q2JFw?KtNlW=ot{*PN#(FcHa>_!q4$%`15m-!a7J@r9z- zb3?=ruWJs_9~56G{y1%}_@4-Gh}Y(H27L4&_`B+whV<>?lNs>zdGlY3Pa#|p|1{!S z_;m4I>zbG771rp6h<}aNl;*unxQ+1t@jr=e?&mJxV#53h<P}3 zS6S7X3X4iCYzBNO$^QQ9PG7o|CClaaPt zX|a>GJ1H+9y>F#ZDWnxv+V7+lPFfj|R#|C%1EiT&it6j%rkPH9Dj?0W(xe?oBdpZg zNh6%}KtLL0rLl97x>;$2le#%6Js{m-rENN=X=$b9PHO3-RspHCmD)ao6l zjeu0sN(~kvU1?JM;Fjs<-w{`u_z&*i#i{7Q{ijLsgFE0Yq~lg<>!jmODhNm?tdv<2 zX{VLOI%%hqJ_ty=t#sZXt+vt{C#`nUnt=40mA=(8Vz!mOanfuj%?U_ztyJ?U(r7Ei z^!M+G(N4+?NDoO6gA8rPr5kk(nL+G|Mjtn{vv<~b=lAT6*`lbuLo ztaRQEpOw0Pfs|sUeojhp(v1PBjg=aBhwm z?ve6HA6cpSK>v>T$Vnduq))80W+>8|RvO}@H=UFlkk(r%OB>+}t@NCe7CPzKfV9X; zUugqnyp=w7(s(CL2uKsH^z}@n{#FVN@^4drCk+Tl1FbY}98y~=g`L#aNofJ8ot5fn zGqJvvMmnj!lNtu3YprzqG^A2i%5hRDCzTFJWvsM-v$xQhM#T^AAt#+_EbA)4OY6zNgJHBF(7TSQrFr@i>)-yNsFDd zBp^L+rG30A3r(`pYfhTvq$vUEQ7gT@5NVK=jyq|PlQII*U@OJFiFC7-s$}?g#LZ5+ zB_Q2urKD$(8d<56lNvcGF(5Uu(jk4NvQ~Q3NoAc>J|I=F(&A1?=dLY&a5p&V+_nCL zTUeZm9^7BAEq-v%??pObr5~Miz)1%K(jhD5eU7xjN{t5lcf{d-Ju$ z?`^EQ7JZ@BhdOS_AwW30Z?>0_KeE}%c`^zl|NJc-`J>fbxPhtqon z^xjVIWAzo%TUx#T5dXHfbb70R-rDJ5tKXD@9%J>vPLFYV)qq~j>9JOyJQDqaeG__) z(=WI;pQ4_w-(dB+_xQJcgVQ$# z^i59RT&%aaArbw$;&Y4KxB30YQO@tyu%|T1e_PLWMJE?E_yMlB^&}UyJJpJwvn`5F zH?rvAA?x|DpN*VB>Ws~6YR1u*F%j9KGqx<+hcs_Cp-{ZuIdmI*f%v9P%|Uv_*WpXw z4OT!iH17-{gAi_xI0rtN=}?`f<|g`M;xoi|p=}V~n{Z6L&XhjWdc;?1YRYhy@u&DL z;;Yf>^Ig=7Cv+i%|HzGsirK_^#D|)ivK(kQ6OqyxV6n7?;u8q(iEoD38$Oxo&~Hhm zE&VI;eZ_aCUBw?NuNR>yA-s#@FM-bze=^A&qTj|uWR3U}v@zn(5?&Cm^RHv@`QpD! zGGpmm#s49GD(yS*vk2wZ!OugiyEzn4#)ds_7 zihnQ3tf470Z;Fwh#6Lo7N%N)=?jnSBR`(-( z^bq*vN#+~+MDY;@ywkK5;(sIT7vB&u=^Y+y@e7hnn0{LPQ{r!?#c&4W-A+g)gmnTq z3O-l-<4Gol-j9jM5%G0t)5Rwea>SqKf7{@r?ty112I9#P_6WDc(TB2=VV?r^Dxn@0VmgravlvulOUh)#AS+d?sF} zmCwKzitmzSrqF*8U*le|r)YZ4c?$`8s)wIIJPe=4bf`^|d5%7iiAaX{S7?*PuOmD! zUT2_mbd1>#53YHlD*AQ(be zC#!qlqx71wN|HH6@61FbfdTIV?SAop6K0C9g&6xT>la@#$uy@wFFr%OM|($nd%_{{ zIksR?0XgAZm7YG^RryyQ}&lA7CiJ3ofX81huWq3Z*8#56p5I=x+E6p25xJSIU7E0x@ z{t@thC7M6zEd(5zd{==ejQ1~*ZWQgxcyG#5)!bI`fF=@1m z^)nrMFwunAIG7_oM|=g^>*A{u_KJ@}91ou-esH3Rp&t`pAigf`Pw|O_>i>h+=E@%U zs8R4e6HS<%>40q<{At>A;(sG-60d!j zVenbvO`;h|-zz>x{3Ene;-?WxY=d8nxEVfAe3L}8hF+bCNP+l`wAM6lJE5m|ZP}FC z&H6{f*Ge=w^kL!?81UB8W{BTRSRsBeVjuW4@f8xySo$XM8RDnXz7Ri)@T++3?yQE- z68~RgbBJDIyVfuM1g$>JJ4;9-gqtB=g3lBGYh%-v-cx*m_|CM4#P=f17q5+=4trSt zgYe%sHf7mFSs^}w0WX%8Cq992T>RzNdH%zvi9giXl;J?Xiq8;VjaF#~A)e5j5Z0d2 zDfle$A2v2O(bJfSzW4(11+;bI&k**D*Y?s( z_^3?yHyWF9^yA_a81S-ae~X_@h|7bYi+CJfAGi{Fsj*p3Z_Y#{L;M@GE;MfwVYqnh zL|wO+^^2e1*t|xcB0fj_CfZW*I|y6E_eFdRK2Q9##%2V4zxV?2<7ubGXA!P>A6}bQ zpTb8y1V6U1IZlsbB9g#>cZL?Bc^3(N#5X{!yN~sYAKKWorVkgNA-)~$N%36>tHf)6 zYczb8_&Xb$D)cSlbHvBf4vTL>xG4VIYy4^vK2Q8@T-THXU9(f`7hj%sEzOH1v?qkM z6;|=15T_mRsf|r1dLQu#40ye0odxn@8yv#pj5hMT^-*c!rQn2+u(L7d}sX<;G?)y*(3=0`V(ogT=2UOck#U zwr=}b|5*5|8=DREh2j$!@V3)(#qTA2D!x17vj0ckdAQe?rhA4@e5G6O) zRiYbZbb>)J%wUu;j7}K6j5d0U5+z!QD8Y=u=p{yH^xmTl2IKo)Ywf*1+5f@sd48T} zd(Qjpwf1_gb@NnmOF@qy`|D&M3blyrt7Bm&+0$dYUtsU_ zgZA~e!iQpdq`@#Y4HqfKU-VZB0 zU7@1Lz7H0DBl}etVKMB($UbL)dk6F>vX3D9KcVQsqvs?RG9HFKJ>z@|`$)1+9pIh{ z?T3!gD6(GwRRziujfJntzAqfBoB}`Dzw>vGhVD)F*U5ew)D*IxkA<~lPme=?fxR;j z_K*DC`=Ng$dq1r3Btrd7_Ls2mFWHxa<5k#)k^L2acP;3QM~I*7n?RL>^0dXmm$dLL z7QV(p2t7g#`wNMX<4J$_JLrDo7)6dLJ7U@(`^;E~rGC&SSh49DL7?yb;Q$}LgNLuKDg7Di}%7CDk*BY*d6=yl{6MUFmrbb5sB(_`U2 zE#$_+dvbgmjc0>!+(V94{oUy>V)hf1BRS@R3WoCdVWAN%l)^$MEQHXr{JMCyThB zL*FLHD02J=qO3`LF^rJRJ9snJ{8~bc9|f$GlM8$i4^` z#?e9Ek|409d{Z9}&bTNzFpl+!-rw81#VCUe@PoX$Of z(+uVG);P^DPQNB|nx&j3J%-ay$|-QDF2qm9X<#y^LCR@E0XVf$PMwTX8{_nKGN*RR z=@>54e5xp?ImW4qaSBW3R82VzEdi%O%ITPKDrB6BBy;jtPO;5aaYPP;cDFvcwzrNuX@pR88P?LOJy?PA800Vlt;w%IWh1aN4Y# zqKwmKZqJzzk^eC<n*(opH*L%qgRC;+w;#rDWq~AE68Jw3ObsNwUNn_jxJVxZP$T(qGD{u5tRy zIGsu6bXGZCy9TGN%4wK!+G?D(Cv)1NoMN`ZX})sWY@FsBr-jL!7AYt1b2trGPWOz{ zaN`u2%xR=@dU^>?os`q(k-89_jMF#CoVqBd4D;YrTRAl`PPL6w-DFN*DyNlo;8a36 zjWtdsj8my(PJzm4ds#STQcgRKQzqk-C7DxJ<#fC_oL;CGKa-5p3-jXVt7I>JzE&@O zrb-Q`bIQqoq%Ooc<8&dJ(?#XfB?L|h%BhWUN-$2lk~!^GPMdMg_F1f)rW&Wk#wjY9 z(^BQsZUmf0DX0C$X_Rpqoy=*Baw=04PFHDuaa~lsT5V;XN8(9 zeP4%d{|ssh9c+)`T&>s+d>ijFF0qDT^-Om~$lQP7dgk1ASznCS&)DU@4^17R^cS~0 zub`?ydH%yfcPvy-2geZlWIh^$4J4>FTV z9@&2n$9}L6MYqrMAopGEO+?8lS+tsr*~=(6YtT}}1_ zpc+GYMq*(Q*}LKR0rrQ;{%nx@OXxXdf1m7IK4p?|V_H-pu^$K3MrycEJkUI)G z^;y^#!wSzjs4`F<`dRGOSO{^!aTM(9lKqY#H+_~efb72`dq1csvM+&!!(>kvEq}s( zJlU@ea-W61NA|19{svSQ>=~X%SfC%o2|2zEZ`fZ2KiMw|a$kdPg^tksWd8^%lI&k& zVGY^S^-V+Ar=iQMsX^{^L-E5NWM2#`Jh`A!oyUS77D{6wWG)2h+XAc(Qu@FL+Lg!&Wp6q`Na#w|ZfR51BWM3aD+XXDNz=9VGA)Vp)`8Dv9 zeU~72f9T%m2)$4CBcbM!{Uj`GC40JR>I(ZbBVpev$lVY64A~dM3Qr`|N3x%Yg@B8& z4}#-b*w-cdFN54+&~4BW`W@LffchEA(-I5o$eu2+l3+ic?7czmHPF||K8oz)q5dQL z-?2~>=Y)#yw&KD6bv$Z#=7YzULGJVzs4Y6YdZi~f*7U*}PeCk9CLg*U8=-v)1i7z5 z$B>U+>3N7XyUFJj7A}*|e#AMfeX<6*&q2Q}hunSt(m(0j;7uk^gcn$zU-5ev`BXD8yU*FIwc-SnY%=Bx10D?JynrV!S6 zZebw|3l-@K_Ko%#5a|9Kx;^>mm7Zc)^8@*m#llqb84KrXw^csf0^M_=*OQN4=~;m_ zd&p-47Os*HUGz@UK5YZtO`t!Jk6!6%hc%h6!RK2n1Y)6L6F8sMJ`DriouTWa!>d<% zdSgv{@)?AMq2xo?$p!8xwyJ?{`c3=!F@>z(5qvZ2BoV#hC;6Qf}^aJwI zD?Jsl<^%cE#6sTd@S#iVIPFt7(7h8n6dhi@(sK}N>SK-P6c)OX&%G`9j+pkz8R&io zJ&t_zN>54*Kc9RuV_`e_(A9XIyDFd5f$k*ebL68}dOl#y1M*2V0;iiB@Y#%Ur)!^g zrQG|W{n6poD?N!=6N)vSOIT=0K6C+pS^GRH<@Sf}M?QL`Cm3tSk&hP((d09X#=WQ5 zu9R|5h2BR#dZlLp)|?}sXe_)UAG+r6t$j|Ga<_rbb`w5&rKc;__+yQy4;E@*p<-P) z@6bMfzz4b``RJ9Nu2|ELeXuZteCRg8_r79_0~>TK`RJ9N1z59>e4?>%gM6~XxuN!n zMh&1pk&j;K3C5aix2OhKD1(KHbZ0R~`^-VDp}#_hSFiLWVogW#xrBugXn{@So0OucuryAd-9?Cm*2Hdhf?k!=!xW`S9&U9%_8!tiG`iy z(+|#RA1bycrQBnoFOrX5>6w8wkI82t7Si2;58d)K(>^syxjRD_Lx)$d^z_CWFV=Vl zVWBnoRE6^*?NgzYy9x9F^3f|j?XYGd`Fx9o)#O8WN%yo*(NgZY&3NAY2gv6m7H*Rd-HT;@tk|BFbh}34ndLqB z=#`#KSd$ZLJbAEC4ht2d;M`jK+$ibZ4Bdo$^h(cfSo00}9KymV@}b+e<=W?TNw*t1 zihT4+PYtYzBcFy?I7L1^;QU1U{8`dH4Eh=Q=#`!cSmU}6pP5+j!$L*6<8wbz`D`oc z{vNstI=p(NXCT%zA)irL=uJK$a2~0B)|7PDg`Pq_dZnj1)0S!`H~Hw5p7mJsjC{6XAtRpqRrG;#&ZmlPN=bKi=#uF0>Xn`XSW^XSJjJo_HTlqe zWe4puqNMvA^kDMQD?K-{W(xT{#==_iIkpKG;M(VhlJ2X}hsj5;^gP6xzsctn7XBq4 zx)pt?eL9zPryqrHk3WQuUg^n=H6^jeQxFSZVxi(3I9JBCC|{4ZDCu4U{VnMG|RI%6>bFmMY2tj89JAey>-O~K4V)|u?hpr;J&4IEmWlJW4xou z1q|xl2HLwAqx_C00n7KM;&p`)ir2R@2FW70)A*F86wyuv<OBL|HW)$!e1*{0y z4rmh4;ec;BU~tOoi1JjTOoPdLv|QK)$Ia4Fp4w5gR8f*RN_BX6W8iucO`^PLMrlQ$ z1G#Me8d0+BnZ12U@P!e9C;Dafb8oGJ8VX*PZtz@|O3P{p|M1V`~ zB;cZO!#7z{%*N&puHO>&LlPJ}0*3K#eVke_cxJGNBv{y53ihxBGSt|^69{_(+y#3? z0%7ka&DfC%uVI}CE!ZQ~&C+7w?ol$8(f9y5?RRUQ2N zBZ2*RJ7Y(}@azZN^ui$TJdOQ$yM?W#U_aeXh8p|XcEY|&n7oH4Z71w(FE#e_?RQ(_ zz7JZkU#OuK_Ddzhz3o6T0Zp(|Gj$WbA0dWb9bRzDSy@y=i*@tRF)Q_GTM9&S3BUi2G?Y!9KX1s-5l?VFwR7 z0N@*Ixz1sL4f}+f7Id|kuj_nct*$d4{aOm}t+g~axTc2-;qA3l*ze&lgm>1itd95g zpuKl6csdL&3@_Fa!*X%hV#r&5*=WmAO7-Lvxe)?7$&oPT+Wy18oWT)Va*y{2cA*26o$2H>U{aX z4YzJh8H_oF5O~9_Uqfa216nrJ1~ru0zcwlv?hQoLHfRF4Zw(dci~!ESb6%g+0vH98 zFkhGR0$n8*YQWSspq2udRslAsL{omcHS|SQ93H}#p7}!l(Iv~UhK`r!(88P1=FMby zAGlmjK7a^sapvs{Hxx8q0q~w(Ejt!Wa;9`S)6n(S@Sa_56;w;%J-=ECT9KlFRiBXrg@|BFRv#20BFJgTLo$?C#)+ z*>nctJT%E>9%pkOqhQ;#sEll$EaN@xI!tb)bvdct;YaY7=xm-W(|a0EVOmNy&z5cK zlWYo0T1GolJ@^ao^JR1r2N?2q1jE+F%#Z|=SLs~NVstGu z3|kjl3|b1q_QhmqrqLaXiQ%SUNLaicL0%KXEDW50CJYA`6GPg6i6K>r%SAzwdk08T z%x4lOJ+^HIms1o5eWG+VQq0#RJdtTBB&p{A*_f&!$6f0A$&b4<^J!Y^fx%?krkzii zOGxv!O*g*{`gcRiwoR`BspBq#lIpn2sARae3lJBeNlvBaQ%;vL3bL7wiw~c}vt--C zBvWRW^A25sOLaDfXIa^3DcKyI)vGOKQl4ti{b0?RrI}7a;S!iF#!VsxaP)5OS2%n}Z zU8H&^o68xBkse|MdBV`tPFG7wx4BN2w^fVj$@jdL(<#~>3?>_^6=(a3H1B!g(`nDk z_EBfw+Rna>&R%Bxwn~P3`vY+;nj}A%lP`l&u<<_N-0JfwSdM6z+{*59zCu^8B z!FuEItfHl4<5TuY?_{%zt1NAv8Soci-?B7LG_-dr240UQ3|Y$32H4LGsZz}KfF#dK zkldCVk0cn*%IR`$!l1|sO>#RylkgF(rI6fBkefX@^WRI53pRD;zt8s_0sm>P2Yg>r z6IynohiYVXrSeG0aBnq0^g$EqRD7@332xwRgT2Eiv+zd2q*iX16N#=fhBvd#tEKQ} zRX0k)n~iUT%#})Z=G||2b1?5s!<*CQ&1HC>=W;oI01@6`zE5&KF>kgo@D7$cq{c9L zoyX9g>#9J5=2v3GXnz12VkB`39*IMw9J6f^VQAp{2f&_6^cVbAz-L z5Q%8QyO8fR77Op7h2V{pdkp6@mlK`W=(9>=cHb?9OECxsStA{23mzCF>7iOE+PT1w39 zDyBRq%)t}ED!9w_T24l|Oq#FPa`9R6DYTqca;u@$Wkwz)!@cYMUCu=`0WQVB8B#NF z&uRen$RS(?uqTVUoD%5ruGhdGa|koAmICbEUJB44Uw^<-9(EZ${xwgh}t>F6R)s9vR+@Hm{b#o7v*c zvR!Uk)n!~(=FN~s^JZh-641h%-R8|V6O?c05ql^2|a6^4F{|ep-!W#>dMnO0Yq3gZj zonZ57DZG;`-pSk2S53w{g?aB9-d~tEMLNwp)#jaMc;5%&AOeW+u4Udra0Bn0df;s* zyp3VV%}wjx3kUrjp1DYh$Cpi zJA!%l2=D!K;0+euB$!MMb~#tk)pnES4Yql;6y9=HeaqYRt-!p6(rexj<_&|E{lRVX zh8kWkAiARoZ!_j?4>#2J-G1<<6y9ktDP0b?&*)0OS@Wi}d9@VY)K-1d*!4}zyn769 zI_AA z_wv@{$J^gqt^N1PR+=B$V>HGGnSmxbsc*ohi;|=dlH|Ae7;a$$W=Y;o8d+@dp-Yj6<=)q%9bR9LkEo@#bg}0T( z8*cNqX5P?Dnzs$}wuF}bp{>pPwc%|Gh>2*zJAirn!437r6)XOTP(1Iyu`qF0b~!W9 zm3ynM@5gv+|J71>KgHAj>pMMm1YbZn4D367%Lslv=fi;KFkFR!46MtOo=!R=>*l0qlg`AtAGCLHC0v-JNiFMhEq_G^ zJ$io71Qp#m5)O-{qG70}e>Io083x~O(-mE8S5!->Xq2kxI;rT=c-m#9z<6A{EdKAx zB)6a!6J5S$5TavvXVqaSH@FCyFyAuSH;uxGM+S7 zbTxY)gqDh~QJAWtF-oe6u2r&bIj-nBB^#9Eg05GxvD9+|%R3Z`>$#D2%513T&@h*C z0!`}qGM?rte{`UdAsbQ2zEa6DsN%`$Fhf`F?YfeERT!r%U)yRamF&lr)Yo49Ij5PrGrSLWTvys1)5Y6|Muv!Jdm)QK?c zT@xS1z~H!{u5D9mDb#f>>M!G`_eeHl)njV^?3%hhQ`dkN>IOD-LqnYp5cSZ6`a7oX z2siNVEdk!V!rKQXnQOb85$GDWLsvPk&8wyGey#}RjPOOgbwQeN zf`)fzEzGcJ!dr=XKMC);Xz)JW!ZTJDux_m5a=yrcZx$qI-ltov8B0syP1=(DjQf0x zRo@p|=#c1$(PXc9xrGj>5ztcKS88OnSG-m-+}joq6VZe>3-d058|oX5PYrzb3U4e- z8hz<HErHnhWBzqT=xP* zcq5oMXKvinCo@7*|S*3eRT@8g>$vlGfbj;*bjB|Quaw=}9`CZu(hPnkHMxzOJEv8PBk2lcS+2DP% zS#C^V@?{&B6M(K9do}Ny&DH^{rSQJnocw_Ock@Q3R}Zq@Z>9sbJ4TZo>ceI_V8=tt zHu$JURtM~VN``x1w{|&203y7fG4D#@Z9D+HM}@aBOnkp~Is4JI-|!x_d9@VY;}-9U z&5PwlI@xDVGH;sCHE-f(dQKYvExe~}-oFg*g0?tUq6zPl&2+%lgd6sUNqAD`vqX5a zfOTIxyvv2Ie*1KNm)N{o3hz>jciCogGbhO9%)8R?uGmb^Y4;o6Xq$JX;cW|uiD<(6 z2lL)!-c%`Qh~S;Ep#D*)6Jhvs2N!o_I{pr{K08tN3sAn;CB;3FoodLXcgm)U5bi^A`=(=Qh>)5Wk&|EZHne%aGQ5`~Fy8@0c)Kxgez?(GK|=&T-3RKNYF~z7 zh0ZRg5)3x{sjHmRrq)uZb1P1Hdn(UndEZFh^ZRV`7{rOhV6toH>JMU=z|6~f2KxOGf9$?;oeDrNI(>Y(P`X7g$(ygL-3R6k);^6Ky0MAc6sTs|4? zV*Db08hU*Jn=U|{izeAz+eGtB1V%wNQ{s@#B*`WTCd`oi#LVMo054G4R0#ueQJ19+q`KE@7kU&=MtLm7G~ZI zg_*Z4UcdI)8_RQxA6Vo2;JzANZw&9=SZi+4Qh4{r%G@HCk$=WYeQWZ=(*v>e^sW~M z;hhk~wIY63sp2M+J{b$fp{Ua)_x{f@mq`Hngret$@9(tT*#v*tg zR|FY!M3ZFS#L}T0hz@L=tCZ|)Np=rRe(dXV>Z5DbQN3|yt6|k8q?VHGT$QZclgx`H zH*+$Z&*@CXXp+u?*fDsRwjNs2S*U^KvUrh_;okIssE8)K+nM($^QKBcLj*6a0P5~S z9SOs7{anri7_>X4sk__MS_<{|7In{9ax>Jum^#p3Q}>Rghm7^1g}RST{ez)C`lHMF z7fq-qGj%t((J7dQ2*$f%cpf0sVIY3l-{p*hLH6UCx{6J$rBH`i)YW3i%}`fo>Z69b zMl3x9dtj(*+SIiS^&~(fpb2#ZQ>P9PY8oQ=>M~Gg5NhWqoVo_kD-`&mzM;-wQ)?;I znG~m-x-!QmKXqk^rBhco3?}=3R!(9OY2N>{aS}VBrS#cVAT@dBFgfw$nbYLd1&DLe zB&YJ6(?yJeYzm)2HrF@u!JPz?<%94H30-qe=xuO)qjhj=DcRiInEb-w)<$a^+}=os zueYeizq64F*cw{!@2Zj2g~L51!@XWWbVn0j7xNB)8+gy5LOvUWHx?$dhM=LV%Sp|< z!RFOccw;w`p?>Lo)5hf0-@K8kf01zc!Xb|FGZxeMTQ>H9Z%Jsuk5_?I^|zXAxcb{n zHaUS<7frG`w~=O>FEI)o2Q*@;6#O9ai{;2{sALue^D)C*&bKhDny51yYGLoudH%z&9e>3kC>zlbi_O% zdfu;|Z=eIdU`d_Liw#uIs?d_nOBG0E^GZqeO^eq`;_F$XT+RhF$tDM9(+;B`n^3yh z+#}hPK_<6GyPP5Ds&iUrv&YUxOUY*MhUD|rK9!q#WU`;}e>eDlGX52Vf57na9(B<0 z4go|An(*G-Ku7p{;q6utyuS!<5=_pHbvd7v!gq?#Xx?9JUM+=pnpOSjR`q9a_1j@E zss2pHpH7>1=27 zjh#&wlT9rk4n&h|MsqexFbd7SG-7bUsmQ5>hJP zsB;Rmath*{e1ddNr8%bxq&cTD8|Z;!Gib>v*v_e}ol`lJQw1P?hbB2S<(z)ND3lY8 z7+fF$Ipvm|_Q0^+Bz!sqgRWf4gUR){Lr!s)l@?_ufcOvEtbJ#&PRD| z)=i+j{{pQX&?JLay(xnq(18p_;Jod#TB;ZYlS|X+r8=AdFX$?+HdW*dw3I5ws4CXv z4-VF@r<*oDK)}CleF41Ofe)Ev&RWkEK23alL~K}3TloXDq_a`QQFB(TlIo1HNy%{U z2oT1jNiyeobL1_{$+E&LM$+@YZf@L~qO0XJ0tdL96`65uj`Jv-Cod_q@= zOB%S94XmXAw^qP%3)*JAyqv2}ac!BmMmf#0a7T$I?Z+pW#5)iRy!aIn0N5Bod zTlaytq$)5>M$B?Ki_mq+@RqcBwG`e!i#KS!^(jVa=DlHf%P{XJ!y9b#mNmR30nr9c zcpEbB7v-5Zb{2R)t>fb}5+?q0T#grA6EExfep+W8pIQp9kHza!d$+2uFY}JTXtF<~ zVBSU0Qs0y|Zz{ukYPJi%0-|{fGVe~|?YtYjr-io+OwP{5oAT(Y__yXgZS!g=yl2A( z8@vmI_c}}-&v!Wk&{gz`=3QX(YAL*n*2yJWO`bg#D|&p;h}mPwI+}oYVlaMQ6vgrx zq#TV)Ih%|jI-6yjO-X3UX1R*1o)@i9Qavw|su}8#<8e ztC>i4iX@u^lkf$2hJmgrCfO-!SoM=$TB@(ZOy&IIC`vlGmO_&#(>cm1iPCvEqI@S& zB484;5HG5rtIAbf((g64(rL*gQ2Br zy>wmVu~cs*!@X`$bVd{4pBZ>A+)$Pm@c?cpz_Bn{xya>gMb};f+|U5?wSbla+(>P8 zbuG}C3I8>OO*n&$p(t7l3_KD|7}_&KNpyfAX&e~REa&4q7AC6};}ceN)xM^SmS(v= z&Y3|=VMw>!`n7=c%jrm&0)MGehUHYnC}zOGqtJxmv*mOw{3Z-V=vnWWU}1pC+$ApO zZ*(0o3}b>V1}%kQT(HcBst)6WiNVjK872htmW1}!$G|_L3B&AQVrYU6)L~^tFqD;T z5e1W#QFzS)U0+?-btr3Z3oV7AyuB?d@V1CE3?V$B93X~T7`P{zFx22}aa$PPZ3jbc zwLiclZmG+0RrGQGG7PzG1}%l*Gn*kVGt`E^Y>RyBs7$S)y)7{CFf?H(#tZ|{fjap5 zgW-ex_{<)d99V`&N9byKL)YPh{o^xQ3d4W)kI#JKAD_8s7@T$6aEv`BhAtR*3Ysuv zWQKHJX6Quw!&+fTgvq((E~gl}E*XZkHiMSJu-<0aAV0zbf2qU9wKTbpfcEysz>Cm? zVHf`Z&LUyRbPNpBgyA|&{#t>T_0ZM+rmn*@n?Xxqm|-)_WQI?M;n%fv2FX?l3}Z0x zdNg5J$_!=Dfo*Z21Q>cK2AEV>iSOK_EAuVQ(8DnBgr=o1^i&Koq4naBGvF?#f!>UC zfHY5Neb&-%Rb7OZ3GD|pv^uHvRWjVWI~o^dXaYQzf#1Ll!1u!e+)jYQ0J{P$XJ!1z zmH}>OfceXnTB>=z!&F zln*i1$wEstLB&`%ub*P*WO0~cj>JH#&?K`A9P@998H~FzpBoZ05hmwi@SzR5dfe6Z zyJ5%FQexh+W8UVNRl@X4KhK>SC}W(-D?X|ErrzT9Nf-|+Ii z=ud{%2M}e@gm*gg{vo_AZ-BS5@b-a8txYcH8oJIH-pV$wmcmE z5MAdD;0YU0O94!@08jCc(RG2l0RF{*^GNd^ahm(rK}$u?*uZBE@a`=*kE03j1OBnP zBXC1SdtCtVXaOz**#2Ab!3ny?KhhN)Z3Am5z+)}oacgQ}%u=;9@OTD}AkDxN82CqM z0iI|BPcpz6LE%9Y;3W(^9c};~d=|hR1UM2V3ES}EF}jLB*1#QXU@Zl>qXpcFfnE|I z?*g3}xM*z+_>B$N#Q?TL)NyD6IEVo&!VQ4K%K)&P0PcZFmmRnZM%P6HSk4C2QUEI` zK$+4)){vW-(%j6q5Ti*!LzzFp@Oo_CiiS5UAi~guw*~WFVBS^%hP&ho=} zePDP2?H?G_dZNqP+59jbU(ac&&gfnEm+=bKp))#M*O^$~@(x1d@|ZR)9?-&41L_4ya}mcd`D(O@<0e(}UG1_Q50lYCntDgLP$?p+a5F5X`^wR~Onl1_Q506NW0x z&=no@sYEl3k*N%x?+5q6b1t7W3J2EyyKw;utF+HFP8x&5CwnagC!H#ZT=}Qx3LGLD z-k&ot-3QWq0A^&m%wOvLJChn(UHNBL5?B7aFk_$zdtqh|gd2d5T?O#ptN5f*2Cyf8 z!y7^9+F^kIUZthe7)EG=+?&FxNC1#z&h&fJe37DMy12^&Ls_|TBHqON4Eup2voSh&gHS-kq6zOB=B*7k)TkUixNR%E*I_bhAMQ`k zb<6O!wRyD^-gc|x12N%kze@d*x9sU1n0K||i?I1R8opozZI32=Lz(Y@@cl`1V2JQd zgUO}+F6TD7M!(SY46*sN6uwZ!Cx@bE)o>i%#TuZ1d?;3Az^|dDfLy4Vc0P)KUObDM0yI#nik-Pr;opKhvzDcMa1v z)Vyh#w>W8@I?}Ou9cbZCuOg|-&kQ;p`CKg{%Pz3?)&pcDn&eZ8^BIE< zr;6PXb~z2uMSmkeo(#mVm58w~Fbn>WGmehG+yXu^Azd5;ON-$3w=6W%D8R6mL@Z=tK!Yt1{( z=G9VoCs@1_S6WBdB<2ljr0Y4^=9^;po*%)l2qLiXt!BOka6>(((?=m~g|9J8UL3=V zZRomV_}bchS_)q~i?97kYsTupd>ag3gw5B{@GV8q6KKLWRO%;u191W2Q(A5BsY z6R01$#{8q}SK8*&Quu-`zOpOT?UC${<)nU%b^XfQd=(5|69gTOCVY*hesDwmCO!h6 zukgjfq-i4Rhc5p&n$Oqf(^B|ST70QilAF1VWcfG#}OxFg%3z5C+o?M2QlG)*kC5lRl+t(%=hWj4e&5ftU(jtXa?R0H*A~MegN(*z|L75=V-^#waEbY zHo$x}q@@7=pn%nNeqScc+DsGv$QcxY_D0jdXu=T54As#AhPt?|@oBCY&Vd0f0$mmU z)kSM=GiWIcEp3KY%&@{Rgfqi7X28J5(S)H3Gn^HMR`|-Ek4G__$40w=x4O}_!!USk z1}%lbYco`026uB^hswN{)`Rv&WANi>!cdPHzC#DX70H81Ao-`xe9xxs2OXbk+Kx z>u`UCo|Sl?)KVB8uCQLmdbENjfh5E5cm+-NzAeFU7K4986NYyyXwE8#4lw+e2!`Xr z5Qg|A|8_Z5(Y3=c9Jd*?6o!*FLn1T$Ofhd@u+$h#VqW2xvnA#RykqXOS>+9rd{-Vl>(MlUC65I|*9mtI29)b)7dw$#8EE zK+H#z8m(sDHNv~JId}&O?;e;GyM{|bitwMV(Llq?XDlt%8EY^Dzl4YP65KzSC__0) z)^M)MG`f6mr?vzlDr#1Y;5z&WfA1*__6AKd>&Y?4 zO3dTs5wn2W5{NhSCO)e}*PowsW(7=4-V$0$%z`Rr7@s-{ajEaaoo^Wmub?x<=dIP- zCq=lo5=;Crk^c&M8q*I_&NBhbJA*WzXNt0UEVOL5Vv3`#yjD?M$p&&mQG(?O^5)+j zD#`jOY5wt{QmiwzK{bxua5-6!rc|RDS0e}=IR19y<6xhc@(M&GO#E--dLCW<9hbVE ze`#KU;A&_o)p)I5fspI@f0l2Pw@4(vH~d1xG>j(sydKU5rbySLXQ!=E$hPSuP+sE)`1w>*wOLl%;32Tt}OIqQT~#@u#yCme;(t<|Isx#g)Zq|_Fq`hQc8Np{tGK-`7f+& zfxndL+%lR$4idvG47?jnGQGurVdai6yui21eYOdM^8^=>Pw`6=9q{+*4Z}8@K}%uS zVKXE!Lml`F!_H;&XU^I{d!sS|NA=F+n4YCROOaj3(=z(6Yn+q()Yg^#CQqy-ffSi6*==n0FG~P@^04 zQbZNujfKgq7q~w{SCZkaV)JS#ykY$3cJvn~sx3>vnEJEf>Wue!L|ET{)X}7zNolm5@zg$tDUWGhX70Md<36T35fY z$%Zdhw3KZ8RW|BkC4hl{H^4=g(R}h3w6_)p?ujN0<(VN#7|PLK^m)6KFWIADlIJx( z%I<{U>`$W^-Y(Ub?7RnPDGdKERX@bc7ccLZ(k5;ScfNS}z;Z04l=S0Lx}aY{ny0Y; zxPKe8l=PE|q)O`OlFH?Y56iQ#_Re{QqXjWO9JOPfk~t}feTA%*u~J2z(qB*+NCckiN8n)lHwo{ z;HOLJeq|Tj=yR%&8o*A#vd?zGj)Y;4H+VJD)L{yCTAy~R_Aoj7FLoPr6-%!f+8G8u1hf=}4vIl`nFvmM2O;n@ z(vgv#kmg;c6YnxkSG~)0Rzs^@<{KsP*C0VL0Zo7hGH`yl0XTXzfP)42I!wlVz*}VK zx?q5VZD1`0xZF}Q)VF@+l~T8U6__^?qX};a=d;-Gx^3Q2!y62U2sGhs#=N_jH&u$O zh?gm>2+;kLfPOE^ho+Qiu}#Q597XJeU3E$kn3C4|3G^O z{)gY1LX)}{<+|qT#`{6m!6@c2DP|-J`LpBeltl{Q^XePZuH`xqY z3PYUDu!R}Ych?N@QOm)Q9~$2e@pamv3Bz7ysDuveR5xdUVYVUb%tTK z&7h?)%(WTjF~eetSq%eyizYEwa?DK<^XL7DIYi|RlbOE0&PjBY$*l7pV#m}{Vh)Rv z_tMmaJ)C1^@1gS^!L<*7_Ex~a?a+i_GBeaf2lD=IFBl?J-Y{97!q@49t}TWk!e-D? z7&_Suota^!VfZHM57d4KG1S7qJ<){W2WB`g487BWp_VYj!em)WU*|QtLbK>P)Up}0 z6oxuBLtSR@e6Q>9B_DMSpuH_H@GvxCXvqxS(SbVTAchi(0VWGl`8wm#wazetHbtW53ed_-57tUB+^c1$fLW>!09HjY`X zr_MV&cQ=Rj*22I&(S*T|8Tz6Fd3Rm~hI31JGL41F!?eE6G<1D54Cj_ulc|=%aAAr3 z8H$?x=;GoMx>3^KnY^^bdUSDl$ui7_XAIxpOWFY7BecwhS5zEz<#ts`^_|IUN``x< zg78l?NhT#Hldl&i6aE>JiIHTIU@|qmuj4`2`fR$OF?KRqN;2zIGIA@je#uHsMxE3) zF#a%%CR5u+#$Ny}__2nUpImG*yk0D5jK0o!bhXQ_ zd57D)S_*HZ#XHjG9mTx)dTZXFnb!j?yrXU2F^2bY245!~K!i7nd0W8^J4+m0=rziSp6@Q?Ob}RX#12LtdSB9Iit< z_D$~WOaFbLCJ7$Fd!n(g!d)?soG3^nK%D1@U|1) zX)y86?dz06S43{j+s@|IQg}P?pUX9Wdm&;meNHWZ8UW99J1V(d{!&1v#q^Cm`G_0W zn4MLwc$SY#%x^fEJ_s%M0$n)S70{AgSA|hi9>;&HWL^19+V7NXAiqi5P07acmjJpe z*}NQIK=x1)KV*{2*Lj2{g;~pmxg~}922Y`U{G~8uP?Soa`QleU@mgjcT^N5gjQWgQ zODRmz#mOID7F#S=F!J!S_+on4Pz!_cw`5Cj=7S(5^OBtT9MXI>U5fkTp`{XmDz18X z8Kk6ocv)IW_3*L`%hPc7Zp`EBJVujbn{l!)(Sf}-Q%)p%Z4n=jVMsLh=e|zXez-9C zOecG7k#%y^Qj)!~Xwz4E!{Sck<|6qU%JS~Qtwjk4p}*mATPgMK!ktBQu55u&lIz_? zRHzBilIuMcR^@tMNtNpZCDpqN50wn}F3sobTt$;q^Kq)HFep+j{2HkqlT`hX=5Dk< z(Y4;BdQ1(Y?*o*SUw=5Uh>p3m{Wb8(MdVl++WQqo`Vmcno?S%ezqaV0=N54=%CsAM zfAIK`h`&kV?}7D!FMORru&R_-mwJ;OUrQ-<92dykhiu{c?KU{^jFU(>T`=$zG{M=+ zI8PZTI3>M`Fk2WBVRAaZuan^?{QXPAFxzI(QW)mi4D*M$cE7{&|3b(qvG;Oi_wS3o{phw+AiPXSu0Q^3SU*V^NqT8i>7+&_oA zM48M{9!Qkm=OM~qiP9J*+tE@F@Np)aD1+@NTB;~RIZ8Qrc)P=OvWYUBqclMWatVk* zl<(Cxg-J0#U#B;^UYID~+flSsQF?Kd1r+5H+&`EoeK^VviE@#i{kNAWWe{O5+Ie(^ zf37Rm-j1TBiW0$5dE)D4kMLLO+2$RslzD^x3I3DP);{6S&g<4U4;thTs|z+ryD-@wNz35TS&+L zWs1@Uu0u@}hoiicC_{@Q%2SCF3zIxWaAF&RuM(LkPwgmLswhbur3O5_N8tY0M0v50 zruL5LK*h3rizr(qiXS43M;n2zrzXl)JBpSn%65*jmZDUI>(^*fu>_8CSfX6PWtGor zi82i)Z_)0dtGS=9*lIh9mMTgNN69`EQDWeF%tTqoQG(HdTwWGHl=%|H@%MGULu-Vt z1QTVx9YsqOWg$lyLQ(Rz51vY^)wD;4-S-!qG@ff8%i1@B;%}hJimod+%WIoETgfDl+It6s=fvQ`P>30J3&X-{VEAW&Ojj_eR}%M<=z3-t{#l@> zE3Si$C{+b)KRt%wO}po3Crcd|C?M`}tBM`CRD3d^*_5 zj@0}5$N5yUuB3Ti|Bw3zK@0FFHM9bD4Dc0@d=LH519HoITa(@`K0AI3!FDr?cu0b&fO@N=xrwX@+ z8-RbI@3}3T#}(cKlOttt=0jKi0A1l_^K^xIFVs?iSIo2a!svNa(mjT7DGY_?S`3Bf5<@fi%VsSy zml(Q2d;4SHcr;-Mo=Xg)(SbUw?+AuPbC}^eOdgiSgLHHaE2`_TXpY68r7$d+V=+X{ zA%?q#Vd)&&_1+P~7!3R;nlNmbLkzh`GeiIEU>GF~Nig}hoUc;>T|UJ$!zi0UOJNvo zGmK$|LGYJ4jAe$&(B4@X_$-<*%w&cbVVLj&43}j_aLW5St_rv)MAsO@aM{cVygz6u z3|AIdv-4G+12T-!4A&OWS+xMPHyVQP$VgG_Q2(pi#cT3u_yx{$V(WhE3_QAQEDhP(=1go-1`KPb0e|<#xvj`xS>cj zHUY4nnz~^!G1S+YgRc4|bdl=WfLaP*0}HSr170?OUol|jaT>6Z4cOQK1|n)JGy(jE z0SmzmfH~;hhWr9J4JH*T;v9>v_XaS(4XC96`dR0ef(z1jNOo>1#C)SMn(W(!nSYt# zEn@Tf8{QipUndJdgg1Vj^xr*18Ucat@BZ=U}T zcngi!TRe`Z?v~K9#kbf~b-bCXOCxG)Gyy!!Q*}4Ep`f=518|}MPJ_wWO1{oGbTurc z0VmpkS_&z+V{f6KOsfPUZe=6EyHN8+f__?g@%{XaXF~z-8bD;1eYQ z+*^RJ!{lgXU*{`y{b7K68(^MGv=rbU6tKF&>C1#O;O`xYfmWeO%n=+jT4L5thnOJ} zGZ7~5tK#AvUBd%)kwQ#NK5n&?n4v0WP5wa6GhZIJ%DcoBl~O-q>SdnP6Lp0usd3e% zab+ddrEwJ{!@bKvbRJFMzmbAr6cp^2UjhF>PR33c9wMWCg{~I{{(*fm)>7af*(c-2 zd@`N^fA3NZbP!EqzT=Z`w8ZR6A4=_(m`N~MQym3E*Rmj8u-zsm7fefu`MZiKmwHHT_0hr~Optn#-l_I-w?DKT1^d*%4BAV1{F4t-wI#8>giKtb6wQXUNP{-G~fv$yR zbglBMFzV9=Eu~g|YTL^1_!OK+4`B6;Vl@h*Qt%J6^7xyeW|LY zFg%MEFb59`lv#B4)tAQ_zIr9bc;M6o$bIz;H=jF2f{WJzwV{y8bl` zmka|xbkH(|_b$v+!CXeY!lR~~%9-UZicycrsD3c%hgKL}5oL9CkJ+PYsUBsVm`i(m zBY1c#!u4wtC6S}_lqkWg5M`4@iG)et`gm6eUAIk?O(qI&LoKC#adWM0xP|L?68=)Z zcxJds4E`9nA(~{mml>RCoay&;i91^{z@%>jUnf7hzAL9QoozE{DGYOMhI!1;3I4(` zpBef?d;KwRLo{Jn#SAlr;opj27@`1fT=^^1TEwL|NR!K)Zxa;Fhaj_4{_K{I#_1D}1g6o$%*K`yhaaL9Z! zfbcE?<5p#)Mx=R83Y(h=cORXgWlpN5hE}Ja>Pm)tdxByfngF+C;7GWkXj$kn<5P8y z29ty)zRqHFJu|>h%{>|eYbn41KIPVBUwsv6HE)0n6ud|-IF|95EFvnr`T`chU& zeJQIX_ADTdN0V&YaW+>l3MzVKGO{VE_AHp>XoYKWbZs=*6gAoKNlHs~Iw?M<4TdR- zZRfoN_YWpYNsdwr9f%Tq7*Sjj#Sam>g!?+3(G}s*HFKFLTr(}DW+_z7Wcog& zs+5YWbeS|)DK+;$g_bI%F=gRb*3z1?d<02xkVsj+VBidM7`WjT0N3~Ho*60TaTHv6yOK5t;b9cXD`Eq)(ieZ_-HnbGZNaH69ZR96Nb05=`qt1W=NId zA&fHJYKHnv91NUef)ferv2F0`0<3;S#*FQ?Ek1b^EjWXH;&&i-?0>;$j;ceFchkr8e3U2)}|;!c7_=Y!&t^X_OXn8 z8T+mw*$E{fp-6~i-}fbz`hCu`oS*Z@>D9+`&hxyV=bm%!{oZ@O-@$)^)-gjex=d>s z>_x!z#4@aN8B{XEm($!!0%DkI8NQlU37<%o8HUPm{3#kU>>-A|%&_t_7^X2pD!MFf z73^JrDZ$q|Omi7jGQ$j)VJ0z@oT+t~HElI&`Zly*8;+yVm|+<)M8beNT!{rk0yCtc z%f?SJJz)CJG9Y>Q0@rhAqlon_!nNF*}^ zq-eG1mP5!i{!?3g%OU+V{^eS^<&c5+mch5|K;lUD=}aPJpMF7Pq#q2Ts%Q)!M({@% zewg|8&)O8)kfP9~{^z*Q2~+!bwSa3=oDE4O!>6S<8`8Rzg*c>@=Ad9fa8weFWA02b z8&GW+P_UI15OWI0j6jzf?NBh7uGyGV+?XmkW{Mkg8pT|O@jR`jrqTR+z?C*XrM%sxzIcuabH1PUY$|@4czcuX5d=YUX{R z`O5oXs+oh;pn0J_6wk7?JrWt|2LU1sjd`;XZ%YhAeM8LGTedTA6uOk@hKG1CeOyC% zx4XP5nRln~@@)Bf>hrT@7vb$NxKE=HWjEp9Gn!`09D z^G#PQA~eqC;#9Nd%fSn>xo94YCUZ7n$mDo5_8OQn)zoZ~-E35HHj|y|Pno)@#&b^t zrV{={cw_t&!e3+Yr&(T_Ez>RU5J04%G4FcfJ;=PTn%UBodC#Fs-X6i;HJDaf-mWgM zO6H9gUOp3cC!lf*wB9`kxD7Nn+yzw0fHkzB^sV8V1o#Vv)3=6eO*QuqURbESwTZVBH1obMo@G9Kp!odF zyE-I&^!7^w>Qgl4k0Sn-Fo3^{`M8sV`FEj9Tu)4InDW+E{v0m9O6Gr6`RS~gYpVGh zv-Z`4+{C*B-grXfnQ9)to`z=ryb8=WBlC%j^s@sZ0*!gA5bsmweXk&RuTG)uBN1IH z_r^ZI2!GSX@?M?dY#%C__xhCQw~rfB%pW1Nyf>$q?V}~UG4HJ@hPNLy^WGNEvVGhU zi62$zg~wR{Vcr*rcRGflzB}W<+mCs}(Iq7ga|EV@_qD$LTwayTn;^VAfd>%KQv*mF z#y|otw^)G(kv$xmfd{+5i59p3C_YAG;Hgv04)Ga=0eD0P05@acRCIaN2X7+4^x6js z+{^`5$-pff;ExDsmjNW;NCJLnH0^L7lRd){1^&bZZfSuBf?^9A1NR`{;ur?tgq;9B zIGJXI*B2+0cyxp5j0HY8*_jb48Tim-o)KK(A19kbJ_^Gb`0!*iCAJw&z(>gbBQ#g| zsJNCX@sr3%{|rd-7!vw3iI*pv3g5&q0Pi<9ulpwRwH~^3>4$5Or9obsI$Ghr$qGyt z%PJYTUor#BHBbL!L---aGhsrq$)F9i9|Fg<(U>7A*)R--0Sx0CgP|2O#Gp(6{0e%Me8j4-G?3IBt%{4AI2!@-kwWnGFopnIREf#w6e*3{&U2 zT8HW`gGy$o=`z$JhTa&@b*N1Y_`za)>V@O>Xw1-r7?v=@dc*MTL^>A9=u&$i9=pMm zr=Bu=J5i4XU5%(@hVLdmzn$!x=v<9_KhYeS49k^h|3q_SibM0^u>Hjex z*b4=S%$z?XtP0j6=A&D;;jRsj{rX6~-yYZ8XBVz(hk zU>+xs1{aS8WAd-S?zP(@x^XJ zOKd{pL9qpm6WT%veTiYHc=)dXF2cZGBCZ351bates^36?i@3ll8Mv4L^Uoj`pOU=| ze%^bfoZw4LF{Nn;$^0dWKN^~OONnPW!IxHi`IRz~W6|3m0H`!H=C4cqt6%{CuDjsB z%iH5!bU85$pWA%zt0DN9KPpIUM|1Rtf*Z$%el+B=bL_-LgG2^FJ2P z!v91!OXmNRD)5X0}xu;L;ZS_=c> z|1b(&VLD+r@??#d)HuT%;oVBSNtSP$%eUR~?H-StXlTrLVv;$J zE@i$E=Dc5(`9i@~Vq&oOEligzUscOTi&iD`y*0^nv~Rz^O+*>fw1Ph2=Y#h5!uc&U zW~f69Z^2+rh?Sb5QdjGNx2Wx z<kk;MEtH8nw_m+_j%LXo;v~hWqk~LoOE{&}WQ| zCT2xA`Us6fz@H18_&+)p|4?WdfhGqE=Sgn75pr<{%$h8hig0lWj5Hw;}W&Bkvnz%=Y5 ztah>Y~t%?tL-3Hl}~y_ov*1pDVL@m}gNGUCS%=(W`26U@X9-Hc?OMuFj%3Ffk@nbCA5 ze}e2u(45?_f+0UaeNtot{>_V1A|v=WFHVbW#=m*-o5)Ci>;hcvqj4p&Qze!n29Dg2 z=AhUhl>ke+MYzU+X}_(+25}=lhMQROC6{D#hRY_;qfqEQWh7SNplQNE~)Fa{?>Tzj2t=1TH$+Zgi;9z?Csn+AtcxSb$3^a9AuI6#6OHQ;O7$rCHPz$4$*4yv*CQ0Q*tZ7Xw1z2DYpq8r z`LXjuCD&siGh+bNV-eM3GfC8AG1cP~Nz`Kr)#ERcST9RyY~Eb}ru}Of)#F2>sUFM8 z-WQtdu|hzk9xF+vnC?`MRiwW%n(DEd^l_u99&1QHg7zyS$)0FjkJIDL{*iMx)no2T z)T2As;|RLU`XbnS9i|hu9^J{0t%pk9!(ztUZ;oIyj~&lD8vhC0o}3SyalXAM-&ICa zzP-u5ADZ)xlR)zEsE2|Bu=1Xvg2>1knMI@kkAzU~DTA?tjSIJ!kio*;=YO%$Wf zFMVUi;x|8wleHow*P;Z~qLI;5i;`rIhvr(85={Bc&(b30H$TgeoMuMTp)X5%qtSHe zUnBjC(ey2fa-<&{O~3hBp7g8VVro2Chy4Im;$pU=Vpf3x#Vp@i`K4dh_qp75C8BOyjg>;sEm^V*11$)&|2Cmk=ab`;?2Lr0L)Z9vo=W6Xjmr`5s z3It4hY_;OakJ(b_l~|SXN^F0cIDJi&QyBh_jWU3uq;Ql(^XDhu;wWK=uw)y)B?HsC zc6v<1}k^8jKl;F#g)^8Rl8Mkq{;J8F#< zxG`07%tda@#T2s_#&cDcka;Aue+kaBz&SIlCx*q$aMQeoF;enImnwU32?o<~%P`Vq zP{|BQW6doC`&no-F{J-N8OG3&$ph_QgY)cg&J5Fup(+fh{eAPQO}x|rU8bTnH)A?! z9pWtmZ#*J(CmYZ(f=fGQcVs2mD@p|03ibK2I|FN+iIN{d^9aL*demoa4j2b%Fq zNg#c`YO|p$*fKVoYCw!Z<810uHhF)fY$o?cHvf#F4Im9&u78K$)q<&I7tQ9MG0p~{ zlC$}D4D)lj{~Kdg_y7#&a(l#|W;F2!5&t*P%%9Ez(?`}|3p@%GU!pN^E&~1o!%+U^ z_)pLY2EL0fWxfyg{(~uVR|P)d0;^=;lVf-#Fz~4{=GJe`!wP(Q%tFkbzD5)9Zs?@#47_2? zR(R0~{neP_P%j)&;Ee?QuF(X%iPCEf&A^*o;4Kz711MfcW8gys+ylb^-2F0u$1`vu zx@~^a{zkh3Q=MonT06@?o1@Br{~fwswq84u*H?a`%rb9>*Z0_~ z_XB=l>QJy(5vHfs>wDHKZH6j2v+B<3tU-yyVK^U(nw01YqiOEcBKvk|J`}aZwM_Q+ zMMnB3KoSfRF2g4Td zhAqU9>lb3UV7_BgVF=d&UH1HpXU8x#jMX|+7~;$amCR6ai0NqOL!}{RKJ>$QUU9Dv zG4o*@v>yk@bJ3U~e26&~D~Ta}pecN04SfqGsahR4 zF&L8fgW8nN0;6d^d!M==fad+-1HqJ=K6OOOO`p0XubR>Hxv?JUj3=S#!+L$vrHrNz z>kUZPF`91rG$h>#+J6}pYJ>Y!c0iDRqp~cS8u9d$Q`y6k#dJ^nn=0B zHeICLVVfZmU$Q!j#fiq1IF@9#kf1ZB66pix+v^p-%Zq=A;d*34E&fI;gbpwC(R##) zGr7s3lIziv>R~stUX;}581JuxqZ4QxIgujwp~w{*nqTVpZxl^Tm zvj46JGz-7RnbHk047}&fZO~=R8-*_aUBR~?VS1&X@-B0ERWk1ihj-;D{%aa? z=V}%4eqni66Yn9*yT;{RYk5}z;uIS5?kC^ z%X>F)wt}fwf30sLmsch8HgBsmAARe+rskRxQ=&k0m8ho z#9I=>zn|Gp2{a$9zXek+Q~nWIi+7G^BJ1$R@vq1Rym9;|GJ;Q|9u+R$grd`E5a}7v z{(#%T-j8Tp$=X!O%`l*nzoep)lem&$sAA3s`0_4H83t-4CrKE29HWveImNBy)RDYL zOC?j>N=|btIh|^e_o7sC234{NNmOzsRdNg@S8^6ra<$R43(uy}H=wzaa|BZ=Iaj1q za-K-3O$xu}B z>xXz_0;Wy2lIELfSpGGbO*u5K;17DEa-+oP1aDEPHA_bRm4ZT9vMI>=`nuCt~X_7edIqAs1az&5)tCW0Yqbd1ZG`cf1 zC!bp|<;dp|DMvo9$U1y6nvditDWi7p_Xe$(0&wwI#&J%dlF0y6SbCWM>zYDO0H$v2xmW9H^Ny(>qj{I(U&9m zD#<(nMJ+dsF#Azw1f%`vs}W{DT0j!D+&IGQM<*d`K8*t7rV(a8`rBx#%C94cXC6{+M(4yQ`$DjG53&FarxnT(|5|1w0B{3uF3_jOG^ zNj%Fc8Z8py8uKn5VOD(=3X9$%@~ULs;_i_z zLBRY+tgwnox<|g$2xn(${J7#;aCbmWha#E~ycM?T{XJ@T(n@@0&s`HCXt$X606NB(t^qf97TLvN5?2JPoZdAg%cb6q2GCD*kgCD$)R%3t(KBe?{F{Wp+7 zEE*?!YPeY;dtpGbc?uxe4su-4rG2J=cLAo%BQ)6#;#QJX$;ozdlI=YFB7O44%Pm+R zT`1X-wk?hrBv|_U%(Ir^}UU8T%kJKZ3b(phaRdTY|hdsYyZwx#2?f<9o&0%I5 zcZM@c_SP^njTb<2vbTqsCA-^bO7_k$a|M4Lnv=aNaV6P%A|=`TA|=@eBs1PavN@1J zV>C{-03}-r1{~QU=Ic2tIN3CGshvIGy${pRqcqtS;#Q8VN=|l_lk93I*)^2x7&xP3 z*HW^3AUWADDB1HyQ?hB4?2Gp`*>w_El3g!SlKoPoB)frRX$?QHhP%3c}8!ZW6gG_WLLo%CEJ6N zy#UF{#!#}s4>Z}>Vdh%sHE2GvJteLr+e@S*+gqe08%MGp2K&vB!6YH_H~IX$-W^{lC3OKlC46rD+c=ya|XPM$byrNqGZRyfMkE}fn;wEr8S$3 zF2(Z%ycICb8l%bH9O|rDm7MJDq0g_`J42Tp{QsK0JJhV%TX06n-WzJxZ1G2$?ERr; z&DJ)Wl6^4LJU;6V&B;ELxRUH6k&^6Vk&^5alH)MgpPD=19Yy103sbVIVL-AI`Xbpi zoNO2p-J37q9e`=nSWR|~xRoQTl9T~^|2(oo|1hZlBe;Plxzp1 zDcKD}&6VgxXioMki7Ux&6e-DW5-G`UCbWn z1YOz}40tzS>OD@A?JjO5S(Th@jFW7vlWb2)w!#xhwihMa5t5VbP05Zjnv#v9WYeHI z**+3ilI<%}l8qNB$@U}pBL@4&3gA48EI8Rkl-k$s(#jes+n#&1xvNsyduWlDCr(UfeJp$)@5?}L!$>23a%*=IZPfJCY5k&)D6__5`n3?N3F;#NRtaY83FV!_M`(L6@;ntM6KQ#H&2xu^LO(nwEv&yIm+{niCG$s8liE_ zTl8!=-QSdF#6rZ}%rO(uiOFw6ZKKE0?J%6@^>#v- zVKmL_9Ya>U?Rl%9d0y`n*Ye@`YmxXtUr-D|W8j|&ct3{Wz-%*Lte-0n)X`;QiGX(n zrg;{4t_7yappt>-yG2SR!m|G;;R4FwU1+~E98W@HhPA}d3I;IjUIm7s%&-exmX-{7 z{b4FHNsBhrWl+fs!(E0E#IVycj3kDmhT&s49)iXUQ;6XXGfXj`3hFUK8oKN)9q_U| z!w)u0R)%_(fexHXW@s>ED=i9q4!}p-h7__fhSO)D59zIg(IoNVwh>uZK=NUYAmB4b z(_w8)_P?R|ur`svvRyS5DeqS|Bbn!4jHX9d%}Kun?Z1H>x}$Nr@s#ezFrei11|!}4 za@f%&x(s#}m`2)k^Gg_c^r$jWIX(<;W)tEz6O@n((IL2Fg8mC{Md6Ku7N?+D{-dC! z7b9pU4jO|lS;_{yvM~K^gJyDrs^p+AQqUe4z(F(9^j`$+&x5ybY|xh}=xz@Bp85UV z$B98^cgco;YtVj&DQ1cu*vE;^&ZClp{+Vd*L=^SXNzkW>W>@$K+J6_GK1btB|4TGm zPaF&=Z}f`@dYXf#q06+_0^Ssu9@?O%-JmLYHl3j$c8fimXtui(mf?3|x^5Wi!f`Ab zGu$MGj6uXuY6KW|F+(c4EGif9O28C9RTJOkGN@#RJ&De%GT#tG7mVlPf17Cbo`KMQ zZ8(lbV}_%|Fq;|vybgv@QU`STsY1Zp0#of2Wf)}{XjQ3XhS5@oT6Du`j41vwim{^P z$0)`T-!scMo@!JgT{>Ar6C{qjj5blEeA_BnBwjQI;TkkfW+Nq23tn(gubRJb*^-kv zhb|*32E4W~J+jHPbdyoZ$$TmW&3CQ6>bwI=+f@W$nhBK&VHejCe6Z|1hOycGcv zg~q%CiT6D74vGeEL*`9Jm(yroa5}I4G%bEZ%S*37stou`(e*p)HG;gphM}l}cLZJw zOBK*%#OndC9!!5*uZ68wI;1MO3Plr5N4@)7EYW;)w9inAQxzt_8&{zORbe$W?}R1Y zDwO(v6#x;1##N|Eya$LkeV{A8qEK;%xt(`)Fzo`#=y;%Vz`KeLKTg+LTpg^t08y)C z>g$7m$<4pwZb%Lh97wObYk6rRs+2D( zq!DmSjPPe+=yn@rJw@rqQLcQ6C{sAfU37W;X26>cQ>U3)l_@p~UCF5As-#F&WX;kDOwiPP~{$qeOR zUxX8yJ?B<<-7Mow8I>W7%=w}H`Ea}sjTx%FZf5%1FkodCP5?tmsY5j!f3!%LezOcE z-8!gbhSG!EL_Nn)hUzfK#9RPJ`_MRMRm%Gdj``jjh?!ZAKf0WLH{czDDPoT1o!O14 zl4E9dW4=T&vu8rgNpQ3YjbrAgn8jc~p0AoK_H%=%*5}Y=aCpG0VN7#1=D9&yYuZj# za?JCC_!brKKoab#ICGm7#w z3Q?L7U`wOv!%uUXp#7kEg0_%Aa)$p%q@3X+MMnCyff$d*+4QAsro#&=TH+hTSwE20 zR~owX{~+Lf1=FBZ&1U^TXML&UY&HyhKAW!wKA+9TfhL=$hMuz7G|()!a#=K+%>&JH zs}IfDY>_~c%~p|;%{Gydeoi3PLE~&r4KypEGrS<1x{Hv_!Z^w%5nbxl4S1tqYOp}F zSs3SJqmr{(9QS-SOX8l-W@((s=AfacY?j5DZ2mKvj?MBolTCrFn#~FcB-yMKDcP(N z8R=iD6Yz2ale0MxXR`6(1=$q(0@)PhnHGUAkLm@yk74@9W>eIiX(~CJ;xf~C?<+wI z%w7POq^UI*-Wb0WO|5MfzqFl8boEun&ZPx_ID*E!wP`M$WZvXoz&n!Xl2;!Kr~w{& z!?b##R)3^BmsB!ulFTLM9X*gQcI9eu3{4*YCFLDUljmb-o;>61Y$4w9cD6JIL?RmV zE~nYj7sF8BZNtHPQRY6n6mNuElrYU)q`VhhUX{#yS$O3ogMs|J3%D|4pD^hZ;CsN+1s4p_o zp9KCN(KyusbX*(2sY!J%QY|j?ut~tXkJbgIj7v1t;^IbbIjQ7SOAai9(}2A`D@FWk zF`oHL6aQ{#e+e8PLSu$1#PB;aOf{cG&JEye#HLsa&2gOwQ_iKzaBhIJ6RBi|^8*Zn zE%${1@}nL!xh@VcTT%6wWpZ62V?UC32kbIgXF_uQuM997)ghy4u3a5qHmb+aJlC!X zhkOO$x=8s7!VQrTe9!MD$sDi18ND%gi}V}Ner9CY5RHqGkBZR@1{{#8XHbkoT#Phy zsn#Ok^@M4REyf`UBL_q!-x)hh#2Zae%HRm;>n7+~cngL%4*JUgvwLRDK|!C6MbPye zG#p(jeT2JGFlAk)M_|1hR3#sQ4FmY2w_J&RMOEyA@yxK17zRT7m*6}LoHN5W#4wu~ z-Y|=9x-g(irAXYBf@!j4nC>#DWQLhE3+zmsMGVg@!)#*6meVl6c@{WlhULUi9tIS@ zNjosq7Y1~x+%n)bfN9QhtwVjwK-ViOnW3S~MDyhrEc_1#@M~xCYcq`o9C$-AR6NUPpT9)n zFKYuL290@h5^oa>!%Uml0lfQ|Hx*rKN1-cBt5<4$_qn_(nRma#dm!P>>V{tGdysfH zSl%Cq_b1DH$mRXf^4@EW=VAb1-fIbFhq%kUhs_hI*~}Y(E|1y-ysWv?d979{?`)S> zCG*a8c;_XUN57VLKJhkzH=Ylv#2W+6^dB2?KCdUBK)bZPr}z{`;* zo%jA~tx8WDg+Ax0eX!}yhI5h-^KW^1bFwYY7<5n$VxnbCzMj=XV zVl9+cS>GpnHE2F&A4nj%q^~1VF6rxvjP#GU3wRlU$%%EM#9G1&vN@3radL7t;pnot zL%{0?(;b^lPB$BsoJ}sthQB4BoA`EMI9(RxA$bpy)5%Neyp&JV$w&4g(40~Hp{$41i$<57R(HdB60;IX)tJ?e=_{JqDH0dGGV1HVYX zB{9s*tR}U9y&juD&~e5N1#*eb*sai^%omD%++x!lSIO8X`t!~z*9N~5=V**)&XfJk zsbLPZzZcGLp)twj{$}^tN+cD7%@=~VGD8^RSLuQ~H!!WW3|n0WmCUf+W!OOs`3oq+ z&i-b*uK?{Ihx2D>%y5tx8p41&><$IPd}ato{P(-!julLm(zFiqT?UoRu)t+lNDNA#Bh!omg19A&~RpmK$jNX0^YwcZL|!-T?UoRFw$ihMGQ3x zY8{gLn{Bx{wEqas3&1%uq!2?d7*L0_AHdL=8KTgoel(tQz*J_P)}gb@ppqH7x(wZj z;kbzz1V<&&IA%YJd6i>!%88gCO5W&FqkF(hUkJzF#{AHYsgh$x^mjg`G^UvKFrMdN z6Ix53Li>;4ya1dtLu+D4fB|{m!heEF3j?|==@IZ|!qj@b=3Uw{(B`U=8OloDynJ7y zkY@}6ZKvf3DSN0Qm8a!f44U_!3gTLpZiHSFm?P=i}s+O?s>$Zk{KTLb2g91{mdp;wXjy{Nk6j*)`Rw&!|^~gW(W{NCm2wN z9_hibPZ-eU(_R5@Buu$BD8oL>KnG4GGwc@zzLY)C&$*O6NJIxL(GNs)6`GIRA@MB7 z?MIRLTam452x#j^2E0o-soOdg?{E<#BU_=DKCty|3LDp zuSnU271Qi0k^N(6&hB;LkWYDUh?Gxxl|{ z^2}3Qig7*O6r(Xo6ypY2Vi7ocq<8wixEo2cnt;=ql&o=vW$xnibBK5%V?TF70CWGG#5C`1+Hj;&w!*fNEo;_0pG(g0H4C+ z)}RmujzO2>!vo$+Wzuk zHw48@GzJbO;LR8Y;5hSpwI}=1=5`KUmW&K|zrd7zy8@r=>uhc+8TfSH=V!!keNW)e zY1$clrmxwq@|IQJvwh8G_a-#+{w|(n2A>ld=~o0qA{z7l-Pf$R78nNJx*Nc|fqB!= zC0A0w>kZSlmUn~8tCH{iZX|@w7(nm4Zt8m#E8;dJS9miKXMIhHw@`Y8p_zEA67!!% z*hca_nEmOa@ZuR7BOfN@)-VA1&Kp2ZV&qWZo*a$qFqnGp&=M!P$SS$SWBT$19xuAF zL~Khuj(~T=8&8Sx1pGTR15Z$3{`r`RA|w4+K%}BE?@Ho*#=OxT!5b}80$mP{33&O+ zrSq;@-e}897o;kgw}(s#`7|3tgsm~&9|A|q&^YEmirEte)F^{_*4Kn%9zmC1#s<7( zn7ZxM8Z~ias^pl>+?dTN<}r-tstG=GKNuRGZrDrK8_NBE{~FN zuLh=nZIpdB3V+NI$(ik^Ao>dEfj(Soy`$X6Y<6AXjgR*aeavQ;1kEe)khs#1IU*zd z1%Nn$#=O^vcPaCBEehV%%!?N#z58h2!ZdWZR%Ny2rIo0XdDjZB9EmT8Fk?j}Oe4a4 z(EbuQK7_^$JBZ;e7%&^E763z(Fib|xrUtx^U>dha8KNu$)l4NbwC&S~o;=F)p3nO@ z&wJYSseq!eld%B5~=RMIPBmD%Vw;hcuv5+cJ7%@QCGv`l^zTd$c&{Txu0#u}#5u0S#73yZF@7&53SFko z!aX*aKL1uLam;-$MkQC`mpC&g=m!)~h!b)A?4Mss{xyzgguIk|l3t6c@w%pZie8K9 z3eBtPwEJ4jZ|-X`XY6Y+Z-KA}8YdG>$&7{<9M);;kW6PzCKX*y&B0j;rm(%5OlLP4 zm7GjhdC8|19o24ed=lVfqT|d##fHJhtve-i!zR;%lF9LgCKKZ(6YD0^(#Eon{D!CFsXl1+Db%<8>xg!uEZx)3Eg^H(v+Z=C-K@*E13~8!9S%`FWOW;qg1n0)l^&C zWatrmlud?yGrx^ZrY;Bvqj55$D4DYGf@D52&nhx=GHK|tWF@Y&V7j_r4{K&O8I_z& zR(FEG?7;;!&6)A@`mqZeNtKAbhe~|eizcK(*_Jdl9FMBylT_soI zt6sd+(k&_cUf9-NX6eTvG*@O@ zFSGPl7)_PgPWG$NT$vq$C4abQr^q_|BYR(qY`{OVw@YLM|H$5MkA4P~AaZ=LB2~+Aj{r4bhk(h8SwVfHfGr z5)5w(1G?;8k6Ya^y>dty-nI;Ml2OSF??^%U7E?6}x!54kiQ`>D`qgNfJ@1kI1~k_& z+!l>$Slt%wQ&5aXW8mfloXIEPFO~y1Cj%crmz*2$Oc17TEpSd3SS17Ja)5IaP*)6R z;5-C8-)I8POZN5944lse&ToO&e2E(yXbc=iz(+6)6+UYo)?{GdP{1ak-G-^mk6Pgj z7MMQUsg%!lnTR;=J2;MSV`wWhj`AW!c@qXi*=(MF-t0*`NHV%4e1&JfFwL`3ZuZn2 zgyxb;F3atnd`&8!mG1O3%YK%LSrLvtLgSeK^fdE#4aY3~DqRlqZZ{mm=?45g__2@_p|`BqPjdy5qi>bPP29NEzN&Kpvd#K1w$k2Bcd!AJQEphZS9hZV7m6 zVH#o69VB7oT~C#qZlYV_A(X*=!$8w}C}j}x9vCXa@uz6aFp(IF!T^SpiD39#7|>%7_)|1y=uHe8i6MR9CHTnN zAUAM6dIX$0jFXDqleY!DW9T)*;?!|*R5DII7pFeqie4y9>W~VNAy~|L@6< z`Fnx1!>Z(CejxT?R`X$4cG!cI!gUk#4>-#JXB_j_ShK@EodCOT|x}Z=g7ZeqUA?y2?23s-oHyfoQMR^SdRAqvB z7x79AEqCv`fOq(NJn4q1!wId*l^AEatK_O&i*csG^_b_U!3{F%G`J}?nFhCF%;KJa zP+YRxF=iU1n>D6B~)otQNCV)y#b%$ib6JV!gBNO0j%BIE#n$0fCCJLIf*=>1g0_?H8g#i(P z#=K`@%&ss9!*FQMECcTv=1oMGV`y_=8enAat8l=*HHl>z@Ty1$C<%)XGkhG8h!Fa8X#lh|t*x+I`| z2vez(TI)%!SCs+(eRS<$y-p>s{n_i(R`5DZDuONt(PqFj$a)>-dQ}vbe~ z{g%DXNrl%K_Idcs;4iCF<&-?-gUVn@^zqf8nhtym5j0 zQP6l8P@r?!5wtA_jX{@h(Wb%l@hL4(TN{)Pu1Yz$?PAP%c8`fN218fdC>|ySj_;dZ?#GDN04^1I_E9 zn1q$pU0kHB?h+zpb(a(w=~n}Pe>5&=B&9kPPEpV$-y+q!J!m6KMVHz~1KxU=9@k{i` zpprA_MH%=XN(Q|tgIGvLjw9qrM$@OhK4f1E%_;O1-_1CMc#?Zy_OpW{9F3935%PH$ zfLv)BkWX~yRfR5-f5BTST9*G$dE1r@EVUR14!7@pN~y ziG2j^*M{S0G-kNk-OS-Q7{E~9ys5EW7|>WIcMf1sGxIcCr?#9Y8JlhGyNSG*k;kg zI*QpE2ITo-2x5-pn2G4p^(5Y)fvLZZIns@(l4B;hF-KF(-6m#XIQjsMV@{)($2ewV z^GbAAjv0e4El=V3J50B2%&u-sl^iqLjoF=IR%wiw+2N=v8plkam~~-5p4|!}W(3EK zLYMldaTs7~`-j#x!i}ktV>WSPHl>)WOw1rSDv8E1qbTN1j#=7#SD`Y;j6fIvH(U|J z^oxyI*^Q}^V^(!zzDY4dn;_;rILifR9J4mXd>sblxftJP3Chbc!_lSe8T>RhO!dxd zo_XDvDmi9;H)a8fnPOu80cRQDjANFen9Dh4R&(3*zi9sSjxPDm;)N}kcG{T#MLX+N zCC3bMW2U2+FEmBWqj2`b#(arl7JvbHR-J^H7dd7q;=TAg>I+k)3!3LeH>OICc{$qI zBd$c7Jz}tlxf{-|pmClLqs^W$nPbk`ftW`*W;Vo|iGfHeb&Iv(FI7lkGRQm&8_JQexi<;OH8-&g{Dmk%bk{EwrSRQRo zo%WTs6_n-}c;l^bWwhA}mqYVzy-GaGCBFddEb^ zh(TlC9>klj1@WesyR?O6KA=nO%ecCO>7&caTiE4Q$-G4!-eS>Jp096l;%x_SJReFB z?@(y2Z%LQ8l;yp52@n8b-kQXl%DfLBgZEK4+6*Gl<<=FvZU$3^E6V$*n{Ea)e^oN? zlWx2)dH(*{&6&SXyP0L0?jz;>tDBj>q0r3xw|JKM`;W*-e-n-~h`5K;sz_i)&9&ve9GVf2q%MYo3CZJRU_%sTBj}h=Oqv`VKIN7g2Gw?4i z@Cgfi=qldFKx5z=-OMf&5=p@Q%~@qJ1BV0l(sg{^gQ?S1E%0I&SS155bqc(!n=>Jn z6K_X&W8M|SI|7<{SGv5bEbk;h>_TJS?}&F1^Aejx9f)D5Z~c+r4UzePF6Zy!!x~KgSl$rJOIPg#Vo=EpH@iAl54XCSZK)^5 z^QyVs)oe>6p#2m$-hsvpe|I(Oco8!cHy>CJ3j?~GzmIhRQ{bjD9CjI0GQ&}q;U{7U zX{8K56GLujKLw6=pfSTaVyFTGj>Y_NFl-P8bUFV3e+CPtB+IbDWl+fs8(oG?#4y7$ zY$k?P!~n-T(3oK_G3;lCEhWJ)Qy9?Y{6k!T!Ib%y)?ud0ppqG8y9{%Pq3owxhq=V? zF0`Kl$2-uNVI?uNf&q0HdI=1JgaKX7Kf)~^n365SAeTWUGbFkULx^FgWf)2fM~MNB zcc3xDL}IwZ3?GaE!{@?)F6STP%a@;}^K#tQI(+UjsAPurE<*=mXpHeZCp!{DJ7_-z zj(4CjLvLaj3Ipn};sF@y2m`vDe}Y%QV47hW>bMLlnW3J`P@fnsT80M1@PruPcn2CY zd`t{ETNA^O!(b>X4Cqq%DPER^sqP)ELs82>7Z56$p|~*c3Asd9bIsis!})|Y|P{fQGY8Uw#ez`tP_iuTib06*zMn@KoeFZ~tp{(|YL z1%A>+HxmL@$-qy$Jb%UWSC`1=uh9PPVz!odqm=ibE@o?K1eb|LFT=SE-C-uhBizq?rMP#y1Xix_mIQ;V;3{be!@6RyuVrABgFfc zP3X!AKrLsEGG0B&|K;zF8Wf7e(xF1%>ZHa-Gsi8&?^qc*Y<;Y zF>eIAJo*n$RA9<+UwM1EyegSD&f)FT#SF8h?n}J6+bVB7@m7Im-hM7`f6Kc75J%9M zH-&hcVVEg(UPQ<`4ZpTi@o)1;{sTtGwWqfvD8%cDUWYCE2QIowMz8Cj*XvRu{JG1v z`h>pGqBkJ)V-~%ki~gZSZw!b;G)C`C==TY|VrBE7Eg$oyp-c1N5HH*3>Ab-YwAA@r zUX{#Sz~L>}#SF8hE=0V|;Ekt7DDn1$=291Sd5c)yAV7qnF>f{EO~x=&>Jf;LbxkNr zeZlPfcRJGs5{2F&AtByc^m_ZDqTlK4Y#=Hb{a)wiH<0_C%`l7pptIRP?pySSoy`W4 zt(~Gj63?=MJQf-0uM32D=g=5EJE51yFoPbB2wBS%Hhalgpnt>Y*?|33`Vg-HdOfn} z-?->18GWyV{#|D?%%blj^kjJBs((-DYc2YI7yW=mZv%*AG)BMF+3Y1h2>Ra!J&!?u zI2`EH8GRRex6c^jT}Q99M_TpiF1kuapXs2_>fEBna}#_vp_gy3=yM3Y0W?pTxi0!V zi=G`2;b@G$h0wcT7D)fD-gyC)!~`5&z|^A>QvW#r&yt_^*@h zFmx54EHPp zJ)lz=@T;I}3pDonu#;KP^VsWmz2Nl%dyPStZ_&2H^x9L+?1Jl6r99ER)XD6JS24mL zgQ2T!lq(b^eP?2yx)V{3bCe_KlJBJuuNX{2ZIt6~6qN!0GPUyhgCsisA6O zPbz{gUD3M3^sDu{&-JPj6+zb)*6RWCI*YwNDG#q(q$23D4Q(?_<^R%(Y;nD+4EQ6_ zb*c5boxEOTuc_v)$SU@_3te8!7UHGrf}bt1URSwZRR;WD(EYLXx|Y0_$570Pm3!cI zE_=-ek1f#}z;w!bo$Gp4i9eBsuJ5C9T~oz@dbiHi74kxdfyHW)PoQKz5 z>=l0-!>f;02BzPv*Iuqyl>z@%bghEM73f1=Td>yyjo>wsy+)u*jh92b-Y`Y|qZNp> zUTM9nu7fB$}r$q6zTwm zqr!kLHFAY`O<{Uy8IHOPDw*MDm*E&OOt%cjiD4x%zH!nbK6b5vu zksAvWruhG~4jWwtmCUf&W!ORtWqN2Gwh}`%X#WwM7l3nS*hdU4VL%;TG%r6c7Y20M zjMfjPvzB4GWuWt*N;zY#B#0#@N*4?rXQQm9DBp0DvV#$&El1gfE-Cp!ygy*t?*)66 ziYy?b9&x%U(N=JDRUD*dGz^L`5kc zqebc5aZ?S?`xu%pCA&x*c?qklNO=jXn@D*HD_UfvUkLoI(72%UDAm4jih}-;f^710 zs;TG_R}ksKv>`}S%`a}`6-$+zYC$*ELQbloPO637REtomCvB=lDb*~onrbl#tM8kM z)c4Iq>icFQ@fFPiA>KR4fm4m7RLjCCQtk5wQq9V#CZfwhw7M|8kWN$0DsJRYimJrB zi0Hb}dd*H=e>k)LxS181r0#lUr>bYK3;_3$7)1y1H29wvX*=zVPc)j0& zuQ}1BE7}>DHd?RuJLn9gd9D&yH|W~JdVSQv>>`MX2wBH_%$D?t*P7%XpX1HqVwM`h%B}d^9FVHKU_t-LQvkX)(m9j7F z=n#e|VHn|`!tj4=l&>kuhcI9UWl2JmR5>b$P@+hP*A1rr0j*!EjY65K5(3oKwG4zH3b*Oy|3|*KZ9Pw)u3-KnyG&Dr((8Xm?$qd~(n2z=v z7tzG;tWIjKoWdp-E8i*#l-`s72`yp_hz)>==H$j zw6ZvK@Kwse|BRAuj1hhp3>{|!Mp3{X6tLpU?;=WdjCbf=+?Dn~m)Qqv`3%rS|40IX;2rbNgj+EjJUdh>Y}ilnU{# zp>dV|Zf`d9cnkyZwLWnC69b0>b~)NKm~L6%pDZvP3zc##juG)5jPO6f&;e*1PHlF&N9w8ci*=tfZ~Q8rVQ$tKF%7}^SrbJ3v38)Y>`$=#oFnX(U2W^oj+Y>3whtqM#dY?N7U6qOQX4n=8; z5q@3_eFu$mnMY9)IZA~Lh%%0&#GuQsX!BsYVWW(5qo|Z96DZ076J-pBuC`HC0KDPE{vSim%Lu%pRmBdVm4EGixG}CcN9pqr4a0m}_ z2$920$02QJ^C;|z;jjRmA3_lhFOoy<{^U@}+{C-yiQ9Mt@@Fj-?o~wSWt>;Y<=gd6 zb{nS;77B+OodPrVW+$_6_eXp2;Z`T}cxybczX6?}K@koQJDHt%m2kK;9~=$|hkVFi zs5Iyzw7_vV6y#u`aQHFE;V?O58elp6)X6-jDhTZFLFczogu_{KsEz=}V*O-rSSuV# zB7fO3;a(C#uV%D9tPOIoP&lj)a@ar)^Bsqcoy-HLO@_l!bp9`jaM(o-M}@;G^LTEG zaEM0!no;52p9rmR9Hs<0SSTE(1vyM7hjIh04>LM7tB$XT1N&Fdd3tm%92S$qTL{31 z4u!#?uW*P*m1bqby-yH|jIciR4RWwhIP?#47(fpD9fyIP%+sJVhQobyo(G)^htcHl zk8r4e5gghJha^;KTrS+pF({R{!EtCGsC-iG;9G5X_W)2Y^fOTRYj=a3zkD#$AO!wg~H)kivdH3iW=&3knnc+TcF~MWj}u z)Fl9nF^Z+)(Sq z9>z-pix=N1Fa3DX_X_pnL3O0-#v(WG7rCPzPCcyruRl~jgDB{Liy3rK@xDjU_SGN#1qT$4_YT@2^gd(z7H(F>~b;Ck& zqm{ZLryi{-;HaU%3z0Sy`0Q{iur1@cfkj|D?OIPgk`yNTdBCDJiV*Hb!WGdBgqIBj z;krV29IBi~Nkr%kN4Tyd%nK0<)A$Qf^*h&V1NJ&pdi}f%dMzovo=26l)x*7c2;FeK zmUO-HKyIPfP>M^&-DfCG-B;0G2DS`cdI*fa#fx`zP()cZa>zD<$_ATFGrw{`m7+Cp zU5HS0Ry!2=9S1725WluY^{l8ay}rU;+e@$6GoshD(rZan$sZH$4M1qO>ou+GmC7s> zWzXsW>+}8RsB9P7i?Vba(PO~=QFQ*VNS94>b-747-$l@9pnjn@p#Ws+U(V78c%26Gi%V|*sCOtS0RwNA3%6ejxV z!J-0+nD%c6vqx-2Gjq#l8g9Wv*8Cc@`wH!WsJN+iI6hsCN8#Bm?Y=?U77FeD9Zbd4 z;}^^4P6u@OiEz1ml5JpzvQ^D4yBfPJwu(VyooA%kNU&85?r|R(!uP);iIet!3_S?`85+XXP?{wEdj|g_l;)E8-||0< z9g$T#qRYx+`3`hdu3oq|7hRmmVJ)w$^mIG2P%N)X%kAbIO;4|&IS*vjI+$Mae5MDo z>NK%3pqN;LCblt{CdSajPk?0}#cE*~m^5O1b}#10f;U7D;1qZtNiWgYO{)1J#Y1yvrzhkJ7nnw`t? z-P1m>oGlc--?x`_p{E;r+snGpKY+Qfy_pCcLM)5@?afTSjLx|%4zxEDKld0rW(V7w zwO`3#j@cnrPX-osKPV49g8rybzuI_Mp?9gTDN}5V!+HyhuwgRw4i| zMpuUyy~GQz5gwf<;8qPn%W_*UdTF;hb{2{keS%)}4SLZp;6;Cmix{h344@ZrfHHpv z(u=nYrWb=){R?36VzBa1FNP>oFNP{qFNP^pFFqmMg1-FEnuL3YQN)X_?ai)v3ITX= z=xumWNW6%E58ayMt`|ZZ@>nklX}9Wyh2ljK^+LbV`l@=NpND>pUdW?POpKz|8h#$S z7`?#PWWq8@yT$= z+m0em?iRuvUMI)3M zKOB==N%^%KHOfLUs-POB-+z52$sAu(k6$m>aD|deyvNv&>6oz?CbrOQS#TczukI)~ExAhk%J%gU>OMfyCYp&QAU3UwoyuTVFV z1qyW|S*S44e;e{vpokNv+L`rnNSx?d6He3@CsI)5!8_sJO@v-7Xq~99-KY~5iW3dh z2|ekEZx=Y}Xw*(Vejd$p@y6}UdU$=39%!4;i8lddJtWYI;RbU(G;L@0)UCi`MKk50 zRy0?rRwOD^D_SVj18qyfljzI;7y`GTh!P>CFeg{sMG<2t_#5AcxNo0Ede3DD3C9T!azG z|7>!&w-lkBuh{YUxouz(S|}Wjw3S7u8~f3=G9J3IA8RXzINjKfx0T&YH}(@6H47N~ z)ycN9NOfaB)z&Q1J5J8&wq|(BPqD-EtJ2c#>Wo6&uFfjd?dqID-LB3n)Q$auLi}?5 zLmcE$#Hb=Psu@zksEJ?`wn>eGNm)O_nGr&P2P3&p6fsND_L7OLBf_A*#o z+peA%<{bd`H=y$~D8gZHTeEn66Ap1H;Lu+<Y{JqHkUz3h{PT7aRh? zQpBvFn9tD*41MrA#Kel2BvhH+J=|N3&^ae2HYmnI5mPH5CQj{@KUYyZD5eg@+;d{; zQcRv{R!qI1nEF964V;*&VAvf+#B`$=AH6`#sbq-BA!6pBN^FmCuLVM5i`bFL5fo#g zh{>g5au<7E#J5xze8o)o@K4}AFIlNxvyf^j`yD`*LO*c}9TaCl0Q&R9g(sxMr(1J&~A0ZI_+4xvZRhhSfGt)9Q)D zmkRYnV!lE>kyxNG(ZAm(+$#kQBK24svjdbxr)C%045_t5YBH+q9T4s%Ak?U+m0C-? z(Zi>OBDJ=S0wdSx}Hchp!BIoEt9e#hxNFV9sM(=Tx1UTeCeZNVu2zi&S2# zV%CX!tphXILUH1+)`4rY2dx86{M|a>#6v>s#G}@MYqNh^n+e_=sl|!Mt<40V3@j7; zU!|c=JW;4lJXNSpctIz^oD%_#M6BddSlhp}5gilc?^bkH(ozO%0G=+KypZ*`8a0s8F&gdch3p$f^rgdf}ok;=~ zXJ#oaJ%rCzsE6=53iS{^SD_xl=PA@f_?HS3{Y9UIdw-yaQ8!wf#nT@tVbtR+Fshdr zl@BJR8xih(fzaR1s9xHQ9>OgYqx!U#ZBFl@_oce?Xz%YtXV*|9=cmm1r{w&L=ev?K z0{QlR8t!G9mC9RO!VXS-my?HV3ngbmj)whaWju$<-4tv@22IhM%)G`V*cDj(ZQ?xQ zfg!jiqtc$WID((`)n(@{M2LixmIRV zSY&$R#l`tnW>eVX)LhV>^?vO|h4`H4XdJUaMEL&O%1qx&!goss@SP-l<54B=_;9>j zjGvlCTE3Hld@U5dQ(6VCm!~RW8JcN|WN4d?$lh}RUyg?o=sMCwnJIt86#XpU5e)ZQXBA7rNc96xqOXr7bWTf5PfYN1H& zt3#tJwIBIEM0t zL3_)!()-^$izu&z#NG-)dn=OO2S_FM`m8(;SnRE&Y1Q7!3f0~!3f11K3KRW);J*b$ zq$X494w2g69Z0>ap{-LOqMP zqcG9`X9`{!fkbiQH99c>IWW;S--Hw2i4)1F(qS52V@4=f8SBJ%+Ko;$3&n}OEzM<{ zyQ?_Hk8`{fkT15`Sf&DD#xH5`x_?jFR2#4I}Y^sZLK$TfvgnPRXdN0cQ z(8Y1!GePl@=H74^6N={C4ptgdublM9_X!5uLt@l zO!RAjVJ{RBGnZl-pcf2kT639PQ^d?cmDpMM)dfPi%UUrtgJLWcF>xwJHul;&e|2N8 zL;9;7{ko+8gQH*1@#QhMzT^A*Ol<5RB7EN>-&?|W<1FyaDSYEm<^Jq&@3{r3yn~K! z&LCe4g>UWv-#jg4<59jZk#7U^CetA=`Mw7%cION7ecADy3lfJ>gl{GC9f@Y}ci|TB zz0*Rrk2!b|VlG}JN2qT(>+hWwf$hUW;hWMzCan1TdkeXgRK9<-FgwC6$M??`W=D8# zq2+r|d)5QzeTBID3K9cRgl`1-7C|%c{m6XBW}om~jVd?h;k819@|3rH_XYV{D0~kn zUwJv^APJ2`bGeOph=jK}f~AMV{n zXqzKAKSzd}gb1V#8w zBfq=C?~i=o*Gl*eM3pTI@owkhRNhm^uT_wrg~G2*z`(W~;YMgKBixPzhXIR$NkM|` z9lAV=f4@78HMQh;eL4p4wpvW{;ikcdVRzKzJYESiDuX!C3)xA09ymGnz+p8=tQzU7Av(Vcvm-H1Ty&*|s3n1y)MD8mQNH}F#xcAJ`R9?PH zHtE^Kz`kOkm~=i-_7$Ab;`Zi+MERj?3||_#m{<~>)I(={G;k?#Do&=m6XFr$Wx_3h zGU8Vf%_ejLSVsJ+rq$DsYYO!=evO*l0gN7ScU>MNgmCDwU6`EXc_gE;7tWrntf-4+Z zO%JA`IW1X3(FY0f)O9Ukn&sAmb@U*=!JJj=>1PzMc(Oqg>sjeWh58=NCc-ABHQ%Gz zOxzXN|9d%Z2}6gNa3s;}gA)+ItSgWJxu1*N9jLN)Ww^Hnp(Rf4=bA>(#w--M6BA8E zcP2E63ho;YR4_Tw97>*90S=wf@n{s`@Fh7ELckcm3Vmc)fE!_vi@JbL52b_JYgdJP zF{o9(igmw7kdB2yr&o|pZ_*io_ClvmqS>cskPbQ?jUseLkj_`66Pa!pIJ8y{sIq@` zxOW_(uN{ZhK@JuQhqlTgLANq;$hFdPNJ=zYaS33*GddoFA{^c)hx!P>hd<7OLp9-W z7*&p~!97-lqN`dTss%Y%C>&}8eTX54RgOb!qPbr9)^O;Kj%T6>hsNY^UO2o_4;%^! zhx4d%buE5UhR|-up-_;6g~Fjoki)CwP<@s4;k86_($o~#ABK)spa_R@+q5-LUGa7hjc*>77B;-K@J(n;i%(~G0~g|T{j#iq2q5*ghOs}2(2cE z8}ZGKyOh$Xry^WNH0Q-~B@i!>K z;Q%?z6%GT<-zFNPx;Nq5R-5s@3_{(iTis(E2VNvuC>+MAZaMEAuZ;8{{y7ZRfQ}EL2#0p$&<6pSwCy}N{L@Sp z)K=UJ*@mCXA@pU8HR+#bc0qAaEffy_HZv8?8#+Aec+yOscRuI~ILo1sF z{8-h@>`h-FwG8L#W@c|X?fh7yG}Mo^3e}Hw3e}JG3e}Gd3KRWzA#W9m`0;x)v*kRb zACZkm!->A)#CcR1whPZzHl*@8*0fIa)o%3U%R+IYKb^3*?gywiUG4)Zt`&L{af2wX z7qBe%!HzF)BMfnTBS9hwMflDl-zjK@k=xV>e9H>oaj4SuJDe~g)S#B-TQ>OFsms{ z^#9$1UtvOnNbN$YbK{#ImFiQ9 zKM6SvA@!ajk$S(WOiGpdS5q@7S0I&)+k>WN`Co8S|JJlB^`SzQ`beQl{YPPCZkIF{rJh?rc~ZaC-sbWqvymH%9Yr;re@W&M*|^zo`fd> z`?Jv7E|>IbQ#19~Apn1GZAa2?C20f_W<3z@{e)1d+ScE1gGntEe|I+x+!ozK)3R)~ z9KIumBEbFzbbba!g#SVgH4y-Zl21-a zhj)@&<U_T2wu8bla zYLmla;V}FYaLA(^P^H69_&pgy8S7a?^8`6qC>-(zIpiaU=eAl7FOx$aU_T2wu8bla zN|1w(00ys^aWe+C=j%|`sbw+^pc6BI#fgDRL!B6;P@Nd8P@Nc}P@Nd6Fwy_&I2JmJII$zaY`R|| z2j;}N*>Iw@I8hQVls$<{eS{V{Ct7Pay3<=IPPC;H?(RoB%E|SOm6McUF0)Gj`$y6F zzbL}teR8OW061JS_bIChhiK$4dMey|2ccXI?PydBa3-|6J)U2`1(#vJx!OlWC+v(H9 z>|W(}m|L7Uhwau>jDAjtJD&X+-A{p+UBE-8)1DlvTB?Wh4{X9$p zsX1Bc8) z;gFL)ySFcMHIc)Uyq1!?Nylpc{~1RfMS3p&66xmKW$ET6-2`A6k$jp~&&6L>sORGO z73#To0fmWveefTNB2p75wF^3h-Gj_4%gY;cJ+DTUY}fG~mC4uCN?qRAu4hWMP-f@K z#%6XNK?BatRgKN;e15myk6+Db2|~=yHI2=Wd)^?#>|EP87b=e+#Oz$x*j&LZCB!d@ z*ApHjEa!!7Xl&;09YC488ylOs8?nbawTY=(0*h0d$=Zy8Ox~}Edz$*3yjzH;8qCSN zm3XtkoV;HXpD>t{_Z#BB4d#!Fw-IOm4tU00Sh$_IJh1=%HJp5*h}#+Hb|M0Bd!l(N z+EU!k2dCe>iQk+d)S;PmyCwTElbdc^C~mi=$Sr6=RBV#)`u5AK9}Z4tWY_&#nFSWFfQ-zSaaPPRPTdfLb=t$Aq9XIoxl z^AznApbS_T`9Ct4{8N#C_WhQBY9*{!HfgLJ8Lx1{vZ(Ek1j!vJqNgDBG(!M-4vc}G z3!=xni@V||-4JS)X#Kz7^zhQgLeX=nkvOi`tCt&@CA-<=oQsaWN0FSrH!@>>KyucJ zLe5E&GX+&1{DGflBJ@TJn{$%O$t7Z;ERiXVa2etiKcGuwY9r%XXF@EIX^k$T`{9IG zBGVh)0bD|eB{HMYb-;aqV(}Lw{F}kFcqT_A&p~VPEF}^rTg+@iA7Sx$4sk1kxhCck z_c54jVjl4fV80JUZbuP6j?<5=2w)5b<7g31+azCrXNmU`*QV-3!)CxB`vn9+MN{Crfgci;R6w_X% zX}b-kX|J*MZD292s3z8fbTNhc7`ZrMx*yS+v!VoXQDA@XU-;8K&>^NKQf^%YU}|<_ z>hXB)Eb*xF<|Eu4M5s?|EBAPOU}v#V{uXnB%?~_$2fEODV0~ZjkRNerq$!9 zg<{7d+JRs9(2d1(qZOLdjV07O0Z{ZVrQUT0Q|~hB{Rvp~F4s)D(XLRKAe+ES!n>&L zpZW)XPzppv&!Kp;>1F(xdfxvKdZwrzR5^iC9HBK%&lIPJYsNxdGtIgcs_{>69B5qhPqb*-<iA7T{he268igWCSmr}+CHD59qm^}K@s^z1c{Wm6i;i3GG1 zP95?_AoOmM)sxaNu-q+_gWw+x%|Y-W8gPRD+0ZCRb5sT0YiJIFg$S|S?>96D!8k%J z_rDsNgWy|$BKJWjWDiJ*hJ|aA2s`JF~AL2&_bG<(%&Up-& z>-}HiiopJ|R3Yy!iuh5AezZgYeq4ANejE@#O2Ug_X+mC4gmSmHejH#w?jUHPjPId_ za$+S1!5>6{p}>RSk5rgqFcluAU8#>-g+FQ6dJz0sAwJUt78Ov0@YRN9LBEV~r5LPa}R!k+{QTPTD_2nBxV4#%fY8@_^0hoC)Y4wW5N#}j^RT66q9C!TCD$8Q4h zMqqz^DCFHo5j%F$j$;VeSHTReh@s}H&8Xo^VG;Yw;6FoYj4hGP?!mL3;#oZW+Kh4! z?Ke8ldMY>l+XNQsR?)lRxwf8{?`3pLAo%re4cIfdqrU6v1+Wuau5H5XZ0>x4yysVKV<8tk&P4rZ}Xv$SQF z6qBV6n!bl3T9TM0!zpUHx(!(}NtQXNGAUiiD~8aTPF71MmxbG&g|ba#=1fRN18x&9 zHZ&&*iwSYAoQ2W-gqUSn8BKNCRK_gJ#%Mu8Tux?hSRUu8tpR1y<=~|2YcSVTPF7z4 zER!ym^3u!6+=RPKb?zE@h%Xt;S@#lg>R*95>+%v8FqoH<`G{)(`$wM(dHLXj*wvVJ zbwmI||5+c{^;ZM#s&i1~^XEg}AcUeiTf6>hV0Tp>|16Y6`F8_T(H;LDHkgOGyvJ~$ z#77Ox#(2VTh(*WmqX>tzWyXy~T{KCB*10X<%->+#tm0Ep1?Ky*z)`w8iKxYhXsN z1fY!Ga!PApFr}?vXM=%d^j0b_9lceAb4+!P-fH3<26Ob*5T7@gqqmmWI|t0sTSuG^ z*slT)K1C7dZZ$AlYBU0{tBZN6GFj|OL6yXakk=NWqt33$?8h7fcqUiX|RkFo&on@oa-RM74;w8_e5Zam43< z{mGd_-gOi)^D~=!Nh`$>3wl(uyeY@ajriC)YFVr_H zsy!NThF`32=I|s!n0blOO@uJ>a((08T|$_7rM_`5(6=e-O}H}4QvHJEPR zC2nUh-Ao}K0PGjb7V`R_h?~Xf=4=Gu<}7oPyIb6hfRm|mguHJMy64>7&3?=R;Pz#q zOwI48$!%ZXQ*zi9aG>P9wDUz^e*-!{gCZP`);Ei=6awJz=S6T>q8yO_AC!26-g?K5 z=#n4@3x&h7Acy7TFwx{(gN}})NY1aAbCKliJ_0#sNKP+j$a@QA4?;hzWq z&fOtY_7U3qnb1)=6v;V`IfqKl#yDRIOOTvNs1lwhdOXP;xe_e-E$x z+xwf%>o1BnNMFZFB!jEyO~$tc$2ZM2JEdD{&w5tdN+JGkZ|;zH9!2bIEb9_q#`M&P> zwgQQfD8jc6`R)+DI|hSqdf~eoRp#Xld1nzS^uFbr-tpy_S}1%oDnq@089|2muUm$h z$S?}nZ;Folp$LbU$e{@W@a&2CPS)vq+yhsm%J7#%-bV=ilI7MWWLYd(y!;`rX#rdtB9#6^n`N=f!j)m6xVBVXlMB9Ow4wA3YtwSt^rpdb zdP5s~1MBIH^+i5PyGkMMdVV-o9K$1BR}y}N<{aj3gr#m8h$CJ1dge^v9Y7iNk11!Q!Iaa3)fWScoSvFk???7h zsP`j#6Mkn}^Vrpg_$sh}w;)cFphM)&qTJ9e$}Rr_`#9 zx`FM>Ldp4aU31Q6zpC_0U3pntenowxu54}ks@~DMX7eg~*LrfSuG#AnfMr;ZYaZRa zPAJq@^-e0pi&YdFD}Xb+QyXWlH{v)NODS&cqQN+ z%4UR$b+e|N3MR2olKfh`6e^~eB++Qu5k-_-WRilv8zlw9V)1V%jp;LT^cEyMC<(`* z`el^rs5Z+bJm?aR3bC$;)Fa3bwavu%04@BbXnN3PJj{%rF=OO3^T%h_NR|{-Ir@6Y zTZ+&N-L0%OE(^W0P{w*)Z8=xb1-rhsnVfe_&Qa)S4T`AT$(&(-aJ+u&hMcn`=Xq3l zzhubEi_mbFb5<~?g<|C#3hRglva!u2o&xM=Ku@JnB5F>oJ&eOEyN$RMAcoc*9q+Psq|XF+$I~WQcxv65|?g&Vl94b?He5I)xtD>3aVE_ zb>TXUz4k&=EWj3b(Q6~=)%2L9bjX{6(2G56uZ>)b>y^FdrUl-daOb^>c?TD?hOq0a4ClJ1Tcenm8GjUriUG0OzW zGIuYsL`jx`sB#@;4MOK#mZ)GB3pGnQZVYEkmg#8vwaZe0S^kkMN6aZrVabw$Dv4!6 zUXH&~c{O|5!73cgVxeYvl{-T$TKLbQX)zShQj}RbB7iB;X&$mXiQ^uZgeuEW1|jr? z%km`7?s1&H7UFNMqv~YWYZ!Z7A-%r#D|-D!dR>hwv1LQv0fbujvfO`hy>g;iD69Wy zob2uOIM0s7nGGl71D$8b32Ok##5xgY_J;PrGO}!7m^WA@C6Xs7vxCn(0_iC9b@sm+X<@alu`5*qsD*vmNSuQ1jMfn3wtJfcYE7X@3A1c(B z79T0Z4~VMZxhFJ;)Pj^+51m44uiqebwMb1ul~dJ1-a80&?q{X0)^2prEflG1YnkO> zrLGG|U0=)m4MIK&hSUv|y3$Ca)QyyS(O}O0O*AdtKUV5yO{-GBQm9h5C{(Fi6(;&k zz<)G~NWD_aYy_{OQ%D_+hp}PJMe2DYGZqgM5gOCqN^P#)s8kC@Y6}u{8$rujGQV{r zXjSX~vma_((+Rf`v{7SZBWO!2Mj^FW(T-MZH<(r=anzpx%c!?kTDlQ*P^cS0M}@i( zbW*4rL1%@!5xk)=(f=(bgulFOjao>fazCa~jj^SLr4yr)QDt~s$g7CZ)B)D0blQy? zWuX|AUX3!pH^KbRpw5`zn_wfzNZ;&65K+tg)mmKCa3jb>WBMbN81n*+S!*zj$z01& zxC$)Byr?vEBgmpqH-fARbtA~8P&b0?3KRVYwL)HbNR%m4pH8It*EkVMv#~xVPVo=m z$H|)94#uHk%Q_)1KPtR8(E4$*W?(z8Q2aPu(^TXKaAC)EOxxXeij-t$Tr>gN(RsM-N%40EnUejy@ z$%Hs6PN-@A65TjJ(L9lwR~t;tlc@PJuxOsFM0Av=DAZA&s!+eLGELx9bjIfe(~0u~ z`&a9Qyw@O8Jo&Mv*&3=N05{UEgc}LsMl!0*Zy55D5UM}ex{;u1bjDjKZZy*oj^TuF zUQ;gA<;h$KzI;m)cwB#ME?Rcp7M-o@~ZZO%z)A`_cTC%Tk9~njiqn3Y*jO zqLL*aGNfySo3RKL9%3yk>ay^n&_c1SxLT$cg(Yaq29t9qI=hA<%6#VBD>B89a59QYhkH%VA614;(%pf!re&l zrbEb$M0=1Jha!AmCf_&E%q+Dt$dG~SZA${EUl!^+Py-oS1kUrxR3sM9VB zh5FT4`DLcsbuHFx6MG%m>#=5=I1TK#L&sxLgwFj~Gs_>6PUMmy;E-84pvt3!ke4l0 zYA@R`%OSJlz|$HFg+mtQAa{bZ#!dl+R%k90I~ysDHJB4SJ1NZr7XNZ+*ZPnor@};k z3Rvty5yB-%cn6wcjt%}2guBPcd010yP$*{+n&Aj{kFn!T(<~IiJz@f;^^BQ^Uh}86 z412{G)1rX=+35I36yfkmj4`bV0^m^MHaHv;)4XPQWQOt)LSdg+(~ddQxSA}~)pR1( z+^CyrvgAb5N+^=$6qRn3EcLS>%Tmdbj4C-3L*7Y**0?N7T^0_Fg`#x14voz06|t)- znk`2kU#;ZGubH1^HSie7h>&7;c!|Xb}&PI6>&HNH@%n$$qP2--Gk&vSZ&<^XL(=mlMNV z551k3hb=tHEj=1@$kaEcjl3S!EOm?Tu0*c$J>AXImR6;nPa#zGNOF(Aedh^Z7S zKUh*Rl_{nZ`j$mfgHlkXpn@7^HaeU9%dAd!F~d@plDh)7GmAGHDBal&^Xs?=$ZJIM(39%=cG3-Yy4 z_S!3mZ<&zmNaUKeyG^e2)2LW61dWX5*`i``Q+k;Qm|fp{Av%iAR;{9dMiYnbh7Br>3P-!!6cAQPVm`9z*DHsSOFopuG@o zOTx{8{rl)V4>}hP?~+4z1i+!}NN{*jIiO08&LM9CLcfi&j=tzPaLQUJ9J10wxz>WE z*_4v}Mlidg7~Y@B5fk`cM^4f`?&#(s-E_}de{*YEy#~#rP_IE>QmEIUc@-x5n>yi8 zg(6bpDfLx!3aQPWht!Zr%?FvoP--F6@G~nlq}}LEO$+sC@(i_hMGL2F+CLORZLHXdac?^p1Qe zktQ9T=n?@Z3X2mvQ03DPaFvSC>tn4Gg|!=X!a{N4)!?AN_J6H7CKpvCgI+8+=*6l0 z4Wts~C8&HluMZUX9bgB&v+*6Y`$H1H1AQtP|I( z1*X4+;>3+=f$4vA&FrS~2|>Dw65HNR{jKUrgocGFs(JsJtq$C|{~+b^0$;sMCMBLY@9A z6yiYF4_AoLAX3j(Gt<8fI)&6A33#*zzf8wMsQW`qwixujiFHxw2zEq(O z`Z9(1+fI=8C5kw4t*UV%cLbf-Hy%#(lR-a>D$fnU?P-M0Iw$(6p*rXmiW37k=(sxO z1Id9Lxc+D^r`&@$uxkzGDfeK;_W;Yl4sk=r+dxCz&@CE_cLh*{@Kg@nB{aj()t(5# zjf8Ln$SxTg^1?Eu_Qp)ML)R!s*g_%PLQ>~gu(Se0yp{RKrEoZ+nUH*+WlYN8XOa4!y&0_e?U{05( zj6Vhz{+=Vu=@RA$w*iY!QG{?763&^Kgd3T^u>FG&K8z~we~RZ52z}!S{}3c>p%6YC zEnh{E>GD&w*(u$(onkQNHx4QjAnLT)6(oG)62o1)Eq#^S(!7Ia)0ML6sx zhq?%0kmJl&KmQ0h~Wn(_mrHWsPT zsPf7fTv%sGjlXGVr8d@X^z}&#MQQ@2y0`0_l7D-&_fMmWYHwDBYHv1$xaSQ1M^Hp+9HkaPr;ytB7Nq_z$60TD$V>fs$g7D^#xJbY-}NA+ z_F5=X|I|aL&gOeOSdK({;eVgU-I>7t0(5=|ML47)hpoclhPfNuML0wt|B4B?8;sC) z$DxbkK)Wpz4&AE$cL(TRHLwGGOh$RKSw=m0`1XNi!uE7WWbRnK+!472NQ^)cz7u&w zZh>ZIi%kLFn!_Qw~s)j_>`U59+PI=*#T`K04p zFUYsPC&nz98S19p5#R@naDb;aiD(C!rbqO=FG-_p9&_76GnxriQ$A z2px8O?^g*N!YmZN52~2m&7Sf6UBw*29vFf=ggvZc4q-)eSi+AOuL3ND|Ix1XknmVx zqJIrcGJ}Z_jv(RIXa>ULD}nGSAsmk?O{U>20-=Q2*5Ff)Fb@e93gKU?$T3$J(HSz_ z<`|x>vIR+g0`~8t^E~KWINYpa4oi21!})vQuu?cAp~}JbcLK@jD57UR^?Zo{^qe^lJvBs63aS*G9rAV}GY*2iX`c~diint!5Rz*S-XB6J3)YUD5*Kk|IH4^RF|SpTlLnp8MM-!i z+WSADvj-@WvpjR|l$>uKN6ws*GavGeKskp{AD1(y%Q?!t+-;%WE6&ZN>GB{;MKo=V zB3WKymRAvgvdee_E$nG!?k(d`Wx`zCkw)mL%ks3c-CL;4LQxhLRF;a$Mxnh-tkfLE zS%yOtI&Om^93sf!YvFL-{2uwTaF~NCqvm0iAk_6s>+a|SJ`Y2kqF@5bmqawKGlsXeZCBN4H3HLa_$S}v`}&$2e;ZG65$+-RB~^3s5a@ZCA|6DC9aWp zRGGdQs}Z62h1Q3vmFybfxLGJ1s#TJ4lS|0zm5l6zhQh-n^jo8nnXcZ;mQqY5GjN%K zW#D49YaO_n3UPxREIOhH;g*#+xzP-SZ+1n;>4oqdRO!AHlN+Iz7FojSgM=*QKW>G`WJ$MEVm9UDAJn^uITlhmy>se+5|Rzo?1yP?E)|;pUswsR;+gXcSQs zMK!7OQ%&4oP_xme{R2^@>GF{GGD5eUnvH(IehWp-W?$?VHDCGqOJ5!sxAg0X38-ne~3 z)Fh$G(iI`^PlRSJwqx@~P>qG6<}Fntlj&{pD_6kse~0|vHJJS0rM~{a!v8%-m}mFz zJHq9_qAQ9J9z?=lpcx2nSqj3{gz#!qd9*U*Z9%BP5=*#Rkg$b9xJH0*3<*Cm1UY?T zNw`!&OSmTEvA{yOR*-OerI7k+bfoSR!yYyC7V;j*`M91X$Oka zQAABSs)<4`P_x$D?cY|Bv;RD*ytWqS(+C}MYPMAj%zg_+&5nxy-F$XdH1mB5nhXDL zE6zib0|t}-F2>ISi~YN`Yu$YID8w`FHJG(1Lil7wGr=FD83>;!2Ez4(a7mCoxeo6$ z6-w>(TW0OA7bI+<5N@D^<;1&T#Vxd7PrT#Fw=H@TzKtrH_1PC#_%;smZQ}TL2Z{A4 z!uJF6osMSU`{pF@&8h~Y%H{R=)gD4&%PrrmjxUdL77E|&%2$taImqy_W0;eUW-N>& z%m8$}9Yr`4CWqn(fWrsz;Bcb?2RQ{*rfm#)brD+QINYcZ7-S2D!>tPcJu|pnA>i4a z3TBMQqBrsEZUy7n3SjXpMSIpU{#{|B9|aQKP=xRE}h$+SI!z03g0m0tDdDI!{S9O!_*bbER6>CtD@rpD8eD4f|+M+5rAihmxDu% za^$cYRoZ^Be5Y(OnmL#6mNhOvc6?LHnsLwhn&tbu_N*@d zp%AY@fW$-;;hUa(%cGg+y%=UPM3|%zrn3lh^Gp8Aj9`TM2QTJ+j7p(2MnhzEyqg}j zT?FnxpKosqdCkyQvDH@K_MkuuMc~eWz;DZ%W=`NP3Y?DKWI%S8HTgF?fqQ}izjFe^ zK_Ui41YRg>rqMA945cyWFOgXd>j}a-85MKvz&l5%aM7`z5M*tku$~lPJ-KXP!kZpM0!3JFAnR^u2EJZy@a-vl^MPx@ow$RH&>L&4%RL=m zZWtB{-`>hsH;g`Hc+4^E%Zc+Fu)iIhKSdD^pOQn`V&qV;0ywl04keMl%(u9Ej?fLq zp-qs3g~Fj-kV6tVyp8rUw(aRsUts@7be<8N3x^NLVY+ZgvkV-b7Y@;=60-}-384?x zS|6Sda9{8D&;kOG5noq*jzU zgZms%&UxZUc&))a=c&!=hk<2!*U`lKOrfqq{m4f>!aJrlf6QE;IK%6Zdub0&`k_PQ zCR1(+1Ymij8TOlHX!$@?d3A5dtB26|^;Yi9GS+g+wNT{VE)&>A%LJC|-7;nX#-TUS zlTyaWUkNOFe%GGuE~*e${@>%uA4G(2dh$Iee77Wm@4I^Ck1CJ$g}fUGwcB9%zU!{K z$=5>R`@UXv%O%$bm4||$J%#>|m)s>v+Tlp%C3y#fIUFA`J`h;wchN+83f)zqUUGF) znCOoM#cxqW%>-V*&q6P7KUWgeM2Q-2f5^Ln@-;%gI5kmD4JW*XqNZH%9zuB%_98Lj zGtkja6v-LOoS6|o&V0v^^Ql~dr=ZH^1NgliLd`c?2cNo2a5+O#C^^G|Ia4ubceEFi zQq!anhQnBNyd6b2M3BQm;V`x{I9yf^sB-xr?l&QH+HtrXulym+sGfSLJUg2O)LfGU>{;r19p?KW8-_60duC>#z1IUFR1 z8IHpta#%?Y=y*Gda5zN{2Zh6P55QriazK^KKVUW^bjfj88RTH0a9ADWu!bB;l(s&s zC5LLj{#bOp9Yr{7Cx>qW##2@>5yJCn+E-`>(~g*J zvy%{xMwO92{wqv4kDuLUgpKM&q}m|*Wc$U~fogq=~_AM^`m42tMk&YKUz z5P+VeC!lApT&+Yv%dbcAS{6bhwpu-NgI6mSik>g^YDFGO%`a!p46dO$^(^4kNv?7R z;xN6C(I$X0pBC|A<|BhCZ!xP61r~WrG_fA0mnzi5^fJPErZo@K%Za}Q_KQKo+bAM; zFE1W0A^^F0%?cHK^3%_|3KRYBj^O}|B7{?OzAZsB5RRV>!rA0BDjH-Dp1=!`2tE6a zC7ex9U-Vr#3x#kFJ<2mXoJZ=_=^>bbj4E%Rf+mE%a(XVgU6MPLg`($5 z;NH>Iisx||=q|>tanFpXX!&2~o>>A|`2VIo>jrg0VWOV}Bw|p6Z#dUSJv0N~RcXL? zweU?wm7^%{Ae48T^?$YFJIXwxvrwPWttG|DXyK1U)8#J9dhXlnCCj~|XgN>sP@zif z>5%s`Lc?5^dBH3eYL@xT^2B6$gyy-?T(m4?mfSwI%raRfN|tz3*?>|Jp_?wt#9$T+ zHOpjXc>^u{chK}Rmt`um43#XqaB>>(zYdzdha!&kWtId4 zF#6NXr)4(FUAsA`^3GX&MGm21JFJ$?!Mk=A%52@DcfsT=d25CL-e~@sx4<@{Gg*A! z@D|w(gSq&&G5$~|gbo4)WeED2rg5$gH zT*$kKB79ep?{4AydM)rx621}Oy5$0@B6P*^O$ze0Q22HT@a?Eb?=yEI-$GR^-_8uj z0LxzSMv(8Dj&DXi%2a|6HG=sl0%q4G>@ZEtb^)7|Hfe3B**7_S2PcumR8_B-M;~4x>O|ptW_<4pSOfx1s495G?Px3%2tk?8&n~zh1&j_i+B?S zMf5bIo;MMIo|+e+C#UF%hnD)6@q0FeD(td)aymV{!m&{F>!Z>Xz{$GA;uwj2COy zdR$#%1^C&(qJ}9i-2lCBNVqYY8N%kNe?K8S4ppvP4|&N5ed`GK3lg?a2oESP4|#>~ zKoVYW2tG_gzk^8ly20E_2b1tWz(ROPknm7P_TA;lmmU;S^Mv zd;_1VMySho*5O7$!WIhQCgo+jl!smkigYt-O1^#2oA7N$zSDq(Z}TAEM8`K0B$7~s zZ&&i&Bz%Vy0pBvhcMhtIzKN3;gtB~Z`IZUtwNNH)Sz4MgMkj4K!Ww|Wusj*|02YQ7 zEG3z=6$vLH?7x7#K8jGRMT#2`z#KR`3lyKxIe;qBxA6-Lg!VX!&jcx2D3(4)4)(3m zbmirnTx#j_v@~0+C7hm>qkx5Q2JKnrY(~r9KYa@)5+EXcUnAcpXa>H^%%5VvE!Rqh zYvnump#eg*_gYJD>otnLIc%Zuy<1MsR&_s2;pNW;$MAPvO6>*q&!O|Q=v+8F;RVc9 z;V?Z9IQ*;}P^Hve+~TW=hsBP=&p{3r3Wp=*Ohxx{_)&6*Lwgz4W97_N)e6|Zg3i;U zbK!7_9C{&O9#ero+Kh{Kg#Ot9@ZzJ|pnCQ<=!MQbx2%AD- zbmSl!F%@>ikg_&JLxJOVlUJ3$8O+W2 z7HdBSmT|jnFC*ou@{U5>Hu@89AfO20R3x0UHVNO~1Hvcusu*M!pp-{wgCl&>5gui( z$}H5g|I<-sDRx2&za^UXMUgCLc&$2EvJChbEe}YR)u@u?KE7p&P_Bd4mIJ{o7HXD5 z%yQ6V*^lP8T$Uf1<%VSW>lU(1k}Ua<;hDcs>frr1mt~U6!m}(3#r!F1zV0eh>2^J| z7q_QHy@C;L2kdV}=a*1K=|XbohX5u(*bZ>$EgT|{|8JBT2o*SFmG%yDuuwSk4RYv5 z4(A+){^an7;jj!H|AHbMMv+5AU2^#1FgPriCn(+n{J!8Jegce8#1EFk^57E`3x&hV zGNvMb(ufB}tIBLGZ?+OVKEf|OSMz~M7j(uOQESS4@MV~{6i{a9T0URdZ!l-*x-zNp z{jxuSWrnWTym}*QgF^ic%0`6=avy3FVWxTzd+TpJ2Z9O_d!dXurHn+tY@sGYq;D=5 zhU-HkRNV3iZ}FkR_fGO~?Obo}SSXS|En_O;5{&1SBg>3J*AviORE?sl?+vD^&&rs+ z{S>gM8f|&Yx*MYqKhXw@At*w79%=uLW`_15B+M{93%Hm10^C~(_Z_JH&f}1mwSH=E z@Q-%5S_QdVDBRnWSy-KWJ$L@LWlS@7G1-pPTcS6io>b=dik{aKSg5xTQt#lXhl4~J z6rtXa)F-2vp>Dc}{L*Y3^@VjZDjr2yj|z7j>-vs0Hx3JRNjD_z^JsxT9*NsIE>|Pw zdcs_ho6LoFDampkRrdUgdom4DdmRp2Z%Vl=T+$YbH)YftUD8o>BMI&OKImvJis-A( zoLv!svbP!|XI{y97**bX67t3)blm048_a2;obSEN*>MyN#Pa-QzJy=THbl}V=&b;H zlcYtMv@illTEaZ^Pos9CO5#)8yF#edPgZD}U{VW3XoyMN*+^On{S@tm!!zXch2fA6 z9hXKC4q3=yi*T5O4KD0NX+C*PLY0SJTJHox>3+5xPLvKjd9_eDoGP7#JB6H>pDt}= zyNUQ~>3PtZJKi!nQ@SN&R|J-ccvgGXv&eG_6a57saRf#9J}PaNej=K|vwsGG?>EBN z3rp)=NBJ0`v5xOIjxQ&Ng~E4x=`HBRdA5TLw>XA7$?y=cKLZ`_LJki$*kF!=~L zj1mqhsInz>TJPCLsl7J8SkFc|4m@qMP&kZMm*l?In9@Tb%$~N5C4u_rOtztMBsj=m zZbRc4pA9S)ey)l1v~7YyJ#Cw)Fwt)aii1%^%{r?22ED-1uU~?iexhavs=SgWt#=xs zT~19ur-qB#LS57YC?{=Wcy);osKR>z@M zkb{N7p>~i%9dgLo1Ua{&vkOKLuhg3}XK@6eyIN1=%p^G@kS~4Ov|e3=svfnvGX-;6 zC^<6+bH2!&W6@r8XDMxdcQwy&ScT4yqX>um?6h-)^ zCEvDa2G4ezFLbUGzN=BC_j75zz6gDD%zCyi$k#&QyP?!h?n1J@HkOhfe#z_kn@Dem zq5CiiSvHgYJ%hQvzGD1^rk4H|O{D8 zL}-f3GSX$?`m#_w`%FF4^);HdJTf^)p`$e@qHH>Irf)`N#djj-hm!L=s+@T~tydJG zTqmru4}&=^l$;+0b9Q0Q57AzRqASCLf&BsKcoB+l7)TCtgv0J$;7~(3ph~X{X}xU- z9dI0KI1b#4Effy1%0cFKO+`AlYmrf^=9W<$Cr3VDncKCsXPw)16ylRCAd!F~d^?kG z6*R+a=-3o|qjWZ)$`zE>2t}T>o<%vnoDCN0Y$#W12`2XlwD6~+>DMkx1!h?&S!y*w zmYg~pP~~XGwBBxn7Pu@qT^7y;3&oY(OyZ7`dFaD4iDovSqctd^>^0`hg#eVzAAp>{ zL~@rok18WGrS&Qx)bx~9_Df`7m$6WC9*vZ*a>_^?i`3ub$}&A3X?B@@=uPIv35I6? z%SfEmo^>QnDa1&CL;{NNy&q}T-w2FpcJWJ|<501M&uLBbmx;Wxoz0*VmcN5TWq3-OwL{S`nA1YZ*(jK^F>`K5d-1*r!#^7iKce#ojzbbTqzH$!=0IIQIUxVOtZBUr zty1If=R7ek~Nf4@>@zeZ=1WeN-|7 zI&~-R|CBV#EyeMDT++OLunfSW#-~qipmopH@pSPe-6sohV5j-^8kR~ zpZ^eS7|%Am2agQ?aZO)KfI1yE{T^@GK;_C5*@o153n-tsnMtdM%}gSiaN}dpJCRJ< zh%z-ZlgOllAalW*EUG1=richHM}ift;ExT?C4+AP4GjKw8&Eu)4UUILuE5_9{|2W) zErW+!22(R*iqg!)lf{jI(Qp<}H(9A9P%7a7Kq_0#K`ODFiti`T55iwBfZjS{h9%ZY zg^GhIa#*@bSfn^~qd2U^G{=FWmGH-&^`SKPaGKHh+UGNz=0$j9*UxJDt^(BJsF~(7 zR+^L*rpRgjx*k4gUF!dvdN{D;dsXoc$a;JQ0$hp%r?vi*K=X$io~;LOk^5c_GqbG@ znH!BVWm{d!w#guKw$&3eX57{p_LUGA~r!L?7pyZ|0(d(4c-{<@AP#1uIm2kScGaj32%9*66y@i;=D z8IPlNF&CZqw8Fcv{1(m4`a;gK0n*YvFesQz&?66vBw8dFo`NX!=R_#9sbS$}_9 zIeU;vVfr(OTxaKyv!9?$&d#OBdxFf)&a>R1vmRNdJAC$FK8dODbi?Pt$iKrM`?IYs zHhlR2fImHVfIpwHKl9*`0l%#2I{;8fiRsU0PJc|1{rSS-&p*k)CqEH?{zd+@0g?Ur zH~I59%H+?N^mro3>`!;6KRulO^dvC{o^JR(FtQ2!u|H|#&rSfqpI=S}e;#3f;^C2L zzp3df2k6xkrazB3{V_%M=P@aoGx;Z1zDGrqe>xp%?&Eb~4b1mqxU6qKQ5UsFlL)t4 zexDwWClP)t{Rbq@ClP+$`-gS$=k0fb$ies#1>-8n?EH_#EctEppNRMd->vae5#Q#; z@Bc&MpW1;k`f-k*k^C{r^kd#nlH3zz`Z4eSAbBFl4ZjZoX%BxKyN(pQ6#!see;wSZ zO%*=>F$m+j8X;J_=E2j=e+v~Jp2~+O-kAOdfmmyYM}T~BJ<0fNCdjWu!zqp$KLnK_ z@4cM07=ASs6r6{@kc~Bdw-4k^@X+sy;KOPBum(Q(BPsKm;r`eqPW3%Vu`B%j450f< zA@eBJOEtKy@HL=BFV(n=?%^AUaA8R{G>fP?Q0U!a0w{8k4>Ej zj3e;(GJrol38sd}eU9L7UL^w>b?zF6B1fTGgHgCIe18r8WfXs-DDdU}8oZ40K!e9{ z)?KRxmf6se5Busrhv_tH!mT)@v8!%PUw267nNw!nXx7Bhikl+Wjpj|z2&-3nw+R|y z^=j`mVI#O#Yte*_fPEpT87-Tj4XYq2F8i&TOa|AlqD&1z>n48%{5KuUy70c3A+7ia zB1$X%7ZIfuZzH0#;vb6Grr}56-gx-ql0Li%wt8sU4iSslmT@^+1FBe+=OBQk$WazliDF;gDk*?O%koTS(`T zGiJ!|h`kbWQ{<4}Yl22trQFvPjj(=@DTIDO_eX!19w4+STG5h3DCb5~Y*S)Dy-x#xVIMLd!tpAHy$d`u5&r%R*ndGdxTL>ohP}c2pVPBkb*nX4_B4opkizWu z)$fC<8uL#Tqnf|}zNW7~sQT?$GqR1vWQnXPa%7t}1amoJu^1EsoFwB+0AGvVw;B5!NlLgA4ldN6q%Pn3r40^9JuqA zL7mChm25*3s;~T?2b`D3CBJL{)3J%%PesFGJGB=YcmZI51n`nd|V^2(Vu0%|DX}l$zS0&C7~d4Yt~m zo5YduHH7ikD>Z$CfLs5(8HprkButSbks^`c#gTC$$>PX(@_jRCW8Wu`?`J^f>Xd3Z zOXJ}*%h?uSL{Io*XYJEF6Y*KrBx`DJTU3@MR@jKY|@|Lxi|k<({~H> zbiH7j^e@XKnjM=W$NS5stVw3a-KpCBv9lTB9!=4PmLNAg0m>f)aBcb0 zreH%7MKEM4r29_F2KXWc`@DDl(BJ&n{71N6ILG&H$TDa%Lq1;-@*b%B*Pm+ohJ%`r zixBRPQJ=u^m=#Fe0N=fcPE3b~w&G~3`-cKN$pH^v5Ks8wYB`7v~f0FOI+$ElP{v zi^0`e04Jn&KTy-6GxR(mGx(bpd7puhAwoNBBL8o7dbUN`Qy@f%@F1#`xM5Oh*tlijdzPgl!@eKMKM=5r#k+3^^r2=Y=3#65(?^8ql!@Sx|TM4?y^5 zjarvr9A6vqrtaVV0bl%!zIZO99ekccy=Zmg+S{g3pis z_*!&L03k$#4x>Q`6=5ib$q?b!pMX$JgpY7fuDS^ScoBpeBE0ep2sK4mgBk1>p*psK z4~bBYh5b;D4bSrJ;JP)CHF(EWrwM?y%8 zj(b6PU4;ItL1@Op1EU`C`F>Gh_*!C>SPhNk#CSl*Ed3sQSKas%WP7Vzn9R@^G?l&FH`E9DD`WY`Vo8~tGNkmz@!#! zhOgc=zgh!dJwy%I2S9%KiI3od6C9pAj3M*A|3_$5LUz`SV#O;+@hc!OWe`%?aUC(2uSF<*ml>G`0Z`2SU1*GaBAo?F<4b>Yz_WS$c z^p&a5=eyr}uoga8OCAIz_}~K}A&noy?;rdRU*pH>LJGBi2_N8h*dGsh<^hHtu1?=P z@=FN7qoNqn@%bJDU4Awjb$t&hsO#~^LdY^o@Cgyf%Ckg*`b+(&=^qc1u;kQ4482)FS zkUu`a`OTc?DQeFG%PItQYK1^w2UJpx2Gy%00&=k6{0Tx{Urn68tbrNOKvaPNq43mm zwjLCpx6KQM!uNu0Ac`;kG^GAxEkoX~(Wcgi)qTF-Rfp{>{Qmc~;5!(sJTLOg_#7t5 z&o!(C<@!-D`V~bTB=)LUSj#e-Ec}D*ESmI3u@It-;-3@|(tJ%Z2}xi{~qU7Hqui*Q)71dOf8YA)(NTrFDOO&&AaGQDn_hZzXsjhNK zc*l0c=WBkyWU$ZouByXU{oehM_#+U+7PfC_OG~PpkQ=RReSdra>rrd_LH^=>^$U!p zucR*g3cK$`Yrmtn>UQ}eu0!YO26cYt{JL|Oi0IhZjxb+&T`@K+JTfvW z?D>dxFGW1}yLO*HU$0)hcJ+S$yE@_MR%~1hIPhGZ4&b)0Yjjj>Ts!_886F+iu>pUE zFWW^#!e@v}+!tLUVy&;EI>X0mJ|B2vevFIi6v1E0Csi>#3d*9Q)ryh>dF-hbe=uwqzodZ1^txQ}_-(c817= zf%Po4jg79)pFW9}f4fFTM#S*vh;H&&yAJ$CyV$n;A;$X9HX0)Zia&p$-b?nUux^oG z*itu)EIbq5IU3`K7R7dyuPBT7GY1c!>(n-!zlyN_wbBmngn@^rx_lZQ`#X6o#xyy) zeN;5M4|oSlOP7dFHl;phCnnOlleibxF;=1gW(f+P#OQW5+~pr#Bf5(AaA(*fVq!YS zpkWYq=z2rndpN{rlsp(RC*L?98h_@balijbqgILbum4wo)dK868^iDD`}^Sg``~*Q zZs{^{w{G+MK>wQh9svChf&QyUL)kh?)%^BR`0mGmJ^}y!9R4-Ge-PwHN}Lux4Bvep zo-r-iJM&Bblm3%So~_%#|KW+ce=#~m{_p?npVQFj)SK-rwLb>nVYRRS^Pl{g9>#cnY1^v6-+h$wY=`l? zko-4<#9u&TDv0%`z17eE4M~5O#E0Kb5trr`lnr{YiE#ric^dFw9r-sETi^58)cPMY z!b==&FSftIHoK!9`mWjiu4yvc3UgZX?UY}cBYmgryB6_VY7zg(N|fCcPlBfSC^W@s z&=m8(k>65NyrXvL(;@!nq_;j{cijKWK0O|&(f?Q@s3xoy$Eu2y-FO~Vmu6E*N@>3zL38* z@UQpZ$MF4o@b@tMO?e0#&+pa`)I6#xU%q=5*0uf@4*vbGem5Tf@5&do9sB>$=O*Y2 zF56}r!(hOA1qQ4`V8F`%(#q|(uy(LIqX#y+|Mly>X`wGaKGN8EFeKi{oZLOq*l{qV zi9eG{u`z3M_Y!0G!H_z}xO?5D$uR~`=}}@_JK(EhEv_0#_*I$XtLgaFe#cii_|<0h zD|^{B*iW%_`&h{a_qpI3Jg;)U`-~gCv30+T!?zrVzQ(3mJ>rai_RdMeYUt0yYWIp! z4ApM8k#?{923#qm%^BXL39u(qY{bz2-!3*zPwi1`Ox^E`Ginzb<3Q!3{!v}qr?u}3 zO-cuUlK{fOsXhEnK7Z5SU}VF(_5a$gZin`L```%A=;nVE|LuzZdDghUiSajos`cE< z>T|CIer~w>TpRaub%N42sEI!{fbkBulD34vjhFW|F+QtPo)h}pCt|xs_@DZ)L$y#N zXD}RE0GGC03H84c`pgqcz}2qp{f|Lt3eYC-m0H*j#n*UaWA}1TO$9?()8fm)YD$A0 zH7}b64P{L?DuUG%$fnd`tf{0tSWVLcc(-RbYnpW_SWSVvOB%tNPG1aG)9A=@|0@S# zn?j!b^)HxdWi!7lfvg$3JMb~D-*Ij z&Div>(BFi#G(N9Wp6w_n<1^Xn((Mkb|D%211S%$7{WSTJVp1#KScZXY0|lTq< zVMS}Vp`zb@ABy50_G-Q$TM7C36HpA>x9^)~Oz+`OHEOjny4EQ%?#~Eqpp@QoLK$N# zD`jQJ1er+4(`LDbDxW6Bnl>HmVm%QGqjw@{bJ^nKTiq6q7UVo3KleyP4a)uTM&LxY ziK;9uk#&MB4K|T2ajxQWFpn~R%38{JkTBz?tu-^g57u>K{%4T!&H^)fHSx|aB_2q~ zJHOQAVe`4$$n6&TOh|ypZN{TcYLl(i@Pk5*C+E{dK6PDZi$gdh_n1!<`Rm*{&dx=TS2uM5Zbz-D8? zaUV7tAYp#y9``{#M1xsaGx~H7 z{iV0E1=7fGrbgbOY?eTKr2RLQtq!PcqqOsjsGWBxTQ1OQ=>kk;hrSGC*_siY)A<*z z0%f|nSfB!ep22cMZceHO%AA#_*AS{a_byZA0SSZM%L-2cMyF?w&|kY~rG?0*% zBwcFP_C&kWU85BbrPO9sP--9{EyIc*(RS*zGsB2BrkrRXA#JP`DWdJyX*Y%wZNMd> zfrPX{moQuylR!qE7(ujg7l{TE(k57;B--+7=o<{qxX4uTi}Sy- zU;4#*P^4#b@OE+VK*9ueTfw6$KDxWV#L4Q(LFmb`0|{BZt=JK3r^Xt?F*w6900~*= ztQZjM4L`J29)qsz;atLs`X(^4~hQza?YZox~)WVrXwWmP6t@v_L&FJCJ zaMo^Cl`GE|>Z&pXDkjJ-^|~q#F7nw7p7I;^0Xkj3a{T-~mCV6H>K|(iRvi&&a#2NxG-Fh=SS(PN(4%Esp^Rp=dm_Mr#i-?B}Vis#-kabO>r#B8kdb`H`kug zGIG8^TM7Ct3=?0C+HDR+rU-bLc?7z~7V+{(IX!}L3jG~S(0Cx*#vgAFE@-&%5YJ9| zxPjmJpRk`W9?vi~cP};_fg|jiC*#MkC#9z~PeuxKi6F{Lv%Tpr&~1jEupGQ4)(;5m z;3;_|#mm9={y5uw-5nTB-SBQ4w~IydbU)S$w1l9li_2YkzOSyTLZA^OGdN>Zw_EO;io3(kf9kM^x=R<#uq2 zAcqO5+QEJD{7ib@;b4(K*#rgQVE-g`@b*c!RkuXdfGVvL2j`2bt(vMCg6t=xY6lO= z^Hb@0hl4u=noCd+4h~Lc2d|g99lR&1`c!F^IJi($ZPHZD7GyUewu8yoI6m0Mh=uvt z0~w(&+3n&bVT>e(!^Kj8#%sy!7i5McBLk$}W~0~5Pv=z3*?Xjs+{1HFGbx2*a`Xho zgc6s5NTMKT39%i4U4W-t6BcgYHw$5brfQWSD}q&ZLkNRxRc0%CUZBwgnYj+rbFj-j zD`UH+jbj%NmRK&D%2EV6MNlxxwh1FkSGG=|r9msZBaD8!vT}jq-O8quo8Id%nd8~h zUB}%8e6k=%2(eZZa0+2AVk(`a0ShtHap_TAo#J5b7ezBjk)yC~6=*&|N-!%kdB_Ad z`PwnJ$vp+>{Y_0?EQ$&!35UsZ1lmbZkS3Q2DOof5kRVeD`36xQo61o+1Fzt@W-UVn z!ngByGKsU6%F6$0VJz2`EfQ#>TUj!dGSBAfu5kM5>M8^pLC|mAD?lXzrxJ`UO6XJe zGWw^EW%S2k)ROF71m~o2aCRQif-^;+!vrb$8L)BKCybf8vLb=9gI3mmB3pL*ux8mU zQ8vJ>tg_0nQ1opged@$uwjjF+`35DeL=>g!Chrv}oggKcm6<$x5{KaYAq;_P@*qKO z5E6{Zf!Bi9iLRwuDoX@eA9N}K8oJA(XgDcyv>IgsB@+~6V5Uyyz#Ka04otEjWrTdQ zz!ZzF3@w#HL2`pmB|u>MPGLvx9?%N;4M}4Vr4eLcazx)2(x;Y~bV2qK^34KMD!RsN zsq7bI#HY3Z9wx{YLL9!B+byo0kmWtf%^gnOu%gXW*llcrQ#^ZT^#gw$ z=ep{askDeVe?KiEf`sdCIg~DD2`wTv*VaeNm^GGJAR#N+$y(PNmt&3l;*8H=uQbE> z%>N4R?RKj}Yk0-*-zxqg06{bud{+Oux^CFYPc+D{uwH_`m2_@8HKt~wO|E92C? zw|&s=dk=0>rg3af?XzNQ4&z1$RG~wC1-eTR6-nF=z%4WHt<{x6SSbX1F!lbv1_dmmf5PzIOYko zfgrQ~rs2>!z#hdVVT{z3l?pW8rEDT8^Bh`Co55Zl+@m!uDFU4$hq+`90$8rScYVLc+21%mds5lF)QY$f~F~PB9CBW278uypiFoe|Kh3 z{p+)b>K{m0llqC>upfd8Q^wRzp}%l#Y^>r<$b8;}1POU7)?z3qD_|!%%_tq;9S>pA zwl$OhT+?4Wfi|s{9HUJukdU|Rn7L_1^*!-QNa)X9=_Tp$cKLXNkravpE7R@pU0 z-hP#en(+=bf&I#MFI!2`7%8V$F45@~=Q_JUw+S+fMw&4YH^$%meWz>%9@**He^s8J*4vsD$F*$dc0 z!h?KD(W4`VG7^Ovf1ZLo6u*<2{}sEUy$2`&`~mTn|XsrKIF^eYivbkOPnoG z5kcliB>@MGzxK>hc|J*3by%P&L8?m3VfW4!TJD)v4H4)XK~-C|N}gY#tI8Fq(50#g z_-8jK^LoH|(lx3z+o}bU3mY{v`wMhihi*x-19Xcn3Y1`3L8QPuHL6ulU_t-(hUTtqTQ| z7D&jtRKWF?(()XcW-x6h(?CL6ah0_7Ok2z}kdU^dO4>1|r7{g9q)qgssV(bWruAkT zNJ#5z(d@CDN=nY9fSlYw0Rag~WgE(L{)z*K{i0}wZtqrs=1UspQNBth@FVir`wE)1 zIu=d)3UpT{wAiKL-`AhOPlFcMIfA>+Gw6Xlg9Zsp=3r|E9cZpNY6;b@b8Dz}frPXR zYs}iE($q>hmucIW1`^VCShUJ3<<2D>sX6q#V~kWF&|*s!kC9+z1FJCJ#jfvCR(E$b zS1Rjl$qi99h?H5&8MyHmprqvXaJBq1mQr~3uBPySgnsU)gs@J~xHz8{25U8eBj|7n z*?IhUqu91cC`!&-)2kSD^9O6RW9g>Y$my}cvtPR;x<@Lyd5I;^Odb0*H5W%Mh znZJxPf0dc}c6+Q&6*8H$gGnG^NOoDI08@nx%v!`OkdT$9vY=ag1E;TEUHHjmoW{jdkyw$qH@&}dx@6%b8wf1g?)%vFz@T!Tkskoa@+1`64Wjjci7kw?SvCey~ zVkIvp+Q}6}0|{wmE6mcO($qq>fN6zH0|{xHEt+>BD`HX>lR!dJwnb9YQp@IPrX?~B zB%~!(N$a1ifzEw}mRW3m)2(brF z`XODZ9_xg#R8zG?koCc;Di=b$t;!s*oD^srL3Zu+Sik4R?$lN6VaYP|(9vIy66gX! zwyw(84YsVJQZ#=Vl_HQZYjZ3WmG_AilH>?_-jS`R1WK_~ai3U1FFZU97e>H9^P!B; zx0HeAk=5+n8bC|Y? zX&_;#+~T0686V-6h4msu2lcIr|9K%F$GSln7w(U9MmE5vaX4%mv${UU8?a{JJ*vF5 zo{QpuMOF=x2JoUF352M_N^?}Hu5;ZVY2@~B?UJQ#psYNWOIZmL=1EDeos~WN;~Sc; zZhJAa)-wwvWEE7!+R3a8W`TsPITkDQ7dZAXj&=8!dn|nw7jO_V7E%!G5?&}kE&)~v zPe4Vu7p}ibT)2@{R?aqK%TZvaZmv|r{Z_iv8uM|S*9B*ZABi@cV!~+R=yXLrfT7GX}+9IZb zgtR<2ZI$1h+y&0@k(}coA#aqG<2b|^DZ?3c>@>K5th~CAtON;Z*C~Icec@e0k0sk# zQX2Ni)10?~mu!dk$nel|OSB9KQcIwP-|1374p0GcH09$2Iw@txoYt3NSL$I>Vj&mW zvpJkuRj!){+KS2(MH@tslzwa6uk9eYr)mcZDR-vkQ0{<)xiej~b!|_B3s{DQcc49A zgB`Ys9l4T?j!;abHR~-%Ptv7sT3!>IhY&&oJ$M;7!MLlv?RIPv8JC((#({*!O{Ao- z=u|%P8L*j6yG0eykzKdNw*HnXIq!La%ThCUC=(1(W*XGL8isZ;$qD##=a zDHbGy5uCs&lehJPE+LfK`zYwqpS3cty?fGTIF{t#_{F2}GH0L{$fs^${|{xkvnE-P zGD5yiN3(tlWz6C%${3I^W0sIQt4{0NddHZR$}Es5J5?5pG(N)93V-d|{zEJh9r(%& zSkmYNdyB5#F1d(|I604u014HV%`=-nXphXBs$jVk( zo`a;*OiN@MNJvXkX_cIq7_^l$@P_mRcHQ=ml(C(wYfA`N7Pz}?V!?uI}@+C{4yVw%U{mE+8tz&wzUm*(Q-Rx;Ba zwq4q+On1fTEl5w&7DO!In36f-YY||VXqD((L8+Oum`V-{xHpN8Z>M5DA(M(ZNaU|* z3%qf2mubD31`^WxR!K|V!Idh5E7cC7m1QWE%Cn&7Fl`glK*H3vR7ophS{BnlLRz+q z7I5|M{0`2@(L$)Yg1BQlVkdcfX*PKa5~g1<+vzQ@nt1nrD|fO9D~Y4ltA&DWB1G*k zW(%^L5WD}oruBalc9D6dRxPaGt2&PU;;4xM>0%l$2rE^fb*kJyzvpA?AQk zrt8|a36$m5M#Fc{$ztJNc0G5x?K%{duQBTsMG3(wD#q82J?6nT_OV5SrUhxykbk+R zlRFMmYm+&VS{sn437E+0Ai_MO*QS%_nU=sbkdQXIO4^_!l-jj4N)05W-AHq#b`~bR zo>jQ#QFgaCF&u^C$`OW!*~++Z?5^ouBYI07^pyOU*%;mfWiB+TD=)Cn7-$V)x@bD! z%uQ=VuT95}LvDKaER!TZk5YbW?|mf*e34+Q6QL^icgK6GPh`NwKg9u3*&%A?dZ)5R z;QU}x8R&WJDs4aK#__3~wN*}a-ABKd@27&Yaw-)Rkg%Yv7HzUsx-7uCs8UIMJUy;< z&-(?LK?uc9PP+NM4v!5vz+PON5~LTfh~TmAl`CorNsXh_W(ZU)DL`vN2GNl(&nj?C z7!z$}(jo2^WHuqr4$;G^5eM11ipl7l!>Yal-6e=R7qV)vem&2qLzGYFCQ&|tg!yz~ zl3Ag7JYU%k)S5$VMm}-K4Dn~NAO);VxxHmPig-NmMmPY+etPrnau+U%^Rnh z=QUgG&5he#ZrngZR?n(f6PR_JSs)?ngw-Slnh`Bx+6Jb9gtUz+EzR(_g=s3cqzAYq z1qo?~ti~@;YRj3nl4&3zZM7#&9VqT++BBwtgtQqJjRuM%1D#^ckXE}mRV!(e1UgEP zJ&b{>?Y`t{^HC~k*{M|0KtdB1SUhytYa#L!(~_7564Fu}G%Nz{mn`}mqtxz9pwvJ@ z+Pw*CxgKdy1LRpt(~ohf-b)Neuac)yaZei6E(jIQAX) z3Y4yqwg{3#h&kg`j)iqohi`aBe}a40Kk+!l=k$1r4@elFv*VTcz?(UAltuCAapzK4 z;c*U9F45G<(h5OV*@!vtT_DhANs9-vitR8Zr~dF4&M8KQaTBhh32aP!2^&*B4t-FK z=_kk?8!?T!DaH)^mW|mZNoLwfN`7w?WRZ=S#w-_TH9_W@!#9si$_b9lsT6l)MhH@2 zBc?HZ1-eVnS21Q73|m~&OLfH{2hl8#;42Xk7x4{15qc(MGd7b#JBmQ`Tu zD9)3{$?oxLfmSx`&xwg+$N_48r2HHcWFot!-1)d$kl8k3X67b=782xJ&YW?FN^g$KiM^Ih=5Y9lkgk9k$#8 zHP*I8aQ5ViqC!#>ggxfWQ3}GIGgRhgj;1mP5*CD6qD(Ca=5A99sB(^_6?UlKS$62o zD7QoAxeS*-9xG<7X|8D6VQY%YTqdh!Mpqtc)u@B5K@D!*@#Ag$kGw(!O}~-v9)WE; zOODPRMUH}mj%HCBSh*_N^RbT&&eH>DnKhbOAR#NUD%OB=l-7*|N(&@p-AXVka)7iZ zGwTquKtk3L7wclQ-(}*syOh|8UX&O}NITifOpL1X`iHdxl=+<6Doza~q^+@1qgFBr zrzl?iKG%i2=Qz*%3Jb=T%FgWtK}P|q^!s@9R(WcVJT;4+qQ+kB_m#>-&A(%B7r$}$ z`>Ko=D(-?&?Bi{WPwN=pg9{ZqrW)Uqt0CEiedpPQnIkz~PU8v%%_S614&$j|GT-d$ z7s(?V=@EA?moDgDLU92l^bb~3(YWgFSM^5sAN||m9HlFRn(PbgT2VZ@rmhss6l5PE zlC1c6T2B-7IbfiCLM0D*3?LUi-j=%$g_!(Z&|ocCX#(mE}kN-IcM>}FUzDt6al zkH`378>4+4;|Gvwa0t%$0pyz1crLieo^2k1p8d)`7&S|PJq)Ohr3rMLAjb@Iv_R)| zXplfR7{ZaQ937{E0H0~3+8EnyzRoPteH_7^g~7?zur(Eit**sgZYD2@X(M%CO9dKF z5Y{Oka_EPIS=EF~9M2QODV}QB5(K(PP}QmmiVby}b#m#Q1x zVSicLE3fNQHPhAI@Ux`EM73|R7p_)Uf0+kTtaA=f37i>rz8Ysw3*5~EW6>(_T*K;Vqg|LSu z;VHT!I|Z6UkX;0;xb!#kGKXf@5G^#51v)|y&q%HJmPQG9fq7mb=qZo%CW~Bo`t4u( zJM;>Ba&@rgNiTtVu_tQHy(&fy6(=nR&j>I!u!DQ#ky-SJ%fYG(ZGb#pCC0AM{m2!l zkRUsctE$jruX1S44AMd~RG_N_Im&-8fqGGD1WEb7Ds~KI6TLG3xIB_Zk9_6WltP7e z9fIdZ_<$HSU3X=hKv}jcV(&UZmJ(u3Bdm*ww98og!$OW{^5d>?Bu@_1A{j4GIYHVc zTQ7loi48Jcm;O+{T(Lh)0zFOGCyHk3CKL&j?QOyefmabsc~a^9jsZRKL-03c01$U`60SQY%A*nY@fq9Xmy3etLX_-s|32AdJ8nq_ct%B#6 zG>ScOppQcz}{rx^*dxCNXWW*$87JIwc})Wb5T`jsVQ``<*^fVvn5DK zD>wF-VrxAHgk;dO?snJBJl)X9Xakf}Ny5 z+7LVs@6Y44bs-fnDVIqgA!)IT1pAA5?iNJOs#f%2*GCXVoyDCJB!v)bRup)9dqMX= zFQUfx<3!4DT6IQ>NIyaD5E4Wpt2zftWa1c3 z4emU3pPQQ2pQ_&e8&vf`!b))PhFSG!^F})tq%86u64R#=MXdxo1er^S6+CfljiC92 zngvTa{L)_CXZP58z}Mo3M-Gix)mKtfiL zlQqG8gh~lj#Q@Ib5kyf#bxM#FLL80gL4l@er0s&tBg7+u+98jju<+qEnwU0_4Lf*E ztD7kTog&DtPJvJGZxcqAu56t^OM_N+M;QHdW#t0J2dyl95WBhes^(^@KqUm(ZdNh; z*fWUA(aft<#_IQ9L|_#s5Qc$sJ*A+7wfQiDBTfSb*CV_;c{uYVKRKQzx#|`BIb+W?F>#vp{ONUZm*Hlno zLBizMi8^bp>;7fh-ONg77D&jN?PLW$e0xW%?nea2Y^GeGcuN=l7&G3>?}uyAJZ47e z!=#dz>y=!f5`w6bSFUT95HfXL8wFbA(lrY0QVy*u&Hw1(Y}xrsmSr*!9VEyNLU1;( zZs6UNqy|z_W>etkDV38g0eZ@tF!t~^Yp*1pZkuI}Ben>X!;s6a<$|sz^y}D_0mnKW zM|_oNjUB3T=@d6 zA;|7K0(X&DgfUE4c3Pk$OIawLM!~zC@rNkX)h+2nQsOyMr!J^}Ok zA!)Eh!W96o9&S_urFHHcr3DhwE}S!+r+z>mqt0R0c4mQuteq;$N=$WZBhwZ#4J4#3 zvS{R(V*=g;e?r8}Dy7=qN#I=SM_fms%LR(J)SAlywAicmfvKa&_hV?G$XY@?S~_i{eIj6Un+3ly{v>#_?F@S3 z2+(wa4(QN0flk_xI212PIU(uosd~I z_XsqLAZh_=A@E4|&}RZAv{x1u((NS&Q{5JUa&&05K+6fTQ%b;#486zL35gu=i)B{8 zC3FJ>xkZQ?y4#XWe_8c_wuT(K*Busvyt~nTqHLy?Opzejb~2`?YXr*INQ(t2Amp1B zxy-Q~fnBGp2$%*;7U+l$jTPvO4N2UF3UZYYHEz8G=_OWM$M7mEa;Jrqq$PA%kSTUT zrr|pUnnRFX5bjZt^Uk9ANgRi*C#^V$M>7Q3Pl%&c7%xz%Mj9!|B|?J9qQlTCxL&f5 zK73Fzn|7nrGR^e#t|ZgfHo$}`1R7yO;?OBUQV3DA=%66eoL1Y{8M#Iakw$sIwaE=) zb)Idtq`yp%wS+hVI$xlz1lc(Udo|C1^J+J6CYic{F{RWEfP~$^Sc_NrRA_JthxGah z45_t6_SHv4b4AgPU=`WFh~)9}B8OARr%5NsCy>ymDWW>i0{u-U^=A@DNE+xQW#Lh2 z*Rd8UT{FgUDE607>GBv$kCrFS(-YP{HJ_ZH%kL)r{LTj-1RXAtymX zdl!;!% z3d*}Q@$QK3oha*TDf93Sf1l0VT2{|?sGr0Aj|Nrf)q7MciQ3eOZ1SPQn#summFduM zfiCM%AA#->6in213S*A0tU#c}mNJj1h5Ivtj))oErm#Dq+!#VFf^`5keGuWjc>V#8gk?718oiaV<7W`8fwmuFswzb_|*DX{`rdDFu zL24yH!Wuu~Ae!ZBsMWS*#1vv(IzTLtkX3QOWZBbTl{AY<#Y_STNqedwt!2^@CV_;c zWmS-lFli!_Ktj^wDoD4O)Q?FZA!$Grq{OKdh|~Ki5FjDx?EcCFk;SAUCV_;cZB>vq zF)4>hAR%dC6{M3)N@fyBNE+uPK_Bf-DpA16GDe&te@HPR8=U1Tw9en&|M+WDuS?Nay1RS#CA;>Lv&?l z1xgHB*_7$*rJh^-MMpAb7@*|gT}vGR9W2*V|D+|_~5 z1RmlBTCSTogB?7!M{{tDK<5Yw#=%X(Sg0#oDbUKGm0cIcU|rccfyM-_Z0byQ^U!X~ zO$mLnAZ3Kup@&m1u9qFx&ZH{8WH(iLkg!fIBbuwlRL7`Cm^G1EAR%jVRjgag>c=dQ zkTswxR$@9gO2ynLr4#FHF}hrdg;~rhViri4*0!oxo0yfuERc}3uqxI`W+gKVBxH@N ziq(4-`E_>}`2`ZPdOBGFH^wH-;;cWqi{tRMtIB3kw15;j#<;5lS|Mpv-AdgM#vonU zd4Wa;t!&zCcJbg&t8|;KREj{S2nwbWZxcqAu56t^OM_N+M;QHdW#t0J2dykUgWcS_ zLvu4#pb~h~Ena|G{g^q#I6P*tqaSrm=4TPPYJA?y4WM>HtMt)rtbR}FMw%%Lo0 z%L*F=%Ckx4BB&s139%N{U=a(J!vij&Or6h09NLUds753UQbvg5t@+^sUA9SLL?1!! z5uzFa3$9SZ)tXS%XRQSH%BJYw+eFa^38UYO%`?~el<0fh4nK=E6tf19P{W>0O8$AS z`K@Kz5~hKKv}IM&jxcQ^(?CMnWCv{|Tx|~xgjHO$BjzTHgX&@nONtLu?OiN`NNJyJlCG8H=`Y;V7r1h(kmXu4ro!UUYfrPZv8=QHd zzigAuw9QNd328-D(zY;dKGQ%#T27U;GNz4X8c0Y>R%zyfzS^7iT|}rY@*q0hV_cFXDnzKoqszog>IjR;IivG)0iZgjjEuDQ`b3C$sR@^qa7k=Dh>h zb1^61TTA|mBr=SXhus_XlABUN#{-I&+~DmG=B*(1rd~L&C|0(oz?(YOwI6kiTLI57 ztPopQt;6VgU8t8SPwb*6o<^(cx({b5@7&>Z~qJ76MZ8s1%j1rBVbEmZDQ@(NFtDl8@j;5>0_Q*ILaQmaztqP{VT4 zV2yVJPE(KNaVeN6&)cn+d5M*B9}(X3i8md1Ue6(0fB8#T;hHs+RqDVcTc9Exnkmpe zhRlP1ri;k}m+8#m0$tXjJ_6k%2xAdyUqtf0dfMOkZH93et`+j$hv~DFUAnj0Dt+p! zk(VWz;kpH70wvoP;9L3}+K<&LVmz4vzbNm0mMmM+FXHsokj@lnA3^ratg@?OZwP0Q zuI{`*qjl)GKxquQb7-f)b1XynJ|wDGpQ^thj{CP~176{@b{WTd*($C0<+E|8S8B!$6X=Q#^%kh7Zud1YY={n>6)4eVvvH`B z11D!Bsj<2hM+BOzL%RgZ)S-<6Ez+Uo0<9*<4yv(@4D{}F3YK#O7q8GFm@m*89m*D{ zNQY($v`>d72y{Y+5(K(P5ZPW2>m}SR=J7*c=CRimZ2PI@n(ZS5s$l4eSD%GW3ijdo zjm2Jq_M+6R_ma%Utz3+WcNrt4Q|-_nhfTgK&;Wb4QwJoS>AHd21j=$5D6Xv*csaoo z54uex4f-gSP<@73!ZW3`E>%NBtnxaEH1)8Hn1p+PBp?rbX=uoymMFc5T z1#Eu`yirHQqgIp8=a!PsAmK>l!cwQtm0tC~ntjeEj>G500u|`c9D#OPDe>XSO3rBB z5lTN@Te(2-I&@N?ajt{{{;KutHSEvsC0Y%cD9|y2Fs{7ASlL_i$AmLcSGQZB**dgI zpoMlybhfk~9%1!vNv5x5yAR}9cFS;eoFFF&aV!bN3si2C%qFg%KzEphBQd_M$T))+ zA9`2nYeE{L>pLq@q76x-o|wtqeY9Y z7@7K(3$)sX#Jn6qwh*G4moCU&8!^?T3RFUnVjlFgV4ipLF>^hew{MYV-UNY8*pQf) zAjm~RRPzQ1a!W&Qi*@~V!!HRm(l(sCS!g?+2D8-D8r#=X+c9SmwH+W~+cA$)Lyzf* zhkhl1^k3J+x*@hlX7J7mlxV5KdIoK80=8cP%KzdG9K3>DEqHST+NncR1UjrkNdlcF zh_a9-0$@deb7f`1NY<4d5@@QWjGGSdDBvRR>;m>^_d?C1i2@zdp)mrT)1kovT_;HK zXbO1b%-U@Ql(lmgQr3cmS(|0?C~JWg=rHNfjcoeW1)Ax-1nQ;RcU9~gszYZ48f%$g zw?=`-7zZV-X}THP1)8Tr>jhe(LrVo(r$bo+Z6ipj@rnAG<-Ua!-P<`7U63%kcXKdS zNDQz^md323%mN8n$DJ(bsRO=9ytR-sWj;};r6-jl5rqcnkz6BLZHVqs+H$_fR_btwzWI6TG6shw7@*(na3ft z^xIBLu+jEN`m~Uef=oKl?`V(N!Y-W4(lThUK-USfGpG?XctI`R!-*!xfobIhvZJDV zlAWxSBJSDbjK$t}eps?8-^%uDqON-_CA)?xzde?G;dUz0r6m!x#h0J>J8w zQAHey3-c%vu7soDJ$hL1m8-;})gQ6JlASm&9Qz$}oEHQHjKUlnj~j_cIupsi%#wYg*=NXWV|my5bNnbLO= zrZVjS(?CMnp(<(1nYNN?AR%pam9%|Ko6ao~bfv$QI(1*r>p@54Jq%yHoqbuJskIu51lp)WnF8(7p~(Ur z(V?*dogoP8hFtny*_vG94mR*?hGyUpfv)LLPl0;tR$LJ)hUw60fs)(?_QP?5XCJ#k z63WwUSSHX~g6vkevT^3%o$T%P*_yZaL|q>}rON^h*P$|jk}V_5!5W-tfCVA%7Idqa zF<&=htw76kC{LgbIy6_H9RyL<%M5llUU3vuCuH42XqNqfyQmsppGDOeBrN+kXF02} z-mFbw+Cip)gtWs|((;+MifJGrZH-E!`wIgO`7Z3@tQ|!Zb;wsDNGc&ToQ+4o)@}W6wr zbSh~YllC(SBqSYlk{tI01obTEY;@p46wSKrU)fxJ;dntyar&A0;!f+&7$xv?z zFU&!C@@^Mr?qj$1O|#0AY4ikvPUujAKo@mrfIznhvf9No19~F3A;bMMG_EKQ+|TCR zoazsJWnr)>_gmnSAU>Xcc4h6{X|V27uD z1iD8MxkHPTltcQj5aLM?CD`_U=Sk5s&f9`L0?*Pd*euWj9a<&O3fnl^806m|dS9Id znLd3b=9nEV)PKwT}92pwm``?R~^|X2`!?897DO~ z0Y4B90`Dc*Q7uvh zDk10@T8)9X-jsX4{;ztLh-%A^9Iwm6Q8K)-z$z(UdsH&x7(20lg2M@EV3Pzr?L^I* zKS6LT!fw_LWoBoEnRx#LAAl^(kSq?~U`Sn3u)u;ZCQ_962HI1cDuf zZl6Fib*M<7Y=S5s?PG0kszycoctV4r-S26NS6QtJ&a{ z{E(q~;%$S#c?8!{W4=tFwG3fpQLh%9Bk)dw$#%SpP1@H#`y<6<ejU$Tt$07F!I*ZUMI;uC67PAFZL$8y#<4=muNu1AB zcMvn6gYcdkZ53VfNtff0u~}i4$s=neIXTB*-ddxK4zSd!EAem}!lTAGXWH2H(ycA7 zN^(U~8AhpKlw`?^ssdaNLCQbJ{|4Ayz{Ip={^_SEYxj+%tOW_P_Q2RGD#$8k-Asgz-blEA79oWP2Btx)6&RH#E40u|ekjISmMa+DBtJt9$%vxJ!UtAyIGLuhxL z9ftQZT;o(3>c?MXtIJ1dR`(O=jt<=v3kGUdUl3%J(>A=d)_N^VUDm*B?s018-AHZ| z6S8a*Bs%K^SxSf+oh5>-C&Y}7{o6so{A8aQoJ$g%;Z|@Y`F?`jA;i(r+?4bOQu@~G z8o1ZUvqvp=&IWvI=7c0O!8X9`9QFw`Q-_KK%C;dfdyOFZw%LL#7Nmd>GiqP2Ol6mI z*ouZ(VKc3sDbPM0njp{#9ZC@BB0*+IX-Z_pROt=zWg47!dQWc4L|L+(j>O=QAX5o3 zV_@GR-%TCu;_FWMV~^g|DyxD+ux+Rn0!d`LAO{GsmU_(qjTQKeO*EmQ0$nADMzi+% z&&TS|BID~F_h8)Z9f0$qXSAJ!*mhiyG`3A0)9n#xmX$bnlCbUjjQe#`b-X(9GWAMF zhET5r681{RhG10C1L~Cmj#t-S<|r|Un0*3PU6Xb6Nvy)Nr)ZGsyEr*;dMLHOFQMvR_Jq zOeL&etmx*b&rq($_i)XfE^@(&=Yjq4ux$fpTO~0%E$WhVBMu8RMNes`Ky!4cK%m7slrPX4 zf`W?C{97EOt$no^%@AlmL5>)W7pPQ+MhbL^AggFY`wAHqU~=+H5NChE{`fo9wGaXErr4DCX1F6PBzUWRU7p+LC=IbyUzpjA4wK%mV!G)tg8 z1O=6asdqSfCB3!ijS}brK@Rf<3UpJ4?uZTjY#V-qow$+ruh8FUr@c5v6MOZbyX=qM z#or}VTkkP~oU;+L@fKo zNr3*YLiCKVBQ5>iDM3;sg&_L7DR(*B4)@ZsElHr$1es&_N(R@NFt~R3Et9g1qG*v* zkuoB4y+a=8R=}&GXecS7?2y-v&ImG=kjk#h8+(sNcV#_kbO#c4!e@G-_n3)Qb;3LD zalGad!!b76AW$Abj>57`ptU+QU!bj)3ABcjX23Cxr@$&@z32v;K7dUJ2~8hFJZrtk z^EPCz963^Aw@`_7n4T`sUcH>B3RI#)qXfEOR{`#b#B_DtcyCYo`Oq2n=;uR0Lfg|V zB7_~<=F@ay&+Ast?NUeQ*>zNMe!U<|2(fcs|2-y-!d-d3uig+;2sDBqEDbnA0lPp~ zs^{UzS-rV^*mFl~AJPOmPLQcA&Fg1#*svlYWD_BX=D~eZ_F``ear_+$F-SDLw36o# z!|V?ZMS6ueu@C!l_O|7VG%G^{xkiXNS4lIb5LQ+pBNuRfK*_#3Hdg5=u?7xZ5{ptzpV(9S#loEhhPwzCO8AG^rLT4pc zZ*uzmIem~Y{ed>`7u0#fG4W@hRa1EL`jg#TZ;;&}A#eK)G=$P)-ta)v{eA=4^gGv> zA=9#ofYW{Kr98{i0@1XYG&$PGSpw}L$m$B=B^+~2L0N^yTTt+-8qY+A4q|h!UZqH@ zg|?SKy@E}oH>_+s`diM-L!xIYC1Eurfg_UV?zdS_pTTVEy(`}|ve}}kh%~9gvYCSH zbEcsLR(+2i0^7^m=l(<3*4vkZwDlaU;5u4C_W8Q#8BBVVif~SVF_M5)5hiODA!jHR z=uH(=ph3a{y`_Q;10EM>T88s7Vc$@8WhOBc6N&`LwpHOTHNedWU(!fHsZ)i+$%F-$ z$OMqkgxpIm6EgpeOF$k`=ml?`Vsp^zJTe?L;p#|+h7yF$pfm{3M|wsyQ*`Y*XX%m# zW3nJe2vOP=xI`P4XFTlMD~xna*A_u?g4Wd!ei#vbymQuV*Gs58AzCA^K2fMn&$4-^BmJgF%2Z7jd9bGv{pBNG$ps{ z3?&B=^46Sjm5^Z?FJ%nzN>39HB;=hs?c(vRAg&!Eu3>k_aNPS6hlU2Y$E_SLIU`Su zwYA#E4BM+K`u2XGa^w#0Kk+I%iJWeF8RfT~M_UBQAwbEaJr83s^lZgNS9hz`g5K1VBPouc}z%nN`9pkdRe+-7Gk4;n{z>%Xcz2rYE^E1qo?o zRtw0qmDQ*r)0dc+4B$*(FX>b{I0(=c9uYm0gVoa?x);}vA9L}~mCm_P>73CjcxTh< z^kR6w-9Ec9TG`URzu36&*#_^W#x!Z1k8`^Xr$Fn{qU$*->Fteo^?v`qZ zK_PX{Uxik7qCE|r20u#TQTva|IAfAF0x1?GLq;Ixn#nY3q2)*>9%e{24>JTUEbI=` zM$h(R@Gvfy*UPCfQreGu(#iLcA}%F1@Gir29K5N&d&%KkBq?mPQ;-RBrXafrQ76ps z`nH#<5+S78s-&^oD@Zya*mTN-Ig@_<&?}pV4QJ1<$Y2Eh!#~btnFGdnH}Xn(%=sdZFK0_heaZ zy=YoOnyg8Qs>xOPv~{&TA9jG5V}&Rh!HTdnN?AE2ND3ilS%DQ1c-Q|IAzv>njXW#p z(s&Nbx(il~FxO|Z1lmTBxsn1#z-%_vQ3?*mQ_nQz0`*KFVSY{{8Wv8OZkvU`)PJ2> z1DOR9vIbj;0V@s84R~C2!8L7%G`e%8(Y5Bz8wAKBz?z2zuFBKCl#5ZIc;bwH5RcKW z@fZyxH0*{oM&o4wb@LoaQ|Fw4qNByDBVJSKsJr1?(LIJ)G>bF4WUj%VW-|NJSd zP)W@nB*+a$T<=TVl)h-7JtV{tsI@|+Rx4Pcn&^ImhYQ9sNnjSw)GvHue?dE+JM;`3kXB!nAT6g=u*S zg$X2dc%^8T;@wNTDn>!mq%RU8{?Y2qj~!P&pFbSNHV zjVBL^j*|x!~4bOJe*c8r_?37wiGngeCaEhhD25=clIV38`%mPx5>{?ViE@|Gyb zSwhTlEAI0ISa{kjgax)L86m9_WCbDS2noj~)(v*jGG0if0E|3J0RRbo8D&}E-J1_e zBhs}aL;?v(H;$M^fts^70(9mx;V2pQe*5I{uatf6PGb)nGLsDf2@RQL8A8@ipfc%s zMrZ6qw&l!WcU}w?V;@MD#XUYqAu5+L9aG`X7Lm$T_ku)v&J%Y^A zkj;WD(2!MvtRTc}$SO0eKdfha_C(2(IAUdoC}OS=%3wjS6G|l*cd=+(@u}k=nv738 z(llx~JI$S6F&=@p#_YE%XH8~r_8fHQf0`i28FBd; zFKD^O>nF$^4Y?_H4`i>D$@K+6Mp+((z5v59ev_cF;}zlG!72Ccb0BjbdeZnu8~-cK zsu>jA6EUgPLg-WKgZ?(9p>-aA-sqO`!n5!KgHgLl!w-!gN51O+!(`)QdPD6BKDm4M z)ZaHS{@G^g%YQZAE%yKQgCOld`TzQ(!Tsg*V=0ZU>5n}CXn-QHM@P38iRi`@bQtEe*2YXp&4nFUV*@%)nG~ZfEP2?irlkRV-xQ>D?6<`r6(} zdKH3<;IJt5?UW!XgjlVVu^Z0i=0S?a_sWg=14CRxPjN6qiea%`K+SMY66h#F=88a? zv4(!e%D-`U(^vmu{J0G++Wpsmeh5pFSPd)iKmMOJGynf?pN7qiPum!^{ZGF7?1vwX zG;R(IF=tJEjNxz)HRG}NM&W=ESz|C0FDj!0L|KV+fCwb4x7pUqV>l)$FiOipV1dNH z5nd=ZCieWY_wHw#*7t)Y^)iiG<^D`#+r3a2b4~C0r9TcvpTm0e1|3&@8{qTc9!= zY8KW$A}%bvYfMZ;H2fRYr9(uF1xGb#7xrG$*IWJmy_l$OZQ~-EMtl(#9n~)Elc>(t zGwm8gg}u@0wXpZz|8vtu9}*P(Nm$3&4pEVIIxSyo{zh2G&TZR;MMiaua9H_z%okna zI=7E$+oi)7VQ;_IifnrKy|Cu*hP7_|decU&t&|#l@E%wLX|#*z7!el{);2EAG__;f zFFJRP3nN2XHGa$2E+VpR*N$;vUE0RRe%3B5yluyhpR^7C)Yr93J8;AIN!Q4*P7$5L zV&i=6V%vtb>m1fCA|@*G3x{E^wQ62JtYz36jb4BEjYeUOTDE+*r2}u?_>C}N|0OD} zL#wx6GeaL4*5-wJFNJ;3sAc0fKMZ^CwU)2F1K9(XbdBlKIo5Pto@)NuJB`93Vx+%;7#1DznJ)~SYX_;~KMnYw=lGxJ z`JWdY*8aKiyJ4@lZrLpCtwycGUT^kpt46-&5pl8MZM#H-#di6$Z8!!au46118yg$d zIU37U43>;f!Xl%sEYN)m?-dJ+xD?O$oF_+lWcUAlr85$>?!twznm z8ol#c<7U2YQL#~P%P<~2*`J`j#@K3`!wT=DMPV)7z_ug&XytS~yI!F32 zrcemOJ4A#dn>F_oA;VEe!X#P&;n9zf!m+xy>)NF%CX_yEj;y?jiD(}c8y68H&57w| zWEd7gC}9vXE9TsWNnLxVRqK|Go4*zImzM9se_OxymLq9;=*_S<8Z-`juVv#8UTfV5 z+;peiHQGwORqJ;^Pfhc{vo_U!*9{svIOgtWayq@Vy zU+LF9M_d(fjlwE&NE8;8L$Vq#E~BC-hh`i+q(J9O}D z;SgbrHMwra78-N2ih?Y`oz0cdS>4?M{$JnO+gje=#3Z#hWk{kGw%f8%#A-;nj)8$z zH%@K0nYX>uUfw%ZBXk@M_Ng|EEt+nOw=tr{@3w3k$Lg&GS-9hkW3p_Sk>*r^RE8VJ z0`^vYes*lSfSC=LQU7u`E05f4A zvH5{Nd!goNVP|(A$Wu_^@^(2I?A#P^v+os*<>baGV8E%3Z7jmh`Jy3us_$ZFo*4l; zl^u*D3(LpnlD{2vQEnHfe`l?BfQjAR-)muh9ukOc||KHc?+=p+|44y)c%-)a+NH!VM?Gs%2n1~cphSLJO&b#9s>1=Lp zVCAfW4#V7FUls$)QRGO0Hab4HI6c{(uP@9y=CiGa)nq5Z?A$_oW^sC<(VVWg=cd}@ z({mFi+SAzC3&-_f1~HeN%t{3kFA>?C#un+Tx*e>rt=%?Gxjxl)z*I+jyot(xjp#Jq5?6r{}H*uAh7U zNtv2f0fD2kaIy&u+?ocKKedCIIKAbEkq(Pu8XW=ow$Z|5FSHN&X=gY_Na)?eS04ch z-8sLyd9c=5YaOiM!04pYYi|6y_U86z50=Bw+o@E=T|8z%N7*j+g;Af7^O>vX3{F@j zGV-+(jT&%756Un54h&K$e>nDt5$zdSpOf_CvqE9+b#7{JY_BI$pC{uvjB-bg#zgc7 zSed-}`t$Nlx87!DoQRA=04~DTIz@`@Mqsbn%FYhxNZ-TOKkQTR0h4ner5dw1W*0y@ zHbEjz&5s?Msn0I7YFi+M)4FpefE>$J(Iz|5gaQl3QA*m@)GB6{KCI0*__PLNu` zo3s|ju#d2ztd~o3C+d^L7KfF<;?`K(*h6=A_Abn(W*M!|>9+3XjW(hPnPf;hJL|w_ z`v-g5pcy-BvGX`yffPVz#W}pTHX?jbd*wnK>oe_x_VNLU3o;9=cniel@~N~z{m5Eg z19PObE)cz8)zdrO{cKouoQy&fS`(W{D70cb+BnbDLCH_Hv2|d7;kca+plv4V^+~R3?)=@&<<$~@wNcVo5AwzqaLlQ-=}-+VC% zS8CLa|0auX2OOazKhNOG1I@U%jNUJAY?r5ftZx=4o6qHqF)4atlPMjVXw2diuU}tN z^aQk8+uy|*C&Yi$ZA&y51kip}LZV*{Qqkfp*GgL%lv?vbV;c+(m^l1x32`PY11t8P zT5artaw7Qzvxie@A5Y9RO;}I|ZR_V8Ho6G`gpG4az{=k89{Q&gJ%|P{Q*w~3uJmht zV-&lQqKsB1N|`(kw6NXT=M!F$Y^_JY(hB90ybwc5?E}Ffg1;D zNvaY;so5GR*Ul-3*LJ#lpt5$h+6=I?_d#R?0n^?}i%7weRC@lALx+m7vei#!ICem- zd#1{P30XJ;@|tY5NTc!vrtlS)PS0Vw8cWejqf$gVl@F645W&yr6jyp}VUN)`#7OnJ%j>M9sy#it^;T-(8_fv60))dhM$Z+n|jEt|G< zm>gPr8(mw6^y6G#k!F%+R>+?H9o;KrF^^?jeIO*@Rmv-Y9XA{&_RRg*36Om){=vY{ zj4ezYr(}#>h?WxGM5B3}JO>0y07t!VSV|eDsRr5ZHK3jmoC`qS+uf~=Qoh7?kuoH=Y28&= z+%+KQW*QUobFI0l1;rm2r13=;^GKhtb40+#6HLX5`RdcP%D=J!=IdCrIEvH2Du*8^ zzOuknFh^Q&83J^OR9AO)_8@Wr9_+S{O^t39O-|hxv2%U4#AQNf27BEJt~zaH^dYs( z7d~pw7ru^8>X&yZmvNnIcXoF$S&%aVLkqIUR6&$g(>9=GK#*9ovkQV`_8?FwdScjO zj%#vmauJMSW45tS+dZ?|y~+dwKt<7oM5y&FZXz?F&+F;|#oX z(1nD1Z+VphF2@G!c9ONlwv2qm^O&w2*B7zHzE{ZW(xObK|Ukpu=lhW46A~nivB^J6~r{96vw`g>!_vq{I-@b8{yao8?gT zVC#}9SCB2?<_%FUjW&w$WLqGWn+Fy-HV5K+p&m7K&xmfu+6C%9ax(0q0`cy~&1DxW z1nuD~ugL_?MrrgmUQRC{1fGDD)ht4u%jE+7%{r;Coz>dL)-DKYM}BNQMH2m5Mnp?( z#Wn;nAP&!Umd|9QzRiRR0!EG=>Z?oJWyWZ23rrKw9Z;@&SyOy**qC$a5V1q#zr9MS zV9z)M9ZuJejZHvSFG6JQ;aO~~;=>Sg%q~t(x2GD@AP}Q_%p@tYx=G!V$acBZAYc|9 z4&}U=JWy7xiP%-w)JF4*+GGI7+gMvo4pJiNb$rU50}4%%J@j9rq|eiNBXBU_-1HRW zZLC8`CaeyLeNh75bg;pVefnU3ZRcD$IBB(rdSdj-qp@0?$@xlkD`U^>#a*Gwn^_^0t%o zuH4J#VfNQn~A6C_{Bkc{BHh|brT0w}fb3GeDF~R64MS}UXq_ru00@Utc&GQe~ zMDT6U!nIBUpFUwtcuurirF(q_O zsYp!Iys&VZh*DY8yncZVImMAf*Fdqr86wsJQhus9`&LAOUPccKti!VZ9NEONHiuB`3t96%zSepW7lD|WfNJt8Dx?HmN|OQK^s1)aU*2#E$^_jQ1=%Lbb}Kwi zOzM-i0vc$8uP8HLFFPvAIr6nWaMisK(`402oT!AD2$kA(Y}eYv43v;c-ZUtu1!fKL zee@BmelB0q-ke(oMZ^UXpJhk59F&Q#(ryGcYC)TjNfKfLS&9QBs(-L=n1lTue!>)j zDAY3ql#^dMI#StfeGZ)VNc&J5d-7l#V*%5LeXMjyq`^hEPoqa+zM}2U_giZbvVrmT z$mrET7HO>;rwe^64ypkndCUY>>I`&&=%!N<`Mwft2ARj)+;n|x778s>Vw>J2|J0g9 z*^aP^ru+g8Kv`$-jJ_4QfjF=@-IVj<_M){*M$wvxJre+WX_p|$?hUfo6o3SwJ7i{NEjJHcJ6R0~swmOEsojNXLc%Z74DJxvnOsW+JV3=bpC?HdSsk z2aX0@sT@2-M;&F3j8rYG@*I)Rf+{UECixi$*}~$&)YYj4di-!|1;H;Rg+cq^P5)emM*&;}cH`fcOTpkX6^-5wdc1^W6Zb*iV@h$uJBPDEMsplYKn^EmA6f9FP-vatRpdzJbB1}0P$0DX2 z<~QJqH-hC=6t}q{a#EG84A_2Rij;O-XLaqgspG1%#03U%F_D{$Dux~V@-PU&iMjbn z_83D>VOP?Y8Cv1|0u`NYlNhgpWu{vq$n;TZQZbuRJm!p~?+oysQGH zD3ApJvf0^7`1Hfy0@h=9(mRus%#`}e95SY(K6Vmv1aOe;+$JVF*FX_e48^#n<^}3x{e)tl z9H=Zbqh`61#DGJTfBF>(nD(*xxy7ce5ixJbhLQrL;rTNMqTeMgguYVR zw!J}wGvDd%9PF)j8W8T039nE`F=`Yp6bsP~gDbBZ0h_?#fxHL@^Hiw}Nj+3`Pjjr* zx*iA-coALASBmT>HIqnkE|A`%H8B=(9^TZ4Y}cNe4Q0$v|0Pe=%Gd%#Lm?uHwTGqM zf*e{5tYVadVx@@s0gnfv7u(}dFVAvcv7&af4J(oM^$jRZn{5atL>{%Xy?Fr^)*z>W z05FAWL2Ifx%rLBI#n4z(ZBV?WwkQq2rByM#R@{}5BqEDhL6dPn#G$VvVq;59AGw*z zUg8c@XeA~z_Lp^Y3ZhNi@`-RVU?k|MLdpVF> zJ?!`GU68J13??Xel>=g5m@ilOz(~_I<4Tw<933gBvcLo(<%dv2R7sS^!QOV=*+m^5 zE+#df>RFYJ-az)j)Bwhcv-KM6>O*H9RdJNWVi>f^%0UufXEYZK_<-A028XesY%!Z@ z4iD_i6Mwb~v;$LV?8^NM?b9@B3n}K=olxVg)2gGrvvOm3PCD@lvp$$=3tBC9o8e_S z;CU=inF^cY#ykjVH$KKx)YvV`uuP1QZ=4Ac0-1OWM<28r-P#H!&j;6p1id1b-5n6< z8=2u$>^M{>$9j$!df1GaV^bsGv|>G)2?ol>PtrZw84+8${H=L`5&%%(#YnJj9$;be zw>Uc?=CMR(jblI?sV4H%J$ftKToS-!q&W?dIL4A@$k84&5i=p@0a}^%zwl{hlOPIe zA7JSK2j7W5A&_7_RJ1*>nr8b2DWhwqJ3L?mBXUH>-fp&9wU`a;z371- zavac7QnLf&(m3bZXGQoZdn}s|-33_QGJ3Q;>MpNi0YD%j=h5;mWQ)AKkWYNJM#0#O zO-_>0OT>8osSN~%87!tGlJ2Eucue%yR30`L=A&EO0K_-S{pKJ!3RB4d1H+rGOeITz zOT!L6AQGF#@}u^cEP;+Oxd0I+`YdM{*5^6Hw8d#QcY-oI-2a$UgE--Uc3^(bQ3F%B z*V%&LJP9`fF>%7ERqjRn{!9 zZU@I>hh{BaNJp8=n|F#_!!|M2o}8^{o_Ta~OM;vtKf}>>Vqbv-Dv?8$H+ynh3aAx< zK0w~nJ|J35!HlW5xL6Lldpf1(X%jK?vYf^S1N?invrF7xOW}s)B(!`k&lo$eKGe=O_Ip=H$6{`To8*04O zR9zZe$^$eYxtUpo^C2!v>h+y{-13{Hi7Le>B*tXFrv<;>_SVQu?;gOo3cLJpn-&et z3loZ^+C*5C$f3CqnB&^R+KRL~lZW`Y3)w_Ec(1d$ybmFL4_)7Ll#LuZR9s@|V+p2% z?#IJX5auH9;197eNd9qOD{;^!{mk2RPR5vCPX$gQy^g(@Mj?b-ERJJMtOa1qP$S_O zcBk4JTOqKofH=2t!vly^L@rN(bF?)(F^JT;Nlj0m$PKN!l^f0BEN=!@q z3@m1q`>J9YQtY1MW74d|*)X7kMxVq%ewBy)=d4y`INd#*gs=?QhmMQa7!jqmxw?yb zY685`=&c~fQu_rOTW`pwTPZqzJ&<6u2)+h~!}N4x3~d*?MH~#-vf>gETgNzHc*6d zZW;C$-BTbDVDi3-3&rQaH;-WXAxf>Y88_{$ zB)PE-GlP(^8OxIHG-lr>y|BzaxeLN@J*=QBEG_)TV;k28aq*>)TG)0{N(0vb?c$A% zkZj7$9T-C?`Y4u-NIi~p)~@LszH03}Og#^+9lF}DFeqF-uk~I`smFpaZ`$?8K^C&< z!9=E!(@pA@MNnn&O7Pb?Jv9>2W*PwUj>a!vU&+HY*h!z=*uiBryK4Z`yN&MY3XL{! zVYoI_yD{*yqhDWZ%3&P{&Gj^2qta`vQoZF8DFTROZr+n{o2Y`PGZ71iv*oCV@s?NCYhEQ1LlF^E%&mcU&a zRCr|~+LYUYh7A{?3>1nHr*C#_xKxVs?NTPRyvN4Yv?Q4g1#b}hFjE^K_vg*EK;mk# zpj?|^v@!11>!#s(ke@>`g2zSP+J!*Ij774m4sx8TiFwp)G{uNZa3e$Zgi810H=K01 zdK*cu9XZl-222}utnlX4cg0B^AMQ`@+D;;7kO4bn!XZXh2l zKbCVonk2#v3?0~}p3i82j?GT_b_2q#Ixp5iBqp<~7l76`VI%F19aeWbd#kiCl3_P% z2Pm55dKtt&F#8M8r>G(-0&q=Tb6xB2w2M|$^EuCI+; zGZOZj2_IEHaO^kmgTv9os67#KTFMYVFU5qYhkTT;CoUT~4$o|CpOsk>zbj%P=HK)? zA?3h^bhff~6Niv*daf+tw~E=5#jX+^Y{SL48-%?lcY~_Kw?(HerVVrJ9=|jtsJOR4 zxm;AWfjfS%%zCR?FSj+qMx#Q zwh^nAqT;+s7zN7rCPeX4TUjUJ%q>xf=v6`uS0m!~LKseZyS}lgTIx9M_s5fxG}RKbpo7Pa-AiB}5(LJ>wDpz^)oD6=o7?hd@IQrvAj$ zBxM3H<_$>}#wn)3JSP*KX>GiMpVU;&x6aFlkJ&>#WcfQJ$kQ1Y)*jt2biYG zL=;z2)Dk2Z^O7kqFz0ok`sp=;w>?VUYImTdMTGnml)=pdjx^BpxYM5z`Fo|mKC(}` zE@&E`V-O*0DN&UpM#kR=?E!2jj4FYN&cQbeyw{9j;EM_2`ZT?k$*<>TC*;%>PQ$5w zkfM%*?ACgcn(MU4fV##k?TRD@nX0S4Y`5DvSli)6faq71zN)Q?PeRO|9Fu9mX;nm| zYEPm@E;O-;-47I$BYlqSqyv-No|)b&$4G>S+nTU8Q1fc{hM~2x2Z9``&0{ev z&^m4x^LpZRdC6LrnH<0{>VQ-R=Vx9i_a+4rqgN;M;L_q(SeTsPHHw+tb}5gnofuyp zOe{dg!(E(J2TfX}_l~k#d40{e)3(w1FsfgI#RXV*6p|yQF?%(8G==a+NKv(}(5+t` z5nMs(tk+=fNsV-F9;C~zqGBCs(}hYgtm$;II|SnK0f!5Tz^&!IGeJFQpVIf4uomJl zIfzY*Z(ghmN z`ec>&n5BH;cez{p+ti4yl~_vpWC{ORSX${65YxadSZ8Yuw`#5RfD8L_Un9OlL1mOMaQP14q87oR`Amdd7xJ>LRWJsy8CzZL(g;s(4)l=v!P#Y20wILvii+{5 z3L0z5Y-GMM#L8AQp}L5GcEojQiKb#aMz4l8*o3TG(C)W))g~d(nw<&B4oi18zzT%` zM})5VCw>yqa<+PvlFy|i#(Akv3~rR-YZ=)5fN?gYYBHxMD+NGeACgYi_EghGDI@4-(Ih{^J-v`xjqr^1A*zMmnoR%jo~4&>MB>#({Qx7Joi zYgEQ6>%es+R(Px#?Nr0DFhhrLRAIa76*NB$O2D4TrS|=0#{+35 zm2qp1*CB>DMq9$dx$y>v43rplU>h!u(k&dB6W8=s?vEK&Lrf=92d+2@8n{d4#LGuo zg-gn4>Gd@gwyB%iOz^G?ALj_L(H5EK-0{zHx>chHZWN?guOr!>ZtE#2=bmr6s>O9N zow3W09tv$x9M#V&k7;aZ`oBm5IF4D`FiMq+m_x?{NEh2dModtSZXw?{>6j^x7to7w z&6R`GYkZeTW(X*b<8}e=cM8QPjuCU za6n$9RrNb@&*YuM`ZQKa7CPn{Y>!->PTR8Y{Fn}g*#A6j{{%rVA7nS|{Y01DC|i(> z6P>M5&xBpx&)PtZcl0uM2yAszmAZ|dt5~Jbtxo)tnT$(^kM>|q)O5cWqjr- zPD-{a4%>)Sf~U<3k1_X2@RLC_biKbr~0u!weefGJyV zYl+5i;{6&z=9@6?;_44ejyHvTPibfLK9JqemYy}nuI$6|bNAEdGe0RNH$VT}faRLe z;vzOS7q{*?xMYI-W|s^uc5WCea)*%+Gc9BHbT;Y0tLmwdqI4f*RtZ@n2boqy+dFG3 zB_4B&`mj$ibX&1c5#Ssuk$oq}S8&l?9z}L(3KB2iRZ3fWM9b`-%Lekv?#uePwKjZu ztio;**JsGx<;A#TGCkUn!`1uqHtL)ezs-cJ@1pL7z<%y}Py%6)r;?G}DP6a7N<^3t zIIY%j&r+-(^$uefZvWvQS?*-}c-tYaEOcmWc+rCXR6~8F3yMt#g0trn&^`4T-&uog zf%q`VF5z%1U{2Q591OQl50n(hrTY0Y-S54sZBxUHM6r-`qNza_EI2$Kt52|4KAu|~ zh#X0xJFM~aA%0Vn=R$w2EwbIZI7>Io$|2Z|PW2y;MV-mvc6ZKE19z5MoN}rSo51Ey zT*{FUoH#z$n1B)>34JRz9dwYPO{$(wfm~p(Sr|?PyOQY+v?CRaN_(2sWn5OLO)%vT zx(fUhn_GZ$JK<3vArNPWfku@t>$w!VtK;ApEaubKcVFijY?L6$V-qt%Nb=DD>abd( zzG~#|iyfcqA+L%^W#02G6(b{8?eiR7gHPSEGcMbbO51f$?;LEd0hdAnQ0!Ii4#?$9 zo?{-LVAqPcN1%w~0*YDu{RGMcP41-4Q@qJaW-1j$4~c9e|luLwt5GjmrI`(t^~MnzlO`ySTX= zgn3Z8VlmV8eNB|5^jsPZKr87SXE4=llYm`h6m}Ff0x2`oQ-hyGx<>D)iIkI-*qp*r z3cz9vlA383_e1+h9eUWQ`TEQp%s3W~i#Qm%WO!X$ql^A+ozDzGz%K$Gg3(u2)QoLX z-cgA91y59LU$nK9_ddWSEHb6}Jwfk~ouVL=lqRHlR*jYA?yGuU^^a}+90FCbyN$8g z#OPEgiR?&9S0sp1t8!hN5nBc1(@$@iive*D&oSQQMqdAj4*FXwuUC_Ovn@e<8aaG$qu z+?fVU_5w$nJ3+{LZ2asI2a>sBJ0x?JTr^6#Q>#Ab+Ify5tO39wL%iU(t=cyoz^V<> z0C2|{Z!ut|R11V>aA4|xdd;!4ek_|4@FA&_s3~qBW#p<7b!DG%5$TyY$K*>Pcpwad zDlDn&Zf$D3F9FqH6c)X-&Zj0PH<#(pgmDytz95oHj}qzC>~a!&q?l?ggKbYciJUjV zUUO>%GF9aLAIEwPEuzvcE$)@j@2oWlw#Oy`pkG0HYV`J>+?_usN{q< z>p5q};>$@TVN9)&(Fm2t_cGCs>t}PJcTu5>f1(odJKX75fs}=pv&f>^ElzPKP`M$( z#jA4uwXNN9rYq<*mj?-ppcbZ3k}Qj%At%i#YUE>MPU>Y_Thd$y;P$!vT5&gD=ZE9% zehTo;Pjn6wMYG<~O();<^I}y8du*PJGrfdOC}%j{+1xRRG3o65t)xXU5vrO*jCPM^YnDeN6+|QARCb!>u>vZGyPn60i*u zvS<3aB7mmIQqkQ)o^)iud}{dL0EdK@$Y=&y4lIG z`gCn$jc-U%;^>RJP-Vmc4UHEr&YiP#Tp5VqZ66Se_iAW z3kgv1dnUqBA0kI;eK2uQWD(LAN_dv&hmwv7MDXYYS209 zF=nCb2{^m<3$U3|nLUL0r+Qsc_oqn`q?4l?F0R8;1(~VC(l=r^pgauaIJ~oy@D9+u zZV@iz;tUh|1P!298$MQ6Yj>Hl&nIAPgZF`;Bym5NaqU}c<_d=pGDd*?n zTTI`qke4@n2})lQUMC(c)nQUn#rU~!AUl86B$+pQ9cVTebYh);S1eDw&ikQ!$}ZR9 zJ93sb$$4lc(+E?RGSVZ%HZ&wTqsqT>(`E9x^>p2%)jZKqd`zb^#$3`IN3S5*TFtk) z3_)p23x~{HH}D39tAHmJ6Zx{MJSi;Z_JUV~NX~A?rajJ;+wZo7*-;eMr|C(oRGw2; zZNdt*f1mc<1ID19;uKSTHu6)ucn(ya)wPWJ-b3513$2xGx|nKmiohk~G%n^p-C`4Xj? z`Vf6A2JTZFN09m8X~}$#2xUZp0VIW`Zaf*e5>3L$-|mMzpvgwh95%;KOiqo82d84# zbEe8(j`P;%2>5H2NgG?{@zfR#J|P;ok&j+%l7hq|-{-{sBF4s1K$u?GqYp)0`54WN z+sOkBdGjPG_QE;`lE++*AE7&br!E6;P z6V-s4*&VHp*Fng`?PQ}q4Hv-b7#_wbd;2T-i+R#xzoP)*U`Q0wa-$>!x&olKz4g_r zM@MJrnx`+;ge(C!Dzf)56o`?k^3p4&p(r~TuZ5ji@x7rQxqE94U3~>{DpKm}rMtzvEKk*i4QvPK_ zeR`R95KP0|Pp+o(EZ1cUE`r^5X4K4|qg5PZW5Lm~_!%o$N~u+2Y4SuvPPI`?SBw+Y zX)BuYIN}=8S(PievaD?X@DnEv_!d1Z-Bx`;s>CZ9B&Ruql+7eicAI;qX~?x$dU_I} zA5c|7Wv6cwaSI5FORsk+;KYoTx5zXX`x%bcS}{OSW@Z7*;=HS%3nkWLelF{ z{Ej1zlO(1szT`RkSGF@m&I>XlP;xZbByLpH;~R)n4$fNZSj-qHcU&0(1`C^j=(~)PoclRpOLk^S?v|^(LSFNb zyCoS*fnf_}Yh^4roYZH>&q>CFR#n`s6T7F&;=kRK}HohDsct4OkfyEKr^WS5U>7 zt39HM7)uK37*U>Ce{I~+XSo8U;u*x3X!xRD-s}!3*Saj8FbC)=HK@0y3wXjxo?eCv z=YBuaoilbG%pFBX>4X`mUK$=-iLAGrjhTJVdd- zu?t7ix}pJ`iWB&1+({xOnF%*o?rB$&kxO+yqd^hU?k)enPF*&>YR66}fk+9&}CbYF6Y!<314 z53m#)OCWIyFgP0ey1Tndo?aFCp}uKCr%FCU)@e72?9~Ru8tEaQWTHek5AOi6FpI_O zddlj#pD)lL6I7*%w`9d-iAiXaIt!QGaOSVTkAGg8>rnCbB6O(pb%>%Y-+4OCt*9{Yjt)PLEUxh6-c9WQ$|hr)@C;5J-pAmD;P~RgBvf3*7m50jRi*cr(K%|a zqaHIQWHq{J`cXMid@#8;vs=3=V~T!qe^OW#uE1b@gP->CW=zpJJ0?|rHd_~Q zB%GkmEzZMMlxhNzk!C_}vz!SJBMCXfaTIiQP^;A4zDetZKe7xdx>E;kxd(DFkPk>; ziFD(hCxLZDC$O8{$R!OfcH|Urge7V|L8|lzUrJwgu|vsY!$J+il1*ciZqZvkEqkJX4;`rOPRrMbJ( zX`6lf$k_JU;r0p0xEFBeb+ZGfurT16NUH+W4jFf~7s{lOJ(a`ISsv+>(@*GL9cJ!+ z8V$$|nnE;P;C_{E&{;kSY1q>7F$7hr0GFyaNrF;o@1PY~HFQYlfv%2R)Cjpq!s^-< zVs@A>x&4d0HtV|ws0h{rF)*?XG6}a%t~tgMv~CV*s-D-0bo4xcRHbs$D;r-n1%eRx z-(Qih&HLd^B5llcPVg8WwZpl_X;&l0Ow`m*7FiKR%6fNERnC^mxIiIX zaXwUXhcY5$!R2C1fvYJ~;+Ux3QB3{vF4(XeFI89_VboOwUyAxNBvhSpb&o~*F6N5x ziNMvZB34m)zG%H|FSgV8L|AcEU&E4|CnN9~C7yV~V-~7~mJkO4R`llZT?dCc(4Nan zk4}@zd95ge6^rLGs=dQdD6Kb4vN)y|k8c^PI6(TIX`mFVzyvKjEx5Y$dLR}TM=4rM zQ3Et?qj=klSEhM5r`F1NvZcjkQ)^^8`h60DVvZZA7|{%qX~7;80Wr`l9!_hv!FnE> znBaq#(L6_ew0T)qr(>!U&5QvREEoJdmy#RM&d%Xoa7bL%W?L$t#<3-%nd}<1B+oMy z4#L)|d10>9KUxcT%#gdJ4pU??(Zr3>Wwpe!En*oWEaEHD;Kl2_l^+ERBFB|(w)gOE z2I*=s%f|vsEH)i$6&u2aTyDD$$Z*2eQ5u@NaYc(UNW56oCmT^UTeSwM6UjqLz#-7CjV&$!W@F)`a6h=ZMXMATHv8=Ou*u4&g+IvZ zja@oK%W$S`06i6wQ@u&L89vxwzq(M6W_v!ncdQ^Xd<9#7ym*AQ3!R}}xYD-4Ox>-X z&=DB3Q1J}$xGxi31_K%Sm|Dlxy6V=K!6Uf20f~rijn-lmP6)PNYP1?K9V+DO>vjjl z=v-k-c22>*?DT~zPA}h#S1qqFS7Y5P@cQWmH4SQC(JnT;oMlIQd>ls4T$Lr-CYzE6K&CO`}u&$5Ot7l$0U+- zD$~sM$_dXb6BRwf3yR{H>b%J5m=-{?CE^)NG zp)BT=N0jO^M3+2r%_wvgg0-tpe#=sUh-+-Vg}Z5E$Buzxh_NN9N%;eJE6{UidCM=Q zz=1d}@$hzuN*>Z)cGQX^l;*%f2O0Iw<4P6@HeA%fZjn`{iCjK{N{aKZilfA+kiN7s zx}If~2FY|S#dvD{<)hIoRh|wI%%9Il4afSVUTjr~t!7>|zfm>|vFHq&Yrem-H$E^F z1XWNJX;C?8#BcEUu3r0OYuejtTboyF(Oh=?V^yFqb!@p_@wUp?P6eOsHne@1^#p>hrA``f;anVE0WKpZZ@?aABT` zl_-|nxOxbqP>2Rkfg@Ivn=W)3HCjEB!RM%l&FxCeQWdY|I(r?4?8vCHL?*HbV0J;n zI1Fp3--r=!LaWQ7!t07GnEQw#E~$Z6M{vIB%q+Ycf%04?>w{fjw~}}n zNyf^KoQ3&%og}JvhQ&=+6~A$V#|`cLcqTHD=X(n?3tRcBwy=w+q6kd@XYm4OhjPWO z{O#|w*-4`&?T>B?awp}!$PBjA6F^!!(TSM?&d*IxkK=e0gFxM?nPO2t52LE$v3X7` zZ@O?|Db^0XpAVKU>->b~4(WBUkdBYlQ3_oT9f5TmdXKMx&tq6@(eTm%n1M41rAa*s z+UPZEA;qBm98Nbe-7OqImh57t@Yh3f)Zdix?FCDjHoWfgkvlA9ZnVQ04JK5lr*KvCe+0vp)%5+DEcNb;R#HG3yfvo2ht4eLwp6 zXrpK)L%s_e<|M?DZs`<#QIR}J(>fnQnSwEacw|j)&jXFgKxc2i*kVe?F|ZEob?9D_L8tHQF6#%PkG2LKAkGmLrF0IidroIl3H0kD^Cu zZg)2}wSbPR*bC`4W_cd{*S(}0i4QT1_vF;k3#VhW;lyNcDCZ+f#ud=-RBtT5XuxmY{)i#1t& zOZ2jTIq}ekZiqEawQar)=msvMx(rvfKq*4uKpv-!+q$WN+-+(M=azKjzD+=*fY5K( zMCjFnxQh>(8dCDG2N1Io(vYRiw|3MTLO&0Ui4(X_62OzHJ04*|mHI1H6EIlloQH=Q zv9pR|gvYvs*u%~jy)EhA7B9x`x%v$!@nO3UBWoRxD}xZuEVO)MLW5AB75#=%82W&` zozBp0XU7<;=4eqUoUlil?VV6+7BE zS~Uy8K`w?{E3DkfZMa#39S>|`MBDDBuUJ%2ABmGW+he?X3-t-k-MvgktyUT5mf<2o z6)Y5_(4Cafj$-qNIDfrw?%CoZH4xJR@ub zk7B#3i%mo&{vJ$4pguTo`9^uEMjVv@+gxtB?jS(xNjquM&!Wb zg>~5vHA=|U9nkW27j`k&+B{ymp!7Ep$m6NWZ(At}qc}vF0(A$94q?w!oyAgcGzJ~7 zJd~2}Yr!0F#U{&x)x!ImB05DFEqN>3A8*PmX|#t%!=?L=P!#6ivk^$bGr986YQZ(W z+R4Kt9VSR_{h@#bsmQj51`v3#|GNczK8CNY^Rg`F(cM)~ro&mG;kb~CwX?igTWS)x z$d^Qb*ueIT)#RqvIP66}ibZFdLg-J6E^-8+I8sCZ8Xj_5uDC+vf}MazH9zCDNkK&c z`Sg1Lp*O#z2YT}l!zcabnu`i;esT#F>5q{^qveCSpdiN}J8?&PfeYnu&MmptU z76~BLFCYwEiy80c#(GCYdZ&s16^~*gl8w%8NGUGhK@^B&Rfg4GK7|J^Y`S=8tr!nK z%SAh#jxNQm%1mBA8(88HyyBT*ii(_6uG{tFps^9B(wPG!F(Rr& zF}BTA?LmogMkr2AiacM1KI)kvfZ+kDgA6}qzV5LmBTh4Xg%9EhF31oY3wS0WiTc4F z(^W9G4PI{Bz-#V$cT{kME~MHD$UZoPELIX1B<8cSCcWLn6l57aoy+#xIHO>3UL00A z37Avd4LKkS{js`8MbA^!HRTcOFr%4<8}-Bo%OH#`EX+5?7vW_rT7$t0cMFuc;$9jK zVqU=(XHQ}`7GIZ`fFL8wc%UjR=tL|Jcc&mSHg?j=yS5OY9|q#3A2e;DPOl+daLE7aQ={Sy7j6pj_OkJE{1{8wAEJ8dNrw zIVEx@cMslvauV}hT+C%Z62B*plndSy6K9_&nLp!T#VQ@-6wKqW81uWR+IKvCKzltR zpnMc@y3lZ{_o8){Q8u|eD{#_a@hW2QW@&|Nmm3flgRWzeZNREWD~K_0*9?x7%a$sY zYX&QsnUKOuB$}KTiB7Y3qz#tQM?BtokOtQ!gliLXb0^@Hu>O3s0oKw*BW$^t^iNle zv3Vh_$~UW#P2eL*#VVPb-5y|#94AZx-}_D%g<;kJl(S1Oy>zOE^Asm$#s`Yy$11n0 zHlbX~#ybk--MmmgzuInW5tf=tfNwq6%q_811yeP0Ws^`cL-0D%HcVuvr(5uRkhU&Z zXG1Y*DcIYP?BxJAcEU;Mjg^=rLy+z64zD1@&w(eixicFp9mYLatj?CppUvf%^wRcL zQjTmE7f0i?ug6ZN933ybKr~yd-9#b~ELIVWi`DjPj%e!uDn7h&zEx3{6e43vO?-G{ z6No&C)pxtFYf_#I8yU|GKrq#Z1`S^;Sn?w7ue@CAqHZ<(D(f;)mw0%|)jKf$2^X{4 zM`!0`q>DWdR1B#z9!HTOP%$d6P|m<+F>14g&vTJaOSnvvm^k!(axqD*Uuee6k*C)etv_h{C$;+{4yT@u&IGkoxA&#}` zM~_5nq7X3(ml*{JTc_6H#LYR`Dt;nuA%5tRw`F<1NeL=3L4hI%oC;JRCJn=4g!_N; zibMijHFm*t3Th6}AKS}&7YcGz%;a*lU=p&>)Fz1wDdpk?r_`b32Dy~3kzSGYDo@?z z$cSU3Jd;SC(|u)AtlPy@8aI-f$cR{V6O;TSVR_)(o5E8)rZrWMk}6Ktc{UuR##(w$ zI?u?CmC44GxYHG9qU{#0mBT;aS>oF0tb84p+31UliUN-G>KOWb-?lMoJH~x+<0+>5KB2nIt+2#K@ho);UE>%v}n*mREr3Rh5_z6HiO9 z8gSdySmIeb-{QIhohO2(wW+Z;a-Ji%AL6qjcjXW!3`+eLCkPlYCrb#sFXi5>#tXiv;{ z&PA|`!Y7rE&}X#@CRz|5*IP}T zpkj~SXYCoCyo-yMq?2iwk6DA~b9sLNrv*fISg{#_lFM*gy*OT}b1r7H*23Kts`YaT zfIVp+11P;K9PRY8z2AiowzyL^D`e|HA^DHyxR>v&8VMmT!wuw{)Zk4*EPYZu2sOmJZp&F3kqCVq&WEh+pm z?=bJ9<}ROPhsKhWv$$Y=&G0#%URU1^|`O{pc$U;t6a+y zeNc{!4KnJ+DNj9(2_|ggsayJ@`jETHv*r4l0!G3w!{fSO@p;cY<%mq)cLKeX$rb$6 zkk5Fe;F3iz@hZ8z<15HKKT%A;P`VXMn7C9BsZJg1fDcC$&9+wZ*adYoy$I^4z0{b4 zsI{Lb<*5+cs7R%)HlH!L02XG>YZ!1Qw3-{LIg$x{zeVvqf!l z#e@TmHx-og1NRwkvZEDyt7rNCv3UFTITgU1RJNs1)k_38UoF5bZLWiE# zdSsYYHhl~(LMAzei*b`NozySGkfFNIlboSdADfn2B;H!lycEiX4AHwNBxnD)0O3H) zxh8E|tjbx5!Av}wWKt}eQ{rq3LOSm0SLEsmo?5j)^DR@Q^1}Q;(xs6b{N!|n^@4Y4 zLN11tr{e>`XlkD_x)?Gnk?nPk9|R4NZ9E}Y3J*yry%HbdV<;_26gd&2^Q9F?R--3$vD9;$AH|h{i=vfT3#22w5Ukuyf3n!clsY-dWK~iX{^DqFU=|R^fbd&yIsRp$>AY{@n{RKoKMb!i#Lf^lEzV0AJCC6u@?LSl!y zUJZApjb`PZCA)tlM~UicxIiff%AJnb zM&blL@J5o=4V$sb+w;0jGt;1)_~Pt~J9>G^!K7a~x(O9t47ni)wnvdfucpSZ1#y*>N5@a8(Ek*-aDk2csQ>YQ5!d?Ucy4t zaIx53QkSfKOa}IBa)ZHpi!oigY6@1qyce$+)tOKA4$$VqZD2<_e8DF5oigLX-Br4ideZ39Cs?>?~*Qz2yLsl>=9Sa>D>Oa^TPy=n+Q9q;wy+>FFHS>FuH4T>};a zKy1V%t_WB*Y^n3hwt=1YMX$1XT%6^_Hc%U&XYmXxtRiSHqeftfi!4g_w2#Eg_4A=Z zuDTj}02xVR0c<_cU;!T}hej4vvvsT?bG?r_#7XF@ff%YlS%Nf1w=fmG?<*VOONWka z@GV8X*{ERJ;hCPw9}xMxSKnT2;@NI@s>m;Sf1FRqnF0p;*Bc~o65-HumVlk>>w3jy zJh939es!d1^B`E|zI8bV{M7c>2hxLWMISf_vftT#;8tE!dFX}64K8nROBT-Re4vOM zMSerMx{Ml5qsZkV$JW91>K?t1^atwEVkoldYu4vy8VmH4+n<5-7rbqW!6OY!#Jp9d zR-3rP&6D(6kD4dJ*z0PVNoB4qo`1}FV0-LexaR(j5L7qxm_6dLrHozr5Q1v+4fWTo{4$Hr`ht|HBj@YKepYDe8)=XoLV_tdQv zq&OL&V9b-f0Yy?j#^3MA%H%>~g_RZlI&_wMsIZYkhx(dX`k-d`)FnVTP>7+{jj!8O)@gB z&&nGs@+i{QZl>YZ2I~5f<=q^^`*_NVQ;=P%`Q^Jr8xlFYU;`Kd`^Xi#1xnQJ^RJ@9 zem9FVB>{DY@)C$oz0~S2C1&(!5dQ2~`e3zu>VY{le*N=G9UN7mo38K=PxZxRDnKW3wv&Kb=Od zpIu`t~v5AvV3FgmV=Gsz@#l!;c-%XN;o9pX* zhucALQjfc}<0r@GX$mE$4wQgEm2oh)=HXL_j?dI<7^6aa`|4+N9lP&!ppIHo;d6FB zx5jS_FTevJFM@b!Svtk(g2f6^X2oN-+7e;JkQHQou`f9JuGKf&=p$e2gOZKQws_?Y z1zldf`J=q!bmpMD%y$t$s-kJMBrB>7hDCfvdbi0$3-uxbn_fCVheZ$`L_rI@<2=)t zoynfhAcQGg+=14KKKI>vjRlS1n2-1HlvWh{BDbAaE(po*jS-&3Tr!jO13^@ff_Hue_Lm0Y2dKiSnEZE%K9j4cr| ztTBq0Tinh*8FIua3EbNAv>N0`QLzj;s>X?7I=Et4R&Wi+j8yzcdv2_b{Q=8fI?AB- z3tJH<4Y8^Za9|!7nA0>Da|bS@1}z$ByY9gjZFh=~4d0gJXX+E>dj%`NBRSMFv069q zBHL<@*h7Bxtq~L4_t;90zogdrdN_rJ2O~z>`NWmVgogW6%?(Kmbzf>r*t{??<<8V{xM|t@ilfJFnG{ILTPhtKK4b8@N)29UEZ ze#z<1z<%jy#QA-Swkkb~f}e<6_EN>h0p~K<*`?#bv_hoq0=AQRyuf3x>Dj@YW0Ye# zDosNRFC$_);{=w(}s?#d#~vJXS0e$>t77dSjgGx%h`SO7McXc@ocSv2jSx znwLH-i!oJi55PjWZoZAT2a4X?iWf^Lcd5q568upLHRmr^D8^Mg!aK(?-qIvjj$^DN zgB?#IEfeoh4BPW#njtlB)gG(YwM>?I7Plv$c`j~Gq^&olhGf{{iMKA=!c&hml`C9q zizzaJOgcW7`{39?xJZrt3=gHVLUTc$L5fjL%=dTX(N9oAt5_QVT7xRoUZS^MLKz!I zrcF2Pau-_0ijH#%M~yaX7%o8>?HlUz;?#a|-mfe5SYcrO9MV_MIU}<2a&11yKHH(} z@cKpv&Z;wBR4eQeJV7fl-h##Jh!nQL&~J%q=hY0F^rTOatRk03a838II8*?(a9cC< z&zsDtDUqk6=!8Q8HU>V~&nl37(ZWo&F$GEd99(dotX**$UKOsm@rs?T%`0{{m&KLB z71JBr2j|-xN3TA51u3PqD^x(NKKGP$%n9#QGd8FgJ%^%wpzN}^a*P%W!Vr&5RE6oi zh-Az}F*E4PWX39TX42Tyq4&NwksbabYLe%>g(Y6Wyh5ZcUI2jGqUly55UyM&^VyO) z$ey2<&8!#5AbAKF#80v#i(4HJgoX4L%gKd$3pWHhXE%0miPtDKrIaD(O^lh&C9wlM zOo*3g>@=)TTxExEAMZ==jLYnEJsC>o->Lco7V?_f8$+pAr5U<)6d+bA*4coB@qRxJFU+6M!85#shAg; zsxxwBUgWqGo)(7oFqzOBZ{A%1P)X3%@) zj9rX^vmtmJE7%YfxjD0w_AokPlK$*vWLblB`{!*g(4(wYJ3s9Facd!2UI&%yQpM^8 zR;MiM`6tC?MPmxa8Q3Z!N)^#tCPw9Yo)C9}RB_?B6EtOF7RVinKFfZdhsDMmFsR%X z(6(#kMf+*x&ptrfH`BsRRK%C?*d9d-CQrzVvK5d3(VwK4K-z6|5@nq1XwH0@Y?aBS z7)sV-PJ`^iY7%I~M{FJ^SglOJ?c}OXW~w@dM>VWGY0eczu|9BNZ8SVN=>V`75Cg}R zEp7>pQY*?~S*mP|C>TptWke#eif2gsDHVLNf#{_ z8!M-X9-YxPfn;MLB5t9`Oo;BBNqn816wW4wtRzGd=JJhO)e7bVg+Z(;DoI6yk>HDO zv~38%ltYv@ieg=y#5o7ts~XhH=DxGcZ>60Oww;Wqf?PQ|rGuI4z_~tD9|)&Av@!63 zP^%N^S!vb>{Fj__m@67TV#MAH0wJs&9Ho4HxW@!EJGK;?gc}d<3>#@1f~|uSMD_hC z%T!GY%{^$MjAfUrqJ!8;@AqV^mXUje=d&rZ56xPpr3vm2~4(rg7Zy z!L=xz<(?HFdbRpQjJ{wOk$2KllDeqCuHXZew7$>r1$U=B$JGBKk=Yb*?vfCcb|ZRV z^|Qo>FaS8ibr~S2{FNgpN4O5j2at`R(@qg|;%vfQP#-PdH;@^MPF`NSC%IFI!n_Gr zmFj+#JMyrL+YZ(PwRE6IVz_$6&6?V9tyX&y{(o?7|Dg=8(D)F;F^vy19Jk*YPH6n0 z2;^TAf1ii{34>u<<3kK@()cjLJ^P(uSK|TWg-E~1eq;DE8Xsc#28|Che53u&@J$*I z7;i!Pt@azkKhpRR!w+kGnBhn4cZMI;c)<7s(x0^77=BjcLku7EAnD_KIK-x(g(c))lr(qr};!#Rx)F&OeHsrKA42-W z_8Y^$*7y*^&uM&^;pgplhX17TfPuwTdl3HT8e{lKjSn$=lE#M_KG}X}_#GM#7>AG^ zvELYeuf~TMK2PJr4Cn24hAoW;j29riY`-zw(fAO<7ioN$;fw8ehCin9fbnvqUtzy7 z{3VSKF?_4WhZ(-jerNc0jR%Z(BmExxjp3hbe2C#EH9pMnUi+Ql-)KBw{3Ftzv)>s0 zo5qJ2KI$R5))_up<3kJ|qw#<-jP#T2H-=Yee2C$g#)lb>+wTk~G#)UTNI%bhW7yXC z5W|}^KFn~>erMR#c))le(l4^#82*gLhZw#=^FvU8Xsb~tnp!nEA~6XRgL4X{@X?DCi{)yk7|5~ z;VU#g%k)f{{l@UOG(N=eJsKZo_+I;+;rld>zxwY(h<(_8WBAt^ zA7c19jSn;Yy#3DbpEQoY_U{`o{`g<;2f{~ce2C$bG(ODm$@V+L@6dR_IE3_w{l@Tn zH9o}fc^V&PIB&l*Y-v1Tya4HC`;Fm_#)lZbNaMo{Uu?fK{4tFOjF%(*3j2-WFKK*; z;afF6%G#-g4F6o?LkvHu@nMGd+V2eiM&kkFACdl?{l@U$G(N=e zQ5PBhK=^2l4>5d<#skJM(oeGA7+#_AA%nf zOXRsoaMBsx^DN8oMZuCkg#RB@YcjYN-#nNtva) z5!@?LQbY3Zb@=GlvLu*T)nLgG;`Vxl1f_Udk+a zeSeGGn&dW_yCJ#J8s=DiEH}75Rxqq!7(8F1OD{v2+XQ0N_g%<&wtmRm*GX>FcN{rc zef$EQB8b6Nv#!$$k-_UFy2R#c@u+$qIX|W!GWS0U@TmIb$g!#)xIR|!76rrLQxaWb znLiYWQQsdR=g;&*=Dwq>?_G^n ztiC?$g;1ZXWf`28=n_Bts(^_~rjhe~`XO__P*!ppIaUeFRTd?o{-l;=@NS7N@xyPC z)f<)kEOOqYA2Ro1$&HzM3v#Ryma9}ks2|d@42B*i!^ICTFDv;=8ogQix(51%Vwq9;#5&SCwKxkn{8DtRt)tP+;1R6?jP(6S7EUZP9< za7n;KC7a0kA^niK(~=vN{3LR$5|*n}La4u@Wf^=zqD%a6Q@}(e??BG`^h4&ZNN!Z} zA>>#kELW+7Q2$ZOGI-j>GAI1-#R4WO`B&tAljJs;dtP#*lE)&)Dq*=wC4_plmSwOj z(ItNP^8zL+nM6)YKVe#PKr z5{)KZkL0%II@ljUvI2vJeo?<-@JWdVjN6fXkLEgz4!Z`WLh@jfIgFj(ks^eYCJJ+kP_XYtcT@>BHXQY0%dSm>yJ#o&TOqaEW&p441# z#|DxW7%cP>{ffZ{BpNVYjpVOuuEY2PBr7mj=r8pv22Z@C=*y?@)4yr1!+0dVsK8*M zE2LnP!Jb5;9nVH`UUMDB3X&BVEc9aiiou^qG+?|8$v11R!}x6^D==8-zw1{F9{Z@G zFQ3FuU({TOF@!HFFj(kmQn1P3j6|ayN02 z+Sjib{EkEe#tV`BIn8w#{{_hk3>NyY`W1tVA5-+@qxk7Fn(HvWjAR7{3q4*6HW~at z3F9&(pQE`BV+P3z3>MnbuNb^VqS2QNNWNTi9meaCtiWKQck5RS9`Y?kUp|1J{zh{h z#y=rhfx$wLk%CPIOC^jaB6(DE9mW)r6&NhEu3s_uRf$Gl_KlVf-DE6&Nh^@PEfaXfl|SXuxT1!}wk#D==87tzR*CqeKJ7 z86;nqz<3mrPm`aT z4&!PhD==8-`T7-u|18lZFR+H>56Mpf<3Ax;fx$w*re87m2Z=5@jNd`>zsXMl<9{Jp zfx$vw)vp+geQU8!FGli7@>9SVL9zmag`THhG5A@DE_pkC0LgvL^`HJDk`)*%^vn7c zga0GZfbkY2|EuOYjQ@dT1qKWKvwp?k+Q$}sc?gn^m!G09mm^t$!9v&RR}6kyqS1~e zB)2rz+wsFlR$#EuFX&ecJ|WS7@vBI_TXP-8hmfqmV4;81uNWMDT+x?*#ZQlspQ10{ zfn)^+3r*-(3~rHVv||p*bq5yL;6{l?I}Rgxo#r}>8<4EPV4<7!D+ce9Xu!Ay$zRZ1 zhw&RoR$#Eu2lXokmwbECmyhG8f7D!uQNtG%7%Vg_1)B_3B^vGcE+i*3*I~4ftiWKQ zu71Vf4v7YgA4T$3&2<>JAz6XJLU-y{3?BBxqAwr8PoLIYhw&vOD==8-aZ<3!;QLD$ zPet;(HP>NGBUypLLYw*(gWr;9^yNH~Kcl%0N$ z9?1#}7J9T4Y%*AsXtd+ok-SoKYxb{>WCaEbb?`rEDF(kH(SUIil0T`rHT(DTNLFC5 z(C^}Zz+mt%5)BxCjO72++?xISzerYKu+TR>NnkLTm1w~DRwSRLxenudkgUL9p&!(* z7`#EE0pms_U!=JX;}u9&V6f0z^(zKnkZ8bo7m|OWxenuRk*vUAp@%+M`oiFtL<7bp zNPeg0I*hB3tiWKQ>-8%Jua#)PSVi(?&2<Kic82r6N1I8Uleo%8A#$O>> zfx$vw(XSXh_dD3FfblRShvla@qYfcifx$ve{ffb>BpNWjAIYxfdOLm$$qEb>dXs*| z;68~4jNd}?PR(@~cOzMW!9w@zR}8LsO3{}GBl$S_Df;qsBr7mjsG(mm_$i4-I~I}L z)Ld`Je?YPVgN0tFUorS=i3W^cLGq6@*J1oQk`)*%^jZCi!RS+qzWfV*dbIo$eR(pH z6&Nfuu3s_uafwDdW|8b@uD9a=$qEb>dbNJV;A0XE7;ixGcQw~x{3((Z7%cQD{ffae zE-U)-1^o0)@>BHX+mNilV4-L0R}6kcqS20HNdBPadONm}tiWKQm+4mwJ}l9I@meI` zs<{s1JxEqyu+S&~dg6&Nh^Oexr8 zuq)AM$2CYcHP>Oh0Lcmr7J8w6#o&Ds4H!R#dg&r#fn+(3Mgz*$4pRKtL z;{=iw7%X%~zhdy45{o9&1$qEb>`a}Ing6}H&au;$wsksj0b4XTTJP3sz zB?X%d7D^aTK=O#@I*dsqD==7SO}}FBUnClR*+udvG}mGL9Fi3nEcAB$ioxe48ZiC{ z$-6bzVcd&k1qKU!Rlj1OxdG!b&x8yG|AT5|pt;vOxKBI_qlN!zGQ;q1H9o}fe{1~V z4F5^vmoR*5OTItE@EsbzgyC;%{NW7m(D)F;cWeBi4Bw~mLk!=q@k3?6w%`o}hEnds`Lko(X2A#=Y)AV$^yhMeB2`_#t@o+ym!It|5(9_f?@D#i7xTOb%7Z5Z6oK0^+V=w)9d?FFg_w|w+ z_2IRnKJ^hqr9M`$tza0uL843i@ZAD2>bn^^FVPQ~dxzvkeXl@HZ~q9QQXeaLtAb(h zw-R0Ahj$CasPA3K`G9`N+z&`@)b|(2>8+0-D)q5~FDMuW-#IGt#}EHbAVz&PSG1(QZNj@BGKs7`;q*F=K9M2 zdnCUu$OQF>!}sy}%3IKV{4a&T`$^8NBtfV&&X!Qfc_el5V@=vBo+c`%ZXlb-_IWk?PN$MREJ zfWa*iUGmn=Be|iu{?l0`2ZLkzTeSd#yCoXn-iYMyX|9926Uo8gSpGgOz~Hj0i_U%? zKRrx-iq2k&6Wj^to)EPsm@U~s2I1KcZ-{8i0$aCaa% z7#z#rtpylddQH*Ud-2nkG}pmhgf9kzWBJPjMw7w1M5A@1NH#Rr!7U*<7#z!=)dCFe zkZ6E=F_N#*TnBd>zZ#71kb9>VU~tj3MQ1;PpFXX*4(@&=2ZLkzO9e)g!BPqC$w*$K zxejg$$-&@Qeq9SNxJ{zb**zp*qPY(4RwM_5WBEI@0E7D_8sOfGj4{ejYzPOn!>aUW(*ka4dgR z3otk<(P-T`k|#CSTeptnU~nvdixyyTr$htXE0O$F&2?~hAUPNu%ipa97+m^2MQ88D zPhZkp2X_&^7z~c(FB2F|2I~@y){P?B&|C+%gydjwEPqxDFt|ga0q(^}zD9E$+->}7 zFup_XomzmwMc-R=_9OV|)0*qx?niPkIF`RuU^E#lmEfL?;HHoq436d3wE%>)>uhaxgfSze5W!xL=|H?!8EUTyq`VeMk-l$MP3Fmjl*hFeT9d_h=-a zuDLb)cNEFN;8=bM{{tL@TO}IcR*<|PKgA}y1`9aBoBM{hI6G?nZJjIF`R(3otl3RV5!X!Ou%HS~rj6hUR+f<M&9LxWT7GUsYi3YfLAo*vSn}egS z>Z001PRxB{?U(%bkKwby)e!E*$7IGCTqn_}=29e|sku2gtLFRiYOcj+gR3Fj8x#(gTb-yR7_j^%IE0t{}KXms{0l0U7v4(_!`4hF~a@6-YezAVuI zcPEm6rMV97Ge`~w$MP3XbHJJmu9IkhyA;W1YOaI37RkZjSpEhrz~HqK4RGs7{;=jc zxR)Y17#z#rt_2u;Mxp`k4kSOQxeo3gBnN|I`7dh$2G`CM3*{mtpCCU43b-7}!Qfc_ zIxWE9r4o(SEg`w3x!$^)ksJ(;7~CV#0CyXb@6ucccNda_!Lj^jv;c$4XN%6> zkDnePKSgIBkK|x*EPt&QU~scUqjghA{($Cs>uyAHFgTWfsTN>xmqY{Htw{cc<~q1{ zA~_fw%ip5~7(9Ni=y9Ehqqz?51|$cAWBHr4 z0E2f*G{D`0|V$5J>0CP8f`g_fFa9>7pFgTWfyufHOxS<4h z8IsS@TnBd@l7qpq{Eb?G!R-=_&Ynf`r#08Xy%x#A;8^~hT7bcqB^u!FMDnjR*TH=T z$-&@Q{^I9xz?uxMlW2gu6v=05u7kT4$-&@Q{st|;;I$GBaO+6^u;x0rmm)bB9LwLX z1sHrrq5BtNLR4(=W#2ZLkzFKYn?*UlFU z$Z$>LLkv3_e>lUg#xG&`8#k+sAH%n3{1S$5)%e31zD?sp41ZVS4`ulK8b8GFJsQ7+ z;d?dyaE9;G_z=TC)%Zgh&i{wfwvcWA5&Vx$#(-79_JF}15^eqt0s_IWe~f_TGvkCG zLz!1;aRzrvbcrASFDVnV@Jq<~P5qF$e<8Uszjq*~w`zi@)W-_$Rxk`62Kbm8e)ul} zG3vV)xnI%`nfrH=8}%`#w?2ZX)W-@QCzUiAOiOg>(jS7^3jWWQ#Z!@UH9~$&OFT|Eo5p)g=Vs(VzP(OFI1iu?4bj+xb>Y=9kypy5) z@;nyfdD5+DG-q8TN5Z{Ev)oZVi1p`BVAq=(Q>|GzdIXfJqkmx@2RtGh!djzQ7PdD> z#QO6j*kV&-swWrDTMnh_JX#dpj{~;IhOmE`Jx><)GDqa}XFJ%>Dx})oRDZO4qp#{b zS`^LWfWvG^Oz2@W%fg}N=<`}ZIZcIBuQJu=b%0WJ9xaOIaloHsL->o)EDP^8N1vC2 zGDd||N1N*N?t)Tv9xaOIaln(ZA#607W#M#l^m)%hsZ=4=2Tb*OtDsb!M~k9)9I#zB zgeE=g^<&|4=IHZ&gj&PYnCcu;eO?_XRp-&7XdVZ&k`1As(JTvBnWN7;1xiO1Qhmu( zpNId;w_lh?i=ufPkdqDJF{4=)eqxS3ZzPm^RY>&%Q+?k3P^#XK7De+o;91!azBHO; z;g9C%^HxAvt3s;Zn(FgDfKqiHEsExGz>l&a9M#iaKNi-u&+$I56w3al##Bp9^?3(D zsXC7qMe{h|6xk4NG3rCkM%Y_w__)6s;s4}Jt9#T-SZXxO6`B>^WHOY;RY>(fQ~f4$ zp;Vnmi=vxwz-rkLYF}VaF0B0#Qr}4psS;HDPtLSzY<4lBo6+pazJfolBcYt6LaH4K zZ*m5dU!KR}yf5Dz&{sBuNk+50vI>3PHBg4DkZS9~dF4>5&I`Av>n!yWwi$Kj`3P4^ z4GrrNrrWW9ml_CdE-ZNZ)ettYl)tXc5T@I)zr7j=?#qa+p&L}8VJoUD!A-Uq-t2oFIyjBx*hx5sDUulsBhN}VNa=HyZ#8% z?bu(g212D#x0`_Q38}$uA;NS!_ODk1q5j1Mm)(NY4^o3&DJs(K*x$@NVnTnTzFljC zXG;xsS%m3!>>sKI!a}2NHyYt&sljd*!gM?KSE_+f+N(;aI7`ZW6+DJN7SB17Vj@w_A?zeW}528^Uxu z_LpA52No0B8+E(72%Ad{c5M)*+p#~Z2ErtxZg(ldVN!!#Il^>1_RmrSVVhC6n~!j% z)L^$BVY(grcd3EUrgy;`r5eHpmhw*l%@C&BvA?|<2<1k7yRHZaNG(bJ3`Ll3$Not; zcqs_$jk?`*go~t>B!4OqrrWW98xHIU&H5Bvb|+FbEajK2k1*Yi{cY4h7;4nFYlpC> z)RN>+e}w6F>@QaXq0*?^O+fgB)L^#|VY(gr*QVLSXE zsQ!QK*gr`Pg!M+^Q-H!e1)j+6!dBJ73AoYXPU{{KYbUXGp zGmn_i->7fb8sXVegIyM3x*hw6s)4Z3sN0Q3I9Y12n}smlj{TKtAe8>8;IeCx`a){3 z+l4UQj{Wt`BPL`E?V2JyL29sTk1*Yi{r%NIm}S&2I|Siasljd%!gM?KFH{3zmr=J{ zj_`e{!EPJEbUXH!4&Vce3GI!#U0sCDr3Sk;2-EG@pH%~4l2Nz26yY$b!LA%(x*hvx zse!P~sN2m)xKe7cTaPf^j{UpTKxlJC!5gI-!UmS|PXWykrrWWUPr+E|MDTDiNmJv45Ky2+gi6xa>}(YFNrITOVP%9sAp;fiTpl zZ`TfCPpM(M{s`0U*k7&&LZwl+n}F~Msljd`!gM?KuU7-1{#6B+-GbB)QiEM7D$?!P z-^@H>LVu&aU2BAAOAU5egz0wdAF2kzLZfas8sTKA!EP49bUXG}s)0~?b-`uVBK3vT zV7Cilx*hxLn@3E@7TPsMc!Jbm*B)WI9sB#MfiTOcUv>z>u~LKGB!ua9>|dw`!Y-q3 zw;bX7QiI(#gz0wdFCEAS78BYVb-TIse#bunu0e~CfsF`>Uv->x;nv!w>REW&g<_77D9VWCmC8;x+X)L=IYVY(grE7d?K9a3=FwMcy- zHQ4P!m~O}Z`sNW6vW0d{5uPA5*tJKPZpZ%qY9P!q>X#jYaIDl|Hwj_79s3umfw0S{ z+bu`|d`2Lj9oym)(NY4^o3&DJs(K z*x$@NVnTnT+0fe>;n|k*XO~5oZpZ$iY9K5$nhkcN5l*(0+s#6lZpZ#gH4sX#FSzVl zq`r_EChS6(ZpZ%m<`EOJg?3F5o**^YwMUq4$Nv6mAj~qF4ZTAUj+GixlMtrcv45c& z2)m5B-ExHQOAU705T@I)zw`z^u$a)^sN2;=*j#F`YlAS|j{R9R5GEOQyGs!clN#*G z5vJR*f0h~u+l;#1e1t2d2D|kL)9u*5OAUlJ!wTLg)ettYl)vwqAxyVpe|t3$%8mMV zT@enD8nzpXFx`&*lhi<1Z`AFkBU~gk*i|A-w`2b{H4vKJSa8{$NY${EU$#ENbUXI9 zQ3GL!QQxi|!k$vYc9$Ydw`2csH4ykag?YcSb|=DVQiEOZoAH~BIQE;2z<%Np@iOt6 z#B0TC6CazV-zX%`7OzcwQoJVdDe;K-oOp)#ck!0QW#YAo%f)LFSBOW%SH&~Lt}}{$ zlM%ZN!@&m`fur!74urWz<9Ps@Ao~)4{dvC%aUXgfRXgEJqgfViv>tyI=0RDiLaOhW z>aXvsP^ylmMbSJC_)#{5Q*YrmSr-1s9DQCXl!Hu-seWZ@!8~3J|4CiFZun2?!lV#~ zSC$S{_u{Ccy|~DE8b|oE(QN(c_>D)LytmJVP_9rR)k977y*Mw~s|oiCldzY?VXq;m z`{li8ir0rzi&o@LGc}p;h0!c0sK+1OTqrN9kZR4s6*)Rt@#wH34X~ocVRDGW%CDfW z>dK)y?=8i}e$aSA+u`>7SlHe+@jds3vY)9j)ss#2N6C4~o~LlnFbR8E9QHa84psN! zsG{e`MLKI7VWQD23wzmQ-|GS>15`-0yQ#hx=Oufc%e}%R>}7G-YcT4n?!{3>dvTE& z8b|otXqJUTZL;t6S13zVNcAdHeJ{>S_Ug&K!X)fvaoDR8byfG`sG_~N$iFp?aLNdK z9a(s{P4>MqQ0kc)Qyp!p@5On^UYB#PFbR8E9QOJh9IEccQAK-kkxm*%m|!%^!s#~I z_v#7dPb#GPfT_M0=Ouex$GyTN>}7G-YY^(H?!{3>dvTHJ8b|odXqJV~*<{~q4wM&? zLMU@g^}RSR*=r2<3X`yx#bK|PQCD>@jw;%Vi~LLD2q%xU*O7&*Y_jiF9ZFqOW2!Hi z>U(isvR4K73X`yx#bK|8aHzT$M-}bGMLKF6p~7gEg`e1D->V0d%T-AA15uK&4 zCSfm&OOih?p|0v)996W}HWco{!Cr)uM%nAg!rJyV-S?^nrH-jF)lyS^ub0r9?Dco< z6((UXi%XI}4d769FODkOi;JAAafFAB`Z8q*2TIL%PBvJ{4T2{&usGD+gtq@_1CD%J zGYC74W@+23@X0KK@~R4{9%!mR8O}@gdbemVi^E>4QCD>@jw*UGT%_7)d&LOdjrx)msB4Y3|7in`?57!oCyZuK_EmkEK~P4hkZOm*C&PKkUf&h% zWpUW+cGUgyUNp`79)XK2(m29yqgh^8g}&FzP~K4?)z*c3abB|5Ufq-DMFTu9i^EZ!a27UJhTkL z-&x8(SI{mQb5{PCKcFmq41F(<5#cGLew+RXZ;={qL%U>5hx7Apb0_lYW9a+5j0m;L z3vTl&QXfkVV`!I*xj28!SIDQ2p>HGejtPSb#~hCEbg5ws?UFG=^2c;WS^60Ij+7B$ ztx{emA4A_QG9ny%d%;87j?~_k^0xr(k}(hEkEx5Y^fB~3 zQ$~bIM*TK1!po(G+t4l1yG9ok@TksZm522)84DyJXDr{4oQOPai|ysWKw$H0ooXLbyU|7(=^c%)9wxRwJK2hQ8JA;ggC9-HrN~ zS_lu58phBr8S_>CnARvuA4A`MG9oNA>SG2Wyj^M-L%U?mUS)Zo)BcQn`WX6F%82mW zaRqOIwMcy-HH@KMGNyk1m|e)HkD>1$%sVFBSUBcbgy%{PV`!I*IU;{d50s^kq3@kC zB79`jAKD~@PfHDBXqSvREq}~nJmy5ylzy+gyNfu+(rH+9hMI$R9Ht`SdaLogyQ`Mx#DvHo|36!yK z-H!bm)j()eQE=HWsaPrwcC`?u+p)ie8VCc8`gSKG>>@ST^+K3#$Nu4JAS^NJc6TD2 zCNQ;)9u*5L=A-9M&0f;gqx)XyX^?m?bu&yA|F^x=xo&O8X{~ZHQ2R9 zm~O}ZUTPprG3s_#ARHw%*o{M&ZpZ#PY9MSk>UN6}u8|t-HX=;7WB+b75ZeB^;EnQY zgiS2v9~CVSrrWW?1X7HxOaE9s9?rfw0P`+dYVIp44Es z1Yx=z`!}kA&}dS@Wxu3iDZgwjgz0wdZ=nXlK%?2P%83ZOSjz2sAxyVp|8O-BmKe zk{ayVB22eqe=juNb^{Tn+p&L~8VIY5y4`~a z=SdBAOAw~pv45i)2#x+yaM>@ZSjsP33t_q)`&+1iFwm%PcOt?rQp0w=5T@I)f4CY5 zON_eRod~B%4R&)7rrWW9l^O`O9xAx(2T1LZ8tir>Ot)iyBlCy}y$bCPM|ir_VAmO8 zx*hums(~=as9*L*gcVYQ-4ulBcI;oG2EuNmZuc6(%~FHic7*A6?637OA6QK2Y}D-< zB5Wl!*tJENZpZ#!Y9LH8>ULKk93?f_jYF7j$No8LAZ$14c8d|Nks9naB22eq|86x9 z+D<8Wqx>3S6HEC=MGJ)KcI@x02EsU_zTE`~2TKjx4M&)6$Nnj5AZ#@1cC!&KlN#(+ zAxyVp|8_MHTHs#|^M0-DN2Kal$}igpVY(gr+p2*u+^BDN4#GZC!*&A^rrWW9oEiwL zjJn-}2R`R!?6!u3Ia#rw-E^M7>(BfXoBn~0QTqoy22RrOjJ9e(rA{2yRFAxg-4*w zQ6bguP4(AzA(X14X;Czf1J=uiP-7;y$+GZwD~*PGZGrlO3aQpK)#p*EI*%4b^EjY^ z4T%XIHLnc{I~UG749c-8q8#y{K^Bawt{j(W2;n9I!<;g#912 z*N=t6&C%y=hx)S$spd@e`|XXss`F@3G>-!gvmr5|htVtxCz+$qYX#*r6;i$1RG-%Y zO4WI^D4NFsf07O1FGjO0e99bsUJl9_6;hpUs?WO%O4WI^D4NFsPs)a{(P);1%gxc} zJqx8$g;bw2)#t5(Qgt3Jiso^^cG(b`%(B;yh3}c8&-)Q-4O3&Pt4#HIb)Zz8M~k9) z9MDQOgnmY|EZlC6KJOGL9aTv66H|R&cPLfo(V}P`2jpZ!c+6;)g&F%C=<`NGxmSf$ ze=MALKa{HTXi+qe1D=%);Y*`g7B(!Lw*tyq6;iEjs^9MeC{^dtqG%om{3sj3QIFZ{ z$HJE8==UpyvcIV@)n=ypyn~=rokxqJc^q(xYzVg)^&w{?>@78X3cniR|Kv=od(=x< zYBb9g+S{%^WHOY;RY>(@Q~f4$p;Vnmi=vxwz-rkLYCmpIF0B0#Qr}4psS;HDPtLSz zY<4lBo6+n=zJlN6NGK<%km{cbZ*m5dU!KR}yf5Dz&{sBuNk+50vI>3PHBg4DkZRY$ zdF4>5&I`Av>n!yWwi$Kj`3P4^4GrrNrrWW9ml_Cdo+x?#qa+p&L}8VJp17hHBHQZ+2)m#vR5 z-H!cj)Ib<&)VFJgu&30pU4Mk>cI+=#1EJEW+f6|Dgw$ZS5MjC<``4?1Q2)t-%WgsH z2dTlX6cy=q>~CfsF`>Uv->x;nv!w>REW&g<_77D9VWCmC8;x+X)L=IYVY(grE7d?K zeX8KHYmxdwYOvddFx`&*_01zDWDD(@B0NEAuxpPn-H!eJ)j*hK)Gs>(;aI7`ZW6+D zJN7SB17Vj@w_A?zeW}528^Uxu_Ln}*2No0B8+E(72%Ad{c5M)*+p#~Z2ErtxZg(ld zVN!!#Il^>1_RmrSVVhC6n~!j%)L^$BVY(grcd3EUW=_Eyr5eHpmhw*l%@C&BvA?|< z2<1k7yRHZaNDbQ!MVM~K{z+;etT*a*(-AI`8tf_&rrWW9n;Hns{#tO^ok-QNlwY&0)9u)wRRdv?QMbDk z;V`Met{h>y9s6ggfw0Y}+s#L~QfjbUk1*Yi{kzmaXtSW;jZzI^153rht{K8~JNCC% z1EJigZ`T#!0I9)lD8h6*_D@m+VZBken~rdi)L>VMFx`&*+tfg4_DsQLcOq58QhwR` z2-EG@-$o6Dp+UN_MPL>+%W+66|dw`!Y-rPV7DCM`<8OMZ3xrt*kAfAA6QK2Y&09}>LP3|HKf`gOt)iyFEtRR z7?8YHXw`2btH4wHNb-Tp~*GLU^8xf}4v46K32yLG$c%%FpVG~RFvulAc z-H!d8)j$|$)VI3;;b5s@yWt4a?bts>4TOzG-EKC*Wm1FPDun5F?BA{iLW@NOm;Di` zI+pUwHbR(g$NsizAPhI^+ns~3kJPZ;K!oXb>>sBF!YZR~_aMS~QiI(Rgz0wd->3#c zqs0Z6{gR5M{IazWrrWW--EM^GcI2~bjtp-Bd7Yg1ezed=^QvOlV z0%5ux`#Y+Zq&Cs2VoznVY`6{)9u(lP7Q=rM&0f~g!7~ZyCn$I?byFj z4TMH77F_mADwgug)+ntE8i`1}PFNEoK>>sWM!V;rycPGMWQiI(b zgz0wdU!?{@t)&H*{Q#*QQiI)Ygz0wdZ)6@Zp_ftL?r?;sOD#$MbVitN$Nqsh_>4lB zW7O?#L|7rUB>6K1VY(grm*BvTu-mBHy@qhJ)RN@Sc7*A6?60-V>Z2@u41GJui146MzfE_9S4s`H zpc17}_OchUJfW3HkIf^xY*RLWjzNhgJ9v(08$n2sK|RxJ@Ne8>EIYv`fa!%OCS4^66vf zd!Tv8gn@-){($gQsbLK5k})slkLifA^fB}uE+fKfqyEtDL^w@q7(=^c%$xaR<{+Ow zhQ6C*L}-n#BzeDY_!UysE#+?k+9hK?%pX%5W$9z++fGJ=@kaeNoe^FpHQa`F$(S$l z#|%V1eGGjck`aNw$C!7U#}U3LHH@KMGUi|TV@AG)UyH)wZ&eZpeT)ZDlG|kD1_Ts{ zZ*EG2;5ZxAAL7&~ss2%|8YQJITRg&$b)_X09T|txlGpK@gE-YnDlQ^k2*15b&L5oE zf`-b*P+Q{QTOh(^M$1@upY@c5!jqw#uR^Njruu6~B^km#?vyu#uGguTFxzMu3+I@P z4;ckzyb7t#G}VVZ2qhW9zM>&?U94WhH%7}?SZOvsq!P+H6;gfPR3Gv&lw=6|iiXhj zzv?9%`v&h>wh@K9%*KcO21-LyW2#@7>O&5Nk~f4EcwDq7n#TcW%7*aun>LS&si%xR z{p@M`=op2UsE38`;NaB_uj2qH$>?90Hw@}n^%9;pnq^^48{!{W_d%JdLaNnF^&w9| zNrtd*wyEdO0~Fnl1KyAg;lD<+>}hH}KJPs!pQ(`QZ%y@i-#|&`u`hid2kdJPF($M# znq|-N=IHZ&2jy@TQf*>P>;Wne@0=l1(n%W_)A-G>_O%j6S^ABvS+0A z_!b;{q6!Ju8!cnubygS?)Z<&ULs7B?mGmt*_EK|<3HKY#vS*x``xYEKLWP9qjh3-+ zj1|TN_4pRIqbS*eO8OQY`F#)P>>v-41-Lf?X8A5bA-ozXHDK4XqCK|Q|3 zR1{U+q9pmlSxe0(Cj8TAcF!y0qd9AX3JDEY+iT6jM{w`}2zoVr^rt9HMknKJz~0sy z6HYbiL+IK>DxsfIw>uhPksbTbv#OXd)~MUD|4ONZIY!-X7{Veu_D{B|nDDkyw`2d` zq!RvZ)a_OvEV5(&R;!8$2d&|Qay$0_S1O^MscyFq!Xi8NA7xcB;c}yH$NsaW67DwY zc4Y{Q?AU+3RmFsPM%|A66QvT?8+E&B2#f64zs#y)!hejq9s4&(B{W`ZZ=dk4_yyG)a^zfEV5(&BUTj? z-Z$!Y?Ekw|!fvB(w-RBI9s9qqs+e%d+XZhF_U~<}n9#wf+tou@WXJwvtSTm4ZPd48 z|9Mgg6O6ju#R!Y+*nf*v#e`>#x*hu`OC@|{)a@QaSY*fkSF9>Fc&Fg9?B6Pt(9Be~ z+ksS(-Cn4uV^uNXT%*1n`;U@J7-ZD#PC{5@$NmegDkj`#)a}@Ry;QI75_V=->nD7^)*1TPzh5 zmKt@tyAT%HvHwY{iV2?@%?3O6zhbGF@auOA-YDykDzan$Kh;1u+8VOKj{S8k6%)D} zEeqtz z$d3JQTUAWh=e>eA3j4p2N@#6rS+M&VsUkb}A7oWAq0Fdn$Nm$f5^gr?cK?U4$d3J& zTUAV$X4LK2KSnB{(x}^2AS|+D|2(UT3I8zacI~`s$#-Qqi)CkC#4d$ z8+E%y2#f64|GrhlgnAzoyiwTyPpO3CO?A8K2#f64e~4AZgo};(cI-b@Dq*xyx9fzk z$d3J2TUAVW%&6P3f2>r(8%EvkeuPDK?0?p(V!{riZpZ$&r4s6YSnx*Kj8u`G^;=cE z7vLnLZpZ$Eq!M}?_3e&8SY*fkbFC^S+-B76*nhcH!fc~%cOAkaJNDmaRWac$qi)Ck zc~S}A8+E%E5f<68|6{9)2@O6fc%!iYKT-*8O?A5(2#f64-`uKVLSLi49sAFcO1Q(Q z+jT=&WXJw%ttuuwZPe}9f3H-+TBC0FFv21`_P=0NG2vfE-H!e5OC=n*q2P`38B#@d z?EjTj#e~z1x*huukxJ-q)VFJeu*i=6U92i5+-215*nhQD!d#3@J6wIOT~Ku&NS+F`ywo|WB<`s6%z&+_3hYy zu2jM}qi)v|VUZpChgnrjSYXuc*ngi?!h1&DZU(|4JNB=zs+jPzQMY6N$5IJRKQ4Hq ze2r9*9sBpOs+b_v?bzR3DnY7mw|Wykec|w*I*2E3Hr|+cl6WS3iQfxxDGq)}K{(E+ zJMBRCE*z+YV@&lePD6MG4(AYOi#H}dndHNq!H9?Az=`mfQJ>QXVSlNF8Ag51T!ag7 zIEUD9i|#}Gow(m;GxTjZm_s-Ka^8Qrx(2EBQVI1;^*N0Z9+LPG%f%ZL?@02*nMt1b zXp#^2?1;EC4(1bj8qMAgxLaAm!^(!93la8~N*H6*pUqr^3vlfAz^5C>VpQAYh~e2${8)kCOls&91~!ZUE}wFf>S-k3Ny z$rIm5^29fjeAwzL!~=0KpD@&Db~fM{WeG1U8+wK#93z!5%cyU)8sXbG+=_V2Cwf-I zg^V9e9SbXD`I1IG95? z&Zy7Xf$m*6PzlGF>T^y*cm|HW_Q2WVjfqbt`7mcN;-NTjB0Of)=k!6?Un*gSQJ*sx z;XEA9AubS)h+l1E{eyPj46&YgMC|yv)+NTqa~a}gNj}W~2Wr2@!8HiK zfs8k0CqQ?jG2vomL(gaw&R0)Jv9Goo2*(vRe2?NE)IgBx*BFH2!8m+1h}Vio#HYT{ zHHdSK=Q6~XlYE$eF5*r&xCY@$quHkc&nQcHLD|r=1^#uVh7|h-DMh&7sJ|NB5%!cy zkm}c1jno<(UW53yctouE4_$*;+juTRJS@qF`A>d{Z!B?e4Z`b2v-_ZGKOAHU2O0IP z+M#HOdV&r6Rx3sLmr-wc2H_&91gUb*uLk6lCETKH=$Q`xwK(VrDfYEg1EH+2VLyZoq!Oh1HO3=Vfx~MMCyGbJ zH@?<2h^vj~GQ>}le3*YF;;V7665%eR**5|2C`;I&Z0M_Mmp8J`221CBKs z6HZY!^bA4aboGSPCkVe#ics4ce9;(T7aT51>?R%&zuc)siT^N;R}%Pbk`EJ>qjo0_ z7CjBpbvSv??gfO)l_IP&>hq@}d{inysy}2-+JR#)C-6J*h&cOuZAYAI9G`=MFDLo1 zT{pz%<6tGiEk?_p1U#cG;RR(w&w%gn1r7&2p92n3VNhu?S}DSPM*T(?A?zcSAk}ZQ z8mTonybDBq;UuGF0{}T?3AZR4dYbQK{q1aZ9JDDRwVi0u@1HSAcyTj>KugU;o!IH?6VvBP%H7tCnG%FQZYel zSumK2)HEFKMVuiX5vTm9y@-z(&t-@+lYH>_6txE-m$%nN2*+Ak%SS?4N5oxJMxdPc zuhnxA&cm^n9JoL{B3|*679kEYj+Y#GTaphG>LK1A2a6C+FYgiJRHUZi z@J7TL;t}zl>beneobg+E?R#wr2c!SA4wLQXfEfo`_?)e;o z)HEF12{=PMBA&Xpb|Ri;JeMJ!mE^-tbu)XFw8Ozpe+H}+brsbI;6NoDZq(=h8^u4X zfgsg)k5SwOhuaamiATh5O0^yFTjTf}Fz}yAKFnW^+MPIwJ3i=`5z`gU`Xnuo*fhzrCc;(5Q;cEs2?{@M*ZKgoyfn%2O(9S2o20q={t zit69vKqZ`L)VGTe?jw~T)wk=7R398}N9-#e5j*}y+Yvh%&t-^RlYE%}C~7z01nesw5j*aatOV?294i64CV5{8wHt8qS3=35I9v&E zoY6fiA*>^nAa&15NcF+7m4JQ4BVxx|$x6UZ#<3ExYm)bsP`d#qeAos458VAmw?E1`A+PX0PU2bKbu@u0`ry zsRXIMU1JnCv1z#s@euKdxTvAFBQ7?c%Mf2o@?ri2)Go)t1FHk6Jx<=UyBlGJQiPdC z{n-scc)e7DRNrnXQp<4o?1(GGBVx}3wH@&ShtGH&T6YxE-;tctrf+AZFbnBNLgf1JE$_Y}f;N)cW%>f22~c)wJFRNrnBQk!wO9dWC8L>zXgwjBY505x zJVZPqF8aN;BQ7?M&v(EVlYE$eFKS=J!2_!W=?t8_XLmQk3Z)1$jry}2g7A8&1gXB= zQlysQ@YxYph)2Yp&9xoz0^|662fQT7hwYC319CW6X%1kkXi$$tbt@dGgfor$c6AXR zAeA81x9g2m9~^E+>? z@`NoRANr0y0zWNN^0^W7L1>K5=SGBzTTn3u2M&b9`Ee_L9>vHL66eRg?=ciVtv*81 zH*>^F6u+ZBLee+W`*xx@+35KZRFjRK-&29-(o}aH445Ul5Bl0^-fFdwT~gIFmmU3=e@kbYGe5gj}4b`!~Lm_UPStKfO8?-9!H~d-NXRO7QZZ8n!}D z8(S$RXghy@e2df$9KJt@--$=Whg<6XL7ZwF?+@U*Bp)^yaWuZk#=)yaxC1g?<%dR0 z0hx)z_Xl8Q$cMfsQ2bZ*5t6 za;62oIN^Za1z0M&FD%Z~=(T`f!2kuJeGtOylp=7kychI=WIP^ncdn|(vF8O@xJU01 zw#$D(jzQ1yW*HOY?k~tDq&DO51tD$~kBGxs>jfd+XdGWCfFqK8*#Ep%$l>5hs{qv@ z=iRO&!Y)b?`Wf|4C#?}4CzT-8w;PGnC>(A_93vhP8yu_chz*V73kC4tBp2DJwt zV=D~=%n%LgR|t0~MaZBz@7b?K>RqV>slHuf6gRPH_(B0ZL_8uc`lGfZE;f!Y6u=jg ze3(B0waanv!0JG1kCXT8?nYRl6k(=Oe|AFo0Je$-^+;5=!huRS)2MG(7vTX?2~vH#-bnSq;daEn;t}zO zCA1C=Re?Drr;9!0$Nd0m0p50Rj=P5;a$*6BP z0pa~p2~vH#O-OCV;daEW;t_G!soIWsqj7w`1CB`YVY{wv_bM5UgO%0*N+IWM*AZbC zr3n3u`gW}m9w(I`)wdgo)F>QoM;s#_5gVMY?T8JHQ@MNC`HJiIsfw=QtwJ7NcHU+qqvDp!{t8nQ9Er%Tx=Yl?|?5R`7nP1YM0~S zfz^T39w+bF-Hot9DZ)&n{_KVzyk06ns&BUxsbx5PcElCp5wYi)+KzaEaeTf5UXtX) zcCF9YtK?D~tTYd>O*E)SqPi6hRKl4?eY?5{50FZb>f7~3st*pgBlZ=Kh_l*jJL2QU za~a~|Bp>FVi?|aG<`ae)Eqe^`l(K}sDI0n=z<-~!tmh&?h3F>0{^|*ZbQ`V|p~9$N zt~QVCN1a!Zj~hGUN&xI#Q4cI%+a5xX1DWr#hKe3*aq|Ka7p!R4L=Y!VG>GgKde z1C`L$sBc#jVI8RislHurr2634qX+gCkBHx$t?h{48_#8kKP34u|1H%17YFmtg)|Ze zG^mvbUssB-(Wr0t6vBB@2~vH#l5=2%!|jOG#UtX==W09R9OJnRaY2#~^RGeeBRE)T zJKzw=dD~ruaIjK@2aNi5T@jW^B}nz{mLjzb$6i_B3h{_|bti2{9B4e3Azqv0!*)k^ z#4C$~mF57piU##aRJX!`O6XzKx2ucr0I3A2zTHTqM&WQf;u!IWc+`2?j@ZI@E<-#f z$%pyhp!VR-Hh&;shG|LGE`ccl`f`gW(G_;j0wFNDA|#3SO@v9=>_ zH=fH7zf1CA{$El1F%F(i3rKx&@?P1e5YAJI@SahBb`ucZFO?wGw=3xaD;#^@0jrBg z#MirOJK}2N_|;b6r%66+*B9|+I9Q2rr_r)E0PiSE*r06a83z9+aM1H_z)>m;DlP6+ zim=eA-{>lYgQXIr`i;ItY6lK)MEp)XB0k(*HzH0kp34wtB>6D^l5UufgY7l~>OszX z-WMV4qZHu|qrP1`g#Ra%Al0{x)HIn@mz-3Ey;)Z`<7uo4z?QySRoqJny9XW1C?;RQGeb$QT#785TyEcy;0l; zhuabRibupFF3@(wmd5cby}+}Qe3-wY=Uyc*<6u7FOQU5+qUu;2WC^Dj^{w8Ae+~8Y z0Nf)Q9BJ{5QiS@2y>B43Mk+z7-zY|L7aZP**iAel{(PZsMBHsWmmyZaNck}TMbv(S zgWcOgz7_{GsLvx@rWE0GqkgmL2p^M5km}pj#-utn4gVPlu%38CeBokkL0n=ymm#i5 z@?ri6)czF*EA0jx137QIn-PvuitxBm-|kX`mrEr`_3c(8wFZaJj`+5CL_D*%wj*{h zp34v~OY&j6E|=g_KMqzR91Yoi3Un4oM;zn{J#h+tI`j~VS%V+Sbf75TiVnfIQ?I>B zZoxtS8w8EG5%5>hP*@$!5e^CoTp;g@QLjB?dgP7qAIyCSeUl6c>h=dT2xfzE_<)Gl zibuqQF4Y4fHZq>e5D!W6VZV=2yKf)cuNPpVXiz^wxLGMegyy{Mmm~FxRDx9Bt|f|F z*);s;B*0_DBjSd>+K#xh*LK8_#_@#*cwdqa+tow7KMqzRoM^P{X27k= z67Eqp^fd2}j|Cj`JPz0(8dO@Gs$N3>!rlWBHjzq@>NlE-)HEF4h&V$$B6b>}8xcDj z#}^)8wYpACO;2zQ7NQ-Zj zBGfPJeFLdAQVCN1Mlp)J;P6JoZsHN~cUS91#Ky*R8R8$4e3-xBD*V+H2fGtKFj{sX zst(0LmT;6&ztKwg|9}Iv1L|*4dvK)1$4U`O3wxhOYME4mRKL+_C_WvBHzJ-P9udDD zs2dTt8^^ci!0(cLnEzMQevE_dT0rWH0~*w)5YAJI@Sah>*#w05OC?D4?MkkJ6%Mx} zRu_+muMg68#MQ>}tvT@1Bp>GYMSK|!RwCSKwCoMQJIWF^C>wf)!T$*y^!yuelnR4N zi+hzKEHvsjx(eZ7sRXHhqi>Pgfx{aSzY~v$e;=Y75tkarZxI34CHXMF8{+eEupQw> zqh-$nUQ(9urm~@Dz+n8m76(0_0}fJQP-!tjDZ(tHexr*J_K`}E>Nnbi)Mgysh`3ce zBHokJjfmrn?%M`S;8&KhMor3?NxF%4tgE{ zyeS$~S{$ujLbkBCCc-*W2~zz=V9s{Q5Z# zwj(rzjPF1$0`xN)6RuV^^wdD%3F^56@PcSiX>qW63GEAee`2vzf>giJNTf#L@J7Tj z;t{dKjk*yrHjZBa2VR!s!~Cto@R5&$D#EWJ<3?u#x*LrN7b_cjet>^-_1pk>S~RG% z*jK%TV+wn}Lh%kY5TyEz2BG*`9NvidrFdiFw@IE@^CqilOx#D@f93Qc=u>cTBf{T| zX8!^BURlE4Xv+KVn^?41Dq*Wp-|A6>v!xO~GwL5lwP95!*@0M3JR<&N{JMzvv+^0k zoAv61XLdfcdvLIGNWF#d9i<4L8TFyhBU~nxAk`PH4f{Ga0)LYN))SA2KN-hLz@L@R z7~WE}61018@>fFmj#7lrjP6+p;WDWNse4v}eLWkI%NP#l-*IxAN~(cGIDE;8X9poX zh#Sx~90!XKUNl-(9c49fkR`Ay@9zTRQ8YWA;QJ(CH}Qyg>qxyo z#M_MLGQ>NLUl)Z5D^dFc4xY@pBk)Z*4(M9IuTTjZ3d;~)q!i&AqyBQXL3ol>f>d90 zJW>@n_Q@1DQ9L3(H%f~Vmm0^HW8k_ZALd_)_-Y)iM7Yanb`jtuWeIO88+xiCY%MjU z*f(A&!VIInXb#~psRXHh$xTRY#^E)HTg4;dh%vebainql%?5Z|k`ME{j>f;`;outY z0BS(ad&pf8mMKNJ!l=(b9^olc2~vIc@kmwR*h2zI4wj+)- zj#n0VTapjkb-f+0EDlzB2T%iY-gaFPmMKNJ!l-X|Ji=3?5~TWey4Ap<$@GygKADy0%iO!Yan5!Olki1oxH;u&}Axf44W#}Dy<7bN-c96m+u zXE>No*c&qLb0(mp(U@?)vY}@L3jeB}kYeAj)j()b*svYN->HEh)gN|m6!*d5<0AGI zkBIR-x(2a}aeOHOW|MrF|0rrV;GiR<4nfHuaF8OLWYmY&L|8{EL8?F5-bnSqv6X;* z#Uo;uaaxJk)p#yLEKBlX{-dbffRneYkO5>Vsn|0sD$a z#CG>;CE^*z@!uE$J0$tA(sb0W$H`l1f0Q)DL5gscQD3PV!e2=xNcELsq`Kg6C1N-6 zh!~I8O2jV4Q3K2-`LNP`sC^SBZ>4=vvL6mogp-W=NL+qR6!%B~$b^}h{N(ZClP#mNP9gO-)H4)a4N|5R+4MJ)#4p$;xD;^OC zP0&ij!NySo9Gc|AN`FJ`*Eo4A9gUJ>agZWhXw+9a5MdLk1gXB#NTf#La3$gx@rXEb zqE;e~GL9Nxd6Ew+y^PwQaq?C=6(wilAVs*+sIPP+!d6lVQhlZINLAo)CE`T!hVTQ5iU3CE1it+bg2ZXdsafK0>@SYP85%bZ``Mq zh^vj`TLR#xNj|J}CE}}buoB@equDnB?r3lX&^+j_Che;(! z^-F$>)OR?%2C>^D;MBgBW`U|m9N)Sc=etS^<&(Wr0H8)07@&LOT4Z%lkC z$%p%lLp%`&BM3{4`kYY+%cT;YH|ld%BYYc&bBM>>ulo>>75Dq>hF%>x%ptTi>T`BL z-Gu{{aHOd|=QM<8;BXFchInJ*%p@P~GZ68$IB+6NHR^NvAnY%d@Q_iTGZ*0k9L^!u zdqDRg?kDc|*$90r4(1SQL(cndVGUC2r4nkI>T?<+JS6cWjuCH6yfw*(`*cR!4F_`w zBaQlfPDj{YD&c0MK4(0_3LM^tI8i(zUN@Qf>muS%Rop~Nxb5pm>$8cG~x95ul5Bp)WcjM|@Z@`j#@k~49TB3xO21%#XqZoAk}y7jp9By+?m){JR;V9L^~7f7{`xefc2An zn7@`iQ*3^Bz*tdN5x%Pw;Xg)wyXO$TAeA81w`+_^O_IsPL&PKEhN;?)xXE}fL;Pow z5A(+&z6%FWhcMS@*+#%8Mq|R)%7&iF@L!38p5H-E&iqy;Z>u4qX`J_mr9W8 zH!7J1R~$ZXVs-I|_=oAb5wWFl{M#7ttRx?{`w+DoaIhHRKSs07QFSa1vV>EN`rIKX zny#K;!@d$V5b6~+d;;|gH4vowC1VtK!QnNC-NYl}bu)Ag;tj^}f9MFjGs%bfM<6~5 z2MZH=8_f;{+^j6&Hf2N4a`^AWK~G2>i;5G}K)BebFFGD!1&)180w;<`#OG#eQQ}hL z_(2bFU6KzIu0(t_4u%r$GMZfkcu85po63fsY6x3P4Jr1GSBfyhsJ}otgu|o~r1~{B zA+;HY*C1{ckBHGMU4vNLIQ~a5frlmeF#qq5;zJDw*C2doG+P5z`{5u(|Cp{p>|s2YAzqQ>!~EYM-UkN@ z6HYUl%>ph`mT;M}p=Ub$*W#cjr1nEa12qs%G3tvBLO2+QixRIDkBIv|p+$+cjpKO( z_fPU+!WPulecXoj156fm72#(}5q>o4^It{yrc{Ddf5?q7>5ybH@pkdX#5MNa$@N}sJse4vJsshJW0!|cWk(O4wFid>X+Pv)MgxBgSb^ZA`Y9QYY=ZVj{hzM zI3mf1`CXsJ)5gIy)&NQ&=RM?(2)ign=x5aDw?=rJRDx9BeI!z2aJU`uGx5g6&y#%E zVh-X3I2cX%#Hi1ihH#ct!X~3W=Uaq3a5#tfop?lC_g6gy;(Ft`4DrJxALjoN@c^8> zt3QD7VWkL5jr!0{2sh){qX%vkkBB4YX((}|as03scw3SWL%Yt!qsPI}cK|gY=gsem zuuLh!6-ND$9FOo6sRXIM-FT!baJU_DqIg6+a)GuZ9%Ve2A+}EPVY_Pck;B1Cw*nT4 z2K94_!cxRFi9!DWQ8VBXK)A%HKgRJ0D{$;V0Vj$_#Pb$vQDSTy|DFxJJjsWl z*Z&QlyKqoNI1#e_DkW>X;~-DCG~`3yaumzAq9aB5?)i_NYd}9izEc6~L_>E|bo?F% z9t2L!`&;I%C{Db4gsSvLfkBIj@tEWPIz&QTrA%U}# zeAw??#GP=k2Vtbq>?FWL$`T$`HuP+Pe_g2|)g56^r3kke^_Ooh!g)Acl(;}VBL3eZ zElTWQ96wwKc1rSLLeuB)BVrsZIu)=^G^hf#ac zq31Q9_^|O@hB!URhY3SaI~@l@zXvpjoHxG*!i$w6+-lV4&qX*7$6g)a0`Z90af#*= zI~m9SU>UG$k`MEnzJMGKhRy`MFB;Sc)%)N;B^+zi=l4d~2Z!^CeZ?cxkxG!dXCzBL?kie}IL|mfl>-+hd0z>&M8o0axXd_efR#x;th6`cQ*iQD8iDXur3gqH#M=8Qwqds&s!ZkSdegM8L9uWtu(oo_R#&a3sHAy}UZTIG0B|~s9bQxfm zXi!f^_31cJ3EhqQ>(CV8@1+u?`gVhmx)z7q5#JSWOnfiNhdEOa&%nVP!aGKNP6fhA zQVFY#`kYM&H{;l&2W}OQh%djTr$DSUjzm39sSUUo}|!lkx<*7W~&-Ly^2$dJSj|Y^r|&EW>)YYtyd* zhp8~kD_}nuaW3IxLR^!|BFgF^t)_iOwe?H zom!%!6%Jn~;xXb8@vXP@dJtC|$G`pp*CqL|!F1HF#lbT@6jD!|y!Xj;gpVmjSZvha zx_2PFM=C+8Z?_4l%{cbf1#T6Oi2JSAcEtUS=Q6~GNj_}X^BsIYgoBkn1k_$<^ish6 zqM`6JgkLE|_^(l4v=ZU#QVCLh(Z(3sBw2!ZhVltVBlp*KFt3QYJbK- z72$V~@dJUg0o{$pgo~98Jrhv4TsK>?c45mB(-HanO4pivAy0=N|C&c>n)<_3`y?V@eDgb0_D+lo;kz%CLnyrEaGwF^7rL-Pp#e z#pb+H$R8?{tl(@J=>b9uF^wcHvaZCN|LKv$TS9j<#9yU&9%&u?y|LOzr{a!s zNSGY5G@Xk(4~u(%^Q|lKh^1~SwuR>X4m>KwbJML};u{1QRX2g>EK8Q^?J%;!*Fu&n zsc_eiP@CXvnQl0t5tybEM_O0n_Ah%nu~%q*?h6k}@!WsWGCoVe=r6n;a@Y=3?T!%@ z_6u32dXD|OcuhOF+%oT|E#7uW=)U&a#|SNPR&chQsEy)5m`)@Pwywl|m-|HGexW-W z;(;li`(H)v;~2B&&<2!jgb@<93t5iyv5K7)oNbOoXb=`7!NJy*c-<==Nt_wFqapq& z#dH7N@OQ^_o#3pHLuY`S92FKhn%5kJd$6-}z!W ze+fBseX2IXhzeVTEK?sy(b-;;x6!)A4hipvEDP?!z0X;}*>a3t?A{yGF~mOBmALV% zK8E;(&>ao&ODUfFkE8ZBtakIy;=bsR(83BXGcRbx?Gc;s_q||G>q=bjwRCrI{m>l^ zal;hPdz?(|46N4lCEQmW65bD4PWl+`5@!Wxn|UyI=#U+>M=&T0NiI;vQ)2&krloevh;tA;UyA!- znojI*U5PXP%8J^Ry+CN0vx2i_q`nmQix#}tVSnpN+;5df688_?(GdHmcx|!M+vD!#mQnEEhNZ2!E8EHM- zZq5qMHb){f0*jI0Nb5>G=sk}lem!(YL;PlnmyxJ_4y%n+QL;WpNaz)^G;PBjgvFzQ zgRLvE?R_^D2ZiQk42Pz8Zh959k7Ko_8&I+lMo8EvWVwfrRqU+bY#C`dp%GZz0~~2x ziPJvxNa9tYI~wB8Qaq3J9JO6Oi2lcd$(ApJO{lC5dJ66t4hiE!mO;Oc`%PyBXUm{7 z3C+SZs5sl2f0~ppJ3sQE;@3j+7lh#fDV_)2@V|UTgE7(+@JGv>U61N+7+GQKkY&1e zD1P4y1ZT^1eJSpTX*#jLbtOLcv8NNC56xc?hA*Xf?tdq>FJtuYP3qfN?e1>Jo#&A7 zP{=afmAKb9D>z%GTS{mdrs>4x)|EK^f1Xa95Sm|Cf)}QEp6U5UGPc2lueXg;Hcd!%@7+No2gmfbL#UI6a1ELp18#mEX@3|X$^ zHHzQz0>RlbU0;g(VVX|tZ(WJ^{hy~39|+CwX~L&dJog`re-uW4;iizoehVIQRCwIc zyyma$|38d1Z4GW8Lp}r6TPNhVz*Nf>;EUcVFFy`!E=@+yKbkJ%Q1F*0d!kC zs|HgY5^f1u9->B2Z(d66+S=1Lzx#0-u`@CD7QDLL$4Wx0Fx`i^+PV@Ke$MwHJ{Y>A zAwH7gdHT^^IN>6y!A%a4&R7xIJV!Q#HN72B*E;u$F}j!N;||6|tu4`U=@W72%EKLQL1*(RLqXkMeDFFGq6ymodS z+|N2Id^2P@(P-Q;m}VBoT36!e^?lFcn9$U~@1}U}e>b&nVYO@Am6F{tLc*~jOViD9 zdpIjNTdr{ep^2DA5+_+#;`yKVNa7DecQnLFDV|4qnA%UU+DHdbG5{kaoEox>v@>pR zX9Z`=NRtUo#Wa%mzIChkL5kWXEg3uOnt;>tXsurQ#|*%9)C7QAK|HxrOy=H ztDO}Vhb(=T;x5P3M?AP|=vMI%>+*j{ejdL&Mjv57$kOLCxc}#@&^Ki1(}p`3Qy=j+ z)~({bDW1>sL;Oh?eT2J0mOf)}zw4|pH)QGa0PZ48eZ=j$`8?wG*5y3^A-@`r`hp*6ClPcPg)X+QBA>sE1kis$ou3x6a=A7NU^a-KoBL!A{Shb(<&;?Bl& z9&z0beIBv0F6a3x`6n^@2o2J;^DHFvM`wkW$d*1`al5De#B;1$#dA|UpJ#vk{uq6P zj*#U%y>Y+ltS~xc=`#U$5~lNruUfZ?ucdhI^K1P17=46SLY6+WaBp!|SQ@hQS&6$E zQy+0yci)@XZe8x}%lJJp`UpcpmOkBZzu>IU7P9mijyn=lAMp|ER`E|Mp3idy{#1-U z!b2fTpNY6Xc2;;GWa+aQ_eo5B#636idBnY}%X$7szB4iU2)lsAKH@K|Tg6*bJfG)G{IM822{(l-eMaDZ+gV{|$kJyn?tDyr#7#E#dBjbv%X$7u zemO=TVI$JD*Yy%Ye|J{s8rjmP6}M;FPyCs6t2i^o#RVxY-k;+6oCEO>$LKGd9CGN- z!A*_|cRQNbsOWTOg{f<2kHS61S>c+H<>ns1U4-dw#O`14-H01mm%I57`PCS+30+Co z?q(UGe>p3x7un|B;Py!Si9M|=@tIB3b6h1p8@i(*zMkUwoRjb`#ON>lGUPB-zTl{^ z!qL3uTK0bwW6h>y4s&77YKuD@5*`d$?&dPwDb5PcmJ_WcvGy$f5XWpvAKJKP}ow{Xvqo2#xPGz(*)po-cz99QD5!eTVI z+PV^7*({9)SA=FX_#3eJ`X+43c}!ZecD z*}4*M+1w+EzX;vY5N}WMJkr_J-iR^MDzGi-+H^A_h7jo#o!5T+}PaMr_w!%Hq*&Nck2OJWf3|R)9hI_5E zg0tn4yE0O@7>mCr0J~dP;vrjlT(K=Qzo`LFPVwCT4Qk)QIEL^g(!6#K1w%r%3CBB{ z*ZhdWJG~}{w64_)gg$F8SVQrLULZJIjxn0zF_@l)IM%unJ6e4Vaa`z*hWPyy&;9SF z_ARXT5;&NWffym-gpj4_=D0na6`U>iK7r6gOe2YttSj+?9v(@&Ff@OE5nhtwd8CJ_ z{RFFxG>nqtFhasvAphoNZl+H}&*L;?1Eu8saZgJdd=3+AWCH zMmh)gJcopzhAblu#2w_U;A|ObE}?mtMiS>+SK{qkdn9pA=#GYXXNu>M-lcXIVzrUZ z!tHQKxF%#7={VdG&I-seR2C? zagDIQbtRs-u_u zFnH|+TjTEFtl(@p#$-ZMFdajjYF&xrcJVR9?}p|NIl&*Kcpm9#YP%4tjkFi;ehvx4 zLzag;0e2#%rs5>)O1ybjHx+LQ%`c0>U!{0%`XRMDd?lKm3+7mU2);sPZIokhPjE=M zJY*SVF77-`qlojZEAgsc9!0!5bVoz{d5Y&z-lcX2Vzs92xW_vrObA(;&cvOCsi`>I zx)KNP=BDD1(EQVZ@aPoJO*ib_spUY7rqjTqmL*H|CKy>^|B&UOe?ajkULZJIrW;Q2 z2u#z7Bdsg(=si50I6O3ebsk=o;<+?Z zlzq>J-giphoPU%2JKk5=nG(LrRONXg+XU@e``Ysj=KfNj=y?jb&hj;|g?E|=?y<~$ zv~h3mC}{rLjwe%`rW{h6vi!2nKbraWTE6_U&WGgx=Z1oJFZVx_X0xz(b->xyl{joq z-@n)%n!lI>PfzhYe`ox4Fz#8{G2}2+9_OfVvZHy;W?${pawx`{>ELn8oYfY)daZEa z+H2Rt?dGiDY&p?rLSrzUNE~ZjiO22b6N$%%?r4Z7rg-juH??nJOqWBuQnEWnNH{oT zd6939+rwGG+2%-u#$YiL9BW;Pqxbem;+W8k4ZoY>x&PhNzJ=9CqGWeWBY|T>Hb=tk z;jG|n8EFEcNti|w|7_hV{w2k8>lyerV)PLn30ZbpjQb>}oy4AB3*9PiZC$=^^FQ*P ziLsN=8nR5hitKwBSz+_YmOj03dt>S&_OY(S&G%7!TqSN1x}za(mE!p%hi^^tJbI3#?D74?w_ zEpt|Iwv5!5;(pPB&jDe7>q^{te~%>Y5}Lp70(VRCJko{K-jCHr`V_Z886jblkma@X zCfQY9AUN9`iQ;~kUQ1$s>qtKu|>=<&GDvxtiIN8y>X0yJ$^Tt>+9XxKCv)W=;uN4kld+mC--JBJiEe~cip)r_F zB#yPN#L)-(MBiF^wcn zvaZAl{XLR6F*G&s$0?pidYIZzu-ZrmP%;1`Bzz}i8EI$S-p&fnmXRhCnu2L0ajJDC zP9ETq#3`Yvfmf$^9_eXn*C$pR=?L5*4hcU9Sw`9yx1Y0uvt^{2gl1v!QiQXuD{{rW1*atXsv0Qaty$9)C8*6v6``%gs%}z1mq}LCDf)G42vfeZ(iN zEAfMaeRE>VA+8ZO4&D5HvR{#(gVA63OUR)gf(DgDh4n+0z6X*$I||FkLakfukgz;t zS#THbea;HbmP59(dk;*<5PMozV(XzkhS(!CHE`P$&)0Y|wKFgV&Y_oZUvWtI94l%c zcpf9P#96`FGH@@7dq)dC&cQy`mDuYW9!cySni}}k6wm#~Q9B2#jr2C|8i#~0v7$E8 z3xt+AD>z$5>PvCIXu$^_*x$Mm`+n0SiTy%T1HYc)d87-ey&tQM^eJwGGCgUqQ^@jY z-Xy!q3j}A&NNp4k!t~(8!Pb@7Hqax9gF;gSho*QQ=_+a;$7&;OK*>fJAz`18Wu%W) z?5yBy8EH775tv32M_O0n@WVWkI3hGP@Y^Y#N4lBX7qQw%TT-$$Mo9Q($THG;xZRu; zoGl}bCNu`qNa9%QO1$-Ok0j0w-O&&qPVqd_H}Ma{=r4RHElX zn?qVR+96?T$TH{<+@qZpoGpi3OlS$FV~9^$SK{I$d<=0(Xlmf!Q#|+I82>P=cC$al zo#v46yO5>ndAJju6`U;tFD0}L(@5fS>q=bbNRK4`U+9j8__-9%BOTqw7vdNrJqy+! z6!K_rg=H@ME$$y265a|~M(N77-BKH|yLBbL8+u$NzUO#D{3yk9hokT>#%i~7FYf&g z2}?tkrY(ah#&mwMvvnoD8G2kLzU6pBd?&?o(}VEO$7)Ugfcua`!ZRVuBe@-Sp0k3p z&5?$%6&54G&eoN z{W=hD4c*ZYf1BdD=^*^U7)^z9Lk_zI-0rAwx1)K@X-Dz1M2t1Bg3Vo+v)bZ(hlI%? z%QYT@dxEoqv*kn&5L$@oMB*arN*vbi6N&Ai`J4zIpW?ayZo~NQ1jcl8!3xWq-I3~D zF|xveAi-a7dUNvYhDqxZ|A_oGm9>N@y9T`xcj5 zSK|2NeIju}Xujrz7p8dbf8=qUT7HBv-BX|oX=KUb4s%F2J!F|~FWmi{6`U>8O(rx2 z({$og>q@-)Tb@q5H*`ls{Bw%u{@=kLg)x#aGvv^Fzye2whaJspI^pi-Yz}qce$OFc zM#yrE#kfl_4JtlqU5Psl_n>00(EL9D@Z=QF9qv4V54jkF3SS`2&un%EyN7HOj&(Gz zd4|I0yyieMgIt)ihm!f8vpMt#uD0Y}+qJ?&G=I;0Ir-PTMCcwHmSc{_9fRqZ;#h0` zwfIggTb}4+imjpf7op)cDV`^Inc59U#4%3-*IMT6JGk#VBz%^|wNGRJMCfs61!v2v zr5DA$qZ^+!!#>vhYw`RrY^0|XmxkuYdT>RG=l(ZR`vk^A*qYSQSnaiZC+=??68;>r z+|EU~mpdysTc%q{XceZr6IWaFuf_ADypuhh*ef(I5qMCF=jr}(66ePlN%$z_&>g7S z9V0627qav{k)kWTCU2v4EnXmWUwgq*WS{c_!P#=iHi`#fI)*sdx)Lw?wvQoB4$WVk zgg2*n?!OcME*Jv~$A%nwF_`A4FvHQj=0Wy<2dg~|tsCwI!q~MJ?2fy)vx2kb7;_2D z!*mRBzI7$Oc8ZT7t_;mD6~T2*bv%!BDY45jMiPD(a_GOo8b^gs9L;OC!adU29MZZ6 z91@-kSsvds+-sc`oGr)b%1GT}EPkm7cDJs?jZX8p;>Mx*`&jUcDW3ZuMeXHS?Pg!a zebXV~(~za<0^Ehp3eJ{+TiL!xYA5!zuEecR_ekP4p*tGljwzl;I+@xTSZ$>DaX)rQ z*nkzacMOjaTH>tWY#FH+#l52i?-*bo>q^}HJ03~gBXmbY{920Vk;YLw2dj;=E+y+> zgoG_amRov(;$>bSI9o>QOL0F;uRpQBbtS%ihDQ=thUWDL-%as6(w)@4jM0C0Qm0|H z=^n&=#3AANkY&2*xHFs;oGsI}jAAQH(}|s}EAfCcJ)PJ$bVoxxD#i13Z&CX;#z?}B zr1@~B$^jwUgu@)oYtE+dMz6`C_i#UQNZ2kGlw%CX9f4_3ain!6UUZfR6(@)0y%D@Q z#dC*!@b|+QR5&)|(2Kz|M}--V<~2{KkFzld+5GRD@voLr~is$~fjplcCF^(aeMmqio#dyR87;)js9M9|4P^=n0BN(Wp z_ig^!h8@Ts?R}pB>r%p2dG$Tb)$O&_<>$P8DBsIVgl~r|w=xrV7N&EHv#l%f%&|VV zI65@HK>~l0;(3B=&+gQ61IAFo(WK+tXCXQ;;=+$|Jg<9&V%6x}N_yYsxi=$!sP}yk zylFwLqnExPsW{s>D=N}>q>m2!{-+N6q>Ii;PWY-CpaH} zJVpoM&X7Y@`Iw`^(~jmfop5(^Hiv$Ud#OXh9U;pLb1CjJOoNKctt;`daUN8BJak7x zd?Lkjhi&kW#~3t+Zos|CA>lV6OVi76r#LG(TkdWtp=DT%1eaS^;&;#SNa8u6I~wA7 zDW3Zu`CVQR7$YqK|3|tu-EO#hIwX86Wa&QvcOs_#;w0-z{LQ)UFWwuPuSwvaQ#|({ zg?|=CQ{l#tLshxJQQ=`n^O|?qe=BEm=)1T-a7efzWVy!0xJxh%Dn4mliD!J@gNma< zcQnMaQ#^M#@O#8C27L&8XqmIyQ@smDRu~epc~Q6%vA8HW$+{9ZInVvYO+$Ay#4S=h zcX)@|t$q+4MuVFzbM|%Iw;d8XvAFg*!D2#BJ1aO_rfa3RM|9)6{;;QYB`!GM(~0+o z?r4Y)rg-juCAAM?oPQ%yhhoT_Js0MZR zjvmi9Trfs@2CO$BjNbnQK z8^KBc-$>*x$Lb^DKIM?`YRKkDxC@;XoNbQ8_T8cdBf;+0mDu$Hw-&pFrUrf?#mg;G zdpTAg3HK?7gpWctN5Wm`tl(@Jsg><}q;_IY>q=bjLXRY_ADX{32RBUdJkrV3&cJFT zy@dOUL&EzZ%SeymE^$_HwmA~p_ekx;p4OGv`eTnI_6W`U3b<{GmyxKQfz?OCeZ?W+ zbF8SnYkG{(5@!Wx%SgQ_?j0@oas~FWuEbtH@knCt(A2=Mrg$D{9JO<>+DLEXu5n2C z5-VyWy+CN0vx2i_q`nmQixzyj0{dH6;x-p~Byro&9Sw1(6wf1FNbP-CZKT(5-*QOk z$_lmv}ny#n2rM@#PfH(`|!)JXRa&2Hcw*5*`Uz zM!F1linD^VWu%paR$&@RTy0&6Z(Zt<#Q%iuXo#y*Jdd;o{wSc z?kr~oXUj+}m$4P5k;Kl{mH2UJ-Y>#W9B%|K_o#WKgUFqa)kgXQ?n4dn5s z%XFvWj&fFTwoLZ`p@o<(Ok8ALi9es>>BO0#I~wBMDW0d>8-E{+k%Tit4!aKA|#JxgyG{jRLr(mpk5p3w? zBf!;`d2{X7#oGuvc5R!!&Cv(eMk{|Aa$z&yR?C;qqz|N-E{9=;)biz*&41s_x7YIJ zi}7d4zvzJlPgfrMXm%bGyYoX0IM%unmtEt>F1{9;|Gx@uGTrff{^ivE8{?vc$0&)% z{xafCjJU8N%OalFedTICD7bjR`1cXoc&*2NN2<`H&IQtWhdwOQ4#Wo3^5wCQCpQse z0^zQZ!&KRz6;VNR)t=XS^z4U`y&ODf*^M<{kLBgTXt(S_G}^%0Xyvhw zVc(Q*tL4k??=k z&IR?yzPy*KV768$rjeZPS(xr^j9!tvvQ6&3s!eUmp9BG}Gm4} z9{XRL`Sx1AJoeYfzvY1iPgfrM1a_VnyYpQ;ILW#a_q@T6UEC`)AKT$KQaqo3`Stv~ z7~^t<&ywc+s@ykZn{be$dChz5zpdAd1HZJ)S#7a_*9u#$z4lFtS9yWpY&lUI#e*=t zkj25)mAKK3K9RU-XuiD$&r9*#f8b1h8i{ct;ni7jqK&EA93v{66S8~`bq$58;B|ZN z_#F`1G@QKa8&s_FuEMA6O8)jJ-aR&J6SQx{^SaIyc8L+%gtYF~@dr{k(CdV>uK5SJ z52rXyv|#+vRHTU(jL$pIpklUnR{k_^ma{K&V;g$jabS++&eWgeHMvmt^QJ?B2CTgS z9L+k7!3+41d@s^@^>fYqz*@e%f#|N%`ZgU|r(k_~1L;b;lpm5$sW+Cq|7Fd5do5qy zK<1FYGe&L`JbigNO`zMv=*SxgoMc^z$KLFhlQ=vy|H~sBm*RPX4{zcN2aFev@DXY&S#vF69%cb4n2d|&T$DR{s#uhGVRyrb~-wRh}v(0l7 znuzJmMx10_iCu5?ImJyw^JW82PVwCTySMOkFlH7$`bBynccX4|Om8^gXl$()_(Fo;)y_PR8`?=)rj*;2~Pgh9Z7f8Kyqsa_dUm{a1e3iF<|S;}1M4#dH6^-bPc5 z{=$}|A+>yY$2FX0lil}yuruYf z`T>}0nH#Ok=Idc(1r1nxA^d~2X^bJYHswJc*Bqn0mM;(TCGxMhq2S%i1rMj$2uv3& zjVQMN4wywl|=eVi3 zUuga{Ab4Pk=MGm<`#4r>x&b8{VT6S3LY5cW$0~MKaJD%Tp+Q)T1P5DJ;@iLWNaD)S z{9*}wH^uWv4^sOMM*jh%zK7MOdl2^#hlJ-tmg#QAo#U+FY?-d*4z|KHo!HsB5?6%g zcevrd9B+tkq(@0|fJ43gM1FRdl^_TH`Vzd_ehAe%$;eNqc zVc(FYPaEzaOnt<`)|GhHe8tCA;^@%)&Ii0O#dH5{@VCS0FB}tcs46=g70!1wulWP} zzm3(d>nl|B@d9C3$a0LyxKl6<=7A9{h{Y`Oa36pz4kB5|a3CI09h zpGdqYbVoz{S&HZWd*JVhaU$WUkV7Yd%N!N1ax|~`8~cBX)vjLaj`0Fv)Y=R7$L;T| z;B0v?GYQSYbPRE}btOLV8y`dbQ)qsB20owSd8D!U<1j`NriL845Ip9n@U)|O&F69V zcQ%K#Zn{IluR@mlJ`Z=Ivx2kb7)uE)!*mRBxpgIOc%P3UZW@};MB$Dpp8MZ@FTZqx zaSY+IjO)drjU(>z;Q=_#|Xm@O#`v&I-YcE(2 zx0|zqv*j4035~&Y3~{V=CAR%89Rm&u&ATo*G{tlOdDO1J>LXFIJw`~_CuC{b6?bE2 z1!v2>4<|Gd(@5ekty{%krFd?AKK_p|`Ut-WS$3L>I}g)N;(Y5$d}4tQCq5gRzb*=2 zPx0L0Lj0d#bP#S1IrK^Jf}_F;NAsF3agT5|hqUgO4hi>%EQ4NwJJngi*>YVg39Z6( z3~{w}CGPWkA4BXLn)k?XT#D!ZkKNCaF^(Z@OPU`!?+Z?|%!MzKeJKi$&7p7OULB$G zlG7f;qQ#VUZQypz|DR$t`47BA=ovlAfhOQijMaQG3MW}t;yHitfy8q|cQnNFQ#=p# zFtwjx94Lnlq~u^se~9#u9d3|3G2CS~2MSV0v6R{W#PO`4V za~@2i!E-}18azM6bBBki{RFFzM#;gLMmvbnkSB(Fj@-O(XF|O(jg~6vqY;{j#b|Jn zbtRs$$fJp)Li6i@@az=N9Ui9k6RbAc0hA2D2noYNmKXTWxV@bfoGowd69`SjVk9`p zx)M)*$Rmm04&BiZzmwu+Bx*mzY9nn=$u1Znp)F)-IvRHjrl#Up>q_kPh?|Ogh2|@9 zcuk7url&v5=cgDQgwCY-w5~VUH)NY|rK5Sx-4v>VFWK)Me<(tmhLbD0{E_blW9%w? z$@$x(cnA)0LHn}q_VIaL4~n<*Iw7sQb^M7Gp5b*uTG#xh(cTmv;B`V;chmUqQG9{d z329yPpBTJ=;&hS)VZ^e^9$c$EBK zF&>QI>B|dkCOgiG>G?Dj&bF?^m4EgNP5dBqM?)O;7svAnZ~hY>>M=S9|Dc3Nf8F?1 zh>tPi!jUYCcwV=XV$~3wJH889Z5&Rn*#A-9ZZUQc($3SPcq5953u))+<;6CX;^Vwd zNb9DJ--_a$y-rB$rj>O!QJf~aYy93+q>1h-74K5As z=hZv2uV&J#wU#fhTwQs}57f>1xi`NlI%a_GoWxD0f{E%9{ymC9yJMG_|uY~pG zl{=pN1#zS{!KW*)+~G_#0@J%lain!6-t$+#LdD;N?r4Y$Qasq>m_NjDXjhUR}hg(pAdcy9Xq z6XY?P3ezd!HTO^OO2{_h7#7uDiSJPOf!7ERQ4#M6-a&lqRf1Nn^&aB01iLyfq;%)b zUxw~zhD-Eo7PQMBG!H6`U>8%_TGsi#Iwr-?|bH zea_Q~-w55&5RXXl+<(hwiD8U%J$TYGXE&$12S!%dJ!F}#6Yjds3eJ}4+6WE8G@Uru zx)T5Wyr&ai58cra-%jz|{}0r@jnRL9Qe&~&-7Uaf=#cPK$THoHxW8~#aJEdhlF%wl z(}}CCD{;m@J)Jl+G{0yHpHA^S-S`*z-YmvQ!bPOxoy_%!n=s4AvLtt;{Jm;FG*$)WjwS>eMep65Sn8S`TtNjR5uJdi68(=g(~eL0@jT}$x|UMHk= z)5qUP;q6{0q;<^)@(RV;JD!2E8fdKtGVUcl=wftU19n&%@&{n9<)>hGw|)@3Z3&PW#%__%`9s`E4hfp3_Uii#3)GWW)WCcR z(s}g{n)$X`zPz)!rI{b1^ZDsCU%d}C^X>Ua^;d5{)_griY7;zNd406J#;}-PA7W?g zN}ThCUmxP!(7Zn2iWJW$`04BXEC=Ih3DZgQl&>5AYs6icULWAO9M9|SqxcVAC!}@L z$3IBnV_qkub4Au= ztt;{3xBNiFOG0-v#Gj^kp8te5iD4Y+pP)PG+UbtN9pRAB5wg5HIS}_?X9Z`=bdw29 z!8DyX)w&Y*TjlA*zM=WvIvkhcdAcoE^1~*Kk%a9@$IE4Z!~l%Aa9WP%b%#=Xgx3ja z-SqKCQh1!#329yP1B+Lt0UTqz?-*Z-Qwj6FLp=Fp3CoZ?H#3AqbaAJFCerO2CrFiZ?;$6Np zz&M<60O@%4M^9HON6ZGKnr_%(dKg|Yqx(9JC_0e`T}8+B*# zrWl2S2B^I{&TO`6ueB*(6}~}!r8gA3x?Io%Hk*jW(}$C+D{;*Sz98{~(0ua{Zv3I+ zdA`pOTNh(K;Uz3C=v~CejtgB_w$>ZXK!U2#1u5x$n-}y6Gwkwy?0X)VXSpLQPQd7v z2bhn0uS0?cs9n(KaZ{W2TAOk~my(|xOWFjlE*I3wU_Ii%{O=pEr*$Px`^Xm|P7lrh zz5(w}@jTzG|MC`(F|sh8bX>$$i0d%o!fiR8*S$%xYIH$Ldf(;+&0vPdG1hNR=^(fG zGx*dpZ#0<2?HGlE2B=-ouPIJ#+G}mf1?@z6FRvE7x?Io$gcf3Y1&NESD{=S#`GUl~ zLi2MDcvOn#`TBjrhYXDQge^(O1?_>@7b7kln&WxhWfZGM7o?>3ZC=oRAM<_*WBmfK z%JOtp-QaF{qt&<{I3#F*+65g>D79&?wJ8_$7xIg}TJY*}LBrW>L=4GyIpIj_N_>iQ z@}8j*pAF3q#o@atp66TkDZe$3aS-7Tq~n5~1}|X5g@0pfy@~CNs~TO9lHRv@K`%1H z`rh|AFvaq-R33n_YaU=K?sSI)4N$wF|FAB#X|J^@7xW#q_kC>!gN96 zZ0kzg=>L2{;-;bb4Ia2his$)ytkbz=JB;~+PqDb5jj7ulBQETKt@R2zgF@Blf|T^W z%?sM1(YfU?jP=)nC6?b{)p(3(9^gsbXB`qWK<$FQf}7g3*V>c|`W5-Pv7}A#>T*GS z8LVFn$)62?{jDqUuF4lA-W!^~l>?tn@jTzcbvw5_f-$mi1L?SkyAca8;=-djp4Y8M zKsCA`CB1L+g6?OAw=mZ4%f4gW;&rek)wK&6i+ip^f(EEv&|g`Q+O*f&lneSMA0Yy5XWJ}h0}68 zue+UM)#!qh^uEmtI=)Nimdi2LzW}UoV&C(?Jj)$faRNrSJivV1dmR!qK<$D)kDJ=G*V>c| zx|ICnSkfkVb-AEc2I~5=-l!PjFE-$q~jv4 zLR^Ot7jDb(yzWhkRig`1()%_qXa+Mpj z)QOUHF+#$QAxqOX+(DR{ii52yao6r{D)tJ^AE1SMq#>K zSzp|Ku?ZgmV1MgM++rg)6~7$1qapT8@!WJGwRdB+rb}^GI3!f8s5R|{+dDSlS5jdg z>q;E4v73sghVE#H-%s(}v@`xX7)^zqA%~s_&Tv#1=V)GYJ^TL^s|~7k+k1g9aP0-_ z;dXOYaJGC2J%P|fEZ+CQN!FD({0lyYI3hH!B>3$V&m%3Q_Fb$tQXfk8!Uzf93|X4C z;%?)t;B0vfjV3e((@5f2>q>0f#3PA=Li0L_U9SZ$=9lx&X?67~sMM(T>Y zv9p4+Wu)PRMqu%_1V>s|;(nWXB(ZO3-j?9F6wf0avT5g*!!h~`+mnuWfcql`V8n&f zay+lQnqt-H9pI7B`!?SJzD)iV?<;hrg!gNzJT7FLpj~V4?OtT=^}VJ8+-8|OYKx7% zR?wuiwMS8$<{46(r~IUPNi*MG%a`}0Z;)T7DJ{u<*(g@;29{RlLuBr0qivh-EapQEr%SRJxt@5cSDv%>o!%WJ2Vt$Jdb zS^T+mt2i^o#RVxY-k;+6&IjTjj_K6_P7XQrI&hPt!rhMMH7YvYSz+4R*`sieaaNcf zvdsJd?jlSxi(mUv=vJ|>bwfNZ#l_=OJokT-b^pPbSy+cO?;!U9146b5M>(3;sOYoK z3VqhjzRNcM^^U@xku5V1#~p#iTOk~2U5R}+SA1M0_6yC&0{Hb5&;4gn`!vSPInUA-l6MQjb^PCjF;ae z2w4W*7I!CS1!v2k69`SjG^jYqx)QhC&V!1rq4{?q;5I3q`@ci&R@+AZ4se@g$>P56 zknmX+*FNq&OXx*s1!v22y(sPz-8vfLHP)@-^c2s1zJ)&$;}(QzAU*3MuNA7 zW+XT##mh+4?ntaY67HD}30H<}j)Z%xvx2kDkqFJhVk9` zb9kBTt6m^DTc+zpac@l1iG8dqapT^ePW(dXj)wT96wm#~QF|L!yOL*dUvx-lVMXnW z=2qOEu?e3k!=G5UiWjAL-u!UxcVwXN3tN%i$*DPQl{p;Z*BNyl6Kc zPP{mDM?<_K#dH59)OI0OJKVvz1052^hAboPj=Q(Bg0sz$2u;CaBskT&5-;kLMuHcI zW+Zq;ikFe7?Lw?R67E2Ugs~x;BjN7ttl(^OBtlcL7zs|buEc})@JQkzq4_gq@R$_O zBdy+@ul+Gb623^9kD00*7_v<`%F(>03x#`o%|+mT%be8~TY9aq+uCbCRf8UH^p=RsrXl6 z%r5*k8S9oqj}A3?Ef6bn(fIP@4}qb7JqO^cp_xEjq7k{IV(6@PSmnDyJ9+# z*x9-gZ}^%|B+d-Y?*zk}Q#|)So7x*OrdtDcAdM_p+;bcfE(uwtYsWp_S;5&d-CRQR zFij`Ux30t^_VsjPTj-94cvOn#{#)(Sx#dWVk!}LdS(Yr-+hJsduZ1krRk-UrD>z%G z8%}5h7O!tO(z+7w+TYWO_lD+YUGV7?&;9?lA2E#n!VRQ(H?Uy*-G~JkapBP%&+E1z zpc;K2N=fhA{65rDX6WjDPXN;_KLWj|X4kyYPjD}DNYDVaPqSZOL2A=pYg4{`bOPlk zd9~ox<${(HT88O@#O2nNIHR90NW4BYpBBQ|DW2yWegL0!V~qR~*r;#F;ovIESHNa0 zs-0;x?l^~pi$a!%dI;`e&I-kjnH;*8K84e`bl&ojSE?JmS> zBb|lY;gIl?kY%Lfa7Q>RINKbF&^#^^?H`i`!91=8iZJR!X(r80!qm^%c-qy^w*Yf4HyNLXsFvbwP zd%5)CG#iQO(#1bpw~C8XTzoUd#kW#C&wm;I6&M|an?nx$3wX*=VTGf4jf#HhtgvY9 z>{Ylwb5?jHWO*5_#9f7HW^uK3CBE==zfi;%L-Pmf;mawW`|p823S;IRx&!wvhlEE$ zmZsO?&T>|8wp`;%LaVSC39h!T#1{@uBf%F#GZK6`#dH5X@JC_wk#O&FNO&Y`J>q`8~H$0NKI5hvr09=vcd8E_uzk@N7aDB*OkAbHg6<%~SuQ}%s zzRbf|^B&mg(2(B;cUb-p^zrh%MjOv|NVq3tIp^89=Qt}k+dLyvQ#cX#6o-WGhb+?_f_s>=g0p41nS^FxnogW; zU5N)A?&-w7q4^;WJSfHUbQ>Plx#d8Nk*0x1ElZZ_O)#>;jv>o*A5i>>7YNRl>DnkB zglRf)uyrNAeT1hISBBD9)1a-zdI{*jcn=DirXXYC-$_i z#PtUI7R2>K^H0mb4O2Yd!pYRmz-mW-3HKF;g!e<1qd$hb#96`F=16ScBefHIT36yT zLp+lBY-oPL5Wb$`d8A4B7h;Sg{4(S)RleY;u)@*2=34fD6l2Y%WDav-&T5N091)32(tHYfP{XAmx|Bhcp z{ylFfcy+m=(X1E~tN9r?9BW;Pw-56rh;u{pKi0s9Q#{Z2P5i?!EElXn?qVR+9BbZkmZ;|aF2FYaJC#{F`*@xo~8JtbtNut_c6pJp{ap?Px0J; zWBkJ~j*&w@#hvDm@Vk(u>3O&lofVud11}}C4AV&Ba_dT5dbCFpmxZPV{wu|E|84M( z$7&k;vA74=*}4+n3_Y$A-*UVmzLVm)=|TACW3{G#z}hAd6j!|mp*;A}bJa6%)n7zvKFuEc>O(n#>I(2N9+Oz|=jwJ&1zkto?3 z(@0>?kj;^ByE!X3+Z>6|2rNc|BdsfO-H{$itU`A*#Pw4=kMxAroEZIwfQv12_Iccw z91`9MS*E)e_kL#uXUlY5>C`QC7Q0(l;%`p!bmG0C`F0e%KgDzZA5nWJ#_cpn?Tyv$ z?h@ReIwaf}vP^d>?kHykXUlXC5L$@o?!-mbm3YdxJ)L-JXnsQvj!N-7-EJrIlYNYl z?gIa|%-OF|eE>#QI5K3JZd2SXoE4lc(~TxH2GexnSnEoB{!~vVE)Ct$5H~)}@!bEF zQ}|>KqrdPlCGjnme;{7Lhzng<7V*4pSAwe1w^-hR-naQJmUD@HA7i~RC*&|ye(b2A zU2C5?zt7y;d6seDmzL{Oc%awh=GyH}hXf5>+h!H((r80!qm^&5oI-iZx7YIJTPzdF z|2Vd66TEx5^j2o>5tqm>GQ*zM{JZgd(fJ);t~fn3zsL+9N%1`Yb*J-6!?+ybeA02b zQxVr;#DxcQJg<9|V%6xlI634nRo>;Opj~UX^$X^H24l?*Z2v8f z^)UFaWp1wBPWLu~hOTXM8^vj~A+^!UrEf`j%D30@<izkh7mCV2O9>5B<1!SqTO zpR}&TXGZzb#b-nFB?{c;Ovm&551+wjO&A9i9;AdzUoc*^FJQ!l%~%%kyzWJcmwTO% z*4;b)-xRO$Iw7rV{%L{j33{F>13Iy(=V?ByG33wjdf}HLhpBQsjA;bzTD#?84Db`r z@_*FttRF1N148^(A#ab{?~Hvw->@!bE&(fkq|#z;?rE~IPIosD~r zL&7B?%XE9;?&qxFY?*E@p?R356X#o3;s+1!=;I$VtaJx7wI9rY} zna~tW#}KDlSK<-h^)bY@(ENB09+l#`f2VQ0qsBPK1>io*oZX7*?J%;!*Fu*5uTlJ# z7YNRlM=+e?5tybEM_O0nZRdD8ac*e7>W7b{c<%puY9GSrFHDQ{l!3p5cVUEu2U9q& zS`S|(d~j-0&bv1M7U1h_wIy+u=Ow4&j&ev)qxw567NiZ^Ya5n#IEPa{*sBGvE*G(w z&=O1+AwFqciIcwPix4je-O&&)PVqe7f#-H^IUCbOfDbK8mg<8svcj1m%VXLecNb>` zXUlYx2~EM`MFgi>SK_$udphyEp*tGl4^lk$f127Z#A+A17w&!z3ByB{rW0@{VrnW* zvgTj9=eJ*e;HKil(A2;mr+9AqFtwjxwWbG9G5{kad?#eNhn;bIJ1aO_Mw(1$3KsVO zr&?FydFOc~@%+&IrZN0ciszA@rgnW|wULg%9paF1O2{(OzPSCI6`XC3L}&^YBf+WG zl{oo)k0eeB&HDg&b&8jfs9m2}eI(o=4hcU9*&GSCpRphoNZl+7yi&A zi9Zg_@1DU+Q#_Bfg4)f9)kZo5_b`Wq(IHFI$+%N7H5K2tZWTXB@x1x(@fTriF02Vz z4mS_?9%qG>Axoc@@vOttN9=4}i8oB};l!Dt`Pd6@PVwCTY-(@B=)VT+K)QC$vvJRH zNVp_qnXVo8cxMG?%XD)I&BHXEIN!Pwubb%U#2KOa$vV6-#q)IUQo9SW+DK>Nb~q&b zBxD)sINTA=3eGl1A~X++k>GsmO1$&}k0eeG&5y|7%_*Ko+5vwjjFE(Ig&cMnnC7T3 z!_mBE&mZx&g0bcv@P_5rCUtH(3nTh_u-Y=O(Z(aaqww9eciatkPiF;Zo984n4~uic z`PNnNBA>Gp>>RqIAyz4#`|o)nGh&f8uxjJ zgttPL$8-zsubdT}E#r4(lx}G>vAcC8?th8L7Y_*C(GUlucXbPr5#i`bnc<&V+RJ<>A zM??I5is$}aF6SFW7$aQ-?zikh)&5v*&`WVAJ0#2wSq42F_bg`xXUm`u5L$?7P;rqp z|2R6oh&;uEiZes=E)CwD;(5@$@%O?x8yx z;-)E{`yYHIGhRnlIVm22#W~?f z>q=Za!{-#A4b8WC;Oi-#`=5e;8pb(=*&&B50WUZztZ+21`49Vl`RB1_G`QLFeX#R& z5&Z#}Yxyzg?Va*+^|;j`;ddd+qaBSq&RN0Pa^#hSR$)4_xZ1iBzdX}N7Pk!D(Ga&z z@!bEk>-n-9R3=aA5aeQIBCEhhA|vx2i_&|Vbxj>dcg2llb9 z#LZ`UP;raU9Sw1-6wm#~Q9B1?&>VUjca1~Bx~!;;^a7z}&I-;pN20iQv|uFI$GQ^R zZ}dpw@X-8Quy9<8=l-9=Ums&6VW*Hoj|L|>DvWY8uep)^pTKIz(7Ik;AoO2*!A7{7 zIV(6@ULX?)O~mvP5GPslPulXbn(bqVb3^kbJA63B^GL_yACEDT@Pm*;Zv%HZD%|gA zUh@w7Z{=(bY25^egsCCReV>GTnzMql@Q}o5{hpCU)-?|dFx!KnxZX3FzA?}po`J5M0dmmPNg0JDe<&e;o z6}A8Cq!(`Q*o2oF>|Sj@sL>TGMB7Uvx-lVMVQJD{hb2 zgm0L^p4OH4|F}92FsrKTeNVzgkDVf-QQ}2Jqp_e!h>1oJumyDxgfX$uj9o!4vGN-b ztN~>Jdm9856?JHqh>>PNQ5jLOhoV7^M2e`f<^O(b?Y+<8@AItZ{nlE0@AaK?&)g{t z(sY^+6*JTP$sOz*>T&4y5Aqu(1Ve>&1YbnWt=)ok+Y;1;g9)q0eS5KRKi?;WeNWZy z!ood$pAh!tKlL8UVx7%TfsRqr{p7#mU61#r1anVh=@=gor@lk_p_c?rExa4(0>asS z)AQ$w6T6yoo-5eRbtdljkl$@_f76wccyOpk z|5vm2S)%X~|Btl9GD<>glj%|ag6?|XAb2;o#Nw`mJ?gNV>rCwOuv-$ln#MLfD%6uD z);>!VEs>U3CQIPgCUZ-4*ZT&+yU9{Di+d5WB=&ZliHAMnmc+wN^H0gbBSSq}x|y}F z5(P^;uw+MqlCZbQWa$Sj_O9UF+!Cc;gjs^UU1wsa>268AuOJ4i>LY!VX+U%|7o6A zSu7*^^U;}MfwbKCh2($y){5G$1cn98;H^fx=6Y4ogu)xpBb>j&eZ}k2O$Z}<>RQ5> z^gq|u#fE;h`Z`fRAum`;Uki=T*Y+vc?^9Tt-s?)76V9zEtgR`mP49bquy${POBMQ? zOdme$NY@j3D#VShGx4p*{izV&HeD%+?}vK43!TW%A(#+Lw~^lMC1IY)G;{^&O2QsR zxY~6lKG)zw#d)SHCGq)Cj}!JF?@JVhUPXGXmxPB+rlCto8wm{+m$}Zw+h_Su@eb3K zl6Y^Z$D!3T`1l|g`Uco?rpZ&ljV@P!R%|M`I-hi?mxM7U(??}@(qp|VcsF^jr!<+6 zXK{+_Ogv(adltKx=3775Bh;hk7PEN|Ca^RKEOwc?tZq%v74|im+?yws;^n3* zC9yWtPoh0u2jOnuYYuD-fiyyU)8Yc;Rn@lHlAni!#B=K_BW$}to zkDiVvKZ)QZ;S!VSq>-ef37sT<=ejIb&Govto9nXJCf37<>8yQ>V1n?x$-du%5-X_+ ztxTr5TJ*9ltQIz!Ox-!8fA_BNjmh+Sl{u;%AhbDNAn#4!LKtE)oz#`| zDDMjAn@lc7l8z!YM;z@s6OVmP_2HR#oN4~iBY0w{$N5#y^6ekN{Hwr|F1PvzKdmLG zjt9@XjC*$DjJ5<_;SiI_^H(hXuWt~%n><&uxECSMVsF=(_~ktJEUq)n-=Kk;LOsr3 zz}gK2^Sjf!j6kL?>5E$8*xPkk>=Wv7&H>~d2}TRm zCexg@qZnS*JW`@y7*(L$N6K)ZzPy6+;6h)``}}*3Y)wd z_h`|>-W8T@-o2Uh4(|%fO{OcVTEM*_?B2lRT$jZ^hI*XShI|hKZ^F?g)74j#_9E;V zfW2L3;vEZBAD)TzrupGLd@I!BggLBzhG2qlHEsJU`A)=Cg1Yc(tjB#-6tsq~5PQyq zes2CxwH!;)wt9YQ{wpYF(Z9=2jayccuJMwfL4|wwM@r$qn!|MdTxg|=y2z$6;Z`YaF=|#6B{>C)lE5qN1dYpeVYZns*OW%_I=p~`dj^g*qq+RV0 zenbJgxz5D)FZob$FVprAHCv>6994+n}ZU1#DZ)BLR#__fzd;`gB*hn`G+Jy96? z6zQ{G5>}W@L#tk4F`)-ZY~nf-KQTQ#6aVG)lKAgXk3)NqUq%#$P9uHPOTto1PLvJI!+e^YclWFJ*(v^h0ox#_?=}Jj_CDh~4_T;A!g`wAxj`NbxU@{F|O4>+hsJP5^CeC@yhl)>_u9U=QLOl*` zMSd(%7nN=!wJ}VJengkZROkGyDCg=+LnoRD#W$}-`LGW&JSIy#HguSw`x9d#&@-25Kt~1S7 z+i+8;$N39byMbVScUqSbg?qPv^hGZT@0m>Qrjb7CUBSD_UDewhMaZ4l#C0a#y4>A~ zx0&WIdceCwJ-WM?wf7NNS_j(GF1S0F^dc__SD8%is!31wuHfC|uAb6l!d_W8#dRjW z^p3j|mzw7H>ES1#9^G9*K7zoKaHq+>i@}>-6+ZN8+|z>eNbkmy_SJhym}N2<9YcD( zcLndJi(E%(J)z4GH@eQmo8I%w5XYP5!w23R>T&+Sclq!kxQvg%F0>0bc_8UoUJ@=h zndToudc1c9?es@}z5ruoV zfb>N#3GbOq?xvAG>RrLR$z9b)97V{T*u-@v-uh2>C*Ee74+-W9x?+|^T>OxP<6r?}3sXBu)tR=$C<_woDk~C5^LK~D_SBQ>?Pq6les0*UfvbFn_HqZnJ`Om zit9`q`*E-Y$C<_woDk~C5^LK~D_SBQ>?Pq6les0*UfvbFn_HqZnJ`Omit9`q`$@0_ z$C<_woDk~C5^LK~D_SBQ>?Pq6les0*UfvbFn_HqZnJ`Omit9`q`>$XLjx&uVI3d)N zCDyi~R?Pq6les0*UfvbFn_HqZnJ`Omit9{#=~K5PE;Y@kb@)lBM@v_bk07ul+-b7!V(_L{ zg%7Sz$B;@{jb0!x#?Vwb7Q>ed8ZVPBKU-M1|M(KiU*P422$+>4MqvA63?{Bo_k z6W5vM(>mM~>T&)8)@~q}-<{TFMB&~oAbrtG!h0r@yJ@74dROpna#!^qjw0kvY~nf- z@BPxoRp&y*EKu_?^k*E+gH}yMlLA8<`cSi;zHM%c*fW6PV8@*-}QuNhI*WT@FxCG3DgU?*1E~`5ebcN$gCU-lN zw(+ju-Q;cvrJ;n}iNjoH;tt=sJF%JRN=a-L>T&)m*0%V@<_`w9yG&iuHC__FGnw4I zMEa_C1@9(zWhS)^lf`zfGx53qx;t^6X@1!PJ|F6F{sh)8AhJpwhKGNVXn(!CDh|ZoIu{2;3Q#)$>g{z=~3Pl&NrDHk0c#U$g%jc z>$3PtsK+^Xlix=$M|ja>I%z5CGQzGM{^Eb(+TpIQ^J}NSfzY*s*0hV)PTDT)5YKg8 z7S9Xy=;?6sBMD9t&N7)i4Iv#y$dmYY*JbgUP>&~#BcDKUlJKO-bkaQ1g@jHLx2`Hl zm&I*dr>pyr{wji#ge_?ouC5tr%dkWIlk2kh=TMKH_9s7>;3T1+$>ga&=^#R$#D`s% z#YaLto-~5|DuR=Q2Ti7v8c1gmI!XM_by@sA)Zlg{w2;N9HP&pC=POR$OS zO#H$$mf%{im&6UB9_RNUA3+o?kuLI*u-s&BiFAf{1@GpTns5|hmS7XtnfQfiEWx#2 zFNqsMJy{|jK@=^KF7lGF++=QvbcS~Y@8*_D97UKV*u-@veqkC*aIM!%;)YO9mdHmC zMN6cMyd*3)nOh>A;a$PIxuvEYMVKYn#C0ZqVH!(tt=CK9hEPwI$VU)GOQeguBrG?X zTOys|UBSD#r7bv$FiWtB>rDK@G?w66ub0FPp`I*}k06ScNEdlYSZ*@6L^{K}f_HOE zTXGa(mS7XtnfQfiEWx#2FNqsMJy{|jK@=^KF7lGF++=QvbcS~Y@8*^=Y!I>}p5?kM zo*n9O^a11@2}TQpO{O_*N%!)u(BEX5GlX;~p*i9(*O_?4HmdXQ!@@46`9>P{2=zFB z9c#;5+58K^6qoD4URzsrIC$7)-18G@6VAc2u&>GF`E9!I`v$?g$#XS}dlB+1_I90# zyKnEF#j2C7- z2u>1SG?`9XO1g~DN#ZYdFkKdRb)7yTucg0%;3T0n?ZPMIGHJW8Lp;}YSv)V)qo>2k zk0dxrILl=6G=y|0Vb3ER<~kEkZKnG0OgznWr6djv^*CV;Yu6G?h@}HratJ|5IND@- z+;$^v>s`USxg|=&2w4&rx-N^0LOss8hkOdb9ATcxG^dXA7VipkO{O_ZNgD~x5tq5n z#HG#s(#1y8tbuQbdYs>i{CJ{p={J#1@{;h3$zZC2_UuOkB~z zEr}~lvj+Yv)T5>LAxq*}uFK-tp&mycK;DsH zv@qCYn$wnaFYgNdO{O_RNQV-dBMx(&iRZWSOBXLNT`7qdhkBephqY^o!lfU`l0yhe zLO+wq(r%<}y(@S(SsF=c6d_CEXxIG1(OB9kSb`Ur#uB_Z)T5>6S^FbVuyh1Vx)YRy zekPNp{YVe;uHfC=5~b0EEQxDem&H#*J&t~id=|kR;bW6&&ScUDyeq6QndYn`-AHJT zcwuYPWpRk>k~lWh#c`n?=kG@TOM>}ACzE|I0u`?cS9>+?(W2jZS2%0)ZhO*wy(^q& zGF{Pl(mFz(#fh#nammiA56{GeK;T*Uo5{Yff;YV?eCXA<=jWsc zdpDM}Z@ia;CrzfCTOqy7yMlMqWvrvLk+542`|aYlUaWDQK5_k$yd8mEp^wRQQghOs zyem|jOfLG94k9#1e9?7Td@0o9_1s84kzkIn$Yh!`iu4-q3iC{+IZH{G5t<`*{)JzU z_*>WMdVZqcgc@^%LrkVQ>*;$#A87{N)xRFi4W z0MfsBSEx6c<}{GbA~Z*Ay{li3xU=hYJs;6uO)y8;k#^yWszyq0dsk>?-8836+Af?Y zUhBFnUKi@|dQKqkO)y6oV=`S&SJI=rD~vRm=8Pw;BXm9DMAw-(emB*JXJVac*1%gr zJ2qHycAuZwRG&f0v#o}~MD zSMYASjCx9w30;Ob#dRju@9vi&PBzUN_&}&fOP{c|4Yh)$Ge`$}N%)(|G_)saFYgN8 zO|MD=r5S`QiL+d1Vnf+2i8D;I20jt$(b6W??oX{?=_1mKmxMb_CQGN14)Ctv-DGJV zrTK&`i3?q4;=HzQNt|z*HSmQ{kCvK}A5Ii3)sl|!lJJPhWa)g;q23j|n=CD*)JVvZ zxXg7XF5SZ|iH)XN1K$qyXsH$X@kGJWO{9~&Bs^m>S-O&Rly?R1CQBj_yBH@eQmb$hxc zalL8Qz^_9+TIxi80a38@IO%LJ3GbUsmhK{*>|MdT$x>B&jv{19Y~nf-tM+nB;?GR8 z25u4S!BY>`jvxw_o+Dl4CE?#DlcnjTGrTK!H(6@N@y)|Hv8C%w{K53_O#IR7CF9<~ zYOr)Ny>Udr((9yedP!JgGFh5SI^Vm3cXLY|-`qx2N@7dbnfQZgEWsbWUNZjb|FcAI z98t7H`lgqJH70XQr1QNicsIAi@y%@nmS9WQnRwE^K3c3XT`7s@hI)LKzS*Z#^v{Fo}zrrs62n=Wn$ zrJ;nLN^zL$Ox$CCzc}$%ruj=!aCoT4`Jexq4=Mtq!lwP~;@YulKZ2@ok;!z+JF!SB z_$yLf4uyVZU6**~o%AQ$LDj-`Ea7jiO|RA3?gXa_I@RiN-%J)i<@-*eH^7(1?oV9R z0q*olFvDd_*8kD>#D%(s@4O^veBleaZ`c>iR~O8uuZeD8OX&A0^wZyK(-nn&ja-I{ zPk)_j0sR*VE>iI6=_MPgYUH;%;!wM5ccK&CyjSlth0H!yDx_Br>=WEw;yNu&cvM$@>ftSo91V~uv4hV>wBd` zsp?gNJ0|?wWZzv_wI@MU*xzKDJCH>ad`~<^`__3$XtMc+Hz~dAUBSEQW4H^8yAiq! z@dnpr@o%9X=bT19kieL5t;u9;JZT-Flf;Rx`A5$A9_V1dA>#F>^^csF_(#sY9w#)i zb}MR3h^3=RdwNM2W-{47g!EAF3f|2vQJP4|lK7tMviN?e$2pIZ&mT0y#! z&`IKI*O|DaqhEyhs_9Bed?VE3g!bg85rvDpmvpL^geOg=iyKQ?=Uu_Oxg|;~39|%O zyUxU{lUov-ndbL|VEa&ymYzAJ#J_iLmW20B_T7qAI}#Wb+L%mpPh!zkz9$}|eJi{q zY&4lREFxX(UBSEQB0F&UL4+gr%i;)-2&k*5@nc7FW!zjc2^Xm3&Lc z-ET@&wFI&eY~h}Vfcss31NP%Y7W^NW3bhUO~J`P#0FkdfYdi#ag4!OltbMb@^u|YN3Bjp?^%=zYdRO zpL+v%&Si6U9YruTF1(xcJ}(I}Sa<=>%Wd>2j7c|mL*B0`^wSL<&T*If>4Kl0Ztyxv z>j{0Jh#OsJ;!TJ94Hn0n=J%lC&7mIs4?K)d9t4;4G1!H6;pzsGp5-Osa+B!;^%&CQ zy(@S(xvQr%nUFhiit9|gsY`GN$D76-d@$6byD3MMsvaV+BwS9Lmw$S#)=na*3-`r( z+_#>^er{cNHT~TD<=^`c{A8BUx!@z09oTiIPkSAdd_X*NAn93N66B@uN;l*aYYG$7 zE7_6dzxCaM?@srsfzk{@_ez}QIuq~h=J!ghH_aD+@X1h*{$?Fns(PB>nuHr@+r84- zsRVUlW~|43KcnF1^1n4h`?>kO>fDvl33g;73*wmrA}yIJYm}WV%ukCxv>P|0HYI5Ewo582)&NK+Xf3TpoQaKei;Oz6P4G9~rj~ApMJ% zgv(5(kLrU-J9}5~Zn9rbX)<9S)o_aIOq_Uv+ZQL9u9U>vLp{zv;E$!M(+Mm!fKOa@ z?#Xuu1l50ljV^l}&j$-Zb&0@Hg)8|B>3Lof{?BB(k`APuyeoJ&zY1H_S#2l z+}DPJ*6<0eOFURQ_76Cbdq}Xq0es?eFe4`UwC_O&4k+BMn@R8Rk{~aI$Myp@go!nU ziRq*A43-b}-Gc8+ z?v*&pbtX3a+3%G&!!&E)6QLgcZDQ^I)bJNe7m-%HB;08-y?m#V4)Ctv-DGJVrTK&` zi3?q4;;b{=k~rIRr6fKb>T&)Fr}73yU}-66dYZ|8V64lJK+DsudM3ET)xsA-Jzhyu^23ROrCQQ4 zUJ@QLnJk@8I@G&@cax>1lo|;xS^T|k5WJg=R6=o z>rC@k1mUJokMkF>b_2ou?zAo=kf}@hqL+mCOeS~JNFVjC;N9e|>MV{TjbU54ORp3dNap9J1+?HUWu)E1*^j|Fgw{H-s zyIvBiII{5OI-SxC?+V^cp35w5YaaMNOu=@pGx6e!+_N~$G{18QFAeoL|3TI+C$O~7 z1$>c0ARh&*Tpn;Czq&$Doe9>sjN5x~+;Ie5;WU%!mhVKmt9J$OCi^2PjUsf*#nG-a z@r{e!zPQXZzt95T3H3OC%OQMjCzyXd_=n5whVq-C1l1eCLYFPrdo)2cZoi-OVJ`{K znoRcpN_vHN1@9*ND=4ibWM5qEIuqyr)$NN5OjkLcx3V6un zCa~{ttNs-{;_^FiAV(FhWD@D^UJ|C8OjmL`=^*b4-c47slu{$1D-oBu&cr#F_?3uH znC5>l1)mA^cqOgKk0lD0E+rk|C86GA8aj`3KB1xFLf4r%>@puJR!mn);$@*8haP+> zU$+npoee&7nYyg*OwbihH<@n9&ZKR;D|k1#8%b#tVb3NU?K%^Wz0%!@$C>7TSPD-J z^*F!ka^9>6=3fP#bh*_PrK&#=RL6toUB*4TaYkE$u5gIS;V2)JVv)xXg7X&Kc#N#V1VjfdQWh_2{`3`LRU7(xs#$yd>0{Ohf09 z&L=cfTRVY z*O^Q=>JZXHy(@S(d2XOIgOF!&mTUfbzEaip*STkL2h)|3xMQeC&z-O4CszcPo(BJM z+2tC3az#*m5&YotglqYbBntLdlK#s}!hcOB`!h+O^seCDWWS7+w!xa%&UGekd%fEi zw=-QSi7i4s+CP)EcM}Cm|0Mm`OTsrMlcgo3jouZ!n_J@ewqcyu&UGekdqc1Uw=<0; z*do-ECDz_e6fKc{>?PqFles0*M(+yV%`I_!+b~XS=QCK5u=Ew!hjzi;#iW;bNw~pea#urons){7CU*^#W)Sv~3}?B{ z#1re>omg#}KhA?EhkA6k$9R4zhrrTQ@UF|$W%b?!UEy~ole>&`JMRkKP44#dRh=KhcefFPY}YmGHe#j}xvSA3hl>D^cw zLwdcJghx##qbo>P5;7{TcAbfBZ+4^N9;PcLaqm!%6Hc1MpC}U;jinDsS9wX;iXDZ& z<<)`oAUlMgs>6=1Gx6kGe5hDsn&0Mv=Z1QmunqZk1Ve=`Cj0gUr+QU5)2ngMeVqRW zQ82nAD|Yb>!r>;<-5EkUl+fJ~hq=zg9d2`@Vl&hH89i(j>T&2Q*0#9Sh7Ja|yG&iu zHC__FGnwYUMEa_C1@EShhBA}dg~{SQuFGP5sEcz$U3@mw+!J(gic=`bSM+i*Y(Mlcl(>@@_22%?Dl*G^p_Eo=r(c?dC$i zwEX5y$on;#7y9Yu&ZPe&!9@ywdb+to*fG>j=R+S3bDfE&-s3k{Jk2zJe-sW3_2_>N zYu6G?h@}HratJ|5IND^ov%8VD^{(LE+!CdsguNTVVXiar)O&*^c$#S}!GWP3=g(p7 zTB2x)C5I5Q1dcYDTOw`iUBSD#B}zjHvjm5^&csT+TM~zxu9U>fLp@ny?OLK>X@8b< zA}9&Iqb|L2yHRWFZQ%@)$$jRCnlOX5V=nK=GFwM2boWJ#RjIuq-sxFvD2Y1Y68LOojggtcv`6)c@WI@n9X-%KV; zJxP0cSMYAK)IezlAxq*c*O_?NRJSDFZMsqt?+f*4X%lPrr&h3Z5oyIs!nG!orBg`< zcvtXlZi&(i!YsjAt~2rG``wawi|I;9yff63CD!gktzfB!^fWICBTc5E^`w&tduiYl z*O^%VfDaWXo93l~4}^Lg`Uz{>P%8{QgLJT$guj_g_n{|gFYgN8O_mxc%^>VPz*(*{ zanLlkBn~!RDT(KVdbG61gM3>+U}-9N*JbLmdT)ZRaDvI?E+gH}yMlLWsSoKXUJ^!_ zOqbC>I)kv=2xqy@#Je7LqvGABdBWj+p&ln}V(tFa3a{)%q!lj-*P2X2PbD4TUBSEQ z-ZfB~L6{{t%XKDh|Cn16cQDP5Zs3lg9xZi#gdg1ySb7@#$7Pr4yzdiKUj#q6JmFE^ zk%@x+m8AdjlJH-X$^J~zC%r3pH`y;^rERb#wsW0{|2MrsNBa-5b~%Bi zeIDmW!344aeB!cm1HbG-Q2htk=rV5a#c_QJy23doll?tN_x7&f-DH0}r8+`)U!3SV z6Azr__QejSDSE`A5#?Yh?nt82se2dJf;a6IA1#4@g&fNys>| z@O9s8N>6)N@NV+lfyD=z2fnw29bISQc2B!!aeLF1lGrlTMPO!cZT$E$IV7M<%|;nvN&CzJlkyTY9&(-qAlolof55Er`6#Cd=B`z+2k z%^LVZsK@zD$qy$Ax3QLVjF*H*Os1jdlMeN+;N5f^mr`mZWJz4+Iun;Zd)BL>y_(rHl zOYO-|BMO%8C7tRe;YpLp(pb_u?+V_{Em2xYm?gN{btZ2AoLdriFwGl2+%eRnrBj~e zXG#Q?-T~YF!{n);&ShMv48J$P^ymtlfCZlDBwhbo4cCIsV+j(wO+|D#V z0*5U^JriS1lx;W@{Bwk>e|8WYuIMk!12U)wE zz|vj|_&*;K$Opj(E`POTll>v2!@VnbH`!l7X(eGFOmMa9OkDAj+ZR`w<~;!ZE7ars_T;A#MN6bpy(GM1 zGFci+TIXHCyUEfzO6v((5;wZe#J3i^CGl<3{KHuA{ZNmVI+3446fE6FdbgK^c_!1) z6{IT(yAN=+>r8z9WgjZOV48mz3%(NSacFz;Q;5RQ>qy6WNoX*chAt&tMrf$m`4!V; z@wcw|v5x=u6a6OCI9xcyWV)m4>3&Vn6*^cq&FMngjnEwNLDyw*TByf47m^PnI7ygl zGR+x4`WNpC^(NDt2GUuC=7_DA`1Oc8yH3~h5&hK!bA%mf7rsPlr1Z9Tg=W@GbIPRc z!g=DguFK+ep&qa21oGYlbA&M_)Ae*EJ<7YnNRw&Kc+xsT*CS4Jorwp&uKMsy>|mNN zZsFCT9_MfUD)tHH3%{Vv&lIQEYV9Eeb>XsDkNZw$vDUEosoEnEI@pr9VhSrB@{@&d z@-$oAhsB&Mgp;SGzYg}F{AB*ZSblQ;7sd{IjUOWuoFIggr`qE4{bV7WJT;ws1B?A$ z)OAtQ??wJw^q6>Oq~q?oyx+6X zPydX4L*B2B*U$d+e!6dd8GQ=<^h57s^L|a?GSg4@me6nX3liLY{!no-b%Z@saH8u> zymF~ORN@HJm6CW>sK+aOi?!QP;{}SP6G{7cNjS@7dd?3c?dn~@ySXJwb%a@h6J2NG zDa+iF_$Skql6Xd_$N9|~`7DBD z1lKnctZ{iLr(H-;od-6#jCb>FF7pDvCxY%(;e-8KUKrhLK0v#~TP+=TU(Ddp?_TJ4 zkNvv5e@wig#W#x=KdhNT2 zj|u8R3$|H3?z@@AT0?Pm?FNJnwj{1t&5FL1ZSazy z>nS{m{WvX5JSN_b;*->v_j?xl=}B6b_p1wz)AXVE3g`DJ^wX2HA@A1|`sqm;j@`@M zz2NTClT_w5wiS1lx;&UJP6C=(u&A*!gpAYqTeIyeoJ&xm!x9k+A0+E_0oUH+|&p#PO#2D@X9bP>=4O{E%;w2rLPg)8=WN zTdTE`2|&aNq( zonEu9EI-P33%)zul?F;P2;CKNmg`Ks`JaAQ#9K`Bhd1!fP>)x)iM9JsD_E`}JoA}pP@H{ctr7yVO`$uUg)P!7>6-oD1pa$ zV3W(E*>xpB^)=80U&!cc0O?=6BOw!A{;S+^pF%&q zF+864YYP4JkR8nI&St4vaChnTZlE-Su!juJa-E5vt@hVjTxXhJHiS(-_IkYjzfl`U za7%2iI!Mo}Gr5To5nypGnyu@`` zyfoC~oIj9vBd{w}Os10#BK?hbg&`)Bi;<+G2;DAmwChZK^Iv{j#CJ?rO5&zakMqy| zgs+DP<_pi!ws)$x5FZfKh0kI=?t6m8TEm0XT}?l?EiA;5 z?4YZI?WKt;7KIghM~MrH?=F92w@%PYROqLdXbg5{yR%(6s+z#eePFrEeb{_DQFt}x zlFs*%psOjo8b5Gam{?tym|n}#oE!Rm3jOqIZOw6^UsLF(S8E*o2{y7?@agH*DszL{ z5_+}7cCIsV~vS^=-*;nss-Pj-xb`n zv#YF>#A{ub#p^;nUi}H=y$P%dV@#$uqpqY!c~=-|GR+xJT1V*aixXXE;_$V8m&L!D zu9UZs;ljrz)5T3D zeZafI3X^HhI@0xo=7<|zXX4{u`o)P2rujGg;ESOi=P&;c{|9b@`NAEv?Ge)2*#vcA zL9EApdrw2o`=jM;rIUIJopIb${6H&N-SCL-pB|%dQkJiWR3uo69&Q6ck0G9v7 zcMHBd-Ib-38VTJMahdB({Kp2rE8;xUd>s#$hkCraZtM8soxrm25N+gr%i;))jQ(~7yp75SHEw}%ya(~L(H-$2V8sTq0$E%ehH==pe< z?B3Ub_8f=ZOTcuOKY@-MPZ{aHHCh9y$53FEO#fkyYzamptO?E>n*N!or$}A<*&C`HqHO$4|WRm_^Ld! zk?)KMZi(=|$-ci})t&@ZVSkfp?nx}V%J;-$v~Pu%gwp047ExO4UBSEQL%j=&yArw# zv775mT=cbHhWL_c{yqWxCe-8n12=JL1crsjY1?D_JYoq!UDy!oao-3QYmFYWccGt~ z{|Ko>E%dt=`stAyNPjTF`NFLx`)TFJUKKR8@K7z{y1pXV^Jm77ciXE#Yu^*i>9o7N zB1+|&)!KK7cQ-)&`;0adGv?a$ZEl-r)Qw*8}2Zn7fn3N zby+++)Z=v=K;Dtyf`!2*)63tMbT97;{Y|DhLr8}anj^1Ff;mEWlWES+NVo8=(8Xk$Q%%~7 z&>XS1>rDLeJJpA0;yTlOO9gv;@AWwUW!5ewm@mA?5_{OS_A7$Aa46fX9{08Sub*pg z%Ri^9gDr_G2C?ECf)j*r^0Znl-jSd#gp>21+C7$^JhyfaR)mxD_x2xH@pJbkgp;S* z;{E(&A)K85wEQ?0`@P`*;~NexeoolP4fvHi9t-BX{1v-S^J($Y7LdN^B|!!XA56`~0Ee#`GfWp@O|#XX0T$_`@R}Zn{zuj|}yAe{N>&s{}7`EbYLO9SObaU~iM@ zIsZY6y(@S(w?wHIVU}QT*O^%JKer_IH_g9e3~vqfIR9nVE+v>Rbfaz0^C^hI1a)CT ztjB$=e&o-lyg0k|VuTK6XZ~jxgIIA6!3jb*d73RA!(!?}IJxkg=O;f^t8O?s|LOFB zKc(4oi!1Vvgjr#Qp5l1KW=}Mi`YZP~7R-0K9lMSsa8?Iia2c=o*I4P`z6D)R@!{q~ z-48v`@peeZ-Mzw9QR`Xg=MQ(@=btQ%uT%bTuh08^3jOqOUyRu>zoyVn5BDbe-}waz z?mj(9^-P>%?)gVN;FeWQ^;DI`%yoKaevSSzg1aQ})2QNom`~{i?+R7cO>>%&HV@~C zEnR2glT9>pcqTq&x>6F?gnGP_JN>L_)oujyh5Kmp+}%~HwQ~vT!m3!0`v$OBYgpV+ zyBMK^Er}~0XT=;pSqLZJW{clsF((V*^thmwlK{HOLIuP9I@-y&DcN{P72GX0nB@-sZYtNS8;gPobY4-|uHG;Lbdir`e?Snp4-)#5P(bwTH{FaJa2(^wo%o?SbEZa6uAq(0AA z@HUyR$RDZRTQsdYg2%lcd>!G5N79Z!1u5?%${4TZkU}vinnv!jef6wkBwmj zhrI-se;@Tp1%>{PV#(ok2g{}?*1|FA5-Y3x7Xdm-C$48cr&Eq z{)h5@b)lc0&m+S%v!_p?pPtYDdA}y!64s{Yb2a@>{elI*y7YX`<6`F%dOpR4t}}6Z z=Fg}2sOd^coEhrz3YwB1PH>}Rsg`t%mxNnQrmr2&Cmrft!MnL7O7jV`1Q)u_#QV2$ zOX35jD<$!fP>=JQk{?PGES*hyftQ5wCezRc(piLtimkUcT^4tCoj%QcM1M8G;lhrz z3(rdZ9+X>+?lMsohV$~OQf%QNmyqx z4Q<8&&BK9WOV^qB__jV&Y%tBw%ix?)k3+9w?M#B9C0d6Ph51*JUh5^{4wLEiKAZFc z?+V^c?&eXNPuS}X7rM^GQ?_?^;-5_OJ4Wz~P>=2o+>RQ7rN_W(m$ADas}CaR3f)a6 zcP&U;dspyoa@U{I07CA>L9R2g=ML^pJl=GrB%T!NasK_R{g5c!u-#d*CqYT*Y%*Ee zmbAHd1@GpTC=DRY5**|@6L)X!mc+7Ye((c3hkCShbTcdy%onz%&Aa^ETCLrakS}m> ztjB#5SnTK4^;FZ(&EL)5#lu#9?htUl%eZ?3={H^yG_~-N(}z+xyQXkuf%~9iyiE$-k2skDqx2=N`$jO9*6~ z`WopnFA17jc=&Vy;p{&05zbDZX4~ccn!@b#a6Ul)5j(P4@YB<4(S;Mc5_)LFZmu(N z%STJY)lOUI6`guQgI zo9j&6Z)bmr#QjZIO5(wx9$&hvS^F$exa9wlmRP2{4_cc{ADv&&UGEzN@8*_R+?6m( zu$${lY`=?J68AD)DT%)h^<;^)PZI@8pOUWilF*DD#s9Mn=|Oe~fBO)2be)N(@9IOv zGfY=X;^0t^Lmy!6+XO?~|ANox1adl9=`t=nh>gD?=nBW0On0XlX)Esv-c5IB2&JKf z?v6Ojbtdl6#*K>2O!I%XfvrM4&R@ma7Q5N}!Qgh6sY|-XOTu?1le?ElU-how-Q=#! zq;_Glc&F>KSRd-*UyN#{g0)Z_FE$%he47si`RCk-I|i+6>wCeyvIC!I`ajyT0N|0-$Is@mOEAD)RLO;<|d z)uA5euVU>^)R-SjN0J`xCE;9?Y3O*;iG+rV-?=V}Rb{V>ySXllZDKu)n9JIK5DXRG zGTHZgP+}!jp_R!rSBu`Wh1J4Fld1bW>C4^~zA>3@W0|Ac5%Mfv>$)sn7wYlq4<|p8 zz=bfzWSTRcw2sh8;sn>3SnqmU@kiGk#GgW4{GaPgtZEzXRv7&twdn+t1uZE&a$5bf zutRL(IukG4LnjT-#380DCGq)CkJolSYcD34Ae=(mKDAzis1VeJr(-?t8^huoe4h~Z zJym;EzBvCp`x+~Bpgvz}!F@sNR5z4=?%avm&IE%69n2?6?V99OK?f8*eNN~6m2M{b z)5V05)!H1!q$j#A@Apw(Ct|Np!BYC{+LT^6tERBFrm!}Brrn*jdlJ|e`kGA7%2Lv0 zgq{_#T|3idaZlIjd+?v=H=)K!LfK?`e%I6enxHG}X5BQW18GM>bHrO+m&MycJ>IF) z$p;afBup}y=JX=%>s?{I$uy^)bPAz4;+A{*^@y44bUm-pUq&!TDA6vwg!3uA;9a50 zx@k@`(w5;o@lUSH;-5o3UeEsI2NTQ@`k728^(P%b$gw!cbtXR7UiIObIL|b{LIO91 zdYo`1d3S;d!ow!}YULuY3SW9P?m3zC&)$6ltaKT>?=pR>%}YAjP1MzBhnvWM=yfKw zbA5~Opvm;IRqcg6LYFBvah-`n_VLRUFEw2$i8q9LG_@u9Rs@$RbTip+D7ezA!qr}l zdv4_Xe-P|xws+I29t84Mu*BuAziL`lO;EiHG`fu2HRBjRT=?_mhc_c_6IN% zsgBSkixXXE;??{4C5zXY=6^2wWp$NU-O2 z@S4l=ubWn#Oi-N)-gO!G=-^}hL}AG0C+m2I z^IL~->jS+W=if=~ZUT40Vw3&80Y7+EXv(I-M`(xr`SOfl&*R`@mmOGmrtgV|>$KOr zB&;-xll9>Ja+I`G01$cf-3mvNy^JH(F>{=E4yTa)hKUBSEQ;>J^|BkT!< z6J7Is0yu2rd$5YgPT^JK+vrR zZ@JvNW7Dcr3965P6)yMVzyW@KykyOI$4kP$O{T-^N$>Zr;N5h|Wt_Anbje~n*O|EM zZ~c>TQG{{5YKdm}I^yl1lCZmimqpeh_}GP!z?^OqBJ_xTOqy%ER;@QKUL zoN~S&8t3TXe|kySV)GLpqcqFAf_Kw(c42W>Lf0vFbDfFb9O~C8eruW!O1Sm!ydLLI zp>{ukQQ>8i{j~B2uL@1sRQRBLn)5#+*z;Su7x=<>qK*!PKRvtV_q=fuxD!5RIbU2(ul){DVl8!{1!48* z`%M;W4PTITQPa=Oe`)Q{^g_RTp`ZT1>Q+3yNO1m69Q8-HFcYkCc_;^5NU$KzTteFD zB|%;b_jw}w!o)s>iRnwkU$8v%YYP4JW#QfQ@3SMT1wTFA>oV8amavZ!*v@q(o^XWU zYw<+Wm6F&e)T95~S-Y6vl6L+BKlvt*cY#Kiaba6F?nTfQ4mFt`iYn5k-W9x?jP|EA zh>%h7Mb~BVrBIJ^ZX};bFh^KqGR+x9dX0C5c_!1GrKF97=7`H&XX2bLenZ43O!NQl zhtGt1oZpK4Sc3VnbSdcwFA4P~)6jXO^9c>8K{h-y)Z>JMyEd&F zNHBCZ_{?SMvbr-tS2)gOx+Oc4w(+ju-Q;cvrJ;n}iNjoH;_2Poop^?6emDgOhkBep zleM1{ghaQV zV(oJT^S7bZg(%#GYe@g*CE;l2En_@ zXf=y_5xS#dZ`YZ4@$qg{ywo&bUc(zgJqp@+%7!@!kZ6|VMb-18jge@U<> zmbC9U-yoc}`Gx~XJ9<~}Zo0_vlm_kRsK@y|$VU)`N8mZqMP3q?n@pCblg{w2;N9HPNgPF( zCD_DuCNAvbH(6X{x>6DshkCR$g0+tlSo#4R)Z64}@RZA~*>D6=@O%sDon8_iGnqVJ zNIJ~Bf_IbWrIeNt@+=;5vgxwe$#r^H|A~GRYK#^RGMVPAr~5TQSJ>aWX-*f?u7u`@ z-CSp4lN!G_V##!+ByJVz@!mYk+O-4|4(rRCG=W?QzIAzAKmJ64pc?nQP5Qo_59_@f_2Yl6YaL$N7_3yNJM2%TxG45`nw}yza8? zpZH-WL3JAV&}H2IdyeZu&=q={O!l`WZSGycyUG3#N<#_Va&egJOze2N+ZPWpT`7r& zhI*X8mbGn8wfX0R$u2j7U!7*v%faI==@6aaY0~ z6WGmlCf+u{J&U)Su9U=kLOsr3#M-Y2=65@T&l?2tW$-_jz54TYK0);zupRr6ar=3s zL%bx6Hks@nM%vZ8f_IbsdP?j0onB22Z)%`Y*gy5mf8I3odtN@9_lHxcw2*1}_Nhj zGtFNigO`SSoIjPdZxUE4U&N243FK7puFGE!;k#Ob>P)c4W!&C_w^7lxbcI|WSlsxZf^anF~W zzq@y1N&7DMk}%F>GI~1cAnyv^O&2+j(tJXfAue>CiM=a+8DbyPm6CW$sK@yS4&&{B z;4&ToD_q9zUabB#L09;L$uxgk(&pY3yqmoDr!;_&J8_WfOl2eD4xUjouZ!o35w> ziw`1nMPf(SnOJj)Uy<0~G(U=g!$UpJ--diU0`J1FP4+zn4ECyUfmh?6`#Ap%f<3XM zeI0y*&~5V#JCg3=UBSEQ292aNim<02j&_}ituOP-5O+4s3j^DPdYr$3wR>D@mWF`) zUB>R`q+fbT_&J*k-={34^pZ?+V^cp4U-YPv}J!H@eQm*GIT# zajEG_Nqj5RqvwOk|3VZjO(4D1OTynxrlBiHR}va3u6CV?Q%3qwajNM`Nqi{O+Jd3kjXX2xy z+_U(Y=}JkQ73$IRCf4pxtzhXQ(u$Xa+e{`)r;-lvuHfBdX&$Bdge-{*UGvYi@+oJu zTM}zb^KaR~(?UI3I`}GnzcK2oVfdpOQNR!E3GtySx6}+3=^`|s|kUMdZ z>rCAGYIi4YW4cljn}vFu|2k{`M=<|{F}wp2g?qPzw9!k#CX>nCOwuR4D|k1#)1>BM zve?pfCO&?RyAvBs^H(n5oKTPMu43&>0!t-YhY|&MSCL-pCE*T}$=%tc7kF3jZgMw| z(tN^RS-8-3Ca${H-HD%?=7%uwyHJnrZYIB#z>+Y>WZ%``3$F^Byc+i$NP32MV@dn| z?j_+>lga2kq*J^rcsE^S)pd*~bQxk3*O~aE>EW69lh;dPlk5HR;`|=eMi7NN`yA;a zFA1NTOhc!W&hW0_-DJ2K$2YeT{ICrA|Sth*COn&uZE;jN(_-PQe#8ll%6 zoJre$C+-Tw7=pSmA=cx*4_K@<{IO+EHT~TDZ;tFmzptPBckrdlxce}6bR{@l(A2`G z@_Seu&aNq(o&JDvSC*H3x8S?eU8$!unb2Jkr?}3<*KYK?BED|AQWD<`_2_S>aZRg^ zBJg)Jc-iG{tm;KjjSDA}KHw$cX_M*Y8%cV#cLnbzqbn$_BxF=v?K%^mzsZe?FPP?k zMGs#I^*Fyh`6)!f(siWcyd*T3OhcEFE+aHl>^$CdS^TZ*{O5A?n^5C$;SiJQ;?~ps znxHFmux^^ug|sW7Ibt{0nRs}eU!3>{)0O|n+PlEnTz&ulZ!>3(Q;BgeqT|wZQ5=aR zYEZg~aT`7;<9-VhLs6J==_bZCNerTr7?D(H5D952BuOKeF1n0Ml8WDJ?e*U8{XXk& z&Yth%@t?{NRGbkYz1{8CCC$XxPtklOody2KT_j;-__{Wap`n+giVD4Tw_^S?XmIbw_)(m$XQU~9*{Sgh-k(7sxORYJir3zC>I&iPf8H<4{I7fF;UL{T-xhXo~cMLwo z2_)=#n@q#t?r8MDkoM#_L^^FAZ-aEUit#HN(4}s_UcWy0Ry1sbq_+xFr$gp)FUex= z)j6MI{tIZx(Or}`fD=eYMKhMa|vuQ}8%P0^HdN!mx}RsdFJmxNvK z`pQDrR5aQV>2!`mq?;D-j!3tu82=_5bidoL*Y6GPi-zh*W~wlCGh`?ClI-DLopS;6 z*I`$8QQjQxB6(YdUZI15!`LNZ*Lz^{(RB!own2KB;}Ge%MZ68t@hZ*;kUr=3>-AeN z#3$xx*v1Zs0~?`sQ-NK$i)640z4dPd)@7H3U9a{mbWKH5hYX$0afo#CYg`@a6cuL# zNN2eHdi^gk_EPluO6m^m!(AjJRp^z}0C+pQB0K($ z2$0_A_Un>LEymA!&`{C~kX#P6TLGghqroMqtwOK5UorRuCy=n~RhNRnZP2JX(smq& zNL#(m)sePVF@6yd+TQKg>rcbj?P$IOtA-&-Xy_ujO@&@bXE695P9R~|D=7_wyQ5J_ zq&+zfkzVp9mqdE0iZcSFrQCj9(&rd^0S)W7dIJ|Gny4-F{tNowx9T1{z9w3zE;Fb{k;y z?PzdGTB*>ht^}|&yCm#-)up5BQ8cQKbQs4W(z46BI?{3~&IpiR>GtdOzsJ~8Z>#mY zK(aX0?lItT?jkv_La(}Yz>VyZuU5C)9B+|nihe!{u>7s;n8^h%lte1TmOcD<4c&~*ZhN+LbQaftNyceo_d zKU9pjFwoO(zb@%!@BlPlNgIJ%xr^i*6?!Gj0=~j73Ay3n#5he-c; zmzO3jP%&P-L$6sAUD8>MJ&%TxNcLlh`pAsNo<>7I$(2Y`{dy~j=&Zm#iJP}}Y#aub zKtmphn`i!_v&Q>wrFF=>N{d)Z-;5*S!5=k!=cAN&8%e^FvxmV|;uEnnjp&{o>NO2yhU7Dgl zcac1)LT^VcfDf=s!mhWY9CWQjqaBg1;y6S)*Nx(kbMKV%_rX=74 z?2@o+N*Nx(kbMKV%_rX=74?2@o+ zN*Nx(kbMKV%_rX=74?2@o+NX2r2ABi{|^lG7q?%RG#vaG8cHHrtisfCq(#vKm2*6r8pUj?p;hJs1Dt1xv6WCr(=tm0msQwLa=-B%%Ra;V)kSp66pX4G9Y zYabp(GE#-!snEK#Abxt*iRR-H%^$qqj=p3xOi04n-XY|oYa<#R0_kRsL!=G2@F9>U zt2iS-I?3(V^}YTvKHosY3M7}o#>;}+Aa|)Sh2$CT)j1zw;1<-;Y-Q!#$U1$xx&*Y#(BN1)+w zN#?3BbvtA?_mX_ay*lRt=C8x9?xMT}+(oilgz(-hc(U6Ro%^w!A&PDi6lf%G)TVbVX{e!b2H z@MbiuLvlie-a0FRYuF|EO@-b%&JH~9(P$mgUL1!>d%OL5o!a1fXjq4&y9&K^ssWSO zC3#4N-a6^PVQ91t>28k0qrOO; z+8qykj=MF9bCjjAIZ#&L-BlP|eC(rqfn4@;o` zy8U|nmf%)sSfAuM6{gb2o!m?E7x(I%ZouyBegpZLL+u{J>J_59Xx7QxMe>dcy=~CC zT;kMDG#{5}ZrlUWm#$J$NI2U&BIhdlLHe6EbRk{Q@h}<+A$d`S9d|-@ zb1w;H`CfLV1BbFpvPOj+zJ(m&UJ}mfpx2>^r?E@IIo|GQX<8HC+`G~|luWVC9tj?U zhAK%o+uMBsx=x_c?nzH^93rjpHT4e@Y#==zFX5_Y{qNXFo%XtWK|<{XDeNABZokY=hF zzr+Wf>GtdOD}$?`pDHXktXlwZICuqF}4bA;r8qGOMZjj2SYE{+D5q?QW3 z^?$~%6S8^B0 z9u<1kPXoThE(yC{b+pn6G4Ae>66tp;&IpkH;P&g1>VpTN`AS*=T+Ll1 zpQz9)X)bU9yCm$IlF)SmO_c;a#c_yqK|Ys6`i6?}$7RqD+EL+%0W%UvYTtI%6C2e=ZA7A0N9afo!<54NcX82 zA233Har<>i!@-ZCp(K)-DoouCIl#RnN4Zz$lmgz#uI{3|Iow6EL4{tSV}Rq>C1Kaw zWC6NPq0u%-+aFPJn6v}O-n*r$;2LNsm!ypfy_re_E3ixQpbEVz(tthDXdTjzIS!L< zar^atCWEJ=VI7i`2szR@%p}@!3C1KYqDHmNE(WoTS%^ZhF7arr1NEfLX|4J$J z4YyyH6bEjA<|}D9a1?iuyr@F2q#nS&?2@qSm6U_7m1tBF=_-yxq?i26C6Oko7{A^L zz1Hp5C0+RwK4C#aNhGJy)W?UHVq7^i^pjLai~3lx7Y5Q8d?UPLT=b?N@zDVq z^529Uof(n zV3%aH3cYo*fK$=v6iBCYjQ362^@z;i<17sahTNko%>0z;y6rNMfba_F2mU6XjqhFiwaZ!g#<7Xy(HyT=&ehG zwyS|DB&SvAx$go$V3*{q3cX_tW2$OsR5NJ}jzdcS;Dd^T#;X|bUZEkkUmsKtD+e(oaqO@-c~n}DCNOTw;Ka3ZEJ?Jh@Jmg5lVq5>|7^feXZuSlV9y8XJOu^77o z4JG{piNN+%Hv;$scacn1p;uj3V0U&&*!8N*LDxz&Ixx~z9EV7!o#5(7r>hvROQ5se zeqG&3j7>tHucY3<0o+A0T7_OoZGj!xC1KYqDH~l2(5NKRMI47n+nnN(NIR(*cP{7v zw_lg^-$^`I(NGdeP1v}zwuN+6VG2oa?$tRJFt7#ZOoM#Fp>}DC>p7RCadd7Fcp1AS z?0P#&N7pbk+7an)j>DvT+!KN>1p6I?2@qSm6V6BFVLtY(yurU zk*@fYOCrrtG5&xR`mWorODY3yf#xe|DDW}vBAKH?Z_!-fMl@QKbTh{x()Z5rqNHn8 zjQoi@N! zc1d1Tp|?&pZ~+>vL%N9L5b4-|_~b}4Rg6#3pcCAFz5WjvTLFDoUw1VF-osra161fO zngyJSMvIb8=Qu?A%)h)S>9Z=vzrqfE(e2kOe2KA_qR+SJeZW@SMKV-{-Z?Y?-p(!w zyQU;`O+`~BL8o&ZBCT@{D-?pN+Q|! zV)+2N4zWwZu2)?IgX^i)a5X?@a2zI`>Gtb&9tQVBqpJZjRfXOuv;n5FOY))$y>+sI z3((Zn0A0j!h;-})J_XWD72|4vPH_A6`afW71@!qIm}bCxxQk?f3cW?MfK$=b(L<+m z93s7?SP=cgL!|XpoDm>xa{KlA<-rxvP#sBq6{hxtJi@&s!?{=Itib%= zqxp`J@)~gh$%D}eRe?3wC1KZl+%wTN4vh|(^a#gc(xYy_UV1rr6&jW%Iix~wrUk$y z?2>$^LhrZ=fG5ys9nw=Ahe$t<=i?&HQ!#!E1iHuV*X!R5?t|vr`ZVB6+(q(%3cW@1 zfrrp&QPRU4he*E;@S>#qRE$r8px?RudeQ3O&S<_xUk1+OE|N_u^v+=-@C9~B*fk}g z>kyhM33{005b3ZWmqePO;*0?4NVi{?)H)&Pj7399J0K2hUv({j4{#UB!z%QuyAfEI zT@rS^>N3&w6dF}WI*#KIY3UGGM_NY383EFYZojVX4~)IKxGHG?WIl)5Jp%lhyGZ_3 zp;z5@;OFd;uM^sL*jH{BLI5zV*g7T|X7BKb~*-Z{Jje2-lc zcD<6EOEDE1JxZkU9EV7&U&fCT>2)f`59*+e+RjJq_iZ<1UiRqZ1CI>oB_{?0TC_#^B~?v<=eNI1ZC8cKh`@gTcelP#DPq z6?!vu2lio?47$PDf!8O^;q zr{?8Br#%{SvLSmotX4AUq@tmBA>?Zgbq-B@56?)_IeNwlz{>2BuuITX{y3`=e(J0xx5igk5i+ndo{7jrK`8j^hyNZRL2Mq{%AA zuZTiBs@U9nx|a<)ebG=eNln=5^VdcQ?m|O9Nn72o>t2SzGzOo`wj`71HUBis8Pt%( z^F9yxh(n!S0vV;zFgppY>U)th*v#F@H@Ej;>~Z)7JRu2Zd#93y$-1M_sgU;MI7E77 z1wIwhu!=JRq_?{Ly1u66arL30K9T@zbt;t*)I>u+$<4Z7=S{+38bhZ-CeLe5WiM(7 z^1K5e^EuSnzXDHi7YVKEJC#=Ga_8>ko7+2;9q{uwn}oByQ%S~TO;u%hX$Wo3afq~j zB|a6>hAPItGy(14_UrmKR>b9thTW5dVdGThj%|RTF&g?w?$iA`uf!EWhsI!V&RBA3 zVg-7{i)O@X{|NJcs4aP=H^*B42=fQ(k&uL)d#8^}Zse}P<$^-=vm zNH&MRLaJd#^bUe7#x1ThNW3O)F zscs+XbdE!$1FxpJhlfbhRgBjm&>ENtcbsG`$)gyI7IqZbv`T792Mg;UFa6KU+>{Q@B?VrA;}mOc3cKo&AlY+ zxmV|O3RL!^IS!)Hb6B=I_=6;*6r4^6BYbS9x; z-y}yc9N($%fA~TWz*zK?ltEMddhfe2n8x6aolGXr>-#@^!E^n)eEwZJ|0UG;2^!|F zfT zYRVK6p51%A!q{UqGU7coDa8`$*ey93m}#9Y0>AAr<3y z;-Qt?etib3t_?cxqTyIb_N%ZXjVytNUXt=E^sdBDG5_CaaPP(V(VVVlq$$4VE|QZf z^m5k$H?m8@t~nJfR1Hm?3bZE2A<|YHhe=zz{iG=zn^OU|ar;QyaU3Fj{02T1(vd38 z2#}6(`}H0^#n`{mXouHhhiC{tg`DS54}1WLDQIv>daBUd>>B3;69nDlkGpY#omz0Kx;SGs+qt2hpkw!V=!OPZqMi~wl|w_op}dM&&^LBk$i zgM7oG=VJ7=XmCjysnFYD2zWWWBsG}bNX-zQX3Q`TN}b+(PQG`C+^Qr}LEOSXh5Qcl>$e_|Ltt{v3CF zIXp)G@rCuDb;sWz#uwI~dVJx`1Ah4rVo z<7bQUh4rs0WPD-$f4k$Ci}?%dZ+RKlFUJ?wKg~D(W2~XS3hQrB$8naobDWiEtI*b< z<)ZzB*4eu;J5Eu@jVxro5MFcn=PT;Cbus1(W6p+R-v8_P3x&)t=Pl~EX7~npvGYt3 zbryBpghJ-)C*~{axNU{ZH%81?)Nz;9z4(4-i1~^-u2muPEfw<>b==fK=F1iH6?NS1 zLgw2m<}2#BiZ@^U{C*Yl6?I(aLgtIZbJ_p=E9$sc3z_cJiaIV*@8aiI zThv$7ahXM&uc+fT$C&Rf-~F|y_{zRllj$+!7Qx5lpD=8v%C+x)GTe4AgPVeI;CejiJ|&0k~5 zxB0=_V%Kl;Q!V*6e~BgE=AW_T+x!-dV(;JP&$8s({9~4Uo8RE}*!A1|iI#kuzt@s) z^OG9KuHWX5u;knPt(JV7U!h6t`fYw6OTNutW68Jq!8>BtZ}U?v`8I!vCEw_{zRllj$+!7QO=H(@^G8_nZT?nEzRj=DEOz}i zzmFx~=C85j+x%ej*!A1|R7<|iUt-C(`DZNoHowJPvG;HDXIb)X{xM6w&2Mmb?D}o~ zL`%NS-)qUY`AIEe*KhMjSn_TDK1;sMZ*))W`fdL6mVBGP-;!_hZ@4#h{WgD;CEw<6 zx8&RWO83RC-{udn;tC zKd|K6{7YNMuHWW&w&dIVrIvh~f6kI`^Y6!RJH&ea*!($`e4GD^CEw;ZY7@JDoBzBe z-{$YPhA*hId~Dr{awg7=ZWa~iaM?_ek15&_0fD+phd*I|JU(j3z=WeThwuz3YqU- zQD;%dCE)j^F1G(PF<()~-CM|fBgA|~9rr>Z^Gy=-6?NRMLgrg2<}2#B()iugi=E$E zF<()~wJ&78U1GkXj(e$)`HqPBiaKt8A@iLR^A&YmmH%D*{1S0*@ZTSbI&M%A=PT;C zoI>VH67>~zoYVQ@`<3$*bzJip^ELL}UyC|!Vj=VCJGITUq z`Fkz-Ha}@d?D}o~2ur@r-)hOX`4!S**KhOtSn_TD8cV*-4?Y^Zew&|a$+!7SEcrJ7 zj3wXZw-_3G|2BV?CEw;Bv*g?S2E$_4Z}TTw@@@WJOTNud%7|UR%^zXOxA|Kw`8L18 z@Ywa+{63a^o4>}AZ}WpAV%Kl;Q!V*6e~BgE=AW_T+x!-f#ooWopJmCn`Nu5zHow8+ zvFo?_6D|2Rf3GFq<|mDeUBAsAVad1oTP^uEzrv{4_1pX&mVBGP4L|dFZGq#wj`k+n zGPJd5`Dkqy>7SxFPEp5I8GZ5joQ2Wz6?NRu81r3$IU{1;|Lgcq3YlNdThwt^jk);# z?-g|xb=;$c%$FwSE9$tdh0HfX%vaQLmB(Iuzmvp#MID!3$b1XMd_^6%rI7j7iusB< zu2Sa3_q$8XSJZJs3YqVSn6IegJ}zXwb7H=tj=S=yi|;oP_Xhv{p{V1YDB^rY9hX=y>5K1I&R5iN&%~IovG4v`)Nuz2na^>*Z2leNF1|mVZ}YP)`8GdpeC+jY zelJVD&EIOtxB1sih+V(Uf8LUB^MAGE+x%7&W7luwdC9Uho6gGzs=9J$mwISn_TDRa0WGZ}Z1k z@@@VuOTNvoniac#n?Kl+Z}T@;@@;;}sj=&~`43z2ZT@mgzRf>x$+!8frp4aB&7Wt< zxB0(Y@@@Vd(_`0f^Cw&KZT>+^zRj;aBX<2Ze~cyH=I^rP+x)6CW7lu<2V3%O{sv3F z%`Z7CcKtU0VN1TvUv9~_`R6V9How(NvG;HD=UMV?{_mE2n}5gb*!A1|$(DSZf6$U| z^J~8xyMCKL#*%OIcUkgne$_d#>$mxXE%`QogC*bQmwY95{Wkw$OTNutZppX#=Pmg* zzt!B>`?vY?EcrJ7cT2v_zvI=|_1pZ(mVBFk(2{TSYtM^azs(ipRC z+x)?ne4D?)l5g`%X2-7I=BHcoZGNsL-{vRc=Xw|Wd7u9L*XDP%?=9lEzY7@`7V{N#T;ta+ULVcZ5G_T_`+prjwvhSdyhR0`6Dd(Hh-%n-{x0X9lL&;-^Y?~^VeANZGQ0G*!A1|R7<|iUt-C(`DZNoHowK1 z*!#Envn=^G|ClA;<~MjRcKtSgvL)ZuGc}u>{Z}nm9{oDL`mVBH4yCvV|-?1)s{WgEH zCEw;BwB+0T+UsN2Z}Z1k@@@VuOTNvox*>M`Hh-`s-{xLX6EzQUOPZ{kqH2wAe z_qY!3db0~z&*sl@^K%NxxB1_@`P&M~xA`@9@_A8yKH8Z=<|*p9{_cE*&13VIx%nmV zm|g7gv-y9x`PB=_xA`}J#^=$nkbIjz+|6%QNWRTq>*n_=B;V%$=jIPBB;V#Y+r|6O zEF|CNKjY?4E+pUP?{xF$7LsrCD}2uN7nX1HyIdsyBh;e5Y<{-L*Lj8Y=T#0md(pl@ z`x#AtrPc{L`Dka+YDF&I@1Xy3w9;th(fs3_+QUW;%IMw$nlY5MpN<9($>?3X@8IFJ zdkpXYNUxjv_i_~V>prZXQ@hv5!N_FI7|PCw-b07=A2K)!y1^UT`w<$?LHZ*ZPVN4K z`{TbEy&uPa`v71K>D4`>yHmS&zixeob|2KcTfbh&)a2CenK5MOFf7M1peIaB*?my| zo>*=Oron$|tGRie9>XxY=a4~zdJl%#t9Os#eYRA|&s?}LgvK?*IBKt< z#k)R@qt+1ZGBg@@0RN$ubt`)quEr!nlhG)b#y!%ATOM_~Uo@7!?nS%cuG{zt$Dwu- z7nEL?@~L$|JMWH*JdJ;G0WA-Gx-PwsUg*07jdGlE+>)D^`Dk1SZ4jCsmz;}w(K=P) zahJl=<3=E+TIm{}y`LMMmHyJ}K8g-KE)V0V<=&!4IS!o(jeXKLE~`{AhuXb$X?Fgi zarA}ldGqZ{F78l6dES>^_gQxw?e{dsP`h`QH%zTbl!Zq1(YVH67gud}Re<}Y=bH!C z;}Xvlcc>-f(^LJW$Gzc>qsJ+0L&(Wm9#ZEj$KeNmYCak_8{=jdG7cXwd*iY(E*sv|JdRj@(Ku?KqUmv`G43?R zHN0Gp;xRPtOW(NU&q7Y}dbFlyT-Xh%7FwUy%`AC|lX*Vm9C1C8up55|rFA1N)3_Vl zn1noP$6SS|uca6lc4HD6LtlTQ>6mys#(nuGRl#4{D~3SFHpXzAWc$M98dLO5+E9qSKm!6HsQC5C_-8-3iWx7W)^9po7WafjXdmeLwQo6S>yZ420n(0o?_bSqO_Zdg` zC1%G{q~C&$lg zW_nZ{hn~Om74MW$O3zc~vP$Xs$Xre-J@1&yE2ZZba|NaJJYue>RR1U5xk86ZCAf-U-whH@ymPg8UD3dRbK(M>pgxacxRPi^y3f&9F&GJwkH-UG+8;ea#hi-tKhSW-gXzj3?gvdw&>ErC>ceS@M5_rs476dMY?)!Rhd8xIUE@_%h_sITUj$ zICMX7N?qdgQe4rw9-QqPPtVbxz6d#V@-+T_aGuZa0p98J2Z5c^X1z(^9H0LZIO6l) z0lx-c*Rvj+=JWT1GvU{C*FOr*^7(YLNb${o893MHR|ntaoBt+ofzQ7i+|cKzfWu`> z{k_07;nS5*`==LNDL(%xumfM$Hwm2S^B02;= z1x_q$>MMa;RF*HlA~@OS-wMv~`OU!TKEDe%%{PA^aJJ7M18(W_p9AOl{A_STpZ^w^ zUbxnP(DnEUxTeql5*+dQf6#dN`uxs;(|msU0M6(0kaHu3(fNnLSw8&Wf9|HG+ug~vSa5ntsaU-P1FNkkx5!?huB{A0mAMoApZUyJ`F6Nwc{fCM1q}Tiy z@haR&ujTwVzl{!id6AO8n-P8$D8e5*?bPjJUa z=v&_@!*_wRz%RP~|G?qX#(xx?1J>(hk^iUR6_oGeU0~--F{cCWLsZ`paN1vn<8Uj_ zJ!`lMIDF1<6L97~hW`i7|JU$i;NM@;v5{2;$nCSlUUk}uLdqC6X%?A&;M59vT@F0cYI55c6q~nz$q0CPXIet8eRy_ zsTAj&bmv<`T-orK#8(+UPF%(CC3rKOQ`K+{;;RkcNgR$--^XcxoxtI0hDU(2eEc%l z!8e)XZavGv1wP&e&aYwoAHjJw%p5f!*yju(>;3Z~y1H)l(Vnf5Xf^%+*bDqI{ zo6f5XIJrrjbJXQ0z>%hA{4{W0GsDZk>31341Ws&W_pr zFm8G3JmT;YJh7|c%HX_*4BrCI>Snk#IHfzz&&}@xPVQ;^abTyn@#lgI`WXKMa85tt z?*?ZNF#aFlv_}jF@s=PwIL?{r?k@?Pn{NEZ;LM?h+kula3=aZ3Bg}f^zy*&PKO3Ag z()eq@*-seW4$c~F#vcWzj5Yqh;N+(am&aR{$T%~;9=Kq<@gD@|Pc+;EocFBZQQ+L? z4i%8b>r6nXZiR(dLi?M@dtv_eLNYQ57zhFY;fM2 zroNTrFO73HyXUtBobz^^v&P-uci{9D=KIr0aLP*a_*KAL+U$4m_`2h71Lv0+DRABf zGv91*@<--8a%g<6S$`)ue`B1p(B01oa25`S-pA47Qvq+$^FNMrzSjE%=WaFo=}d3o zx8eEX`lG?wpPKpRfm3!E-az9&Gn^03*=4vG-l(SKnfk8+=YcvM&=J7aB%`|k$%iP-gUvbKbr9mlK->0 zAM^!h9yjYh2`&KZ=ksi^^PAzd;KbieeY?p2!_5CXIH$neA4B-aCHtf~->ZpF#W|0= zkAE|8_)qirJPgh}W9AUopK|84TOf%DIqdJclK{zX0R`4z((lgta| z{!|m3<-~jUtGmJ3#p1oks|WdU#vf09yy4ftIe~cZ`L~TY!Q>yI@xgfSJTH)6Jl?zC zm&Zp=1((EoudnKZvo15-0UWtJ-n+k#0Oyx9{)^zu#CY%Z{rw?`kGztvjHjo7y56n^hp&qFzP~jB=YsY1(FUAX#hgb!aDG)& z&v_9Hj)aZ>6*$|+zkm~~89#J2_Uq#$aDk7TfYYj*@m;`qK7I_GT*LU2 zz&SpC101et{4L-tAAbvWt}*^ua60%^bkqH>R2cOp#XId?t_n^EZ+EZv2srt=c;}q! z-$Q)8;fIKCh<7e^$BzN0)QWeOxjY~2+!XJ<-hU6AR@?ASaBdxw|06grVz^v2JU(>| z-v}F>^b4$Dv=dRZcoLJvn-xSs9tOoc2!&Qk}n)&VkXFX{A zj>N6Z<1-Xo(Aw0O1hcM+8X`>oZrsyAC%wTG96HE@y!=hZ=qhoSb3y`z1JgxZ&Ty&SQp)UyFJkH_xZq;PjD(?+0g& zGTalK^@LgPS#Zi|Gv9mQ9DHbcw_D#=U?(%)`O)QK*Wr42%J2=~{Bh>_))E|mfYc*zae{w%}SfwNvR*H07jXPd{r3pg^z z+|P!ClV364uV#Q#<{Cc-oc5~8-w95fAMfBLin_o2OuW$4caC^byo0wK$}e9F*VAId z5pen&hFgNe_)uGq?+4C%+g!h+z}YL}og3qMzWL<8W7gkD{BFGWdgcf?cdhw;bQ&Ca zKi(Pc){}T6uAdLh`BVdEuQT=EO1$3ew>3EBBQw4qI62px_fzC=j8{LGru*f~JGiB)^`8JIesA)pfSr8Y4+88j2In3zulGI% zryVnVn8yEP_&hlKXT#O%VE@N)y}0Y$4UYU_xDPmd%8VZe&OIIPeg5_~IOVJv{}nj- zUo-wRIR8K6UlGB16bpEtZ`}rt1OndYK^@5t8XgW#zr^qqaAFC=E5SJ>4eti0ls0@C zTu|0j$CQ@0dQVr!-K);RSi!9Csqr1uLo9u(|r6XI0t;xy?zdYv#T3E z3C^k!a1OivB{$>xtr_s{uT{W#*95%hPhD_slHt3+IoAf9^6vAu6OG3&D(Kgj1HtJx z7#<5wtYvr_<%5s8>n{dp-x%=T-@HryO#%9dSzUkI!1;9o-usJv;HRULhZ>KQCHG{_O$p`MI08 zvEg5do0$B#TafSL%HaGv0^a+n2H?zOGrkQty{W0MJB}F4etPF;)jO%_5BfW%6;ZM{sB7=7*4E@{FVXl{(K!c(mLRMzH|rJ!4Dlzy7hD+ zZijsL@ft??9Rl9ZpPmCJr<(Eei8~tpfVfk@`~H5#tx2bp0O?Hc_Y+6)y#Jt@icS&H6xxGa5}l)j~)W2%?>#D5s^dBzmeeV zIp+Q{9h^Tm;Qf4XIXDqNWY@39wh=Eh^Bo4KFE;aC0O!1J#$Rzecxk}FOIo$w&EVwa zX8eQT%p6nyK;o4F@Ada&aNawHSA)Z=&3Swd&H^9DHfcY{DgRx=#T%o(H36rhyWbk% zthHvnX2kEC^G^e3e_;Hli9a;+Eu``5%>928II=!KKay4J?*k`)WX7K+Ki7P}y1WVM z-x%;dFRceI*lZrp_TcO-0q^sSbg;A4jGqe5+h)eU4bI$d#(xaX2S4DR#}RO3hv8y( zV7!m72Iqlab;mabr|&fLbt50FKi?e-&i>r2KL?!hg&Cg%&H?NBc9H+3S^r1M2kX~| zad)D=-RAjL8JxYxoPS;7z2-dIfwS;S9QyGd4$jY5NU-2~PRe@JVp; z0mG$}QO|dV>wv=t4Yvd*es8`X34NnB8{BGuZgU0`1&T|KGf#KhYPZ++u8Th2(n}|;t zZbf|B@L=LU4Zlcy#_(Ijf0_Mk1tiv=YbA|)Wv7dhpUky$gL8a51niVH<0pet z!20{|GU76Zw-J{$e3ZDH;rJHd@`l626%02f#xG6j`8yI{k>I^P9RSV+?}_8{cn+Lh z+3=g-%&Ml|E#N#K9|DK3HvR>0x{qtzgZaUF{acB{=KNE^;c5xq>*K-T2!5$czh0gQ zPOg#QeI7dxoKn-&zXqHO)}Pnz1m|62);mg^WX7KdCtsW3-4Cz67x!myhhn_{+rY`! zoAI5%IX-?I9KON$FN3pu{65&JW&C~MbRVAq=Y#eB%HD_P+l{84TfkX2nR;50U)zlD z3w9!g$AA;-8lD9X-)wjVI8x8>C*b5;3?Bri)Hi$@oYugcU+8}Dt%j=-H%#!}-!=i~ zHcD_3;`#hKfb;N6czxaLsXsV5Il+7V@H{xHskvSjfb+rU-RI*P;%3I*1CBH|>;FW2 zmzgh!Z>*VjCpdVE<5pec!v)>eO%45dw2hJLq;NVBJYJcOv z=}#tjuSZva^TrxJ0FI1HaDH^_zq}RJe`A7c zp5TYAha1E?8*zJ#gf;1m_;t-wn=OZ2S}8+$Cnd#1z!?hIxM1 z1t-3l;5_5*uOm47tpxA$j#1#;x6OX06E8QML%brv`}x>s;Jh4jef$c}Uun2R8`S@f z;UuuL+RWFC_+4}UsWcv}?@#^7f6qL=qrtgr&3J(-PHFiIK0E~B5-7@(|)1t))F&Tl69`wg!Ihrc!74|ajGeEc)m zIbi$%UYMl&xH>o=tl#h5O8mX4_kQAh^L*+F&N+($-QByjq1bN-9T z|1H7$eU*>E&L5`!d~g9+-!Ctaf69D+y0QcAKc`Lojlg-};qLX_7M$`|f>Y65e;_#h z9QNZrf1V=#*W|wh&IcdIGIT#*4$k|}_#cCl&zpL`1BacUSKmM2NPN)yeqJsW=N$+- z@45Bd1WqX)^j`nm56<;*8aNU%{%CMESf76u@nu2p^~?g|5<%~L-vJktGWnapX^BAx zAAzg=90ezr3p!g|PUwj1`3f^%RpKjy-u~-=ol0iD=HPU&KA%qDH2h_<{(N#MA9zhWowwPyZ0 z#Mhbn?gVFEAM~Doso-4v(z~v=FF5_Cp!z!Cl8E}D*mw?l533~4* zJ_YB1XS(wp0H-tvdY`ZS0nWb-e*x}3-s%sWngqSqPh~n|zB_}?DEEAm!1+y0ej{-D z-9hj9(-xd{Z_xX^wGZXrZ?6BxY5arcyk7w4v^M+628UD32M{N=h}eehEEJnDeMolHGtiW6+&k#>cI$s1oCVhYHgHUvX3OUjfd`Fn%p?EjAX1|Yu z6UUkTjtA$AH~XCh&YT$ZUOz9R{AYsR=NlWq>Cc(-_>%Z}v!6rY(v6L8AwLGR~PUBTIJ1iio4$N*<9HT(=XZJ8PWDmdqD!|#Kg6=wW? zaDI;QkAoxcnEK+o!Cz(SDGx4KZTvdm>@~)34$gTm=&W$}*9DyRz8RkZPW;gDG;r=Z z!;8V`8w{@nhjY#RyTFl+hW`L3Z!%mg4d=DlaA|Pb$GG3Q*MD_z=2kQR9pK0|bA6|P zo$coO>;WzS>-*0W#5)YnAjTgxX@42E?=pOd_;YjK@!e7X7lvzsv%U;^KcBf3 zoVYva>@3FDdrNTs9`pTh066*Upo2fja_IZfcyQi6^ZcCwPTz0tKW~EbeY_5w@~!cA zfpdL)2plSd4d=JcjFzCEgjMpy*PRuv=+iSqNhfIBqz$u4=-p>>7Cq81h z3-QsQ`a4(J&ropkF>^l8gR_1#`+pT&@KexP;;#P=IQtiqzlFvhH}{Kgz{$Uv^?oM) z-Q2H=^#uQ6_E!d+c*0x{*MjLE#P|t9^)&<+fbVzLZ$E-c~gJyjia= zIPHSDUdDl)V#U4vEdv*T_2d09I5)ny_xefFOoPU{_?*rlzX1;yk%#tR*09*h*>gHe42jfc> z_g)Xw1ZR~l?!BI90?sRA@>9XdWlerMI8x56{~U37v;IQLuTb23K5Pf4Ut#ip1*hSU z8uj&4sxPkhN@o39;H=7K{d>U9RVKd|xPUm0ufLJt{HqOTf%B>t_g+sg1LxE;~rX{)o6?aqshy@4?RP#l6?#as4qL{+|5`bkpAlCxY{un0jsl zC*M)r`+T4~F~%o1=J7+o`rk7shQFtuKtBE+mcD4dY2dlu-|Lrl=7XO|F0Oofey;&% zg3FkARV9R-gTyg=}J!AAuL21c)U zt>C)__YpkN$BCF~wvTB)8w4K~eAy$>>o*YGLGVz)Qv|ODNAT}o;Bv*k-f+3IOZaC6 zR~{6-eiOm}14nSZ&?8(1k01W=D({Q-_qyOb!T$)ZG}ud5kMAvl+X>DP{EFZ;g1;4f zPH@#B(d#!5+*0r`!7mG5D>zT^DZ!W08(H^@&ab-Q`veaXJWcQif)5A|JgQgY=Tnm4 zy95srJXi24!Mg?j3(jeb`z4<8biGs=8omCVg1ZQwAb7Fhj|JxoJ}s1ka zm*D<_rwU#vc%R_&g0Frodi{2SpAqRa1$TXhTxRrojRij>c!J=! z1b-&@XTc?&a=b5k{OSsBD|o2jS>TjAi#xT7@%8(W@P8J3$h)Ix!R-YP7d%by za>3gK?-zVl@D<~t>$y+xAi>WFeoOEtf=>vpFg|*{I)eWvI9>1z!7BxSF8B|@6(>Zm z9|3Rk-Cyn!epkU01TPl6Q*eRc#EH@CUnlrp!94^&BRE^|I>FxvJ}kH zF8B+A9^uNT}(a6iG%3VvJgSAvUAj$W^(;QIup z3w}ZH3c+6s{zGuZDQ10oJ#w9o>G|7CaCgB^3Z5r;z2Loqi)EShX}#(`rh4l7nEVvM zj|zTD@LPgE5qw1ORa2wuX(G6j;L(C#61+z6LBYXk(d*qL_I|zPM@JoW13*II8xZulYMz3E_ za3{f|1kV%vk>G=Z{}WtgR`mL}3hpF$gy1Z}9}50T@UMc)y%fFvor1dx9xZr@;B|t3 z6nyFI==Ev|?j(4);JJc76#TW|zXex)*{q+4u%3_0fLjYr7yPo|9fE%qeCZss9?c&S ze81pF1WywDn&3@>{}7z`O7!~m1h*2LE_jCEHG;no{FmS>=SHu8i{RGabo_iIf?@P} zps(;>5WH6K*MiRoF7s;i`Zo%GK=2^J(*&>eFK#2qSwE{$CTgL z$27jH;1Po73Vv5`p5QZrE6tCt=T5;r1V1786~UhfJ|;LWJ9@q9f}08MEqJ`(*9319 zd_r)!1&;Sc=UZQJ7s2BNFBAN!;0uDUS?DdN-mfZ^7l4M6Z8`;GTk?75tXqZGw*qzU=kr^%@9H6Ff%ne8IVbzZLwq;OcKgub(Wq zi{OcZR|x(@@Ik@<2(J8Q^!m*NKPq^(;FW@R3jS4aaB1{@$p ze=PKsh~Ka3ApAjs#|oY=c)j4mf}OR|^;{+RHo=_)KPGsl;1z=R3O*~i%=^*x+$^}I z;9-KN2!0p5&iDQCQ{n&SV|si8A4IQzt>9+hwZ8ct68@8dXA55LV_I*$kLh~)M({bo z@6T%pZZ3GB;1>nIDR{Twj$Xg6;0}TZ`(YYM&{{ITzT&|3Jz1%`j9xz?xQ*bUf)@(@ zQt&T=i+>iqUUk8Z1a}skA$YRjb%MVUd`571S9Cph3hp2{UGPl7If8cy{!4I`&!g9G zD7d@e(Sqj*-XQo8ILCK?`VYL?$K~>(*S|$@FTu|XUMzUC;KPD12(I!)^!j%S?k@OQ zu>bwh6ydKDyjSp_g3Epxy?%YcJp{ij_(Q?F1)mpuj_XHmj9KSbuy@=p; zf*%$9lHj$1_X$2PxW?Df>pv)XnBduhR|(!HIIu5z{_6y{6g*JyRKf2E{#tOcZ=%<$ zBDlWb4uS^?&Jw&#@MnU56&&0jUC(ub+ko}|kGKr}ugV>TKSJE z*L)jY&%J_s3!WhOO>kbL;_Cm?ORq;i7XC4CejW3AHEZ)9Kc& zdHdFFyS2QpUHfj`KzBva{mp$=uOZ#~J~E_7_eZ+*$`~?qShw!OA9s2V8I=A=?~LBP zYB#7`|2Bt=|5w?yZMT)ZpK#&AM5CB1*ZZZ3XUvEc8^X=rR?`DUmr{~bl`0`wu`EYakW!!~dY$p7j zTA9XHy0h)`X1{*ePBxFv-E=-*bg%o_AN{L$vtO@|kB?`^zrVv+*1PRwHCsP*{IA>X zC;P+h=-|udvm;k?IeA_m_FZ>+dpYXvF20P9R)?qEZzpe$N3T6f|7)`bi&Ta4+tcp$ z;$uWV`CTE5&os*GlM1D~KP;B}#j2Ygwm$o} zi|bG08_eUsBi`>Lh4*oMIlejl+!fURc%`sDeK|eL>5PtbudeRUR8C|x(p|d#^X&Fr z=*j5Sv1;S?_HzWj4h#=-0^qCe_U`m94texOa~U|@?fCZg;_5OIdZ)+x?>EPPMCk9j z8A89kDn|N;ZpPz`|9#he8Q*=nIuGPdMw%%^?M^>`yt;`vm23#k*~R6Di1OO%b9Z(V z*>m#7>Nhbu(7B3)Dxr|J(DCtQ&ZLt{CNz8l}%U`1^g ztA}nj*-!AdYyZuwH^)lIeT_-K>%RBTIc8j7e!c_dZZ!(TGrA{AvOM4P?O6)u7HbF%4v?jE4;pSpg!m~}t*%U#*x?Pa&?r~8vv zuf7L%x%wh{-$be?&)27SpE_y$^bYHq4gPIolwwBmKCJvor1Z}^*_7SVVS19;Kiy1&AQS;nQ!|fCIwX!k|@3aoR6Y7tu0yN<TF4_ni!%WYaV|lzN4_|+s+e#MtZLbO4AmmEsMlaV zD;YB^#Y&uWF$(Z^RmUmdN`Q$R#k8srAw_qa0_=!U`sj8CVP$EntT8;ID*^UY;;d-$ z13a_^SO{tXW}zjevTwjrUCa^A=(qc>r!h+zhl3TnqOnRqZcB8JlWZ@h`FedCO?+?e z>=q9zMFEBdIT?2CR1{8gtEH4jF_u59IwX!+f!>g%lEq1#D%=60nfn~FR72f|U zt6=La3m%^K3q+JAv;S4)t$_r)OOMhSHcms(hN{W6hc9+qbNGZ>!)JMO_yqR9VE(NS zE2A#})g7Gm^T}a}#+(l5W{YH@iQtfEKoS|7FP41=|FlgjqP>8Ew*Cg8mwPmUN-vu# z3>O*3EINN)j%SO9UK`<)f>V2uO8dx6a6u-&Y8FJb)+ zcLme7*(cLl*q}Q!>NabbM~mo}TTV^2fC?%Uke7PnglM=o(`7%|zDNmEaqRl66vHhd z&f~7?sw=ML!Ig7jDXry{I2b(|nbKZ@z|-$7B&w>Qgp*Sw>`s)3)c=y8*AN|1;6n(0 zDGs4bA14c?iOYTrjTrp|e`!ArG;!Qbx65Q-si8LJfc#vn7EN9|?KQ|DL6I%a5bZR^ zh}Iec5fC@uGG;Tx48a@XCJ;v5Aisg}0zX@_Nq%unthD9|9xFu(k*dZ98nCL_2!OiX z0Kuvl$wmU}xMU$WLMQ5Vd2JXF+b@pVI0!&%mm|#H%Ly??qBMwdV`8+V@x&aNPRUpMHG5|#j8PIiOvro~4B zvQSDsvbb6$EUd@GQcUb|x9xwdzh`kjawCNk3;HMqn~a7%V1?lP+^WHeLx`gRvWnsP z#NxZpw?A;eW5(tkOvUD1p&grduvVx)Kuv-tP|H@h-&Gp!VHK4vOQf;b->~OD&1MluWSoHi}`*ClMj?e!WMw z0CwyCVZC3-sZG-2MBpZaLnEv*3FVibVL(`Kc-&K0d|J=SzU}%QHwrX(*kucXbSS_$ zi8^fivO9>#Z+O;Uj9S!`(J0I7Mv-RFd(XXFt~2*t`u}*?&(=SaRTl>3?atC13cy{f zmLFl!Tk>$Rny)*k#O3`YGj{{InEK!j1y}(KeZ_+aCP`=}?u)ohATpUw;gvKh5D8|F z>K6|rM1?}*;N+r!RQxwbSXCCbokk6x5PPW zU0Z6Eg25h7rQEDT%`cim6FbhN7k@e>rY5Y|nb}7qFg+swX!khzUe26PS}FH()}X@x zjU^t9pK?snvaD?(i39VuP>YcTQr9tj+@_ImDiYp9U<|WfIcy^#n05D08{`elQlKO7 zg7pY&fP$KzPNt82t&l^@*0vE~l@=g?Qt~%w6Rky?Fq5|TNwyQWVoT?>7`NLEo#jB? zVXO5p5XM81&1UkK#;eo3$km%c|Lqsp7F*}P2^&lh&D}UCZY!72sStJaDt9y4KbGrJ zBW@!YVZ8+Pmc%NuE&0JN*DgDy z9x!F2wF!|*2Dg_}hG1?+fk;axSbuo(h{1iQG4@K;u|-ODWO+FuS6{AWRMi&flScf2 ziV%a$w@YXwc&O_ABBp50)YGd8y?v07XMAN$pQo&5I}`1J!Nuff$KrD z-T?V$0PxvV5K#NdT_nVSes`-<%>HSe%J+1Cnx|zZ=3C zuB^{?Un%(y4wNv62OPgY@3UaI05`k-fbH0T$dWDgSg9aKB!$dLaf3XH(`0cdI_f8t zjn*+`u_9;nUB?VNoDWGTqMx0vX5-b5e!1Rc!?h3_RB*^MSh>)!I6!Am<|Oy;U0a1L zu;@*9{r=DM4=0@@3g3P@4M}}-5zYc!bPcD(2u){aBcz7Hss)ry;TmK<$u+W%oQNM{Sxl|579YZT1xT3O3TJ4mW4J_l_yKK-t$}Vx3 zfT5Bvh(HI9j-ov!B~;Hy0WJC-A@jaLGxsJ0MHI1~u3k$+o$gP;{oi z75rcBeN^=D0qBfz1NcqyV^sK^wQiBgViccCVt@f~gf8+U%s{3pbhsZDtL%IsAlIeWOlkCH zXAyN`l?)h}7t6Wf*QJG#8gVI*<-8RjgA7kMp+OrEq+y}o4Iq?P3lgpaxQUhF_M$HR) zmJ9=NbhyTcu>DgqnInOK#mh099jxcca=+};c48x{L>GSEWrcNwe_#tb&y<9n0A>sHNaGeLvPh`oYZ zY(b{#wtrgx=)3)+7{}#-6f;>-yu+bhe(aOF2lxh;dCTJn))Je=mG8QFvX3;ZB-Qud zJD%zL)|e$y<~2!m18ay(4Rd1|pq>yKm5X8tW=N7C1czmtSlEB~W2P z7x!(>bDNg1apIN#y1(0EQ zX4_QM3+teUR#oNbW^#{2<1(|h||q>i)9Lx0`zga^-`+HnYx3UC-9 z+rv{onjN2m;O=pdVnZC*?U~!8hpYRXZnqMx!G|M|!G>I7cth}9UmS`dSq0b-tsHL3 zmO?NkB#gq4uDtsBP-Tld+`0xCJjK;)G@d1sWP&-sFms8rs|^lXi<0O~jsai}w!xtq z+3lj5DKF`%2oLXgGzm1A6A3V8)ey=8=f#Fd=(e1%96uab!afPL>8v0Q?EhA^V}^zQSyt>f&C#`3yw396`ncJ zf+}@qj4&*z^EnI{cIe4ofhhRedmSxBzn+%%X63HBHN~J=m zmP!scWU~O9m7CiEt2!k#z!ZmIF~wZEq}kw7i#tuOSj&|38(gRtXXyYs*>U!b9*^v) zWRz``1h7@DDgzaqarVEEh$$_Pg2@p=vKy0c*6S^z zPdMP*@hOnJi_!@p*u+0ccYAo1mc5n=u6KWrxQW{${7)oq^1+G)9P}5vzFFg#;AB0` zR8{Dt13hNB2C@GRbf1~}p%N&a2(;!>v9|<#Yx;a%bhpl&xQIVAv5->)9Yj>><^h~Y zE=^<77dU^f|Vznn=fMLuUdqtTAM90Ry8oJ#|uGgX!LoCtsy6Kez=1*=2nG0~!wWivUI-*7d{&Ee^(bJLP{kaO z0faSEELYaW;^IXik$vT@yKXI3$kN+O_K>@FpkibWi-Je4zJOv5oOPQ6C$Kqi0C8=v zIYkcKo+E*qlawb-X@+VECKuI$VUb=LQs$OG@rIEXi#qcPfR8sxu?Hx0JZ{3?8Kp`v$RVF6lp}u#uM__@3AW?yOZK*fJwYF|R*U=;V9P-JPkt{{81gatXP_&X|Q zx%`fIt?)E$CTk6p$iM<#3>dVF2_UAPt58-V`s6Nu2$h{aofnYQ2TWm}o_uakDT<51 z+cOBPmsnzAG?!7S~)xzm7HgNRV~B8OIlTWy9eX-H6fAW zGam5N1JF;tn}Fg#GgLqa*3&Z8q6E$Q`vcy#%nwmL0tcZ72akY#a9ehEZsDs?mAo`| z;tY)4AH7O)pkC{~mE169)}~rslE{gCiqv=Dz;DemornUvt4N4vna+e~8Ct`|DbUMy z+cQ2OtWMLV?4sZ!u|BAV-OIy;fJ@CPcOsS+=G6Pk?!Wyu-7&;(3fxav197}4!`1)% zr#xG!3*pb_?*rxdconGl`JeRWj&BfYIyuI6_qdqvQ<^leTv3ihu`bekfVEm7u2CRm zI|Sglv&)}+4Y%x^6qOxhkx^0H)hs#N)59&kyaTM9OPIsTF=mSt?Id)9CkyqsmNi3M zQBDY}3H3OEc`3c;EKYzHxMcJUKTHd@6^a>E)Sz-J9Z<-*YC;QH?#H5nGt$(g!*$I= z9Y90LefG2qOBN_fOA#fCx0HJ%Lu6qD;IJ^?0(=qpkTa@UG9C>#Y!lkWRd(~DIFo%( zkiL$~!hN4Ta>)X&Fsi+NJ;ymY(zLPxW#IcmioS$u*`^qZrpx^Gq)>{=a~!l6`=f$M z;z(h|ID|f_X%=jM$}N*>thk4o^N*O!ZRcH(3fE!_rI1|6-$-S9p}guD0ro|#P)%`% z6|zg*0jp*h5k13XuPn|oSZ%({A8lm`=B^NmVz(s1WWzz*>?j`sAoh=P!J%aLxIQ2% zQ=@tS1Sfkng)|}{drlxL=VOo?JUE^0TZ9UoGWa8vz!HCdWI&Q+#)m{rv7gV?Rh;5- zXwPdfYRr1Y6d;iiCWey9UHQhW42@!^Y8H2z9FpofhgwuZASl^QtWrF|D+SEu&C|l9 zaGh-rs8t+l5dn(I8VHNIT(nkTxsrP+$}d6(vT8`ggGo}13T4G_A6qE$u1O9{rW`#5 zm{wL%yOL_yO)AnzV)J^E=6*pIQN4T}!@QYVii zrkz0G0)$25Eczw9j2Y2lZxT|@uvA(MT#EhW0=cnP)yaTm69KU9zTSNZ-&&YEL(9Xs ze4@Wi+aZ6kJ8wEy*LiuXH!6iPuhJY|p|tZFxd9;MS7.F!Zh9Crb&I#@vKz7*ix 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 literal 0 HcmV?d00001 diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/_Cryptography_cffi_684bb40axf342507b.so b/Linux_i686/lib/python2.7/site-packages/cryptography/_Cryptography_cffi_684bb40axf342507b.so index 7faef53f9eff09cfbbb4a921917f537fcaa63b11..d6794bfdedd9321c2a24c1e5c093ba573dce81ce 100755 GIT binary patch delta 5873 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 diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/_Cryptography_cffi_8f86901cxc1767c5a.so b/Linux_i686/lib/python2.7/site-packages/cryptography/_Cryptography_cffi_8f86901cxc1767c5a.so index 17a33c1185d165ee716875a2ef99245a88bebb8f..435b6d09b6358c499b6b1744c4b7ccbc2e39f5cc 100755 GIT binary patch delta 5656 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 delta 5459 zcmY*d3wTu3wchK@BYSdYk|CKSllLSud5{+q2pA=hgoH<8LZbwY7J36!l&8=eTd>g) zV}RU{O5Au$YyA`pK2Rt!)vJgK!=P~VMp;4B6}{J$ zOqC`HG1OBmhW3@fQuLj!8<-cW7+LytEVlMwZJH1RJ)!VGZ>VNqS*TXMo|qHqJspc3 zZ4My@l=jfbo{O?~cP?FJ6_lni#*C#$ouSghyr zLD4rt{rd-|i=LvvKKR83HR*B~4kEU^?E`S=@SobV>ATmQkyQw{_TW?>uUd}$S)DP{WV@DS z`Baj7lJhUALX6B&t?pd~zr7HPbs|I$BCf`G7UMRI+hG3=W0mO{M_sDL6Qr|hxu=|F zsb6>|&>?lqGoj!lthhmj~tw)3X=Y!I+DW5o*X6_ zotRusW4562-7X=}Abm|ytGx3gt88(I;e`w#3=QpcKdkAjLx?{l2oXkewwjiq(TLG@ zJj~zrgyKXDBtL_j%}DqdP7oGoq4SIuI-Z83-R@YtqDR=IV>0M$G9d>h#vM+PE$p=m zKxK45U?1w&td0g48E4eZWAY>CL1O$4Uyka1P$s;H>1O8`x*en3jCjrzx}FJwLjD75 zab^(L(FodQKWqJQDCG<%U}hY;ntwG*_9yrI-R1KTu zDOAWgf!Z{jA@`sZ&Kf$(D-X_;e}vdsOK)p9OP*w^M%t*2+vHQ6SSv+-u5qV)mhqKj z!7lj{!?rk_Cyy{}kHc3>}H|bka}~Z4kmI3x6$UdKaB`BY2S+>@c~4Yt|ixk z)x3y;xR$12$~5nxmae695gu(62~kWAxtfUuQd>@^xT(~p)3u6Qz6Wh{jcTQQiiEnw z=k~5Zfn77>PG0$r8uaBx3Ru`ilW{N_!5n!x!**J(VL)Du2D)a`LmGyp!NlLAcQh=O zn~=M!gFe)-LKbquopdajslswCYvbMawMI@uc1~=u~L?ECwi&O%SJuY&hc)iNgA$} z8#&$`bdQF;auzQoqN{HU-bwNUPWDb(k2Gw-yGaV%RIasj4Y+N=4J037{av(B{udV)l)3{9BU$%`8K4 z{4B{wndN7ci(1)&`$(3lKt{S}FL!cT6>qheT{UGC(GImZql0c$douzQRVVOWp}xu} zry*79FQN@Og!qc_xX|0L>FX68itfojYwr)IT0vy8gcmduHf6P)E^ z*8X&x9*(xdI-tDf*W8dNEaWqfb3dN6PAk8;nzP+Gh;Cpvn%j8`?Xpn7yq|mY8w-U@ zJ{VlPSD`aTu+&_~5%yU3dsw(tTb7rms`*)cbV7ZQRYc2FLiX&r>CFD|kltg`EM@jj zEaWy9a2H1``_W{-=f7%uLSm zyoEZAYq+$2`jOUp<@+2VlOE8}C%ajj zMK5dUm%BJnHodPmNsjDes$804EioXsa^So;bx5Qg;U(wOL-0y>y9%feZI?BiPT{3w zlT|}rUL>2Dil_|+>3&xUeZiK$;To6HIK6p=T)~cG>3R+AG95X&%IHQ7rTiB&l+&<= zZh3%V1#QG&1ii8gVpk=-prKEs{gJn072Sg{X?=-8y_=U!d)0-!?@^~}$uIU?!Rww# zTd<(CWYwEro;j13ei_+7losP6)zV+VmNuyN=T{mR6V+$=Wm85t<2qW!ZjW&WQ>^*x zJfBK0vivxwQg0E>WTFOZUaGDM{J3ioGDQmc!hBg$+%0lax#mthQt)EjxioLS7L<@{-OF?K{dUk z@(U+LPGe=Bl!O#6zc5?i>Pc+m#ZuG02?^Cn)wObg*0Wi)Fv+9T}OVxf@v5XZUFLZxOUv$R>L z!YpFHb_<2gU#lmAo=BK2IxJbOS;`hyS*XtZkacq`)L=f0_IbW<<=1R3<2dszG|P0O zf1dxaEZfXMu3L9MT4Mw|&}a|$A&uROR*b=P4)a#d!`htcvQT;CT5J{14Q%DKujdv2 z7nVfJe~oFzZODi+=i&#P9;8IxUxy&hS^&sMWb!RRpXmR0^Z~1uEnWx#=OVJ{KjCgv z>;Hx}O2<=7P6vV+)w~OHeyXRo2zYX)B4?wz2x5_W1ygRfqFn(Wj<%hnWr0~wz`POI zu>N)0=$1>&?V5QKhi&KTSj6p`IQJzaMLqh*oS!}(#RpeJ9EN+|2^5HWbPb0^-q+gH zLiYSmP;L6Lg_Z?gh7?NehSAT zc1%D4O4)f5j4tQQ9xY;Lmd9h3K-$Ib&uG^yXtZnXsB0zjf8)w>Tuyr=0mVt;{By5o z^+DYreyZG#<6s`lqFhMbpM&4&PaN6Dt_}-2Y}L45SFk7AXinDrH{}1Mr5EI`8Ag;7zVxtk$XWE)w@-=%oizy zLNa|zssTmNq%o9293zxV)u~tGA)(8>4ofI!n9lm+Z;*^m7eF%l@V zh|$<88eLDoq*gdqe3Kh`%9)KCFk6F@$*WBLv@)(Ho<#T?pL%y4N+^1wedQ0*n6rY; zy>*jO?5k)W9_;P2m8%Jri{#pf4A{xGR&A{uTbcZK`HB%vwGBmD|I{uED#wL)K5siM z{%%td*^0L@wud8k!T6+*DTY5Ps}2~^H^PZYkxAGKHqo zI$HYG^0=nP|D;{|Bl9+oL1}4OG)b~|PjtMnTzoe4?R= 3") + rsa._verify_rsa_parameters(public_exponent, key_size) - if public_exponent & 1 == 0: - raise ValueError("public_exponent must be odd") - - if key_size < 512: - raise ValueError("key_size must be at least 512-bits") - - ctx = self._lib.RSA_new() - assert ctx != self._ffi.NULL - ctx = self._ffi.gc(ctx, self._lib.RSA_free) + rsa_cdata = self._lib.RSA_new() + assert rsa_cdata != self._ffi.NULL + rsa_cdata = self._ffi.gc(rsa_cdata, self._lib.RSA_free) bn = self._int_to_bn(public_exponent) bn = self._ffi.gc(bn, self._lib.BN_free) res = self._lib.RSA_generate_key_ex( - ctx, key_size, bn, self._ffi.NULL + rsa_cdata, key_size, bn, self._ffi.NULL ) assert res == 1 - return self._rsa_cdata_to_private_key(ctx) + return _RSAPrivateKey(self, rsa_cdata) - def _new_evp_pkey(self): - evp_pkey = self._lib.EVP_PKEY_new() - assert evp_pkey != self._ffi.NULL - return self._ffi.gc(evp_pkey, self._lib.EVP_PKEY_free) + def generate_rsa_parameters_supported(self, public_exponent, key_size): + return (public_exponent >= 3 and public_exponent & 1 != 0 and + key_size >= 512) - def _rsa_private_key_to_evp_pkey(self, private_key): - evp_pkey = self._new_evp_pkey() - rsa_cdata = self._rsa_cdata_from_private_key(private_key) - - res = self._lib.EVP_PKEY_assign_RSA(evp_pkey, rsa_cdata) + def load_rsa_private_numbers(self, numbers): + rsa._check_private_key_components( + numbers.p, + numbers.q, + numbers.d, + numbers.dmp1, + numbers.dmq1, + numbers.iqmp, + numbers.public_numbers.e, + numbers.public_numbers.n + ) + rsa_cdata = self._lib.RSA_new() + assert rsa_cdata != self._ffi.NULL + rsa_cdata = self._ffi.gc(rsa_cdata, self._lib.RSA_free) + rsa_cdata.p = self._int_to_bn(numbers.p) + rsa_cdata.q = self._int_to_bn(numbers.q) + rsa_cdata.d = self._int_to_bn(numbers.d) + rsa_cdata.dmp1 = self._int_to_bn(numbers.dmp1) + rsa_cdata.dmq1 = self._int_to_bn(numbers.dmq1) + rsa_cdata.iqmp = self._int_to_bn(numbers.iqmp) + rsa_cdata.e = self._int_to_bn(numbers.public_numbers.e) + rsa_cdata.n = self._int_to_bn(numbers.public_numbers.n) + res = self._lib.RSA_blinding_on(rsa_cdata, self._ffi.NULL) assert res == 1 - return evp_pkey + return _RSAPrivateKey(self, rsa_cdata) - def _rsa_public_key_to_evp_pkey(self, public_key): - evp_pkey = self._new_evp_pkey() - rsa_cdata = self._rsa_cdata_from_public_key(public_key) - - res = self._lib.EVP_PKEY_assign_RSA(evp_pkey, rsa_cdata) + def load_rsa_public_numbers(self, numbers): + rsa._check_public_key_components(numbers.e, numbers.n) + rsa_cdata = self._lib.RSA_new() + assert rsa_cdata != self._ffi.NULL + rsa_cdata = self._ffi.gc(rsa_cdata, self._lib.RSA_free) + rsa_cdata.e = self._int_to_bn(numbers.e) + rsa_cdata.n = self._int_to_bn(numbers.n) + res = self._lib.RSA_blinding_on(rsa_cdata, self._ffi.NULL) assert res == 1 - return evp_pkey + return _RSAPublicKey(self, rsa_cdata) - def _rsa_cdata_to_private_key(self, cdata): - return rsa.RSAPrivateKey( - p=self._bn_to_int(cdata.p), - q=self._bn_to_int(cdata.q), - dmp1=self._bn_to_int(cdata.dmp1), - dmq1=self._bn_to_int(cdata.dmq1), - iqmp=self._bn_to_int(cdata.iqmp), - private_exponent=self._bn_to_int(cdata.d), - public_exponent=self._bn_to_int(cdata.e), - modulus=self._bn_to_int(cdata.n), + def _bytes_to_bio(self, data): + """ + Return a _MemoryBIO namedtuple of (BIO, char*). + + The char* is the storage for the BIO and it must stay alive until the + BIO is finished with. + """ + data_char_p = self._ffi.new("char[]", data) + bio = self._lib.BIO_new_mem_buf( + data_char_p, len(data) + ) + assert bio != self._ffi.NULL + + return _MemoryBIO(self._ffi.gc(bio, self._lib.BIO_free), data_char_p) + + def _evp_pkey_to_private_key(self, evp_pkey): + """ + Return the appropriate type of PrivateKey given an evp_pkey cdata + pointer. + """ + + type = evp_pkey.type + + if type == self._lib.EVP_PKEY_RSA: + rsa_cdata = self._lib.EVP_PKEY_get1_RSA(evp_pkey) + assert rsa_cdata != self._ffi.NULL + rsa_cdata = self._ffi.gc(rsa_cdata, self._lib.RSA_free) + return _RSAPrivateKey(self, rsa_cdata) + elif type == self._lib.EVP_PKEY_DSA: + dsa_cdata = self._lib.EVP_PKEY_get1_DSA(evp_pkey) + assert dsa_cdata != self._ffi.NULL + dsa_cdata = self._ffi.gc(dsa_cdata, self._lib.DSA_free) + return _DSAPrivateKey(self, dsa_cdata) + else: + raise UnsupportedAlgorithm("Unsupported key type.") + + def _pem_password_cb(self, password): + """ + Generate a pem_password_cb function pointer that copied the password to + OpenSSL as required and returns the number of bytes copied. + + typedef int pem_password_cb(char *buf, int size, + int rwflag, void *userdata); + + Useful for decrypting PKCS8 files and so on. + + Returns a tuple of (cdata function pointer, callback function). + """ + + def pem_password_cb(buf, size, writing, userdata): + pem_password_cb.called += 1 + + if not password or len(password) >= size: + return 0 + else: + pw_buf = self._ffi.buffer(buf, size) + pw_buf[:len(password)] = password + return len(password) + + pem_password_cb.called = 0 + + return ( + self._ffi.callback("int (char *, int, int, void *)", + pem_password_cb), + pem_password_cb ) def _rsa_cdata_from_private_key(self, private_key): - # Does not GC the RSA cdata. You *must* make sure it's freed - # correctly yourself! ctx = self._lib.RSA_new() assert ctx != self._ffi.NULL + ctx = self._ffi.gc(ctx, self._lib.RSA_free) + ctx.p = self._int_to_bn(private_key.p) ctx.q = self._int_to_bn(private_key.q) ctx.d = self._int_to_bn(private_key.d) @@ -402,11 +524,10 @@ class Backend(object): return ctx def _rsa_cdata_from_public_key(self, public_key): - # Does not GC the RSA cdata. You *must* make sure it's freed - # correctly yourself! - ctx = self._lib.RSA_new() assert ctx != self._ffi.NULL + ctx = self._ffi.gc(ctx, self._lib.RSA_free) + ctx.e = self._int_to_bn(public_key.e) ctx.n = self._int_to_bn(public_key.n) res = self._lib.RSA_blinding_on(ctx, self._ffi.NULL) @@ -415,29 +536,64 @@ class Backend(object): return ctx def create_rsa_signature_ctx(self, private_key, padding, algorithm): - return _RSASignatureContext(self, private_key, padding, algorithm) + warnings.warn( + "create_rsa_signature_ctx is deprecated and will be removed in a " + "future version.", + utils.DeprecatedIn05, + stacklevel=2 + ) + rsa_cdata = self._rsa_cdata_from_private_key(private_key) + key = _RSAPrivateKey(self, rsa_cdata) + return _RSASignatureContext(self, key, padding, algorithm) def create_rsa_verification_ctx(self, public_key, signature, padding, algorithm): - return _RSAVerificationContext(self, public_key, signature, padding, + warnings.warn( + "create_rsa_verification_ctx is deprecated and will be removed in " + "a future version.", + utils.DeprecatedIn05, + stacklevel=2 + ) + rsa_cdata = self._rsa_cdata_from_public_key(public_key) + key = _RSAPublicKey(self, rsa_cdata) + return _RSAVerificationContext(self, key, signature, padding, algorithm) def mgf1_hash_supported(self, algorithm): + warnings.warn( + "mgf1_hash_supported is deprecated and will be removed in " + "a future version.", + utils.DeprecatedIn05, + stacklevel=2 + ) + return self._mgf1_hash_supported(algorithm) + + def _mgf1_hash_supported(self, algorithm): if self._lib.Cryptography_HAS_MGF1_MD: return self.hash_supported(algorithm) else: return isinstance(algorithm, hashes.SHA1) + def rsa_padding_supported(self, padding): + if isinstance(padding, PKCS1v15): + return True + elif isinstance(padding, PSS) and isinstance(padding._mgf, MGF1): + return self._mgf1_hash_supported(padding._mgf._algorithm) + elif isinstance(padding, OAEP) and isinstance(padding._mgf, MGF1): + return isinstance(padding._mgf._algorithm, hashes.SHA1) + else: + return False + def generate_dsa_parameters(self, key_size): if key_size not in (1024, 2048, 3072): raise ValueError( - "Key size must be 1024 or 2048 or 3072 bits") + "Key size must be 1024 or 2048 or 3072 bits.") if (self._lib.OPENSSL_VERSION_NUMBER < 0x1000000f and key_size > 1024): raise ValueError( "Key size must be 1024 because OpenSSL < 1.0.0 doesn't " - "support larger key sizes") + "support larger key sizes.") ctx = self._lib.DSA_new() assert ctx != self._ffi.NULL @@ -450,43 +606,97 @@ class Backend(object): assert res == 1 - return dsa.DSAParameters( - modulus=self._bn_to_int(ctx.p), - subgroup_order=self._bn_to_int(ctx.q), - generator=self._bn_to_int(ctx.g) - ) + return _DSAParameters(self, ctx) def generate_dsa_private_key(self, parameters): ctx = self._lib.DSA_new() assert ctx != self._ffi.NULL ctx = self._ffi.gc(ctx, self._lib.DSA_free) - ctx.p = self._int_to_bn(parameters.p) - ctx.q = self._int_to_bn(parameters.q) - ctx.g = self._int_to_bn(parameters.g) + if isinstance(parameters, dsa.DSAParameters): + ctx.p = self._int_to_bn(parameters.p) + ctx.q = self._int_to_bn(parameters.q) + ctx.g = self._int_to_bn(parameters.g) + else: + ctx.p = self._lib.BN_dup(parameters._dsa_cdata.p) + ctx.q = self._lib.BN_dup(parameters._dsa_cdata.q) + ctx.g = self._lib.BN_dup(parameters._dsa_cdata.g) self._lib.DSA_generate_key(ctx) - return dsa.DSAPrivateKey( - modulus=self._bn_to_int(ctx.p), - subgroup_order=self._bn_to_int(ctx.q), - generator=self._bn_to_int(ctx.g), - x=self._bn_to_int(ctx.priv_key), - y=self._bn_to_int(ctx.pub_key) - ) + return _DSAPrivateKey(self, ctx) + + def generate_dsa_private_key_and_parameters(self, key_size): + parameters = self.generate_dsa_parameters(key_size) + return self.generate_dsa_private_key(parameters) def create_dsa_signature_ctx(self, private_key, algorithm): - return _DSASignatureContext(self, private_key, algorithm) + warnings.warn( + "create_dsa_signature_ctx is deprecated and will be removed in " + "a future version.", + utils.DeprecatedIn05, + stacklevel=2 + ) + dsa_cdata = self._dsa_cdata_from_private_key(private_key) + key = _DSAPrivateKey(self, dsa_cdata) + return _DSASignatureContext(self, key, algorithm) def create_dsa_verification_ctx(self, public_key, signature, algorithm): - return _DSAVerificationContext(self, public_key, signature, - algorithm) + warnings.warn( + "create_dsa_verification_ctx is deprecated and will be removed in " + "a future version.", + utils.DeprecatedIn05, + stacklevel=2 + ) + dsa_cdata = self._dsa_cdata_from_public_key(public_key) + key = _DSAPublicKey(self, dsa_cdata) + return _DSAVerificationContext(self, key, signature, algorithm) + + def load_dsa_private_numbers(self, numbers): + dsa._check_dsa_private_numbers(numbers) + parameter_numbers = numbers.public_numbers.parameter_numbers + + dsa_cdata = self._lib.DSA_new() + assert dsa_cdata != self._ffi.NULL + dsa_cdata = self._ffi.gc(dsa_cdata, self._lib.DSA_free) + + dsa_cdata.p = self._int_to_bn(parameter_numbers.p) + dsa_cdata.q = self._int_to_bn(parameter_numbers.q) + dsa_cdata.g = self._int_to_bn(parameter_numbers.g) + dsa_cdata.pub_key = self._int_to_bn(numbers.public_numbers.y) + dsa_cdata.priv_key = self._int_to_bn(numbers.x) + + return _DSAPrivateKey(self, dsa_cdata) + + def load_dsa_public_numbers(self, numbers): + dsa._check_dsa_parameters(numbers.parameter_numbers) + dsa_cdata = self._lib.DSA_new() + assert dsa_cdata != self._ffi.NULL + dsa_cdata = self._ffi.gc(dsa_cdata, self._lib.DSA_free) + + dsa_cdata.p = self._int_to_bn(numbers.parameter_numbers.p) + dsa_cdata.q = self._int_to_bn(numbers.parameter_numbers.q) + dsa_cdata.g = self._int_to_bn(numbers.parameter_numbers.g) + dsa_cdata.pub_key = self._int_to_bn(numbers.y) + + return _DSAPublicKey(self, dsa_cdata) + + def load_dsa_parameter_numbers(self, numbers): + dsa._check_dsa_parameters(numbers) + dsa_cdata = self._lib.DSA_new() + assert dsa_cdata != self._ffi.NULL + dsa_cdata = self._ffi.gc(dsa_cdata, self._lib.DSA_free) + + dsa_cdata.p = self._int_to_bn(numbers.p) + dsa_cdata.q = self._int_to_bn(numbers.q) + dsa_cdata.g = self._int_to_bn(numbers.g) + + return _DSAParameters(self, dsa_cdata) def _dsa_cdata_from_public_key(self, public_key): - # Does not GC the DSA cdata. You *must* make sure it's freed - # correctly yourself! ctx = self._lib.DSA_new() assert ctx != self._ffi.NULL + ctx = self._ffi.gc(ctx, self._lib.DSA_free) parameters = public_key.parameters() ctx.p = self._int_to_bn(parameters.p) ctx.q = self._int_to_bn(parameters.q) @@ -495,10 +705,9 @@ class Backend(object): return ctx def _dsa_cdata_from_private_key(self, private_key): - # Does not GC the DSA cdata. You *must* make sure it's freed - # correctly yourself! ctx = self._lib.DSA_new() assert ctx != self._ffi.NULL + ctx = self._ffi.gc(ctx, self._lib.DSA_free) parameters = private_key.parameters() ctx.p = self._int_to_bn(parameters.p) ctx.q = self._int_to_bn(parameters.q) @@ -520,131 +729,26 @@ class Backend(object): return True def decrypt_rsa(self, private_key, ciphertext, padding): - key_size_bytes = int(math.ceil(private_key.key_size / 8.0)) - if key_size_bytes != len(ciphertext): - raise ValueError("Ciphertext length must be equal to key size.") - - return self._enc_dec_rsa(private_key, ciphertext, padding) + warnings.warn( + "decrypt_rsa is deprecated and will be removed in a future " + "version.", + utils.DeprecatedIn05, + stacklevel=2 + ) + rsa_cdata = self._rsa_cdata_from_private_key(private_key) + key = _RSAPrivateKey(self, rsa_cdata) + return key.decrypt(ciphertext, padding) def encrypt_rsa(self, public_key, plaintext, padding): - return self._enc_dec_rsa(public_key, plaintext, padding) - - def _enc_dec_rsa(self, key, data, padding): - if isinstance(padding, PKCS1v15): - padding_enum = self._lib.RSA_PKCS1_PADDING - elif isinstance(padding, OAEP): - padding_enum = self._lib.RSA_PKCS1_OAEP_PADDING - if not isinstance(padding._mgf, MGF1): - raise UnsupportedAlgorithm( - "Only MGF1 is supported by this backend", - _Reasons.UNSUPPORTED_MGF - ) - - if not isinstance(padding._mgf._algorithm, hashes.SHA1): - raise UnsupportedAlgorithm( - "This backend supports only SHA1 inside MGF1 when " - "using OAEP", - _Reasons.UNSUPPORTED_HASH - ) - - if padding._label is not None and padding._label != b"": - raise ValueError("This backend does not support OAEP labels") - - if not isinstance(padding._algorithm, hashes.SHA1): - raise UnsupportedAlgorithm( - "This backend only supports SHA1 when using OAEP", - _Reasons.UNSUPPORTED_HASH - ) - else: - raise UnsupportedAlgorithm( - "{0} is not supported by this backend".format( - padding.name - ), - _Reasons.UNSUPPORTED_PADDING - ) - - if self._lib.Cryptography_HAS_PKEY_CTX: - return self._enc_dec_rsa_pkey_ctx(key, data, padding_enum) - else: - return self._enc_dec_rsa_098(key, data, padding_enum) - - def _enc_dec_rsa_pkey_ctx(self, key, data, padding_enum): - if isinstance(key, rsa.RSAPublicKey): - init = self._lib.EVP_PKEY_encrypt_init - crypt = self._lib.Cryptography_EVP_PKEY_encrypt - evp_pkey = self._rsa_public_key_to_evp_pkey(key) - else: - init = self._lib.EVP_PKEY_decrypt_init - crypt = self._lib.Cryptography_EVP_PKEY_decrypt - evp_pkey = self._rsa_private_key_to_evp_pkey(key) - - pkey_ctx = self._lib.EVP_PKEY_CTX_new( - evp_pkey, self._ffi.NULL + warnings.warn( + "encrypt_rsa is deprecated and will be removed in a future " + "version.", + utils.DeprecatedIn05, + stacklevel=2 ) - assert pkey_ctx != self._ffi.NULL - pkey_ctx = self._ffi.gc(pkey_ctx, self._lib.EVP_PKEY_CTX_free) - res = init(pkey_ctx) - assert res == 1 - res = self._lib.EVP_PKEY_CTX_set_rsa_padding( - pkey_ctx, padding_enum) - assert res > 0 - buf_size = self._lib.EVP_PKEY_size(evp_pkey) - assert buf_size > 0 - outlen = self._ffi.new("size_t *", buf_size) - buf = self._ffi.new("char[]", buf_size) - res = crypt( - pkey_ctx, - buf, - outlen, - data, - len(data) - ) - if res <= 0: - self._handle_rsa_enc_dec_error(key) - - return self._ffi.buffer(buf)[:outlen[0]] - - def _enc_dec_rsa_098(self, key, data, padding_enum): - if isinstance(key, rsa.RSAPublicKey): - crypt = self._lib.RSA_public_encrypt - rsa_cdata = self._rsa_cdata_from_public_key(key) - else: - crypt = self._lib.RSA_private_decrypt - rsa_cdata = self._rsa_cdata_from_private_key(key) - - rsa_cdata = self._ffi.gc(rsa_cdata, self._lib.RSA_free) - key_size = self._lib.RSA_size(rsa_cdata) - assert key_size > 0 - buf = self._ffi.new("unsigned char[]", key_size) - res = crypt( - len(data), - data, - buf, - rsa_cdata, - padding_enum - ) - if res < 0: - self._handle_rsa_enc_dec_error(key) - - return self._ffi.buffer(buf)[:res] - - def _handle_rsa_enc_dec_error(self, key): - errors = self._consume_errors() - assert errors - assert errors[0].lib == self._lib.ERR_LIB_RSA - if isinstance(key, rsa.RSAPublicKey): - assert (errors[0].reason == - self._lib.RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE) - raise ValueError( - "Data too long for key size. Encrypt less data or use a " - "larger key size" - ) - else: - assert ( - errors[0].reason == self._lib.RSA_R_BLOCK_TYPE_IS_NOT_01 or - errors[0].reason == self._lib.RSA_R_BLOCK_TYPE_IS_NOT_02 - ) - raise ValueError("Decryption failed") + rsa_cdata = self._rsa_cdata_from_public_key(public_key) + key = _RSAPublicKey(self, rsa_cdata) + return key.encrypt(plaintext, padding) def cmac_algorithm_supported(self, algorithm): return ( @@ -656,6 +760,294 @@ class Backend(object): def create_cmac_ctx(self, algorithm): return _CMACContext(self, algorithm) + def load_traditional_openssl_pem_private_key(self, data, password): + # OpenSSLs API for loading PKCS#8 certs can also load the traditional + # format so we just use that for both of them. + + return self.load_pkcs8_pem_private_key(data, password) + + def load_pkcs8_pem_private_key(self, data, password): + mem_bio = self._bytes_to_bio(data) + + password_callback, password_func = self._pem_password_cb(password) + + evp_pkey = self._lib.PEM_read_bio_PrivateKey( + mem_bio.bio, + self._ffi.NULL, + password_callback, + self._ffi.NULL + ) + + if evp_pkey == self._ffi.NULL: + errors = self._consume_errors() + if not errors: + raise ValueError("Could not unserialize key data.") + + if ( + errors[0][1:] == ( + self._lib.ERR_LIB_PEM, + self._lib.PEM_F_PEM_DO_HEADER, + self._lib.PEM_R_BAD_PASSWORD_READ + ) + ) or ( + errors[0][1:] == ( + self._lib.ERR_LIB_PEM, + self._lib.PEM_F_PEM_READ_BIO_PRIVATEKEY, + self._lib.PEM_R_BAD_PASSWORD_READ + ) + ): + assert not password + raise TypeError( + "Password was not given but private key is encrypted.") + + elif errors[0][1:] == ( + self._lib.ERR_LIB_EVP, + self._lib.EVP_F_EVP_DECRYPTFINAL_EX, + self._lib.EVP_R_BAD_DECRYPT + ): + raise ValueError( + "Bad decrypt. Incorrect password?" + ) + + elif errors[0][1:] in ( + ( + self._lib.ERR_LIB_PEM, + self._lib.PEM_F_PEM_GET_EVP_CIPHER_INFO, + self._lib.PEM_R_UNSUPPORTED_ENCRYPTION + ), + + ( + self._lib.ERR_LIB_EVP, + self._lib.EVP_F_EVP_PBE_CIPHERINIT, + self._lib.EVP_R_UNKNOWN_PBE_ALGORITHM + ) + ): + raise UnsupportedAlgorithm( + "PEM data is encrypted with an unsupported cipher", + _Reasons.UNSUPPORTED_CIPHER + ) + + elif any( + error[1:] == ( + self._lib.ERR_LIB_EVP, + self._lib.EVP_F_EVP_PKCS82PKEY, + self._lib.EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM + ) + for error in errors + ): + raise UnsupportedAlgorithm( + "Unsupported public key algorithm.", + _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM + ) + + else: + assert errors[0][1] in ( + self._lib.ERR_LIB_EVP, + self._lib.ERR_LIB_PEM, + self._lib.ERR_LIB_ASN1, + ) + raise ValueError("Could not unserialize key data.") + + evp_pkey = self._ffi.gc(evp_pkey, self._lib.EVP_PKEY_free) + + if password is not None and password_func.called == 0: + raise TypeError( + "Password was given but private key is not encrypted.") + + assert ( + (password is not None and password_func.called == 1) or + password is None + ) + + return self._evp_pkey_to_private_key(evp_pkey) + + def elliptic_curve_supported(self, curve): + if self._lib.Cryptography_HAS_EC != 1: + return False + + try: + curve_nid = self._elliptic_curve_to_nid(curve) + except UnsupportedAlgorithm: + curve_nid = self._lib.NID_undef + + ctx = self._lib.EC_GROUP_new_by_curve_name(curve_nid) + + if ctx == self._ffi.NULL: + errors = self._consume_errors() + assert ( + curve_nid == self._lib.NID_undef or + errors[0][1:] == ( + self._lib.ERR_LIB_EC, + self._lib.EC_F_EC_GROUP_NEW_BY_CURVE_NAME, + self._lib.EC_R_UNKNOWN_GROUP + ) + ) + return False + else: + assert curve_nid != self._lib.NID_undef + self._lib.EC_GROUP_free(ctx) + return True + + def elliptic_curve_signature_algorithm_supported( + self, signature_algorithm, curve + ): + if self._lib.Cryptography_HAS_EC != 1: + return False + + # We only support ECDSA right now. + if not isinstance(signature_algorithm, ec.ECDSA): + return False + + # Before 0.9.8m OpenSSL can't cope with digests longer than the curve. + if ( + self._lib.OPENSSL_VERSION_NUMBER < 0x009080df and + curve.key_size < signature_algorithm.algorithm.digest_size * 8 + ): + return False + + return self.elliptic_curve_supported(curve) + + def generate_elliptic_curve_private_key(self, curve): + """ + Generate a new private key on the named curve. + """ + + if self.elliptic_curve_supported(curve): + curve_nid = self._elliptic_curve_to_nid(curve) + + ctx = self._lib.EC_KEY_new_by_curve_name(curve_nid) + assert ctx != self._ffi.NULL + ctx = self._ffi.gc(ctx, self._lib.EC_KEY_free) + + res = self._lib.EC_KEY_generate_key(ctx) + assert res == 1 + + res = self._lib.EC_KEY_check_key(ctx) + assert res == 1 + + return _EllipticCurvePrivateKey(self, ctx, curve) + else: + raise UnsupportedAlgorithm( + "Backend object does not support {0}.".format(curve.name), + _Reasons.UNSUPPORTED_ELLIPTIC_CURVE + ) + + def elliptic_curve_private_key_from_numbers(self, numbers): + public = numbers.public_numbers + + curve_nid = self._elliptic_curve_to_nid(public.curve) + + ctx = self._lib.EC_KEY_new_by_curve_name(curve_nid) + assert ctx != self._ffi.NULL + ctx = self._ffi.gc(ctx, self._lib.EC_KEY_free) + + ctx = self._ec_key_set_public_key_affine_coordinates( + ctx, public.x, public.y) + + res = self._lib.EC_KEY_set_private_key( + ctx, self._int_to_bn(numbers.private_value)) + assert res == 1 + + return _EllipticCurvePrivateKey(self, ctx, + numbers.public_numbers.curve) + + def elliptic_curve_public_key_from_numbers(self, numbers): + curve_nid = self._elliptic_curve_to_nid(numbers.curve) + + ctx = self._lib.EC_KEY_new_by_curve_name(curve_nid) + assert ctx != self._ffi.NULL + ctx = self._ffi.gc(ctx, self._lib.EC_KEY_free) + + ctx = self._ec_key_set_public_key_affine_coordinates( + ctx, numbers.x, numbers.y) + + return _EllipticCurvePublicKey(self, ctx, numbers.curve) + + def _elliptic_curve_to_nid(self, curve): + """ + Get the NID for a curve name. + """ + + curve_aliases = { + "secp192r1": "prime192v1", + "secp256r1": "prime256v1" + } + + curve_name = curve_aliases.get(curve.name, curve.name) + + curve_nid = self._lib.OBJ_sn2nid(curve_name.encode()) + if curve_nid == self._lib.NID_undef: + raise UnsupportedAlgorithm( + "{0} is not a supported elliptic curve".format(curve.name), + _Reasons.UNSUPPORTED_ELLIPTIC_CURVE + ) + return curve_nid + + def _ec_key_set_public_key_affine_coordinates(self, ctx, x, y): + """ + This is a port of EC_KEY_set_public_key_affine_coordinates that was + added in 1.0.1. + + Sets the public key point in the EC_KEY context to the affine x and y + values. + """ + + assert ctx != self._ffi.NULL + + bn_x = self._int_to_bn(x) + bn_y = self._int_to_bn(y) + + nid_two_field = self._lib.OBJ_sn2nid(b"characteristic-two-field") + assert nid_two_field != self._lib.NID_undef + + bn_ctx = self._lib.BN_CTX_new() + assert bn_ctx != self._ffi.NULL + bn_ctx = self._ffi.gc(bn_ctx, self._lib.BN_CTX_free) + + group = self._lib.EC_KEY_get0_group(ctx) + assert group != self._ffi.NULL + + point = self._lib.EC_POINT_new(group) + assert point != self._ffi.NULL + point = self._ffi.gc(point, self._lib.EC_POINT_free) + + method = self._lib.EC_GROUP_method_of(group) + assert method != self._ffi.NULL + + nid = self._lib.EC_METHOD_get_field_type(method) + assert nid != self._lib.NID_undef + + check_x = self._lib.BN_CTX_get(bn_ctx) + check_y = self._lib.BN_CTX_get(bn_ctx) + + if nid == nid_two_field and self._lib.Cryptography_HAS_EC2M: + set_func = self._lib.EC_POINT_set_affine_coordinates_GF2m + get_func = self._lib.EC_POINT_get_affine_coordinates_GF2m + else: + set_func = self._lib.EC_POINT_set_affine_coordinates_GFp + get_func = self._lib.EC_POINT_get_affine_coordinates_GFp + + assert set_func and get_func + + res = set_func(group, point, bn_x, bn_y, bn_ctx) + assert res == 1 + + res = get_func(group, point, check_x, check_y, bn_ctx) + assert res == 1 + + assert ( + self._lib.BN_cmp(bn_x, check_x) == 0 and + self._lib.BN_cmp(bn_y, check_y) == 0 + ) + + res = self._lib.EC_KEY_set_public_key(ctx, point) + assert res == 1 + + res = self._lib.EC_KEY_check_key(ctx) + assert res == 1 + + return ctx + class GetCipherByName(object): def __init__(self, fmt): @@ -666,822 +1058,4 @@ class GetCipherByName(object): return backend._lib.EVP_get_cipherbyname(cipher_name.encode("ascii")) -@utils.register_interface(interfaces.CipherContext) -@utils.register_interface(interfaces.AEADCipherContext) -@utils.register_interface(interfaces.AEADEncryptionContext) -class _CipherContext(object): - _ENCRYPT = 1 - _DECRYPT = 0 - - def __init__(self, backend, cipher, mode, operation): - self._backend = backend - self._cipher = cipher - self._mode = mode - self._operation = operation - self._tag = None - - if isinstance(self._cipher, interfaces.BlockCipherAlgorithm): - self._block_size = self._cipher.block_size - else: - self._block_size = 1 - - ctx = self._backend._lib.EVP_CIPHER_CTX_new() - ctx = self._backend._ffi.gc( - ctx, self._backend._lib.EVP_CIPHER_CTX_free - ) - - registry = self._backend._cipher_registry - try: - adapter = registry[type(cipher), type(mode)] - except KeyError: - raise UnsupportedAlgorithm( - "cipher {0} in {1} mode is not supported " - "by this backend".format( - cipher.name, mode.name if mode else mode), - _Reasons.UNSUPPORTED_CIPHER - ) - - evp_cipher = adapter(self._backend, cipher, mode) - if evp_cipher == self._backend._ffi.NULL: - raise UnsupportedAlgorithm( - "cipher {0} in {1} mode is not supported " - "by this backend".format( - cipher.name, mode.name if mode else mode), - _Reasons.UNSUPPORTED_CIPHER - ) - - if isinstance(mode, interfaces.ModeWithInitializationVector): - iv_nonce = mode.initialization_vector - elif isinstance(mode, interfaces.ModeWithNonce): - iv_nonce = mode.nonce - else: - iv_nonce = self._backend._ffi.NULL - # begin init with cipher and operation type - res = self._backend._lib.EVP_CipherInit_ex(ctx, evp_cipher, - self._backend._ffi.NULL, - self._backend._ffi.NULL, - self._backend._ffi.NULL, - operation) - assert res != 0 - # set the key length to handle variable key ciphers - res = self._backend._lib.EVP_CIPHER_CTX_set_key_length( - ctx, len(cipher.key) - ) - assert res != 0 - if isinstance(mode, GCM): - res = self._backend._lib.EVP_CIPHER_CTX_ctrl( - ctx, self._backend._lib.EVP_CTRL_GCM_SET_IVLEN, - len(iv_nonce), self._backend._ffi.NULL - ) - assert res != 0 - if operation == self._DECRYPT: - res = self._backend._lib.EVP_CIPHER_CTX_ctrl( - ctx, self._backend._lib.EVP_CTRL_GCM_SET_TAG, - len(mode.tag), mode.tag - ) - assert res != 0 - - # pass key/iv - res = self._backend._lib.EVP_CipherInit_ex( - ctx, - self._backend._ffi.NULL, - self._backend._ffi.NULL, - cipher.key, - iv_nonce, - operation - ) - assert res != 0 - # We purposely disable padding here as it's handled higher up in the - # API. - self._backend._lib.EVP_CIPHER_CTX_set_padding(ctx, 0) - self._ctx = ctx - - def update(self, data): - # OpenSSL 0.9.8e has an assertion in its EVP code that causes it - # to SIGABRT if you call update with an empty byte string. This can be - # removed when we drop support for 0.9.8e (CentOS/RHEL 5). This branch - # should be taken only when length is zero and mode is not GCM because - # AES GCM can return improper tag values if you don't call update - # with empty plaintext when authenticating AAD for ...reasons. - if len(data) == 0 and not isinstance(self._mode, GCM): - return b"" - - buf = self._backend._ffi.new("unsigned char[]", - len(data) + self._block_size - 1) - outlen = self._backend._ffi.new("int *") - res = self._backend._lib.EVP_CipherUpdate(self._ctx, buf, outlen, data, - len(data)) - assert res != 0 - return self._backend._ffi.buffer(buf)[:outlen[0]] - - def finalize(self): - buf = self._backend._ffi.new("unsigned char[]", self._block_size) - outlen = self._backend._ffi.new("int *") - res = self._backend._lib.EVP_CipherFinal_ex(self._ctx, buf, outlen) - if res == 0: - errors = self._backend._consume_errors() - - if not errors and isinstance(self._mode, GCM): - raise InvalidTag - - assert errors - - if errors[0][1:] == ( - self._backend._lib.ERR_LIB_EVP, - self._backend._lib.EVP_F_EVP_ENCRYPTFINAL_EX, - self._backend._lib.EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH - ) or errors[0][1:] == ( - self._backend._lib.ERR_LIB_EVP, - self._backend._lib.EVP_F_EVP_DECRYPTFINAL_EX, - self._backend._lib.EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH - ): - raise ValueError( - "The length of the provided data is not a multiple of " - "the block length." - ) - else: - raise self._backend._unknown_error(errors[0]) - - if (isinstance(self._mode, GCM) and - self._operation == self._ENCRYPT): - block_byte_size = self._block_size // 8 - tag_buf = self._backend._ffi.new( - "unsigned char[]", block_byte_size - ) - res = self._backend._lib.EVP_CIPHER_CTX_ctrl( - self._ctx, self._backend._lib.EVP_CTRL_GCM_GET_TAG, - block_byte_size, tag_buf - ) - assert res != 0 - self._tag = self._backend._ffi.buffer(tag_buf)[:] - - res = self._backend._lib.EVP_CIPHER_CTX_cleanup(self._ctx) - assert res == 1 - return self._backend._ffi.buffer(buf)[:outlen[0]] - - def authenticate_additional_data(self, data): - outlen = self._backend._ffi.new("int *") - res = self._backend._lib.EVP_CipherUpdate( - self._ctx, self._backend._ffi.NULL, outlen, data, len(data) - ) - assert res != 0 - - @property - def tag(self): - return self._tag - - -@utils.register_interface(interfaces.HashContext) -class _HashContext(object): - def __init__(self, backend, algorithm, ctx=None): - self.algorithm = algorithm - - self._backend = backend - - if ctx is None: - ctx = self._backend._lib.EVP_MD_CTX_create() - ctx = self._backend._ffi.gc(ctx, - self._backend._lib.EVP_MD_CTX_destroy) - evp_md = self._backend._lib.EVP_get_digestbyname( - algorithm.name.encode("ascii")) - if evp_md == self._backend._ffi.NULL: - raise UnsupportedAlgorithm( - "{0} is not a supported hash on this backend".format( - algorithm.name), - _Reasons.UNSUPPORTED_HASH - ) - res = self._backend._lib.EVP_DigestInit_ex(ctx, evp_md, - self._backend._ffi.NULL) - assert res != 0 - - self._ctx = ctx - - def copy(self): - copied_ctx = self._backend._lib.EVP_MD_CTX_create() - copied_ctx = self._backend._ffi.gc( - copied_ctx, self._backend._lib.EVP_MD_CTX_destroy - ) - res = self._backend._lib.EVP_MD_CTX_copy_ex(copied_ctx, self._ctx) - assert res != 0 - return _HashContext(self._backend, self.algorithm, ctx=copied_ctx) - - def update(self, data): - res = self._backend._lib.EVP_DigestUpdate(self._ctx, data, len(data)) - assert res != 0 - - def finalize(self): - buf = self._backend._ffi.new("unsigned char[]", - self._backend._lib.EVP_MAX_MD_SIZE) - outlen = self._backend._ffi.new("unsigned int *") - res = self._backend._lib.EVP_DigestFinal_ex(self._ctx, buf, outlen) - assert res != 0 - assert outlen[0] == self.algorithm.digest_size - res = self._backend._lib.EVP_MD_CTX_cleanup(self._ctx) - assert res == 1 - return self._backend._ffi.buffer(buf)[:outlen[0]] - - -@utils.register_interface(interfaces.HashContext) -class _HMACContext(object): - def __init__(self, backend, key, algorithm, ctx=None): - self.algorithm = algorithm - self._backend = backend - - if ctx is None: - ctx = self._backend._ffi.new("HMAC_CTX *") - self._backend._lib.HMAC_CTX_init(ctx) - ctx = self._backend._ffi.gc( - ctx, self._backend._lib.HMAC_CTX_cleanup - ) - evp_md = self._backend._lib.EVP_get_digestbyname( - algorithm.name.encode('ascii')) - if evp_md == self._backend._ffi.NULL: - raise UnsupportedAlgorithm( - "{0} is not a supported hash on this backend".format( - algorithm.name), - _Reasons.UNSUPPORTED_HASH - ) - res = self._backend._lib.Cryptography_HMAC_Init_ex( - ctx, key, len(key), evp_md, self._backend._ffi.NULL - ) - assert res != 0 - - self._ctx = ctx - self._key = key - - def copy(self): - copied_ctx = self._backend._ffi.new("HMAC_CTX *") - self._backend._lib.HMAC_CTX_init(copied_ctx) - copied_ctx = self._backend._ffi.gc( - copied_ctx, self._backend._lib.HMAC_CTX_cleanup - ) - res = self._backend._lib.Cryptography_HMAC_CTX_copy( - copied_ctx, self._ctx - ) - assert res != 0 - return _HMACContext( - self._backend, self._key, self.algorithm, ctx=copied_ctx - ) - - def update(self, data): - res = self._backend._lib.Cryptography_HMAC_Update( - self._ctx, data, len(data) - ) - assert res != 0 - - def finalize(self): - buf = self._backend._ffi.new("unsigned char[]", - self._backend._lib.EVP_MAX_MD_SIZE) - outlen = self._backend._ffi.new("unsigned int *") - res = self._backend._lib.Cryptography_HMAC_Final( - self._ctx, buf, outlen - ) - assert res != 0 - assert outlen[0] == self.algorithm.digest_size - self._backend._lib.HMAC_CTX_cleanup(self._ctx) - return self._backend._ffi.buffer(buf)[:outlen[0]] - - -def _get_rsa_pss_salt_length(pss, key_size, digest_size): - if pss._mgf._salt_length is not None: - salt = pss._mgf._salt_length - else: - salt = pss._salt_length - - if salt is MGF1.MAX_LENGTH or salt is PSS.MAX_LENGTH: - # bit length - 1 per RFC 3447 - emlen = int(math.ceil((key_size - 1) / 8.0)) - salt_length = emlen - digest_size - 2 - assert salt_length >= 0 - return salt_length - else: - return salt - - -@utils.register_interface(interfaces.AsymmetricSignatureContext) -class _RSASignatureContext(object): - def __init__(self, backend, private_key, padding, algorithm): - self._backend = backend - self._private_key = private_key - - if not isinstance(padding, interfaces.AsymmetricPadding): - raise TypeError( - "Expected provider of interfaces.AsymmetricPadding") - - if isinstance(padding, PKCS1v15): - if self._backend._lib.Cryptography_HAS_PKEY_CTX: - self._finalize_method = self._finalize_pkey_ctx - self._padding_enum = self._backend._lib.RSA_PKCS1_PADDING - else: - self._finalize_method = self._finalize_pkcs1 - elif isinstance(padding, PSS): - if not isinstance(padding._mgf, MGF1): - raise UnsupportedAlgorithm( - "Only MGF1 is supported by this backend", - _Reasons.UNSUPPORTED_MGF - ) - - # Size of key in bytes - 2 is the maximum - # PSS signature length (salt length is checked later) - key_size_bytes = int(math.ceil(private_key.key_size / 8.0)) - if key_size_bytes - algorithm.digest_size - 2 < 0: - raise ValueError("Digest too large for key size. Use a larger " - "key.") - - if not self._backend.mgf1_hash_supported(padding._mgf._algorithm): - raise UnsupportedAlgorithm( - "When OpenSSL is older than 1.0.1 then only SHA1 is " - "supported with MGF1.", - _Reasons.UNSUPPORTED_HASH - ) - - if self._backend._lib.Cryptography_HAS_PKEY_CTX: - self._finalize_method = self._finalize_pkey_ctx - self._padding_enum = self._backend._lib.RSA_PKCS1_PSS_PADDING - else: - self._finalize_method = self._finalize_pss - else: - raise UnsupportedAlgorithm( - "{0} is not supported by this backend".format(padding.name), - _Reasons.UNSUPPORTED_PADDING - ) - - self._padding = padding - self._algorithm = algorithm - self._hash_ctx = _HashContext(backend, self._algorithm) - - def update(self, data): - if self._hash_ctx is None: - raise AlreadyFinalized("Context has already been finalized") - - self._hash_ctx.update(data) - - def finalize(self): - if self._hash_ctx is None: - raise AlreadyFinalized("Context has already been finalized") - - evp_pkey = self._backend._rsa_private_key_to_evp_pkey( - self._private_key) - - evp_md = self._backend._lib.EVP_get_digestbyname( - self._algorithm.name.encode("ascii")) - assert evp_md != self._backend._ffi.NULL - pkey_size = self._backend._lib.EVP_PKEY_size(evp_pkey) - assert pkey_size > 0 - - return self._finalize_method(evp_pkey, pkey_size, evp_md) - - def _finalize_pkey_ctx(self, evp_pkey, pkey_size, evp_md): - pkey_ctx = self._backend._lib.EVP_PKEY_CTX_new( - evp_pkey, self._backend._ffi.NULL - ) - assert pkey_ctx != self._backend._ffi.NULL - pkey_ctx = self._backend._ffi.gc(pkey_ctx, - self._backend._lib.EVP_PKEY_CTX_free) - res = self._backend._lib.EVP_PKEY_sign_init(pkey_ctx) - assert res == 1 - res = self._backend._lib.EVP_PKEY_CTX_set_signature_md( - pkey_ctx, evp_md) - assert res > 0 - - res = self._backend._lib.EVP_PKEY_CTX_set_rsa_padding( - pkey_ctx, self._padding_enum) - assert res > 0 - if isinstance(self._padding, PSS): - res = self._backend._lib.EVP_PKEY_CTX_set_rsa_pss_saltlen( - pkey_ctx, - _get_rsa_pss_salt_length( - self._padding, - self._private_key.key_size, - self._hash_ctx.algorithm.digest_size - ) - ) - assert res > 0 - - if self._backend._lib.Cryptography_HAS_MGF1_MD: - # MGF1 MD is configurable in OpenSSL 1.0.1+ - mgf1_md = self._backend._lib.EVP_get_digestbyname( - self._padding._mgf._algorithm.name.encode("ascii")) - assert mgf1_md != self._backend._ffi.NULL - res = self._backend._lib.EVP_PKEY_CTX_set_rsa_mgf1_md( - pkey_ctx, mgf1_md - ) - assert res > 0 - data_to_sign = self._hash_ctx.finalize() - self._hash_ctx = None - buflen = self._backend._ffi.new("size_t *") - res = self._backend._lib.EVP_PKEY_sign( - pkey_ctx, - self._backend._ffi.NULL, - buflen, - data_to_sign, - len(data_to_sign) - ) - assert res == 1 - buf = self._backend._ffi.new("unsigned char[]", buflen[0]) - res = self._backend._lib.EVP_PKEY_sign( - pkey_ctx, buf, buflen, data_to_sign, len(data_to_sign)) - if res != 1: - errors = self._backend._consume_errors() - assert errors[0].lib == self._backend._lib.ERR_LIB_RSA - reason = None - if (errors[0].reason == - self._backend._lib.RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE): - reason = ("Salt length too long for key size. Try using " - "MAX_LENGTH instead.") - elif (errors[0].reason == - self._backend._lib.RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY): - reason = "Digest too large for key size. Use a larger key." - assert reason is not None - raise ValueError(reason) - - return self._backend._ffi.buffer(buf)[:] - - def _finalize_pkcs1(self, evp_pkey, pkey_size, evp_md): - sig_buf = self._backend._ffi.new("char[]", pkey_size) - sig_len = self._backend._ffi.new("unsigned int *") - res = self._backend._lib.EVP_SignFinal( - self._hash_ctx._ctx, - sig_buf, - sig_len, - evp_pkey - ) - self._hash_ctx.finalize() - self._hash_ctx = None - if res == 0: - errors = self._backend._consume_errors() - assert errors[0].lib == self._backend._lib.ERR_LIB_RSA - assert (errors[0].reason == - self._backend._lib.RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY) - raise ValueError("Digest too large for key size. Use a larger " - "key.") - - return self._backend._ffi.buffer(sig_buf)[:sig_len[0]] - - def _finalize_pss(self, evp_pkey, pkey_size, evp_md): - data_to_sign = self._hash_ctx.finalize() - self._hash_ctx = None - padded = self._backend._ffi.new("unsigned char[]", pkey_size) - rsa_cdata = self._backend._lib.EVP_PKEY_get1_RSA(evp_pkey) - assert rsa_cdata != self._backend._ffi.NULL - rsa_cdata = self._backend._ffi.gc(rsa_cdata, - self._backend._lib.RSA_free) - res = self._backend._lib.RSA_padding_add_PKCS1_PSS( - rsa_cdata, - padded, - data_to_sign, - evp_md, - _get_rsa_pss_salt_length( - self._padding, - self._private_key.key_size, - len(data_to_sign) - ) - ) - if res != 1: - errors = self._backend._consume_errors() - assert errors[0].lib == self._backend._lib.ERR_LIB_RSA - assert (errors[0].reason == - self._backend._lib.RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE) - raise ValueError("Salt length too long for key size. Try using " - "MAX_LENGTH instead.") - - sig_buf = self._backend._ffi.new("char[]", pkey_size) - sig_len = self._backend._lib.RSA_private_encrypt( - pkey_size, - padded, - sig_buf, - rsa_cdata, - self._backend._lib.RSA_NO_PADDING - ) - assert sig_len != -1 - return self._backend._ffi.buffer(sig_buf)[:sig_len] - - -@utils.register_interface(interfaces.AsymmetricVerificationContext) -class _RSAVerificationContext(object): - def __init__(self, backend, public_key, signature, padding, algorithm): - self._backend = backend - self._public_key = public_key - self._signature = signature - - if not isinstance(padding, interfaces.AsymmetricPadding): - raise TypeError( - "Expected provider of interfaces.AsymmetricPadding") - - if isinstance(padding, PKCS1v15): - if self._backend._lib.Cryptography_HAS_PKEY_CTX: - self._verify_method = self._verify_pkey_ctx - self._padding_enum = self._backend._lib.RSA_PKCS1_PADDING - else: - self._verify_method = self._verify_pkcs1 - elif isinstance(padding, PSS): - if not isinstance(padding._mgf, MGF1): - raise UnsupportedAlgorithm( - "Only MGF1 is supported by this backend", - _Reasons.UNSUPPORTED_MGF - ) - - # Size of key in bytes - 2 is the maximum - # PSS signature length (salt length is checked later) - key_size_bytes = int(math.ceil(public_key.key_size / 8.0)) - if key_size_bytes - algorithm.digest_size - 2 < 0: - raise ValueError( - "Digest too large for key size. Check that you have the " - "correct key and digest algorithm." - ) - - if not self._backend.mgf1_hash_supported(padding._mgf._algorithm): - raise UnsupportedAlgorithm( - "When OpenSSL is older than 1.0.1 then only SHA1 is " - "supported with MGF1.", - _Reasons.UNSUPPORTED_HASH - ) - - if self._backend._lib.Cryptography_HAS_PKEY_CTX: - self._verify_method = self._verify_pkey_ctx - self._padding_enum = self._backend._lib.RSA_PKCS1_PSS_PADDING - else: - self._verify_method = self._verify_pss - else: - raise UnsupportedAlgorithm( - "{0} is not supported by this backend".format(padding.name), - _Reasons.UNSUPPORTED_PADDING - ) - - self._padding = padding - self._algorithm = algorithm - self._hash_ctx = _HashContext(backend, self._algorithm) - - def update(self, data): - if self._hash_ctx is None: - raise AlreadyFinalized("Context has already been finalized") - - self._hash_ctx.update(data) - - def verify(self): - if self._hash_ctx is None: - raise AlreadyFinalized("Context has already been finalized") - - evp_pkey = self._backend._rsa_public_key_to_evp_pkey( - self._public_key) - - evp_md = self._backend._lib.EVP_get_digestbyname( - self._algorithm.name.encode("ascii")) - assert evp_md != self._backend._ffi.NULL - - self._verify_method(evp_pkey, evp_md) - - def _verify_pkey_ctx(self, evp_pkey, evp_md): - pkey_ctx = self._backend._lib.EVP_PKEY_CTX_new( - evp_pkey, self._backend._ffi.NULL - ) - assert pkey_ctx != self._backend._ffi.NULL - pkey_ctx = self._backend._ffi.gc(pkey_ctx, - self._backend._lib.EVP_PKEY_CTX_free) - res = self._backend._lib.EVP_PKEY_verify_init(pkey_ctx) - assert res == 1 - res = self._backend._lib.EVP_PKEY_CTX_set_signature_md( - pkey_ctx, evp_md) - assert res > 0 - - res = self._backend._lib.EVP_PKEY_CTX_set_rsa_padding( - pkey_ctx, self._padding_enum) - assert res > 0 - if isinstance(self._padding, PSS): - res = self._backend._lib.EVP_PKEY_CTX_set_rsa_pss_saltlen( - pkey_ctx, - _get_rsa_pss_salt_length( - self._padding, - self._public_key.key_size, - self._hash_ctx.algorithm.digest_size - ) - ) - assert res > 0 - if self._backend._lib.Cryptography_HAS_MGF1_MD: - # MGF1 MD is configurable in OpenSSL 1.0.1+ - mgf1_md = self._backend._lib.EVP_get_digestbyname( - self._padding._mgf._algorithm.name.encode("ascii")) - assert mgf1_md != self._backend._ffi.NULL - res = self._backend._lib.EVP_PKEY_CTX_set_rsa_mgf1_md( - pkey_ctx, mgf1_md - ) - assert res > 0 - - data_to_verify = self._hash_ctx.finalize() - self._hash_ctx = None - res = self._backend._lib.EVP_PKEY_verify( - pkey_ctx, - self._signature, - len(self._signature), - data_to_verify, - len(data_to_verify) - ) - # The previous call can return negative numbers in the event of an - # error. This is not a signature failure but we need to fail if it - # occurs. - assert res >= 0 - if res == 0: - errors = self._backend._consume_errors() - assert errors - raise InvalidSignature - - def _verify_pkcs1(self, evp_pkey, evp_md): - res = self._backend._lib.EVP_VerifyFinal( - self._hash_ctx._ctx, - self._signature, - len(self._signature), - evp_pkey - ) - self._hash_ctx.finalize() - self._hash_ctx = None - # The previous call can return negative numbers in the event of an - # error. This is not a signature failure but we need to fail if it - # occurs. - assert res >= 0 - if res == 0: - errors = self._backend._consume_errors() - assert errors - raise InvalidSignature - - def _verify_pss(self, evp_pkey, evp_md): - pkey_size = self._backend._lib.EVP_PKEY_size(evp_pkey) - assert pkey_size > 0 - rsa_cdata = self._backend._lib.EVP_PKEY_get1_RSA(evp_pkey) - assert rsa_cdata != self._backend._ffi.NULL - rsa_cdata = self._backend._ffi.gc(rsa_cdata, - self._backend._lib.RSA_free) - buf = self._backend._ffi.new("unsigned char[]", pkey_size) - res = self._backend._lib.RSA_public_decrypt( - len(self._signature), - self._signature, - buf, - rsa_cdata, - self._backend._lib.RSA_NO_PADDING - ) - if res != pkey_size: - errors = self._backend._consume_errors() - assert errors - raise InvalidSignature - - data_to_verify = self._hash_ctx.finalize() - self._hash_ctx = None - res = self._backend._lib.RSA_verify_PKCS1_PSS( - rsa_cdata, - data_to_verify, - evp_md, - buf, - _get_rsa_pss_salt_length( - self._padding, - self._public_key.key_size, - len(data_to_verify) - ) - ) - if res != 1: - errors = self._backend._consume_errors() - assert errors - raise InvalidSignature - - -@utils.register_interface(interfaces.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 = _HashContext(backend, self._algorithm) - - def update(self, data): - if self._hash_ctx is None: - raise AlreadyFinalized("Context has already been finalized") - - self._hash_ctx.update(data) - - def verify(self): - if self._hash_ctx is None: - raise AlreadyFinalized("Context has already been finalized") - - self._dsa_cdata = self._backend._dsa_cdata_from_public_key( - self._public_key) - self._dsa_cdata = self._backend._ffi.gc(self._dsa_cdata, - self._backend._lib.DSA_free) - - data_to_verify = self._hash_ctx.finalize() - self._hash_ctx = None - - # The first parameter passed to DSA_verify is unused by OpenSSL but - # must be an integer. - res = self._backend._lib.DSA_verify( - 0, data_to_verify, len(data_to_verify), self._signature, - len(self._signature), self._dsa_cdata) - - if res != 1: - errors = self._backend._consume_errors() - assert errors - if res == -1: - assert errors[0].lib == self._backend._lib.ERR_LIB_ASN1 - - raise InvalidSignature - - -@utils.register_interface(interfaces.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 = _HashContext(backend, self._algorithm) - self._dsa_cdata = self._backend._dsa_cdata_from_private_key( - self._private_key) - self._dsa_cdata = self._backend._ffi.gc(self._dsa_cdata, - self._backend._lib.DSA_free) - - def update(self, data): - if self._hash_ctx is None: - raise AlreadyFinalized("Context has already been finalized") - - self._hash_ctx.update(data) - - def finalize(self): - if self._hash_ctx is None: - raise AlreadyFinalized("Context has already been finalized") - - data_to_sign = self._hash_ctx.finalize() - self._hash_ctx = None - sig_buf_len = self._backend._lib.DSA_size(self._dsa_cdata) - sig_buf = self._backend._ffi.new("unsigned char[]", sig_buf_len) - buflen = self._backend._ffi.new("unsigned int *") - - # The first parameter passed to DSA_sign is unused by OpenSSL but - # must be an integer. - res = self._backend._lib.DSA_sign( - 0, data_to_sign, len(data_to_sign), sig_buf, - buflen, self._dsa_cdata) - assert res == 1 - assert buflen[0] - - return self._backend._ffi.buffer(sig_buf)[:buflen[0]] - - -@utils.register_interface(interfaces.CMACContext) -class _CMACContext(object): - def __init__(self, backend, algorithm, ctx=None): - if not backend.cmac_algorithm_supported(algorithm): - raise UnsupportedAlgorithm("This backend does not support CMAC", - _Reasons.UNSUPPORTED_CIPHER) - - self._backend = backend - self._key = algorithm.key - self._algorithm = algorithm - self._output_length = algorithm.block_size // 8 - - if ctx is None: - registry = self._backend._cipher_registry - adapter = registry[type(algorithm), CBC] - - evp_cipher = adapter(self._backend, algorithm, CBC) - - ctx = self._backend._lib.CMAC_CTX_new() - - assert ctx != self._backend._ffi.NULL - ctx = self._backend._ffi.gc(ctx, self._backend._lib.CMAC_CTX_free) - - self._backend._lib.CMAC_Init( - ctx, self._key, len(self._key), - evp_cipher, self._backend._ffi.NULL - ) - - self._ctx = ctx - - def update(self, data): - res = self._backend._lib.CMAC_Update(self._ctx, data, len(data)) - assert res == 1 - - def finalize(self): - buf = self._backend._ffi.new("unsigned char[]", self._output_length) - length = self._backend._ffi.new("size_t *", self._output_length) - res = self._backend._lib.CMAC_Final( - self._ctx, buf, length - ) - assert res == 1 - - self._ctx = None - - return self._backend._ffi.buffer(buf)[:] - - def copy(self): - copied_ctx = self._backend._lib.CMAC_CTX_new() - copied_ctx = self._backend._ffi.gc( - copied_ctx, self._backend._lib.CMAC_CTX_free - ) - res = self._backend._lib.CMAC_CTX_copy( - copied_ctx, self._ctx - ) - assert res == 1 - return _CMACContext( - self._backend, self._algorithm, ctx=copied_ctx - ) - - backend = Backend() diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/ciphers.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/ciphers.py new file mode 100644 index 0000000..c3a5499 --- /dev/null +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/ciphers.py @@ -0,0 +1,219 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import absolute_import, division, print_function + +from cryptography import utils +from cryptography.exceptions import InvalidTag, UnsupportedAlgorithm, _Reasons +from cryptography.hazmat.primitives import interfaces +from cryptography.hazmat.primitives.ciphers.modes import GCM + + +@utils.register_interface(interfaces.CipherContext) +@utils.register_interface(interfaces.AEADCipherContext) +@utils.register_interface(interfaces.AEADEncryptionContext) +class _CipherContext(object): + _ENCRYPT = 1 + _DECRYPT = 0 + + def __init__(self, backend, cipher, mode, operation): + self._backend = backend + self._cipher = cipher + self._mode = mode + self._operation = operation + self._tag = None + + if isinstance(self._cipher, interfaces.BlockCipherAlgorithm): + self._block_size = self._cipher.block_size + else: + self._block_size = 1 + + ctx = self._backend._lib.EVP_CIPHER_CTX_new() + ctx = self._backend._ffi.gc( + ctx, self._backend._lib.EVP_CIPHER_CTX_free + ) + + registry = self._backend._cipher_registry + try: + adapter = registry[type(cipher), type(mode)] + except KeyError: + raise UnsupportedAlgorithm( + "cipher {0} in {1} mode is not supported " + "by this backend.".format( + cipher.name, mode.name if mode else mode), + _Reasons.UNSUPPORTED_CIPHER + ) + + evp_cipher = adapter(self._backend, cipher, mode) + if evp_cipher == self._backend._ffi.NULL: + raise UnsupportedAlgorithm( + "cipher {0} in {1} mode is not supported " + "by this backend.".format( + cipher.name, mode.name if mode else mode), + _Reasons.UNSUPPORTED_CIPHER + ) + + if isinstance(mode, interfaces.ModeWithInitializationVector): + iv_nonce = mode.initialization_vector + elif isinstance(mode, interfaces.ModeWithNonce): + iv_nonce = mode.nonce + else: + iv_nonce = self._backend._ffi.NULL + # begin init with cipher and operation type + res = self._backend._lib.EVP_CipherInit_ex(ctx, evp_cipher, + self._backend._ffi.NULL, + self._backend._ffi.NULL, + self._backend._ffi.NULL, + operation) + assert res != 0 + # set the key length to handle variable key ciphers + res = self._backend._lib.EVP_CIPHER_CTX_set_key_length( + ctx, len(cipher.key) + ) + assert res != 0 + if isinstance(mode, GCM): + res = self._backend._lib.EVP_CIPHER_CTX_ctrl( + ctx, self._backend._lib.EVP_CTRL_GCM_SET_IVLEN, + len(iv_nonce), self._backend._ffi.NULL + ) + assert res != 0 + if operation == self._DECRYPT: + res = self._backend._lib.EVP_CIPHER_CTX_ctrl( + ctx, self._backend._lib.EVP_CTRL_GCM_SET_TAG, + len(mode.tag), mode.tag + ) + assert res != 0 + + # pass key/iv + res = self._backend._lib.EVP_CipherInit_ex( + ctx, + self._backend._ffi.NULL, + self._backend._ffi.NULL, + cipher.key, + iv_nonce, + operation + ) + assert res != 0 + # We purposely disable padding here as it's handled higher up in the + # API. + self._backend._lib.EVP_CIPHER_CTX_set_padding(ctx, 0) + self._ctx = ctx + + def update(self, data): + # OpenSSL 0.9.8e has an assertion in its EVP code that causes it + # to SIGABRT if you call update with an empty byte string. This can be + # removed when we drop support for 0.9.8e (CentOS/RHEL 5). This branch + # should be taken only when length is zero and mode is not GCM because + # AES GCM can return improper tag values if you don't call update + # with empty plaintext when authenticating AAD for ...reasons. + if len(data) == 0 and not isinstance(self._mode, GCM): + return b"" + + buf = self._backend._ffi.new("unsigned char[]", + len(data) + self._block_size - 1) + outlen = self._backend._ffi.new("int *") + res = self._backend._lib.EVP_CipherUpdate(self._ctx, buf, outlen, data, + len(data)) + assert res != 0 + return self._backend._ffi.buffer(buf)[:outlen[0]] + + def finalize(self): + buf = self._backend._ffi.new("unsigned char[]", self._block_size) + outlen = self._backend._ffi.new("int *") + res = self._backend._lib.EVP_CipherFinal_ex(self._ctx, buf, outlen) + if res == 0: + errors = self._backend._consume_errors() + + if not errors and isinstance(self._mode, GCM): + raise InvalidTag + + assert errors + + if errors[0][1:] == ( + self._backend._lib.ERR_LIB_EVP, + self._backend._lib.EVP_F_EVP_ENCRYPTFINAL_EX, + self._backend._lib.EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH + ) or errors[0][1:] == ( + self._backend._lib.ERR_LIB_EVP, + self._backend._lib.EVP_F_EVP_DECRYPTFINAL_EX, + self._backend._lib.EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH + ): + raise ValueError( + "The length of the provided data is not a multiple of " + "the block length." + ) + else: + raise self._backend._unknown_error(errors[0]) + + if (isinstance(self._mode, GCM) and + self._operation == self._ENCRYPT): + block_byte_size = self._block_size // 8 + tag_buf = self._backend._ffi.new( + "unsigned char[]", block_byte_size + ) + res = self._backend._lib.EVP_CIPHER_CTX_ctrl( + self._ctx, self._backend._lib.EVP_CTRL_GCM_GET_TAG, + block_byte_size, tag_buf + ) + assert res != 0 + self._tag = self._backend._ffi.buffer(tag_buf)[:] + + res = self._backend._lib.EVP_CIPHER_CTX_cleanup(self._ctx) + assert res == 1 + return self._backend._ffi.buffer(buf)[:outlen[0]] + + def authenticate_additional_data(self, data): + outlen = self._backend._ffi.new("int *") + res = self._backend._lib.EVP_CipherUpdate( + self._ctx, self._backend._ffi.NULL, outlen, data, len(data) + ) + assert res != 0 + + @property + def tag(self): + return self._tag + + +@utils.register_interface(interfaces.CipherContext) +class _AESCTRCipherContext(object): + """ + This is needed to provide support for AES CTR mode in OpenSSL 0.9.8. It can + be removed when we drop 0.9.8 support (RHEL5 extended life ends 2020). + """ + def __init__(self, backend, cipher, mode): + self._backend = backend + + self._key = self._backend._ffi.new("AES_KEY *") + assert self._key != self._backend._ffi.NULL + res = self._backend._lib.AES_set_encrypt_key( + cipher.key, len(cipher.key) * 8, self._key + ) + assert res == 0 + self._ecount = self._backend._ffi.new("char[]", 16) + self._nonce = self._backend._ffi.new("char[16]", mode.nonce) + self._num = self._backend._ffi.new("unsigned int *", 0) + + def update(self, data): + buf = self._backend._ffi.new("unsigned char[]", len(data)) + self._backend._lib.AES_ctr128_encrypt( + data, buf, len(data), self._key, self._nonce, + self._ecount, self._num + ) + return self._backend._ffi.buffer(buf)[:] + + def finalize(self): + self._key = None + self._ecount = None + self._nonce = None + self._num = None + return b"" diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/cmac.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/cmac.py new file mode 100644 index 0000000..7acf439 --- /dev/null +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/cmac.py @@ -0,0 +1,80 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import absolute_import, division, print_function + + +from cryptography import utils +from cryptography.exceptions import UnsupportedAlgorithm, _Reasons +from cryptography.hazmat.primitives import interfaces +from cryptography.hazmat.primitives.ciphers.modes import CBC + + +@utils.register_interface(interfaces.CMACContext) +class _CMACContext(object): + def __init__(self, backend, algorithm, ctx=None): + if not backend.cmac_algorithm_supported(algorithm): + raise UnsupportedAlgorithm("This backend does not support CMAC.", + _Reasons.UNSUPPORTED_CIPHER) + + self._backend = backend + self._key = algorithm.key + self._algorithm = algorithm + self._output_length = algorithm.block_size // 8 + + if ctx is None: + registry = self._backend._cipher_registry + adapter = registry[type(algorithm), CBC] + + evp_cipher = adapter(self._backend, algorithm, CBC) + + ctx = self._backend._lib.CMAC_CTX_new() + + assert ctx != self._backend._ffi.NULL + ctx = self._backend._ffi.gc(ctx, self._backend._lib.CMAC_CTX_free) + + self._backend._lib.CMAC_Init( + ctx, self._key, len(self._key), + evp_cipher, self._backend._ffi.NULL + ) + + self._ctx = ctx + + def update(self, data): + res = self._backend._lib.CMAC_Update(self._ctx, data, len(data)) + assert res == 1 + + def finalize(self): + buf = self._backend._ffi.new("unsigned char[]", self._output_length) + length = self._backend._ffi.new("size_t *", self._output_length) + res = self._backend._lib.CMAC_Final( + self._ctx, buf, length + ) + assert res == 1 + + self._ctx = None + + return self._backend._ffi.buffer(buf)[:] + + def copy(self): + copied_ctx = self._backend._lib.CMAC_CTX_new() + copied_ctx = self._backend._ffi.gc( + copied_ctx, self._backend._lib.CMAC_CTX_free + ) + res = self._backend._lib.CMAC_CTX_copy( + copied_ctx, self._ctx + ) + assert res == 1 + return _CMACContext( + self._backend, self._algorithm, ctx=copied_ctx + ) diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/dsa.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/dsa.py new file mode 100644 index 0000000..5e7a26f --- /dev/null +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/dsa.py @@ -0,0 +1,190 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import absolute_import, division, print_function + +from cryptography import utils +from cryptography.exceptions import InvalidSignature +from cryptography.hazmat.primitives import hashes, interfaces +from cryptography.hazmat.primitives.asymmetric import dsa +from cryptography.hazmat.primitives.interfaces import ( + DSAParametersWithNumbers, DSAPrivateKeyWithNumbers, DSAPublicKeyWithNumbers +) + + +@utils.register_interface(interfaces.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): + self._dsa_cdata = self._backend._ffi.gc(self._public_key._dsa_cdata, + self._backend._lib.DSA_free) + + data_to_verify = self._hash_ctx.finalize() + + # The first parameter passed to DSA_verify is unused by OpenSSL but + # must be an integer. + res = self._backend._lib.DSA_verify( + 0, data_to_verify, len(data_to_verify), self._signature, + len(self._signature), self._public_key._dsa_cdata) + + if res != 1: + errors = self._backend._consume_errors() + assert errors + if res == -1: + assert errors[0].lib == self._backend._lib.ERR_LIB_ASN1 + + raise InvalidSignature + + +@utils.register_interface(interfaces.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() + sig_buf_len = self._backend._lib.DSA_size(self._private_key._dsa_cdata) + sig_buf = self._backend._ffi.new("unsigned char[]", sig_buf_len) + buflen = self._backend._ffi.new("unsigned int *") + + # The first parameter passed to DSA_sign is unused by OpenSSL but + # must be an integer. + res = self._backend._lib.DSA_sign( + 0, data_to_sign, len(data_to_sign), sig_buf, + buflen, self._private_key._dsa_cdata) + assert res == 1 + assert buflen[0] + + return self._backend._ffi.buffer(sig_buf)[:buflen[0]] + + +@utils.register_interface(DSAParametersWithNumbers) +class _DSAParameters(object): + def __init__(self, backend, dsa_cdata): + self._backend = backend + self._dsa_cdata = dsa_cdata + + def parameter_numbers(self): + return dsa.DSAParameterNumbers( + p=self._backend._bn_to_int(self._dsa_cdata.p), + q=self._backend._bn_to_int(self._dsa_cdata.q), + g=self._backend._bn_to_int(self._dsa_cdata.g) + ) + + def generate_private_key(self): + return self._backend.generate_dsa_private_key(self) + + +@utils.register_interface(DSAPrivateKeyWithNumbers) +class _DSAPrivateKey(object): + def __init__(self, backend, dsa_cdata): + self._backend = backend + self._dsa_cdata = dsa_cdata + self._key_size = self._backend._lib.BN_num_bits(self._dsa_cdata.p) + + @property + def key_size(self): + return self._key_size + + def signer(self, algorithm): + return _DSASignatureContext(self._backend, self, algorithm) + + def private_numbers(self): + return dsa.DSAPrivateNumbers( + public_numbers=dsa.DSAPublicNumbers( + parameter_numbers=dsa.DSAParameterNumbers( + p=self._backend._bn_to_int(self._dsa_cdata.p), + q=self._backend._bn_to_int(self._dsa_cdata.q), + g=self._backend._bn_to_int(self._dsa_cdata.g) + ), + y=self._backend._bn_to_int(self._dsa_cdata.pub_key) + ), + x=self._backend._bn_to_int(self._dsa_cdata.priv_key) + ) + + def public_key(self): + dsa_cdata = self._backend._lib.DSA_new() + assert dsa_cdata != self._backend._ffi.NULL + dsa_cdata = self._backend._ffi.gc( + dsa_cdata, self._backend._lib.DSA_free + ) + dsa_cdata.p = self._backend._lib.BN_dup(self._dsa_cdata.p) + dsa_cdata.q = self._backend._lib.BN_dup(self._dsa_cdata.q) + dsa_cdata.g = self._backend._lib.BN_dup(self._dsa_cdata.g) + dsa_cdata.pub_key = self._backend._lib.BN_dup(self._dsa_cdata.pub_key) + return _DSAPublicKey(self._backend, dsa_cdata) + + def parameters(self): + dsa_cdata = self._backend._lib.DSA_new() + assert dsa_cdata != self._backend._ffi.NULL + dsa_cdata = self._backend._ffi.gc( + dsa_cdata, self._backend._lib.DSA_free + ) + dsa_cdata.p = self._backend._lib.BN_dup(self._dsa_cdata.p) + dsa_cdata.q = self._backend._lib.BN_dup(self._dsa_cdata.q) + dsa_cdata.g = self._backend._lib.BN_dup(self._dsa_cdata.g) + return _DSAParameters(self._backend, dsa_cdata) + + +@utils.register_interface(DSAPublicKeyWithNumbers) +class _DSAPublicKey(object): + def __init__(self, backend, dsa_cdata): + self._backend = backend + self._dsa_cdata = dsa_cdata + self._key_size = self._backend._lib.BN_num_bits(self._dsa_cdata.p) + + @property + def key_size(self): + return self._key_size + + def verifier(self, signature, algorithm): + return _DSAVerificationContext( + self._backend, self, signature, algorithm + ) + + def public_numbers(self): + return dsa.DSAPublicNumbers( + parameter_numbers=dsa.DSAParameterNumbers( + p=self._backend._bn_to_int(self._dsa_cdata.p), + q=self._backend._bn_to_int(self._dsa_cdata.q), + g=self._backend._bn_to_int(self._dsa_cdata.g) + ), + y=self._backend._bn_to_int(self._dsa_cdata.pub_key) + ) + + def parameters(self): + dsa_cdata = self._backend._lib.DSA_new() + assert dsa_cdata != self._backend._ffi.NULL + dsa_cdata = self._backend._ffi.gc( + dsa_cdata, self._backend._lib.DSA_free + ) + dsa_cdata.p = self._backend._lib.BN_dup(self._dsa_cdata.p) + dsa_cdata.q = self._backend._lib.BN_dup(self._dsa_cdata.q) + dsa_cdata.g = self._backend._lib.BN_dup(self._dsa_cdata.g) + return _DSAParameters(self._backend, dsa_cdata) diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/ec.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/ec.py new file mode 100644 index 0000000..b7cd980 --- /dev/null +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/ec.py @@ -0,0 +1,191 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import absolute_import, division, print_function + +import six + +from cryptography import utils +from cryptography.exceptions import ( + InvalidSignature, UnsupportedAlgorithm, _Reasons +) +from cryptography.hazmat.primitives import hashes, interfaces +from cryptography.hazmat.primitives.asymmetric import ec + + +def _truncate_digest_for_ecdsa(ec_key_cdata, digest, backend): + _lib = backend._lib + _ffi = backend._ffi + + digest_len = len(digest) + + group = _lib.EC_KEY_get0_group(ec_key_cdata) + + bn_ctx = _lib.BN_CTX_new() + assert bn_ctx != _ffi.NULL + bn_ctx = _ffi.gc(bn_ctx, _lib.BN_CTX_free) + + order = _lib.BN_CTX_get(bn_ctx) + assert order != _ffi.NULL + + res = _lib.EC_GROUP_get_order(group, order, bn_ctx) + assert res == 1 + + order_bits = _lib.BN_num_bits(order) + + if 8 * digest_len > order_bits: + digest_len = (order_bits + 7) // 8 + digest = digest[:digest_len] + + if 8 * digest_len > order_bits: + rshift = 8 - (order_bits & 0x7) + assert rshift > 0 and rshift < 8 + + mask = 0xFF >> rshift << rshift + + # Set the bottom rshift bits to 0 + digest = digest[:-1] + six.int2byte(six.indexbytes(digest, -1) & mask) + + return digest + + +@utils.register_interface(interfaces.AsymmetricSignatureContext) +class _ECDSASignatureContext(object): + def __init__(self, backend, private_key, algorithm): + self._backend = backend + self._private_key = private_key + self._digest = hashes.Hash(algorithm, backend) + + def update(self, data): + self._digest.update(data) + + def finalize(self): + ec_key = self._private_key._ec_key + + digest = self._digest.finalize() + + digest = _truncate_digest_for_ecdsa(ec_key, digest, self._backend) + + max_size = self._backend._lib.ECDSA_size(ec_key) + assert max_size > 0 + + sigbuf = self._backend._ffi.new("char[]", max_size) + siglen_ptr = self._backend._ffi.new("unsigned int[]", 1) + res = self._backend._lib.ECDSA_sign( + 0, + digest, + len(digest), + sigbuf, + siglen_ptr, + ec_key + ) + assert res == 1 + return self._backend._ffi.buffer(sigbuf)[:siglen_ptr[0]] + + +@utils.register_interface(interfaces.AsymmetricVerificationContext) +class _ECDSAVerificationContext(object): + def __init__(self, backend, public_key, signature, algorithm): + self._backend = backend + self._public_key = public_key + self._signature = signature + self._digest = hashes.Hash(algorithm, backend) + + def update(self, data): + self._digest.update(data) + + def verify(self): + ec_key = self._public_key._ec_key + + digest = self._digest.finalize() + + digest = _truncate_digest_for_ecdsa(ec_key, digest, self._backend) + + res = self._backend._lib.ECDSA_verify( + 0, + digest, + len(digest), + self._signature, + len(self._signature), + ec_key + ) + if res != 1: + self._backend._consume_errors() + raise InvalidSignature + return True + + +@utils.register_interface(interfaces.EllipticCurvePrivateKey) +class _EllipticCurvePrivateKey(object): + def __init__(self, backend, ec_key_cdata, curve): + self._backend = backend + self._ec_key = ec_key_cdata + self._curve = curve + + @property + def curve(self): + return self._curve + + def signer(self, signature_algorithm): + if isinstance(signature_algorithm, ec.ECDSA): + return _ECDSASignatureContext( + self._backend, self, signature_algorithm.algorithm + ) + else: + raise UnsupportedAlgorithm( + "Unsupported elliptic curve signature algorithm.", + _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM) + + def public_key(self): + group = self._backend._lib.EC_KEY_get0_group(self._ec_key) + assert group != self._backend._ffi.NULL + + curve_nid = self._backend._lib.EC_GROUP_get_curve_name(group) + + public_ec_key = self._backend._lib.EC_KEY_new_by_curve_name(curve_nid) + assert public_ec_key != self._backend._ffi.NULL + public_ec_key = self._backend._ffi.gc( + public_ec_key, self._backend._lib.EC_KEY_free + ) + + point = self._backend._lib.EC_KEY_get0_public_key(self._ec_key) + assert point != self._backend._ffi.NULL + + res = self._backend._lib.EC_KEY_set_public_key(public_ec_key, point) + assert res == 1 + + return _EllipticCurvePublicKey( + self._backend, public_ec_key, self._curve + ) + + +@utils.register_interface(interfaces.EllipticCurvePublicKey) +class _EllipticCurvePublicKey(object): + def __init__(self, backend, ec_key_cdata, curve): + self._backend = backend + self._ec_key = ec_key_cdata + self._curve = curve + + @property + def curve(self): + return self._curve + + def verifier(self, signature, signature_algorithm): + if isinstance(signature_algorithm, ec.ECDSA): + return _ECDSAVerificationContext( + self._backend, self, signature, signature_algorithm.algorithm + ) + else: + raise UnsupportedAlgorithm( + "Unsupported elliptic curve signature algorithm.", + _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM) diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/hashes.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/hashes.py new file mode 100644 index 0000000..da91eef --- /dev/null +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/hashes.py @@ -0,0 +1,69 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import absolute_import, division, print_function + + +from cryptography import utils +from cryptography.exceptions import UnsupportedAlgorithm, _Reasons +from cryptography.hazmat.primitives import interfaces + + +@utils.register_interface(interfaces.HashContext) +class _HashContext(object): + def __init__(self, backend, algorithm, ctx=None): + self.algorithm = algorithm + + self._backend = backend + + if ctx is None: + ctx = self._backend._lib.EVP_MD_CTX_create() + ctx = self._backend._ffi.gc(ctx, + self._backend._lib.EVP_MD_CTX_destroy) + evp_md = self._backend._lib.EVP_get_digestbyname( + algorithm.name.encode("ascii")) + if evp_md == self._backend._ffi.NULL: + raise UnsupportedAlgorithm( + "{0} is not a supported hash on this backend.".format( + algorithm.name), + _Reasons.UNSUPPORTED_HASH + ) + res = self._backend._lib.EVP_DigestInit_ex(ctx, evp_md, + self._backend._ffi.NULL) + assert res != 0 + + self._ctx = ctx + + def copy(self): + copied_ctx = self._backend._lib.EVP_MD_CTX_create() + copied_ctx = self._backend._ffi.gc( + copied_ctx, self._backend._lib.EVP_MD_CTX_destroy + ) + res = self._backend._lib.EVP_MD_CTX_copy_ex(copied_ctx, self._ctx) + assert res != 0 + return _HashContext(self._backend, self.algorithm, ctx=copied_ctx) + + def update(self, data): + res = self._backend._lib.EVP_DigestUpdate(self._ctx, data, len(data)) + assert res != 0 + + def finalize(self): + buf = self._backend._ffi.new("unsigned char[]", + self._backend._lib.EVP_MAX_MD_SIZE) + outlen = self._backend._ffi.new("unsigned int *") + res = self._backend._lib.EVP_DigestFinal_ex(self._ctx, buf, outlen) + assert res != 0 + assert outlen[0] == self.algorithm.digest_size + res = self._backend._lib.EVP_MD_CTX_cleanup(self._ctx) + assert res == 1 + return self._backend._ffi.buffer(buf)[:outlen[0]] diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/hmac.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/hmac.py new file mode 100644 index 0000000..3f1576f --- /dev/null +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/hmac.py @@ -0,0 +1,80 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import absolute_import, division, print_function + + +from cryptography import utils +from cryptography.exceptions import UnsupportedAlgorithm, _Reasons +from cryptography.hazmat.primitives import interfaces + + +@utils.register_interface(interfaces.HashContext) +class _HMACContext(object): + def __init__(self, backend, key, algorithm, ctx=None): + self.algorithm = algorithm + self._backend = backend + + if ctx is None: + ctx = self._backend._ffi.new("HMAC_CTX *") + self._backend._lib.HMAC_CTX_init(ctx) + ctx = self._backend._ffi.gc( + ctx, self._backend._lib.HMAC_CTX_cleanup + ) + evp_md = self._backend._lib.EVP_get_digestbyname( + algorithm.name.encode('ascii')) + if evp_md == self._backend._ffi.NULL: + raise UnsupportedAlgorithm( + "{0} is not a supported hash on this backend.".format( + algorithm.name), + _Reasons.UNSUPPORTED_HASH + ) + res = self._backend._lib.Cryptography_HMAC_Init_ex( + ctx, key, len(key), evp_md, self._backend._ffi.NULL + ) + assert res != 0 + + self._ctx = ctx + self._key = key + + def copy(self): + copied_ctx = self._backend._ffi.new("HMAC_CTX *") + self._backend._lib.HMAC_CTX_init(copied_ctx) + copied_ctx = self._backend._ffi.gc( + copied_ctx, self._backend._lib.HMAC_CTX_cleanup + ) + res = self._backend._lib.Cryptography_HMAC_CTX_copy( + copied_ctx, self._ctx + ) + assert res != 0 + return _HMACContext( + self._backend, self._key, self.algorithm, ctx=copied_ctx + ) + + def update(self, data): + res = self._backend._lib.Cryptography_HMAC_Update( + self._ctx, data, len(data) + ) + assert res != 0 + + def finalize(self): + buf = self._backend._ffi.new("unsigned char[]", + self._backend._lib.EVP_MAX_MD_SIZE) + outlen = self._backend._ffi.new("unsigned int *") + res = self._backend._lib.Cryptography_HMAC_Final( + self._ctx, buf, outlen + ) + assert res != 0 + assert outlen[0] == self.algorithm.digest_size + self._backend._lib.HMAC_CTX_cleanup(self._ctx) + return self._backend._ffi.buffer(buf)[:outlen[0]] diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/rsa.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/rsa.py new file mode 100644 index 0000000..6f28c54 --- /dev/null +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/rsa.py @@ -0,0 +1,603 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import absolute_import, division, print_function + +import math + +from cryptography import utils +from cryptography.exceptions import ( + AlreadyFinalized, InvalidSignature, UnsupportedAlgorithm, _Reasons +) +from cryptography.hazmat.primitives import hashes, interfaces +from cryptography.hazmat.primitives.asymmetric import rsa +from cryptography.hazmat.primitives.asymmetric.padding import ( + MGF1, OAEP, PKCS1v15, PSS +) +from cryptography.hazmat.primitives.interfaces import ( + RSAPrivateKeyWithNumbers, RSAPublicKeyWithNumbers +) + + +def _get_rsa_pss_salt_length(pss, key_size, digest_size): + if pss._mgf._salt_length is not None: + salt = pss._mgf._salt_length + else: + salt = pss._salt_length + + if salt is MGF1.MAX_LENGTH or salt is PSS.MAX_LENGTH: + # bit length - 1 per RFC 3447 + emlen = int(math.ceil((key_size - 1) / 8.0)) + salt_length = emlen - digest_size - 2 + assert salt_length >= 0 + return salt_length + else: + return salt + + +def _enc_dec_rsa(backend, key, data, padding): + if isinstance(padding, PKCS1v15): + padding_enum = backend._lib.RSA_PKCS1_PADDING + elif isinstance(padding, OAEP): + padding_enum = backend._lib.RSA_PKCS1_OAEP_PADDING + if not isinstance(padding._mgf, MGF1): + raise UnsupportedAlgorithm( + "Only MGF1 is supported by this backend.", + _Reasons.UNSUPPORTED_MGF + ) + + if not isinstance(padding._mgf._algorithm, hashes.SHA1): + raise UnsupportedAlgorithm( + "This backend supports only SHA1 inside MGF1 when " + "using OAEP.", + _Reasons.UNSUPPORTED_HASH + ) + + if padding._label is not None and padding._label != b"": + raise ValueError("This backend does not support OAEP labels.") + + if not isinstance(padding._algorithm, hashes.SHA1): + raise UnsupportedAlgorithm( + "This backend only supports SHA1 when using OAEP.", + _Reasons.UNSUPPORTED_HASH + ) + else: + raise UnsupportedAlgorithm( + "{0} is not supported by this backend.".format( + padding.name + ), + _Reasons.UNSUPPORTED_PADDING + ) + + if backend._lib.Cryptography_HAS_PKEY_CTX: + return _enc_dec_rsa_pkey_ctx(backend, key, data, padding_enum) + else: + return _enc_dec_rsa_098(backend, key, data, padding_enum) + + +def _enc_dec_rsa_pkey_ctx(backend, key, data, padding_enum): + if isinstance(key, _RSAPublicKey): + init = backend._lib.EVP_PKEY_encrypt_init + crypt = backend._lib.Cryptography_EVP_PKEY_encrypt + else: + init = backend._lib.EVP_PKEY_decrypt_init + crypt = backend._lib.Cryptography_EVP_PKEY_decrypt + + pkey_ctx = backend._lib.EVP_PKEY_CTX_new( + key._evp_pkey, backend._ffi.NULL + ) + assert pkey_ctx != backend._ffi.NULL + pkey_ctx = backend._ffi.gc(pkey_ctx, backend._lib.EVP_PKEY_CTX_free) + res = init(pkey_ctx) + assert res == 1 + res = backend._lib.EVP_PKEY_CTX_set_rsa_padding( + pkey_ctx, padding_enum) + assert res > 0 + buf_size = backend._lib.EVP_PKEY_size(key._evp_pkey) + assert buf_size > 0 + outlen = backend._ffi.new("size_t *", buf_size) + buf = backend._ffi.new("char[]", buf_size) + res = crypt(pkey_ctx, buf, outlen, data, len(data)) + if res <= 0: + _handle_rsa_enc_dec_error(backend, key) + + return backend._ffi.buffer(buf)[:outlen[0]] + + +def _enc_dec_rsa_098(backend, key, data, padding_enum): + if isinstance(key, _RSAPublicKey): + crypt = backend._lib.RSA_public_encrypt + else: + crypt = backend._lib.RSA_private_decrypt + + key_size = backend._lib.RSA_size(key._rsa_cdata) + assert key_size > 0 + buf = backend._ffi.new("unsigned char[]", key_size) + res = crypt(len(data), data, buf, key._rsa_cdata, padding_enum) + if res < 0: + _handle_rsa_enc_dec_error(backend, key) + + return backend._ffi.buffer(buf)[:res] + + +def _handle_rsa_enc_dec_error(backend, key): + errors = backend._consume_errors() + assert errors + assert errors[0].lib == backend._lib.ERR_LIB_RSA + if isinstance(key, _RSAPublicKey): + assert (errors[0].reason == + backend._lib.RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE) + raise ValueError( + "Data too long for key size. Encrypt less data or use a " + "larger key size." + ) + else: + assert ( + errors[0].reason == backend._lib.RSA_R_BLOCK_TYPE_IS_NOT_01 or + errors[0].reason == backend._lib.RSA_R_BLOCK_TYPE_IS_NOT_02 + ) + raise ValueError("Decryption failed.") + + +@utils.register_interface(interfaces.AsymmetricSignatureContext) +class _RSASignatureContext(object): + def __init__(self, backend, private_key, padding, algorithm): + self._backend = backend + self._private_key = private_key + + if not isinstance(padding, interfaces.AsymmetricPadding): + raise TypeError( + "Expected provider of interfaces.AsymmetricPadding.") + + self._pkey_size = self._backend._lib.EVP_PKEY_size( + self._private_key._evp_pkey + ) + + if isinstance(padding, PKCS1v15): + if self._backend._lib.Cryptography_HAS_PKEY_CTX: + self._finalize_method = self._finalize_pkey_ctx + self._padding_enum = self._backend._lib.RSA_PKCS1_PADDING + else: + self._finalize_method = self._finalize_pkcs1 + elif isinstance(padding, PSS): + if not isinstance(padding._mgf, MGF1): + raise UnsupportedAlgorithm( + "Only MGF1 is supported by this backend.", + _Reasons.UNSUPPORTED_MGF + ) + + # Size of key in bytes - 2 is the maximum + # PSS signature length (salt length is checked later) + assert self._pkey_size > 0 + if self._pkey_size - algorithm.digest_size - 2 < 0: + raise ValueError("Digest too large for key size. Use a larger " + "key.") + + if not self._backend._mgf1_hash_supported(padding._mgf._algorithm): + raise UnsupportedAlgorithm( + "When OpenSSL is older than 1.0.1 then only SHA1 is " + "supported with MGF1.", + _Reasons.UNSUPPORTED_HASH + ) + + if self._backend._lib.Cryptography_HAS_PKEY_CTX: + self._finalize_method = self._finalize_pkey_ctx + self._padding_enum = self._backend._lib.RSA_PKCS1_PSS_PADDING + else: + self._finalize_method = self._finalize_pss + else: + raise UnsupportedAlgorithm( + "{0} is not supported by this backend.".format(padding.name), + _Reasons.UNSUPPORTED_PADDING + ) + + self._padding = padding + self._algorithm = algorithm + self._hash_ctx = hashes.Hash(self._algorithm, self._backend) + + def update(self, data): + self._hash_ctx.update(data) + + def finalize(self): + evp_md = self._backend._lib.EVP_get_digestbyname( + self._algorithm.name.encode("ascii")) + assert evp_md != self._backend._ffi.NULL + + return self._finalize_method(evp_md) + + def _finalize_pkey_ctx(self, evp_md): + pkey_ctx = self._backend._lib.EVP_PKEY_CTX_new( + self._private_key._evp_pkey, self._backend._ffi.NULL + ) + assert pkey_ctx != self._backend._ffi.NULL + pkey_ctx = self._backend._ffi.gc(pkey_ctx, + self._backend._lib.EVP_PKEY_CTX_free) + res = self._backend._lib.EVP_PKEY_sign_init(pkey_ctx) + assert res == 1 + res = self._backend._lib.EVP_PKEY_CTX_set_signature_md( + pkey_ctx, evp_md) + assert res > 0 + + res = self._backend._lib.EVP_PKEY_CTX_set_rsa_padding( + pkey_ctx, self._padding_enum) + assert res > 0 + if isinstance(self._padding, PSS): + res = self._backend._lib.EVP_PKEY_CTX_set_rsa_pss_saltlen( + pkey_ctx, + _get_rsa_pss_salt_length( + self._padding, + self._private_key.key_size, + self._hash_ctx.algorithm.digest_size + ) + ) + assert res > 0 + + if self._backend._lib.Cryptography_HAS_MGF1_MD: + # MGF1 MD is configurable in OpenSSL 1.0.1+ + mgf1_md = self._backend._lib.EVP_get_digestbyname( + self._padding._mgf._algorithm.name.encode("ascii")) + assert mgf1_md != self._backend._ffi.NULL + res = self._backend._lib.EVP_PKEY_CTX_set_rsa_mgf1_md( + pkey_ctx, mgf1_md + ) + assert res > 0 + data_to_sign = self._hash_ctx.finalize() + buflen = self._backend._ffi.new("size_t *") + res = self._backend._lib.EVP_PKEY_sign( + pkey_ctx, + self._backend._ffi.NULL, + buflen, + data_to_sign, + len(data_to_sign) + ) + assert res == 1 + buf = self._backend._ffi.new("unsigned char[]", buflen[0]) + res = self._backend._lib.EVP_PKEY_sign( + pkey_ctx, buf, buflen, data_to_sign, len(data_to_sign)) + if res != 1: + errors = self._backend._consume_errors() + assert errors[0].lib == self._backend._lib.ERR_LIB_RSA + reason = None + if (errors[0].reason == + self._backend._lib.RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE): + reason = ("Salt length too long for key size. Try using " + "MAX_LENGTH instead.") + elif (errors[0].reason == + self._backend._lib.RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY): + reason = "Digest too large for key size. Use a larger key." + assert reason is not None + raise ValueError(reason) + + return self._backend._ffi.buffer(buf)[:] + + def _finalize_pkcs1(self, evp_md): + if self._hash_ctx._ctx is None: + raise AlreadyFinalized("Context has already been finalized.") + + sig_buf = self._backend._ffi.new("char[]", self._pkey_size) + sig_len = self._backend._ffi.new("unsigned int *") + res = self._backend._lib.EVP_SignFinal( + self._hash_ctx._ctx._ctx, + sig_buf, + sig_len, + self._private_key._evp_pkey + ) + self._hash_ctx.finalize() + if res == 0: + errors = self._backend._consume_errors() + assert errors[0].lib == self._backend._lib.ERR_LIB_RSA + assert (errors[0].reason == + self._backend._lib.RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY) + raise ValueError("Digest too large for key size. Use a larger " + "key.") + + return self._backend._ffi.buffer(sig_buf)[:sig_len[0]] + + def _finalize_pss(self, evp_md): + data_to_sign = self._hash_ctx.finalize() + padded = self._backend._ffi.new("unsigned char[]", self._pkey_size) + res = self._backend._lib.RSA_padding_add_PKCS1_PSS( + self._private_key._rsa_cdata, + padded, + data_to_sign, + evp_md, + _get_rsa_pss_salt_length( + self._padding, + self._private_key.key_size, + len(data_to_sign) + ) + ) + if res != 1: + errors = self._backend._consume_errors() + assert errors[0].lib == self._backend._lib.ERR_LIB_RSA + assert (errors[0].reason == + self._backend._lib.RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE) + raise ValueError("Salt length too long for key size. Try using " + "MAX_LENGTH instead.") + + sig_buf = self._backend._ffi.new("char[]", self._pkey_size) + sig_len = self._backend._lib.RSA_private_encrypt( + self._pkey_size, + padded, + sig_buf, + self._private_key._rsa_cdata, + self._backend._lib.RSA_NO_PADDING + ) + assert sig_len != -1 + return self._backend._ffi.buffer(sig_buf)[:sig_len] + + +@utils.register_interface(interfaces.AsymmetricVerificationContext) +class _RSAVerificationContext(object): + def __init__(self, backend, public_key, signature, padding, algorithm): + self._backend = backend + self._public_key = public_key + self._signature = signature + + if not isinstance(padding, interfaces.AsymmetricPadding): + raise TypeError( + "Expected provider of interfaces.AsymmetricPadding.") + + self._pkey_size = self._backend._lib.EVP_PKEY_size( + self._public_key._evp_pkey + ) + + if isinstance(padding, PKCS1v15): + if self._backend._lib.Cryptography_HAS_PKEY_CTX: + self._verify_method = self._verify_pkey_ctx + self._padding_enum = self._backend._lib.RSA_PKCS1_PADDING + else: + self._verify_method = self._verify_pkcs1 + elif isinstance(padding, PSS): + if not isinstance(padding._mgf, MGF1): + raise UnsupportedAlgorithm( + "Only MGF1 is supported by this backend.", + _Reasons.UNSUPPORTED_MGF + ) + + # Size of key in bytes - 2 is the maximum + # PSS signature length (salt length is checked later) + assert self._pkey_size > 0 + if self._pkey_size - algorithm.digest_size - 2 < 0: + raise ValueError( + "Digest too large for key size. Check that you have the " + "correct key and digest algorithm." + ) + + if not self._backend._mgf1_hash_supported(padding._mgf._algorithm): + raise UnsupportedAlgorithm( + "When OpenSSL is older than 1.0.1 then only SHA1 is " + "supported with MGF1.", + _Reasons.UNSUPPORTED_HASH + ) + + if self._backend._lib.Cryptography_HAS_PKEY_CTX: + self._verify_method = self._verify_pkey_ctx + self._padding_enum = self._backend._lib.RSA_PKCS1_PSS_PADDING + else: + self._verify_method = self._verify_pss + else: + raise UnsupportedAlgorithm( + "{0} is not supported by this backend.".format(padding.name), + _Reasons.UNSUPPORTED_PADDING + ) + + self._padding = padding + self._algorithm = algorithm + self._hash_ctx = hashes.Hash(self._algorithm, self._backend) + + def update(self, data): + self._hash_ctx.update(data) + + def verify(self): + evp_md = self._backend._lib.EVP_get_digestbyname( + self._algorithm.name.encode("ascii")) + assert evp_md != self._backend._ffi.NULL + + self._verify_method(evp_md) + + def _verify_pkey_ctx(self, evp_md): + pkey_ctx = self._backend._lib.EVP_PKEY_CTX_new( + self._public_key._evp_pkey, self._backend._ffi.NULL + ) + assert pkey_ctx != self._backend._ffi.NULL + pkey_ctx = self._backend._ffi.gc(pkey_ctx, + self._backend._lib.EVP_PKEY_CTX_free) + res = self._backend._lib.EVP_PKEY_verify_init(pkey_ctx) + assert res == 1 + res = self._backend._lib.EVP_PKEY_CTX_set_signature_md( + pkey_ctx, evp_md) + assert res > 0 + + res = self._backend._lib.EVP_PKEY_CTX_set_rsa_padding( + pkey_ctx, self._padding_enum) + assert res > 0 + if isinstance(self._padding, PSS): + res = self._backend._lib.EVP_PKEY_CTX_set_rsa_pss_saltlen( + pkey_ctx, + _get_rsa_pss_salt_length( + self._padding, + self._public_key.key_size, + self._hash_ctx.algorithm.digest_size + ) + ) + assert res > 0 + if self._backend._lib.Cryptography_HAS_MGF1_MD: + # MGF1 MD is configurable in OpenSSL 1.0.1+ + mgf1_md = self._backend._lib.EVP_get_digestbyname( + self._padding._mgf._algorithm.name.encode("ascii")) + assert mgf1_md != self._backend._ffi.NULL + res = self._backend._lib.EVP_PKEY_CTX_set_rsa_mgf1_md( + pkey_ctx, mgf1_md + ) + assert res > 0 + + data_to_verify = self._hash_ctx.finalize() + res = self._backend._lib.EVP_PKEY_verify( + pkey_ctx, + self._signature, + len(self._signature), + data_to_verify, + len(data_to_verify) + ) + # The previous call can return negative numbers in the event of an + # error. This is not a signature failure but we need to fail if it + # occurs. + assert res >= 0 + if res == 0: + errors = self._backend._consume_errors() + assert errors + raise InvalidSignature + + def _verify_pkcs1(self, evp_md): + if self._hash_ctx._ctx is None: + raise AlreadyFinalized("Context has already been finalized.") + + res = self._backend._lib.EVP_VerifyFinal( + self._hash_ctx._ctx._ctx, + self._signature, + len(self._signature), + self._public_key._evp_pkey + ) + self._hash_ctx.finalize() + # The previous call can return negative numbers in the event of an + # error. This is not a signature failure but we need to fail if it + # occurs. + assert res >= 0 + if res == 0: + errors = self._backend._consume_errors() + assert errors + raise InvalidSignature + + def _verify_pss(self, evp_md): + buf = self._backend._ffi.new("unsigned char[]", self._pkey_size) + res = self._backend._lib.RSA_public_decrypt( + len(self._signature), + self._signature, + buf, + self._public_key._rsa_cdata, + self._backend._lib.RSA_NO_PADDING + ) + if res != self._pkey_size: + errors = self._backend._consume_errors() + assert errors + raise InvalidSignature + + data_to_verify = self._hash_ctx.finalize() + res = self._backend._lib.RSA_verify_PKCS1_PSS( + self._public_key._rsa_cdata, + data_to_verify, + evp_md, + buf, + _get_rsa_pss_salt_length( + self._padding, + self._public_key.key_size, + len(data_to_verify) + ) + ) + if res != 1: + errors = self._backend._consume_errors() + assert errors + raise InvalidSignature + + +@utils.register_interface(RSAPrivateKeyWithNumbers) +class _RSAPrivateKey(object): + def __init__(self, backend, rsa_cdata): + self._backend = backend + self._rsa_cdata = rsa_cdata + + evp_pkey = self._backend._lib.EVP_PKEY_new() + assert evp_pkey != self._backend._ffi.NULL + evp_pkey = self._backend._ffi.gc( + evp_pkey, self._backend._lib.EVP_PKEY_free + ) + res = self._backend._lib.EVP_PKEY_set1_RSA(evp_pkey, rsa_cdata) + assert res == 1 + self._evp_pkey = evp_pkey + + self._key_size = self._backend._lib.BN_num_bits(self._rsa_cdata.n) + + @property + def key_size(self): + return self._key_size + + def signer(self, padding, algorithm): + return _RSASignatureContext(self._backend, self, padding, algorithm) + + def decrypt(self, ciphertext, padding): + key_size_bytes = int(math.ceil(self.key_size / 8.0)) + if key_size_bytes != len(ciphertext): + raise ValueError("Ciphertext length must be equal to key size.") + + return _enc_dec_rsa(self._backend, self, ciphertext, padding) + + def public_key(self): + ctx = self._backend._lib.RSA_new() + assert ctx != self._backend._ffi.NULL + ctx = self._backend._ffi.gc(ctx, self._backend._lib.RSA_free) + ctx.e = self._backend._lib.BN_dup(self._rsa_cdata.e) + ctx.n = self._backend._lib.BN_dup(self._rsa_cdata.n) + res = self._backend._lib.RSA_blinding_on(ctx, self._backend._ffi.NULL) + assert res == 1 + return _RSAPublicKey(self._backend, ctx) + + def private_numbers(self): + return rsa.RSAPrivateNumbers( + p=self._backend._bn_to_int(self._rsa_cdata.p), + q=self._backend._bn_to_int(self._rsa_cdata.q), + d=self._backend._bn_to_int(self._rsa_cdata.d), + dmp1=self._backend._bn_to_int(self._rsa_cdata.dmp1), + dmq1=self._backend._bn_to_int(self._rsa_cdata.dmq1), + iqmp=self._backend._bn_to_int(self._rsa_cdata.iqmp), + public_numbers=rsa.RSAPublicNumbers( + e=self._backend._bn_to_int(self._rsa_cdata.e), + n=self._backend._bn_to_int(self._rsa_cdata.n), + ) + ) + + +@utils.register_interface(RSAPublicKeyWithNumbers) +class _RSAPublicKey(object): + def __init__(self, backend, rsa_cdata): + self._backend = backend + self._rsa_cdata = rsa_cdata + + evp_pkey = self._backend._lib.EVP_PKEY_new() + assert evp_pkey != self._backend._ffi.NULL + evp_pkey = self._backend._ffi.gc( + evp_pkey, self._backend._lib.EVP_PKEY_free + ) + res = self._backend._lib.EVP_PKEY_set1_RSA(evp_pkey, rsa_cdata) + assert res == 1 + self._evp_pkey = evp_pkey + + self._key_size = self._backend._lib.BN_num_bits(self._rsa_cdata.n) + + @property + def key_size(self): + return self._key_size + + def verifier(self, signature, padding, algorithm): + return _RSAVerificationContext( + self._backend, self, signature, padding, algorithm + ) + + def encrypt(self, plaintext, padding): + return _enc_dec_rsa(self._backend, self, plaintext, padding) + + def public_numbers(self): + return rsa.RSAPublicNumbers( + e=self._backend._bn_to_int(self._rsa_cdata.e), + n=self._backend._bn_to_int(self._rsa_cdata.n), + ) diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/commoncrypto/binding.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/commoncrypto/binding.py index 144bb09..ee7378a 100644 --- a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/commoncrypto/binding.py +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/commoncrypto/binding.py @@ -25,10 +25,16 @@ class Binding(object): """ _module_prefix = "cryptography.hazmat.bindings.commoncrypto." _modules = [ + "cf", "common_digest", "common_hmac", "common_key_derivation", "common_cryptor", + "secimport", + "secitem", + "seckey", + "seckeychain", + "sectransform", ] ffi = None @@ -45,6 +51,7 @@ class Binding(object): cls.ffi, cls.lib = build_ffi( module_prefix=cls._module_prefix, modules=cls._modules, + extra_link_args=["-framework", "Security"] ) @classmethod diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/commoncrypto/cf.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/commoncrypto/cf.py new file mode 100644 index 0000000..671963a --- /dev/null +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/commoncrypto/cf.py @@ -0,0 +1,114 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import absolute_import, division, print_function + +INCLUDES = """ +#include +""" + +TYPES = """ +typedef bool Boolean; +typedef signed long OSStatus; +typedef unsigned char UInt8; +typedef uint32_t UInt32; + +typedef const void * CFAllocatorRef; +const CFAllocatorRef kCFAllocatorDefault; +typedef const void * CFDataRef; +typedef signed long long CFIndex; +typedef ... *CFStringRef; +typedef ... *CFArrayRef; +typedef ... *CFBooleanRef; +typedef ... *CFErrorRef; +typedef ... *CFNumberRef; +typedef ... *CFTypeRef; +typedef ... *CFDictionaryRef; +typedef ... *CFMutableDictionaryRef; +typedef struct { + ...; +} CFDictionaryKeyCallBacks; +typedef struct { + ...; +} CFDictionaryValueCallBacks; +typedef struct { + ...; +} CFRange; + +typedef UInt32 CFStringEncoding; +enum { + kCFStringEncodingASCII = 0x0600 +}; + +enum { + kCFNumberSInt8Type = 1, + kCFNumberSInt16Type = 2, + kCFNumberSInt32Type = 3, + kCFNumberSInt64Type = 4, + kCFNumberFloat32Type = 5, + kCFNumberFloat64Type = 6, + kCFNumberCharType = 7, + kCFNumberShortType = 8, + kCFNumberIntType = 9, + kCFNumberLongType = 10, + kCFNumberLongLongType = 11, + kCFNumberFloatType = 12, + kCFNumberDoubleType = 13, + kCFNumberCFIndexType = 14, + kCFNumberNSIntegerType = 15, + kCFNumberCGFloatType = 16, + kCFNumberMaxType = 16 +}; +typedef int CFNumberType; + +const CFDictionaryKeyCallBacks kCFTypeDictionaryKeyCallBacks; +const CFDictionaryValueCallBacks kCFTypeDictionaryValueCallBacks; + +const CFBooleanRef kCFBooleanTrue; +const CFBooleanRef kCFBooleanFalse; +""" + +FUNCTIONS = """ +CFDataRef CFDataCreate(CFAllocatorRef, const UInt8 *, CFIndex); +CFStringRef CFStringCreateWithCString(CFAllocatorRef, const char *, + CFStringEncoding); +CFDictionaryRef CFDictionaryCreate(CFAllocatorRef, const void **, + const void **, CFIndex, + const CFDictionaryKeyCallBacks *, + const CFDictionaryValueCallBacks *); +CFMutableDictionaryRef CFDictionaryCreateMutable( + CFAllocatorRef, + CFIndex, + const CFDictionaryKeyCallBacks *, + const CFDictionaryValueCallBacks * +); +void CFDictionarySetValue(CFMutableDictionaryRef, const void *, const void *); +CFIndex CFArrayGetCount(CFArrayRef); +const void *CFArrayGetValueAtIndex(CFArrayRef, CFIndex); +CFIndex CFDataGetLength(CFDataRef); +void CFDataGetBytes(CFDataRef, CFRange, UInt8 *); +CFRange CFRangeMake(CFIndex, CFIndex); +void CFShow(CFTypeRef); +Boolean CFBooleanGetValue(CFBooleanRef); +CFNumberRef CFNumberCreate(CFAllocatorRef, CFNumberType, const void *); +void CFRelease(CFTypeRef); +CFTypeRef CFRetain(CFTypeRef); +""" + +MACROS = """ +""" + +CUSTOMIZATIONS = """ +""" + +CONDITIONAL_NAMES = {} diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/commoncrypto/common_cryptor.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/commoncrypto/common_cryptor.py index 9bd03a7..713bc56 100644 --- a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/commoncrypto/common_cryptor.py +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/commoncrypto/common_cryptor.py @@ -101,7 +101,7 @@ MACROS = """ """ CUSTOMIZATIONS = """ -// Not defined in the public header +/* Not defined in the public header */ enum { kCCModeGCM = 11 }; diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/commoncrypto/secimport.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/commoncrypto/secimport.py new file mode 100644 index 0000000..add62c7 --- /dev/null +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/commoncrypto/secimport.py @@ -0,0 +1,95 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import absolute_import, division, print_function + +INCLUDES = """ +#include +""" + +TYPES = """ +typedef ... *SecAccessRef; + +CFStringRef kSecImportExportPassphrase; +CFStringRef kSecImportExportKeychain; +CFStringRef kSecImportExportAccess; + +typedef uint32_t SecExternalItemType; +enum { + kSecItemTypeUnknown, + kSecItemTypePrivateKey, + kSecItemTypePublicKey, + kSecItemTypeSessionKey, + kSecItemTypeCertificate, + kSecItemTypeAggregate +}; + + +typedef uint32_t SecExternalFormat; +enum { + kSecFormatUnknown = 0, + kSecFormatOpenSSL, + kSecFormatSSH, + kSecFormatBSAFE, + kSecFormatRawKey, + kSecFormatWrappedPKCS8, + kSecFormatWrappedOpenSSL, + kSecFormatWrappedSSH, + kSecFormatWrappedLSH, + kSecFormatX509Cert, + kSecFormatPEMSequence, + kSecFormatPKCS7, + kSecFormatPKCS12, + kSecFormatNetscapeCertSequence, + kSecFormatSSHv2 +}; + +typedef uint32_t SecItemImportExportFlags; +enum { + kSecKeyImportOnlyOne = 0x00000001, + kSecKeySecurePassphrase = 0x00000002, + kSecKeyNoAccessControl = 0x00000004 +}; +typedef uint32_t SecKeyImportExportFlags; + +typedef struct { + /* for import and export */ + uint32_t version; + SecKeyImportExportFlags flags; + CFTypeRef passphrase; + CFStringRef alertTitle; + CFStringRef alertPrompt; + + /* for import only */ + SecAccessRef accessRef; + CFArrayRef keyUsage; + + CFArrayRef keyAttributes; +} SecItemImportExportKeyParameters; +""" + +FUNCTIONS = """ +OSStatus SecItemImport(CFDataRef, CFStringRef, SecExternalFormat *, + SecExternalItemType *, SecItemImportExportFlags, + const SecItemImportExportKeyParameters *, + SecKeychainRef, CFArrayRef *); +OSStatus SecPKCS12Import(CFDataRef, CFDictionaryRef, CFArrayRef *); +""" + +MACROS = """ +""" + +CUSTOMIZATIONS = """ +""" + +CONDITIONAL_NAMES = {} diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/commoncrypto/secitem.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/commoncrypto/secitem.py new file mode 100644 index 0000000..ac3dad3 --- /dev/null +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/commoncrypto/secitem.py @@ -0,0 +1,38 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import absolute_import, division, print_function + +INCLUDES = """ +#include +""" + +TYPES = """ +const CFTypeRef kSecAttrKeyType; +const CFTypeRef kSecAttrKeySizeInBits; +const CFTypeRef kSecAttrIsPermanent; +const CFTypeRef kSecAttrKeyTypeRSA; +const CFTypeRef kSecAttrKeyTypeDSA; +const CFTypeRef kSecUseKeychain; +""" + +FUNCTIONS = """ +""" + +MACROS = """ +""" + +CUSTOMIZATIONS = """ +""" + +CONDITIONAL_NAMES = {} diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/commoncrypto/seckey.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/commoncrypto/seckey.py new file mode 100644 index 0000000..5e4b6da --- /dev/null +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/commoncrypto/seckey.py @@ -0,0 +1,35 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import absolute_import, division, print_function + +INCLUDES = """ +#include +""" + +TYPES = """ +typedef ... *SecKeyRef; +""" + +FUNCTIONS = """ +OSStatus SecKeyGeneratePair(CFDictionaryRef, SecKeyRef *, SecKeyRef *); +size_t SecKeyGetBlockSize(SecKeyRef); +""" + +MACROS = """ +""" + +CUSTOMIZATIONS = """ +""" + +CONDITIONAL_NAMES = {} diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/commoncrypto/seckeychain.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/commoncrypto/seckeychain.py new file mode 100644 index 0000000..c045c34 --- /dev/null +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/commoncrypto/seckeychain.py @@ -0,0 +1,36 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import absolute_import, division, print_function + +INCLUDES = """ +#include +""" + +TYPES = """ +typedef ... *SecKeychainRef; +""" + +FUNCTIONS = """ +OSStatus SecKeychainCreate(const char *, UInt32, const void *, Boolean, + SecAccessRef, SecKeychainRef *); +OSStatus SecKeychainDelete(SecKeychainRef); +""" + +MACROS = """ +""" + +CUSTOMIZATIONS = """ +""" + +CONDITIONAL_NAMES = {} diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/commoncrypto/sectransform.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/commoncrypto/sectransform.py new file mode 100644 index 0000000..d6dbc5f --- /dev/null +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/commoncrypto/sectransform.py @@ -0,0 +1,79 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import absolute_import, division, print_function + +INCLUDES = """ +#include +#include +#include +""" + +TYPES = """ +typedef ... *SecTransformRef; + +CFStringRef kSecImportExportPassphrase; +CFStringRef kSecImportExportKeychain; +CFStringRef kSecImportExportAccess; + +CFStringRef kSecEncryptionMode; +CFStringRef kSecEncryptKey; +CFStringRef kSecIVKey; +CFStringRef kSecModeCBCKey; +CFStringRef kSecModeCFBKey; +CFStringRef kSecModeECBKey; +CFStringRef kSecModeNoneKey; +CFStringRef kSecModeOFBKey; +CFStringRef kSecOAEPEncodingParametersAttributeName; +CFStringRef kSecPaddingKey; +CFStringRef kSecPaddingNoneKey; +CFStringRef kSecPaddingOAEPKey; +CFStringRef kSecPaddingPKCS1Key; +CFStringRef kSecPaddingPKCS5Key; +CFStringRef kSecPaddingPKCS7Key; + +const CFStringRef kSecTransformInputAttributeName; +const CFStringRef kSecTransformOutputAttributeName; +const CFStringRef kSecTransformDebugAttributeName; +const CFStringRef kSecTransformTransformName; +const CFStringRef kSecTransformAbortAttributeName; + +CFStringRef kSecInputIsAttributeName; +CFStringRef kSecInputIsPlainText; +CFStringRef kSecInputIsDigest; +CFStringRef kSecInputIsRaw; + +const CFStringRef kSecDigestTypeAttribute; +const CFStringRef kSecDigestLengthAttribute; +const CFStringRef kSecDigestMD5; +const CFStringRef kSecDigestSHA1; +const CFStringRef kSecDigestSHA2; +""" + +FUNCTIONS = """ +Boolean SecTransformSetAttribute(SecTransformRef, CFStringRef, CFTypeRef, + CFErrorRef *); +SecTransformRef SecDecryptTransformCreate(SecKeyRef, CFErrorRef *); +SecTransformRef SecEncryptTransformCreate(SecKeyRef, CFErrorRef *); +SecTransformRef SecVerifyTransformCreate(SecKeyRef, CFDataRef, CFErrorRef *); +SecTransformRef SecSignTransformCreate(SecKeyRef, CFErrorRef *) ; +CFTypeRef SecTransformExecute(SecTransformRef, CFErrorRef *); +""" + +MACROS = """ +""" + +CUSTOMIZATIONS = """ +""" + +CONDITIONAL_NAMES = {} diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/aes.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/aes.py index 17c154c..e407152 100644 --- a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/aes.py +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/aes.py @@ -38,10 +38,18 @@ int AES_wrap_key(AES_KEY *, const unsigned char *, unsigned char *, const unsigned char *, unsigned int); int AES_unwrap_key(AES_KEY *, const unsigned char *, unsigned char *, const unsigned char *, unsigned int); + +/* The ctr128_encrypt function is only useful in 0.9.8. You should use EVP for + this in 1.0.0+. It is defined in macros because the function signature + changed after 0.9.8 */ +void AES_ctr128_encrypt(const unsigned char *, unsigned char *, + const size_t, const AES_KEY *, + unsigned char[], unsigned char[], unsigned int *); + """ CUSTOMIZATIONS = """ -// OpenSSL 0.9.8h+ +/* OpenSSL 0.9.8h+ */ #if OPENSSL_VERSION_NUMBER >= 0x0090808fL static const long Cryptography_HAS_AES_WRAP = 1; #else diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/asn1.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/asn1.py index dfdf1bf..2edfd2d 100644 --- a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/asn1.py +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/asn1.py @@ -141,6 +141,9 @@ ASN1_INTEGER *BN_to_ASN1_INTEGER(BIGNUM *, ASN1_INTEGER *); /* These isn't a macro the arg is const on openssl 1.0.2+ */ int ASN1_GENERALIZEDTIME_check(ASN1_GENERALIZEDTIME *); + +/* Not a macro, const on openssl 1.0 */ +int ASN1_STRING_set_default_mask_asc(char *); """ CUSTOMIZATIONS = """ diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/binding.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/binding.py index aa0525f..4cd1b89 100644 --- a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/binding.py +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/binding.py @@ -13,6 +13,7 @@ from __future__ import absolute_import, division, print_function +import os import sys import threading @@ -74,6 +75,7 @@ class Binding(object): "x509", "x509name", "x509v3", + "x509_vfy" ] _locks = None @@ -96,7 +98,8 @@ class Binding(object): if sys.platform != "win32": libraries = ["crypto", "ssl"] else: # pragma: no cover - libraries = ["libeay32", "ssleay32", "advapi32"] + link_type = os.environ.get("PYCA_WINDOWS_LINK_TYPE", "static") + libraries = _get_windows_libraries(link_type) cls.ffi, cls.lib = build_ffi( module_prefix=cls._module_prefix, @@ -149,7 +152,19 @@ class Binding(object): lock.release() else: raise RuntimeError( - "Unknown lock mode {0}: lock={1}, file={2}, line={3}".format( + "Unknown lock mode {0}: lock={1}, file={2}, line={3}.".format( mode, n, file, line ) ) + + +def _get_windows_libraries(link_type): + if link_type == "dynamic": + return ["libeay32", "ssleay32", "advapi32"] + elif link_type == "static" or link_type == "": + return ["libeay32mt", "ssleay32mt", "advapi32", + "crypt32", "gdi32", "user32", "ws2_32"] + else: + raise ValueError( + "PYCA_WINDOWS_LINK_TYPE must be 'static' or 'dynamic'" + ) diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/cms.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/cms.py index a3760f2..cbf4b28 100644 --- a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/cms.py +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/cms.py @@ -15,8 +15,8 @@ from __future__ import absolute_import, division, print_function INCLUDES = """ #if !defined(OPENSSL_NO_CMS) && OPENSSL_VERSION_NUMBER >= 0x0090808fL -// The next define should really be in the OpenSSL header, but it is missing. -// Failing to include this on Windows causes compilation failures. +/* The next define should really be in the OpenSSL header, but it is missing. + Failing to include this on Windows causes compilation failures. */ #if defined(OPENSSL_SYS_WINDOWS) #include #endif diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/conf.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/conf.py index dda35e8..001a070 100644 --- a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/conf.py +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/conf.py @@ -22,6 +22,8 @@ typedef ... CONF; """ FUNCTIONS = """ +void OPENSSL_config(const char *); +void OPENSSL_no_config(void); """ MACROS = """ diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/dh.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/dh.py index a0f9947..e2e8976 100644 --- a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/dh.py +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/dh.py @@ -19,13 +19,13 @@ INCLUDES = """ TYPES = """ typedef struct dh_st { - // prime number (shared) + /* Prime number (shared) */ BIGNUM *p; - // generator of Z_p (shared) + /* Generator of Z_p (shared) */ BIGNUM *g; - // private DH value x + /* Private DH value x */ BIGNUM *priv_key; - // public DH value g^x + /* Public DH value g^x */ BIGNUM *pub_key; ...; } DH; diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/dsa.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/dsa.py index 7db0332..c9aa888 100644 --- a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/dsa.py +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/dsa.py @@ -19,15 +19,15 @@ INCLUDES = """ TYPES = """ typedef struct dsa_st { - // prime number (public) + /* Prime number (public) */ BIGNUM *p; - // 160-bit subprime, q | p-1 (public) + /* Subprime (160-bit, q | p-1, public) */ BIGNUM *q; - // generator of subgroup (public) + /* Generator of subgroup (public) */ BIGNUM *g; - // private key x + /* Private key x */ BIGNUM *priv_key; - // public key y = g^x + /* Public key y = g^x */ BIGNUM *pub_key; ...; } DSA; diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/ec.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/ec.py index 45c17c2..26fc8ff 100644 --- a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/ec.py +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/ec.py @@ -27,6 +27,8 @@ static const int Cryptography_HAS_EC_1_0_1; static const int Cryptography_HAS_EC_NISTP_64_GCC_128; static const int Cryptography_HAS_EC2M; +static const int OPENSSL_EC_NAMED_CURVE; + typedef ... EC_KEY; typedef ... EC_GROUP; typedef ... EC_POINT; @@ -61,6 +63,8 @@ int EC_GROUP_set_curve_GF2m( int EC_GROUP_get_curve_GF2m( const EC_GROUP *, BIGNUM *, BIGNUM *, BIGNUM *, BN_CTX *); +int EC_GROUP_get_degree(const EC_GROUP *); + const EC_METHOD *EC_GROUP_method_of(const EC_GROUP *); const EC_POINT *EC_GROUP_get0_generator(const EC_GROUP *); int EC_GROUP_get_curve_name(const EC_GROUP *); @@ -198,6 +202,7 @@ int EC_METHOD_get_field_type(const EC_METHOD *); CUSTOMIZATIONS = """ #ifdef OPENSSL_NO_EC static const long Cryptography_HAS_EC = 0; + typedef void EC_KEY; typedef void EC_GROUP; typedef void EC_POINT; @@ -208,6 +213,8 @@ typedef struct { } EC_builtin_curve; typedef long point_conversion_form_t; +static const int OPENSSL_EC_NAMED_CURVE = 0; + void (*EC_KEY_free)(EC_KEY *) = NULL; size_t (*EC_get_builtin_curves)(EC_builtin_curve *, size_t) = NULL; EC_KEY *(*EC_KEY_new_by_curve_name)(int) = NULL; @@ -250,6 +257,8 @@ int (*EC_GROUP_set_curve_GFp)( int (*EC_GROUP_get_curve_GFp)( const EC_GROUP *, BIGNUM *, BIGNUM *, BIGNUM *, BN_CTX *); +int (*EC_GROUP_get_degree)(const EC_GROUP *) = NULL; + const EC_METHOD *(*EC_GROUP_method_of)(const EC_GROUP *) = NULL; const EC_POINT *(*EC_GROUP_get0_generator)(const EC_GROUP *) = NULL; int (*EC_GROUP_get_curve_name)(const EC_GROUP *) = NULL; @@ -389,6 +398,7 @@ static const long Cryptography_HAS_EC2M = 1; CONDITIONAL_NAMES = { "Cryptography_HAS_EC": [ + "OPENSSL_EC_NAMED_CURVE", "EC_GROUP_new", "EC_GROUP_free", "EC_GROUP_clear_free", @@ -399,6 +409,7 @@ CONDITIONAL_NAMES = { "EC_GROUP_method_of", "EC_GROUP_get0_generator", "EC_GROUP_get_curve_name", + "EC_GROUP_get_degree", "EC_KEY_free", "EC_get_builtin_curves", "EC_KEY_new_by_curve_name", diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/err.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/err.py index f6456d6..232060a 100644 --- a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/err.py +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/err.py @@ -21,6 +21,7 @@ TYPES = """ static const int Cryptography_HAS_REMOVE_THREAD_STATE; static const int Cryptography_HAS_098H_ERROR_CODES; static const int Cryptography_HAS_098C_CAMELLIA_CODES; +static const int Cryptography_HAS_EC_CODES; struct ERR_string_data_st { unsigned long error; @@ -28,8 +29,8 @@ struct ERR_string_data_st { }; typedef struct ERR_string_data_st ERR_STRING_DATA; - static const int ERR_LIB_EVP; +static const int ERR_LIB_EC; static const int ERR_LIB_PEM; static const int ERR_LIB_ASN1; static const int ERR_LIB_RSA; @@ -135,6 +136,7 @@ static const int EVP_F_PKCS5_V2_PBE_KEYIVGEN; static const int EVP_F_PKCS8_SET_BROKEN; static const int EVP_F_RC2_MAGIC_TO_METH; static const int EVP_F_RC5_CTRL; + static const int EVP_R_AES_KEY_SETUP_FAILED; static const int EVP_R_ASN1_LIB; static const int EVP_R_BAD_BLOCK_LENGTH; @@ -168,9 +170,14 @@ static const int EVP_R_UNSUPPORTED_CIPHER; static const int EVP_R_UNSUPPORTED_KEY_DERIVATION_FUNCTION; static const int EVP_R_UNSUPPORTED_KEYLENGTH; static const int EVP_R_UNSUPPORTED_SALT_TYPE; +static const int EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM; static const int EVP_R_WRONG_FINAL_BLOCK_LENGTH; static const int EVP_R_WRONG_PUBLIC_KEY_TYPE; +static const int EC_F_EC_GROUP_NEW_BY_CURVE_NAME; + +static const int EC_R_UNKNOWN_GROUP; + static const int PEM_F_D2I_PKCS8PRIVATEKEY_BIO; static const int PEM_F_D2I_PKCS8PRIVATEKEY_FP; static const int PEM_F_DO_PK8PKEY; @@ -283,7 +290,7 @@ typedef uint32_t CRYPTO_THREADID; void (*ERR_remove_thread_state)(const CRYPTO_THREADID *) = NULL; #endif -// OpenSSL 0.9.8h+ +/* OpenSSL 0.9.8h+ */ #if OPENSSL_VERSION_NUMBER >= 0x0090808fL static const long Cryptography_HAS_098H_ERROR_CODES = 1; #else @@ -297,7 +304,7 @@ static const int ASN1_R_NO_MULTIPART_BODY_FAILURE = 0; static const int ASN1_R_NO_MULTIPART_BOUNDARY = 0; #endif -// OpenSSL 0.9.8c+ +/* OpenSSL 0.9.8c+ */ #ifdef EVP_F_CAMELLIA_INIT_KEY static const long Cryptography_HAS_098C_CAMELLIA_CODES = 1; #else @@ -306,6 +313,14 @@ static const int EVP_F_CAMELLIA_INIT_KEY = 0; static const int EVP_R_CAMELLIA_KEY_SETUP_FAILED = 0; #endif +// OpenSSL without EC. e.g. RHEL +#ifndef OPENSSL_NO_EC +static const long Cryptography_HAS_EC_CODES = 1; +#else +static const long Cryptography_HAS_EC_CODES = 0; +static const int EC_R_UNKNOWN_GROUP = 0; +static const int EC_F_EC_GROUP_NEW_BY_CURVE_NAME = 0; +#endif """ CONDITIONAL_NAMES = { @@ -324,5 +339,9 @@ CONDITIONAL_NAMES = { "Cryptography_HAS_098C_CAMELLIA_CODES": [ "EVP_F_CAMELLIA_INIT_KEY", "EVP_R_CAMELLIA_KEY_SETUP_FAILED" + ], + "Cryptography_HAS_EC_CODES": [ + "EC_R_UNKNOWN_GROUP", + "EC_F_EC_GROUP_NEW_BY_CURVE_NAME" ] } diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/evp.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/evp.py index b3d958e..1183450 100644 --- a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/evp.py +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/evp.py @@ -139,7 +139,8 @@ int PKCS5_PBKDF2_HMAC(const char *, int, const unsigned char *, int, int, int EVP_PKEY_CTX_set_signature_md(EVP_PKEY_CTX *, const EVP_MD *); -// not macros but must be in this section since they're not available in 0.9.8 +/* These aren't macros, but must be in this section because they're not + available in 0.9.8. */ EVP_PKEY_CTX *EVP_PKEY_CTX_new(EVP_PKEY *, ENGINE *); EVP_PKEY_CTX *EVP_PKEY_CTX_new_id(int, ENGINE *); EVP_PKEY_CTX *EVP_PKEY_CTX_dup(EVP_PKEY_CTX *); diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/nid.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/nid.py index ea6fd4d..133d2ca 100644 --- a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/nid.py +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/nid.py @@ -42,6 +42,7 @@ static const int NID_ecdsa_with_SHA512; static const int NID_crl_reason; static const int NID_pbe_WithSHA1And3_Key_TripleDES_CBC; static const int NID_subject_alt_name; +static const int NID_issuer_alt_name; static const int NID_X9_62_c2pnb163v1; static const int NID_X9_62_c2pnb163v2; static const int NID_X9_62_c2pnb163v3; @@ -193,7 +194,7 @@ MACROS = """ """ CUSTOMIZATIONS = """ -// OpenSSL 0.9.8g+ +/* OpenSSL 0.9.8g+ */ #if OPENSSL_VERSION_NUMBER >= 0x0090807fL static const long Cryptography_HAS_ECDSA_SHA2_NIDS = 1; #else diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/opensslv.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/opensslv.py index e4aa621..ef6e057 100644 --- a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/opensslv.py +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/opensslv.py @@ -18,6 +18,8 @@ INCLUDES = """ """ TYPES = """ +/* Note that these will be resolved when cryptography is compiled and are NOT + guaranteed to be the version that it actually loads. */ static const int OPENSSL_VERSION_NUMBER; static const char *const OPENSSL_VERSION_TEXT; """ diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/pem.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/pem.py index e42fc6f..752f198 100644 --- a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/pem.py +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/pem.py @@ -41,6 +41,7 @@ int i2d_PKCS8PrivateKey_bio(BIO *, EVP_PKEY *, const EVP_CIPHER *, int i2d_PKCS8PrivateKey_nid_bio(BIO *, EVP_PKEY *, int, char *, int, pem_password_cb *, void *); +PKCS7 *d2i_PKCS7_bio(BIO *, PKCS7 **); EVP_PKEY *d2i_PKCS8PrivateKey_bio(BIO *, EVP_PKEY **, pem_password_cb *, void *); diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/rsa.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/rsa.py index c635610..cb8e701 100644 --- a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/rsa.py +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/rsa.py @@ -80,7 +80,7 @@ CUSTOMIZATIONS = """ #if OPENSSL_VERSION_NUMBER >= 0x10000000 static const long Cryptography_HAS_PSS_PADDING = 1; #else -// see evp.py for the definition of Cryptography_HAS_PKEY_CTX +/* see evp.py for the definition of Cryptography_HAS_PKEY_CTX */ static const long Cryptography_HAS_PSS_PADDING = 0; int (*EVP_PKEY_CTX_set_rsa_padding)(EVP_PKEY_CTX *, int) = NULL; int (*EVP_PKEY_CTX_set_rsa_pss_saltlen)(EVP_PKEY_CTX *, int) = NULL; diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/ssl.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/ssl.py index 0b15411..7d805e7 100644 --- a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/ssl.py +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/ssl.py @@ -15,6 +15,8 @@ from __future__ import absolute_import, division, print_function INCLUDES = """ #include + +typedef STACK_OF(SSL_CIPHER) Cryptography_STACK_OF_SSL_CIPHER; """ TYPES = """ @@ -24,6 +26,7 @@ TYPES = """ static const long Cryptography_HAS_SSL2; static const long Cryptography_HAS_TLSv1_1; static const long Cryptography_HAS_TLSv1_2; +static const long Cryptography_HAS_SECURE_RENEGOTIATION; /* Internally invented symbol to tell us if SNI is supported */ static const long Cryptography_HAS_TLSEXT_HOSTNAME; @@ -43,6 +46,7 @@ static const long Cryptography_HAS_SSL_SET_SSL_CTX; static const long Cryptography_HAS_SSL_OP_NO_TICKET; static const long Cryptography_HAS_NETBSD_D1_METH; static const long Cryptography_HAS_NEXTPROTONEG; +static const long Cryptography_HAS_ALPN; static const long SSL_FILETYPE_PEM; static const long SSL_FILETYPE_ASN1; @@ -84,6 +88,8 @@ static const long SSL_OP_COOKIE_EXCHANGE; static const long SSL_OP_NO_TICKET; static const long SSL_OP_ALL; static const long SSL_OP_SINGLE_ECDH_USE; +static const long SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION; +static const long SSL_OP_LEGACY_SERVER_CONNECT; static const long SSL_VERIFY_PEER; static const long SSL_VERIFY_FAIL_IF_NO_PEER_CERT; static const long SSL_VERIFY_CLIENT_ONCE; @@ -121,9 +127,6 @@ static const long SSL_MODE_ENABLE_PARTIAL_WRITE; static const long SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER; static const long SSL_MODE_AUTO_RETRY; static const long SSL3_RANDOM_SIZE; -typedef ... X509_STORE_CTX; -static const long X509_V_OK; -static const long X509_V_ERR_APPLICATION_VERIFICATION; typedef ... SSL_METHOD; typedef struct ssl_st { int version; @@ -153,6 +156,8 @@ typedef struct { static const long TLSEXT_NAMETYPE_host_name; typedef ... SSL_CIPHER; +typedef ... Cryptography_STACK_OF_SSL_CIPHER; +typedef ... COMP_METHOD; """ FUNCTIONS = """ @@ -190,6 +195,11 @@ int SSL_get_error(const SSL *, int); int SSL_do_handshake(SSL *); int SSL_shutdown(SSL *); const char *SSL_get_cipher_list(const SSL *, int); +Cryptography_STACK_OF_SSL_CIPHER *SSL_get_ciphers(const SSL *); + +const COMP_METHOD *SSL_get_current_compression(SSL *); +const COMP_METHOD *SSL_get_current_expansion(SSL *); +const char *SSL_COMP_get_name(const COMP_METHOD *); /* context */ void SSL_CTX_free(SSL_CTX *); @@ -215,16 +225,6 @@ int SSL_CTX_add_client_CA(SSL_CTX *, X509 *); void SSL_CTX_set_client_CA_list(SSL_CTX *, Cryptography_STACK_OF_X509_NAME *); - -/* X509_STORE_CTX */ -int X509_STORE_CTX_get_error(X509_STORE_CTX *); -void X509_STORE_CTX_set_error(X509_STORE_CTX *, int); -int X509_STORE_CTX_get_error_depth(X509_STORE_CTX *); -X509 *X509_STORE_CTX_get_current_cert(X509_STORE_CTX *); -int X509_STORE_CTX_set_ex_data(X509_STORE_CTX *, int, void *); -void *X509_STORE_CTX_get_ex_data(X509_STORE_CTX *, int); - - /* SSL_SESSION */ void SSL_SESSION_free(SSL_SESSION *); @@ -248,6 +248,7 @@ int SSL_want_read(const SSL *); int SSL_want_write(const SSL *); long SSL_total_renegotiations(SSL *); +long SSL_get_secure_renegotiation_support(SSL *); /* Defined as unsigned long because SSL_OP_ALL is greater than signed 32-bit and Windows defines long as 32-bit. */ @@ -351,9 +352,38 @@ int SSL_select_next_proto(unsigned char **, unsigned char *, const unsigned char *, unsigned int); void SSL_get0_next_proto_negotiated(const SSL *, const unsigned char **, unsigned *); + +int sk_SSL_CIPHER_num(Cryptography_STACK_OF_SSL_CIPHER *); +SSL_CIPHER *sk_SSL_CIPHER_value(Cryptography_STACK_OF_SSL_CIPHER *, int); + +/* ALPN APIs were introduced in OpenSSL 1.0.2. To continue to support earlier + * versions some special handling of these is necessary. + */ +int SSL_CTX_set_alpn_protos(SSL_CTX *, const unsigned char*, unsigned); +int SSL_set_alpn_protos(SSL *, const unsigned char*, unsigned); +void SSL_CTX_set_alpn_select_cb(SSL_CTX *, + int (*) (SSL *, + const unsigned char **, + unsigned char *, + const unsigned char *, + unsigned int, + void *), + void *); +void SSL_get0_alpn_selected(const SSL *, const unsigned char **, unsigned *); """ CUSTOMIZATIONS = """ +/** Secure renegotiation is supported in OpenSSL >= 0.9.8m + * But some Linux distributions have back ported some features. + */ +#ifndef SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION +static const long Cryptography_HAS_SECURE_RENEGOTIATION = 0; +long (*SSL_get_secure_renegotiation_support)(SSL *) = NULL; +const long SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION = 0; +const long SSL_OP_LEGACY_SERVER_CONNECT = 0; +#else +static const long Cryptography_HAS_SECURE_RENEGOTIATION = 1; +#endif #ifdef OPENSSL_NO_SSL2 static const long Cryptography_HAS_SSL2 = 0; SSL_METHOD* (*SSLv2_method)(void) = NULL; @@ -426,7 +456,7 @@ static const long Cryptography_HAS_SSL_OP_NO_TICKET = 0; const long SSL_OP_NO_TICKET = 0; #endif -// OpenSSL 0.9.8f+ +/* OpenSSL 0.9.8f+ */ #if OPENSSL_VERSION_NUMBER >= 0x00908070L static const long Cryptography_HAS_SSL_SET_SSL_CTX = 1; #else @@ -453,7 +483,7 @@ static const long Cryptography_HAS_NETBSD_D1_METH = 1; static const long Cryptography_HAS_NETBSD_D1_METH = 1; #endif -// Workaround for #794 caused by cffi const** bug. +/* Workaround for #794 caused by cffi const** bug. */ const SSL_METHOD* Cryptography_SSL_CTX_get_method(const SSL_CTX* ctx) { return ctx->method; } @@ -488,6 +518,28 @@ void (*SSL_get0_next_proto_negotiated)(const SSL *, #else static const long Cryptography_HAS_NEXTPROTONEG = 1; #endif + +/* ALPN was added in OpenSSL 1.0.2. */ +#if OPENSSL_VERSION_NUMBER < 0x10002001L +int (*SSL_CTX_set_alpn_protos)(SSL_CTX *, + const unsigned char*, + unsigned) = NULL; +int (*SSL_set_alpn_protos)(SSL *, const unsigned char*, unsigned) = NULL; +void (*SSL_CTX_set_alpn_select_cb)(SSL_CTX *, + int (*) (SSL *, + const unsigned char **, + unsigned char *, + const unsigned char *, + unsigned int, + void *), + void *) = NULL; +void (*SSL_get0_alpn_selected)(const SSL *, + const unsigned char **, + unsigned *) = NULL; +static const long Cryptography_HAS_ALPN = 0; +#else +static const long Cryptography_HAS_ALPN = 1; +#endif """ CONDITIONAL_NAMES = { @@ -551,5 +603,18 @@ CONDITIONAL_NAMES = { "SSL_CTX_set_next_proto_select_cb", "SSL_select_next_proto", "SSL_get0_next_proto_negotiated", + ], + + "Cryptography_HAS_SECURE_RENEGOTIATION": [ + "SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION", + "SSL_OP_LEGACY_SERVER_CONNECT", + "SSL_get_secure_renegotiation_support", + ], + + "Cryptography_HAS_ALPN": [ + "SSL_CTX_set_alpn_protos", + "SSL_set_alpn_protos", + "SSL_CTX_set_alpn_select_cb", + "SSL_get0_alpn_selected", ] } diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/x509.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/x509.py index 36a15e4..b74c118 100644 --- a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/x509.py +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/x509.py @@ -24,11 +24,13 @@ INCLUDES = """ * Note that the result is an opaque type. */ typedef STACK_OF(X509) Cryptography_STACK_OF_X509; +typedef STACK_OF(X509_CRL) Cryptography_STACK_OF_X509_CRL; typedef STACK_OF(X509_REVOKED) Cryptography_STACK_OF_X509_REVOKED; """ TYPES = """ typedef ... Cryptography_STACK_OF_X509; +typedef ... Cryptography_STACK_OF_X509_CRL; typedef ... Cryptography_STACK_OF_X509_REVOKED; typedef struct { @@ -76,7 +78,6 @@ typedef struct { ...; } X509; -typedef ... X509_STORE; typedef ... NETSCAPE_SPKI; """ @@ -166,12 +167,6 @@ EVP_PKEY *d2i_PUBKEY_bio(BIO *, EVP_PKEY **); ASN1_INTEGER *X509_get_serialNumber(X509 *); int X509_set_serialNumber(X509 *, ASN1_INTEGER *); -/* X509_STORE */ -X509_STORE *X509_STORE_new(void); -void X509_STORE_free(X509_STORE *); -int X509_STORE_add_cert(X509_STORE *, X509 *); -int X509_verify_cert(X509_STORE_CTX *); - const char *X509_verify_cert_error_string(long); const char *X509_get_default_cert_area(void); @@ -190,7 +185,6 @@ DSA *d2i_DSA_PUBKEY(DSA **, const unsigned char **, long); DSA *d2i_DSAPublicKey(DSA **, const unsigned char **, long); DSA *d2i_DSAPrivateKey(DSA **, const unsigned char **, long); - RSA *d2i_RSAPrivateKey_bio(BIO *, RSA **); int i2d_RSAPrivateKey_bio(BIO *, RSA *); RSA *d2i_RSAPublicKey_bio(BIO *, RSA **); @@ -237,7 +231,7 @@ int i2d_DSAPrivateKey(DSA *, unsigned char **); int X509_CRL_set_lastUpdate(X509_CRL *, ASN1_TIME *); int X509_CRL_set_nextUpdate(X509_CRL *, ASN1_TIME *); -/* these use STACK_OF(X509_EXTENSION) in 0.9.8e. Once we drop support for +/* These use STACK_OF(X509_EXTENSION) in 0.9.8e. Once we drop support for RHEL/CentOS 5 we should move these back to FUNCTIONS. */ int X509_REQ_add_extensions(X509_REQ *, X509_EXTENSIONS *); X509_EXTENSIONS *X509_REQ_get_extensions(X509_REQ *); @@ -251,7 +245,7 @@ int i2d_ECPrivateKey_bio(BIO *, EC_KEY *); """ CUSTOMIZATIONS = """ -// OpenSSL 0.9.8e does not have this definition +/* OpenSSL 0.9.8e does not have this definition. */ #if OPENSSL_VERSION_NUMBER <= 0x0090805fL typedef STACK_OF(X509_EXTENSION) X509_EXTENSIONS; #endif diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/x509_vfy.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/x509_vfy.py new file mode 100644 index 0000000..601926c --- /dev/null +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/x509_vfy.py @@ -0,0 +1,336 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import absolute_import, division, print_function + +INCLUDES = """ +#include + +/* + * This is part of a work-around for the difficulty cffi has in dealing with + * `STACK_OF(foo)` as the name of a type. We invent a new, simpler name that + * will be an alias for this type and use the alias throughout. This works + * together with another opaque typedef for the same name in the TYPES section. + * Note that the result is an opaque type. + */ +typedef STACK_OF(ASN1_OBJECT) Cryptography_STACK_OF_ASN1_OBJECT; +""" + +TYPES = """ +static const long Cryptography_HAS_102_VERIFICATION_ERROR_CODES; +static const long Cryptography_HAS_102_VERIFICATION_PARAMS; +static const long Cryptography_HAS_X509_V_FLAG_TRUSTED_FIRST; +static const long Cryptography_HAS_X509_V_FLAG_PARTIAL_CHAIN; +static const long Cryptography_HAS_100_VERIFICATION_ERROR_CODES; +static const long Cryptography_HAS_100_VERIFICATION_PARAMS; +static const long Cryptography_HAS_X509_V_FLAG_CHECK_SS_SIGNATURE; + +typedef ... Cryptography_STACK_OF_ASN1_OBJECT; + +typedef ... X509_STORE; +typedef ... X509_STORE_CTX; +typedef ... X509_VERIFY_PARAM; + +/* While these are defined in the source as ints, they're tagged here + as longs, just in case they ever grow to large, such as what we saw + with OP_ALL. */ + +/* Verification error codes */ +static const int X509_V_OK; +static const int X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT; +static const int X509_V_ERR_UNABLE_TO_GET_CRL; +static const int X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE; +static const int X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE; +static const int X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY; +static const int X509_V_ERR_CERT_SIGNATURE_FAILURE; +static const int X509_V_ERR_CRL_SIGNATURE_FAILURE; +static const int X509_V_ERR_CERT_NOT_YET_VALID; +static const int X509_V_ERR_CERT_HAS_EXPIRED; +static const int X509_V_ERR_CRL_NOT_YET_VALID; +static const int X509_V_ERR_CRL_HAS_EXPIRED; +static const int X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD; +static const int X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD; +static const int X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD; +static const int X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD; +static const int X509_V_ERR_OUT_OF_MEM; +static const int X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT; +static const int X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN; +static const int X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY; +static const int X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE; +static const int X509_V_ERR_CERT_CHAIN_TOO_LONG; +static const int X509_V_ERR_CERT_REVOKED; +static const int X509_V_ERR_INVALID_CA; +static const int X509_V_ERR_PATH_LENGTH_EXCEEDED; +static const int X509_V_ERR_INVALID_PURPOSE; +static const int X509_V_ERR_CERT_UNTRUSTED; +static const int X509_V_ERR_CERT_REJECTED; +static const int X509_V_ERR_SUBJECT_ISSUER_MISMATCH; +static const int X509_V_ERR_AKID_SKID_MISMATCH; +static const int X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH; +static const int X509_V_ERR_KEYUSAGE_NO_CERTSIGN; +static const int X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER; +static const int X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION; +static const int X509_V_ERR_KEYUSAGE_NO_CRL_SIGN; +static const int X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION; +static const int X509_V_ERR_INVALID_NON_CA; +static const int X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED; +static const int X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE; +static const int X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED; +static const int X509_V_ERR_INVALID_EXTENSION; +static const int X509_V_ERR_INVALID_POLICY_EXTENSION; +static const int X509_V_ERR_NO_EXPLICIT_POLICY; +static const int X509_V_ERR_DIFFERENT_CRL_SCOPE; +static const int X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE; +static const int X509_V_ERR_UNNESTED_RESOURCE; +static const int X509_V_ERR_PERMITTED_VIOLATION; +static const int X509_V_ERR_EXCLUDED_VIOLATION; +static const int X509_V_ERR_SUBTREE_MINMAX; +static const int X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE; +static const int X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX; +static const int X509_V_ERR_UNSUPPORTED_NAME_SYNTAX; +static const int X509_V_ERR_CRL_PATH_VALIDATION_ERROR; +static const int X509_V_ERR_SUITE_B_INVALID_VERSION; +static const int X509_V_ERR_SUITE_B_INVALID_ALGORITHM; +static const int X509_V_ERR_SUITE_B_INVALID_CURVE; +static const int X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM; +static const int X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED; +static const int X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256; +static const int X509_V_ERR_HOSTNAME_MISMATCH; +static const int X509_V_ERR_EMAIL_MISMATCH; +static const int X509_V_ERR_IP_ADDRESS_MISMATCH; +static const int X509_V_ERR_APPLICATION_VERIFICATION; + +/* Verification parameters */ +static const long X509_V_FLAG_CB_ISSUER_CHECK; +static const long X509_V_FLAG_USE_CHECK_TIME; +static const long X509_V_FLAG_CRL_CHECK; +static const long X509_V_FLAG_CRL_CHECK_ALL; +static const long X509_V_FLAG_IGNORE_CRITICAL; +static const long X509_V_FLAG_X509_STRICT; +static const long X509_V_FLAG_ALLOW_PROXY_CERTS; +static const long X509_V_FLAG_POLICY_CHECK; +static const long X509_V_FLAG_EXPLICIT_POLICY; +static const long X509_V_FLAG_INHIBIT_ANY; +static const long X509_V_FLAG_INHIBIT_MAP; +static const long X509_V_FLAG_NOTIFY_POLICY; +static const long X509_V_FLAG_EXTENDED_CRL_SUPPORT; +static const long X509_V_FLAG_USE_DELTAS; +static const long X509_V_FLAG_CHECK_SS_SIGNATURE; +static const long X509_V_FLAG_TRUSTED_FIRST; +static const long X509_V_FLAG_SUITEB_128_LOS_ONLY; +static const long X509_V_FLAG_SUITEB_192_LOS; +static const long X509_V_FLAG_SUITEB_128_LOS; +static const long X509_V_FLAG_PARTIAL_CHAIN; +""" + +FUNCTIONS = """ +int X509_verify_cert(X509_STORE_CTX *); + +/* X509_STORE */ +X509_STORE *X509_STORE_new(void); +void X509_STORE_free(X509_STORE *); +int X509_STORE_add_cert(X509_STORE *, X509 *); + +/* X509_STORE_CTX */ +X509_STORE_CTX *X509_STORE_CTX_new(void); +void X509_STORE_CTX_cleanup(X509_STORE_CTX *); +void X509_STORE_CTX_free(X509_STORE_CTX *); +int X509_STORE_CTX_init(X509_STORE_CTX *, X509_STORE *, X509 *, + Cryptography_STACK_OF_X509 *); +void X509_STORE_CTX_trusted_stack(X509_STORE_CTX *, + Cryptography_STACK_OF_X509 *); +void X509_STORE_CTX_set_cert(X509_STORE_CTX *, X509 *); +void X509_STORE_CTX_set_chain(X509_STORE_CTX *,Cryptography_STACK_OF_X509 *); +X509_VERIFY_PARAM *X509_STORE_CTX_get0_param(X509_STORE_CTX *); +void X509_STORE_CTX_set0_param(X509_STORE_CTX *, X509_VERIFY_PARAM *); +int X509_STORE_CTX_set_default(X509_STORE_CTX *, const char *); +void X509_STORE_CTX_set_verify_cb(X509_STORE_CTX *, + int (*)(int, X509_STORE_CTX *)); +Cryptography_STACK_OF_X509 *X509_STORE_CTX_get_chain(X509_STORE_CTX *); +Cryptography_STACK_OF_X509 *X509_STORE_CTX_get1_chain(X509_STORE_CTX *); +int X509_STORE_CTX_get_error(X509_STORE_CTX *); +void X509_STORE_CTX_set_error(X509_STORE_CTX *, int); +int X509_STORE_CTX_get_error_depth(X509_STORE_CTX *); +X509 *X509_STORE_CTX_get_current_cert(X509_STORE_CTX *); +int X509_STORE_CTX_set_ex_data(X509_STORE_CTX *, int, void *); +void *X509_STORE_CTX_get_ex_data(X509_STORE_CTX *, int); + +/* X509_VERIFY_PARAM */ +X509_VERIFY_PARAM *X509_VERIFY_PARAM_new(void); +int X509_VERIFY_PARAM_set_flags(X509_VERIFY_PARAM *, unsigned long); +int X509_VERIFY_PARAM_clear_flags(X509_VERIFY_PARAM *, unsigned long); +unsigned long X509_VERIFY_PARAM_get_flags(X509_VERIFY_PARAM *); +int X509_VERIFY_PARAM_set_purpose(X509_VERIFY_PARAM *, int); +int X509_VERIFY_PARAM_set_trust(X509_VERIFY_PARAM *, int); +void X509_VERIFY_PARAM_set_time(X509_VERIFY_PARAM *, time_t); +int X509_VERIFY_PARAM_add0_policy(X509_VERIFY_PARAM *, ASN1_OBJECT *); +int X509_VERIFY_PARAM_set1_policies(X509_VERIFY_PARAM *, + Cryptography_STACK_OF_ASN1_OBJECT *); +void X509_VERIFY_PARAM_set_depth(X509_VERIFY_PARAM *, int); +int X509_VERIFY_PARAM_get_depth(const X509_VERIFY_PARAM *); +""" + +MACROS = """ +/* X509_STORE_CTX */ +void X509_STORE_CTX_set0_crls(X509_STORE_CTX *, + Cryptography_STACK_OF_X509_CRL *); + +/* X509_VERIFY_PARAM */ +int X509_VERIFY_PARAM_set1_host(X509_VERIFY_PARAM *, const char *, + size_t); +void X509_VERIFY_PARAM_set_hostflags(X509_VERIFY_PARAM *, unsigned int); +int X509_VERIFY_PARAM_set1_email(X509_VERIFY_PARAM *, const char *, + size_t); +int X509_VERIFY_PARAM_set1_ip(X509_VERIFY_PARAM *, const unsigned char *, + size_t); +int X509_VERIFY_PARAM_set1_ip_asc(X509_VERIFY_PARAM *, const char *); +""" + +CUSTOMIZATIONS = """ +/* OpenSSL 1.0.2+ verification error codes */ +#if OPENSSL_VERSION_NUMBER >= 0x10002000L +static const long Cryptography_HAS_102_VERIFICATION_ERROR_CODES = 1; +#else +static const long Cryptography_HAS_102_VERIFICATION_ERROR_CODES = 0; +static const long X509_V_ERR_SUITE_B_INVALID_VERSION = 0; +static const long X509_V_ERR_SUITE_B_INVALID_ALGORITHM = 0; +static const long X509_V_ERR_SUITE_B_INVALID_CURVE = 0; +static const long X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM = 0; +static const long X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED = 0; +static const long X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256 = 0; +static const long X509_V_ERR_HOSTNAME_MISMATCH = 0; +static const long X509_V_ERR_EMAIL_MISMATCH = 0; +static const long X509_V_ERR_IP_ADDRESS_MISMATCH = 0; +#endif + +/* OpenSSL 1.0.2+ verification parameters */ +#if OPENSSL_VERSION_NUMBER >= 0x10002000L +static const long Cryptography_HAS_102_VERIFICATION_PARAMS = 1; +#else +static const long Cryptography_HAS_102_VERIFICATION_PARAMS = 0; +/* X509_V_FLAG_TRUSTED_FIRST is also new in 1.0.2+, but it is added separately + below because it shows up in some earlier 3rd party OpenSSL packages. */ +static const long X509_V_FLAG_SUITEB_128_LOS_ONLY = 0; +static const long X509_V_FLAG_SUITEB_192_LOS = 0; +static const long X509_V_FLAG_SUITEB_128_LOS = 0; + +int (*X509_VERIFY_PARAM_set1_host)(X509_VERIFY_PARAM *, const char *, + size_t) = NULL; +int (*X509_VERIFY_PARAM_set1_email)(X509_VERIFY_PARAM *, const char *, + size_t) = NULL; +int (*X509_VERIFY_PARAM_set1_ip)(X509_VERIFY_PARAM *, const unsigned char *, + size_t) = NULL; +int (*X509_VERIFY_PARAM_set1_ip_asc)(X509_VERIFY_PARAM *, const char *) = NULL; +void (*X509_VERIFY_PARAM_set_hostflags)(X509_VERIFY_PARAM *, + unsigned int) = NULL; +#endif + +/* OpenSSL 1.0.2+ or Solaris's backport */ +#ifdef X509_V_FLAG_PARTIAL_CHAIN +static const long Cryptography_HAS_X509_V_FLAG_PARTIAL_CHAIN = 1; +#else +static const long Cryptography_HAS_X509_V_FLAG_PARTIAL_CHAIN = 0; +static const long X509_V_FLAG_PARTIAL_CHAIN = 0; +#endif + +/* OpenSSL 1.0.2+, *or* Fedora 20's flavor of OpenSSL 1.0.1e... */ +#ifdef X509_V_FLAG_TRUSTED_FIRST +static const long Cryptography_HAS_X509_V_FLAG_TRUSTED_FIRST = 1; +#else +static const long Cryptography_HAS_X509_V_FLAG_TRUSTED_FIRST = 0; +static const long X509_V_FLAG_TRUSTED_FIRST = 0; +#endif + +/* OpenSSL 1.0.0+ verification error codes */ +#if OPENSSL_VERSION_NUMBER >= 0x10000000L +static const long Cryptography_HAS_100_VERIFICATION_ERROR_CODES = 1; +#else +static const long Cryptography_HAS_100_VERIFICATION_ERROR_CODES = 0; +static const long X509_V_ERR_DIFFERENT_CRL_SCOPE = 0; +static const long X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE = 0; +static const long X509_V_ERR_PERMITTED_VIOLATION = 0; +static const long X509_V_ERR_EXCLUDED_VIOLATION = 0; +static const long X509_V_ERR_SUBTREE_MINMAX = 0; +static const long X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE = 0; +static const long X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX = 0; +static const long X509_V_ERR_UNSUPPORTED_NAME_SYNTAX = 0; +static const long X509_V_ERR_CRL_PATH_VALIDATION_ERROR = 0; +#endif + +/* OpenSSL 1.0.0+ verification parameters */ +#if OPENSSL_VERSION_NUMBER >= 0x10000000L +static const long Cryptography_HAS_100_VERIFICATION_PARAMS = 1; +#else +static const long Cryptography_HAS_100_VERIFICATION_PARAMS = 0; +static const long X509_V_FLAG_EXTENDED_CRL_SUPPORT = 0; +static const long X509_V_FLAG_USE_DELTAS = 0; +#endif + +/* OpenSSL 0.9.8recent+ */ +#ifdef X509_V_FLAG_CHECK_SS_SIGNATURE +static const long Cryptography_HAS_X509_V_FLAG_CHECK_SS_SIGNATURE = 1; +#else +static const long Cryptography_HAS_X509_V_FLAG_CHECK_SS_SIGNATURE = 0; +static const long X509_V_FLAG_CHECK_SS_SIGNATURE = 0; +#endif +""" + +CONDITIONAL_NAMES = { + "Cryptography_HAS_102_VERIFICATION_ERROR_CODES": [ + 'X509_V_ERR_SUITE_B_INVALID_VERSION', + 'X509_V_ERR_SUITE_B_INVALID_ALGORITHM', + 'X509_V_ERR_SUITE_B_INVALID_CURVE', + 'X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM', + 'X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED', + 'X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256', + 'X509_V_ERR_HOSTNAME_MISMATCH', + 'X509_V_ERR_EMAIL_MISMATCH', + 'X509_V_ERR_IP_ADDRESS_MISMATCH' + ], + "Cryptography_HAS_102_VERIFICATION_PARAMS": [ + "X509_V_FLAG_SUITEB_128_LOS_ONLY", + "X509_V_FLAG_SUITEB_192_LOS", + "X509_V_FLAG_SUITEB_128_LOS", + "X509_VERIFY_PARAM_set1_host", + "X509_VERIFY_PARAM_set1_email", + "X509_VERIFY_PARAM_set1_ip", + "X509_VERIFY_PARAM_set1_ip_asc", + "X509_VERIFY_PARAM_set_hostflags", + ], + "Cryptography_HAS_X509_V_FLAG_TRUSTED_FIRST": [ + "X509_V_FLAG_TRUSTED_FIRST", + ], + "Cryptography_HAS_X509_V_FLAG_PARTIAL_CHAIN": [ + "X509_V_FLAG_PARTIAL_CHAIN", + ], + "Cryptography_HAS_100_VERIFICATION_ERROR_CODES": [ + 'X509_V_ERR_DIFFERENT_CRL_SCOPE', + 'X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE', + 'X509_V_ERR_UNNESTED_RESOURCE', + 'X509_V_ERR_PERMITTED_VIOLATION', + 'X509_V_ERR_EXCLUDED_VIOLATION', + 'X509_V_ERR_SUBTREE_MINMAX', + 'X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE', + 'X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX', + 'X509_V_ERR_UNSUPPORTED_NAME_SYNTAX', + 'X509_V_ERR_CRL_PATH_VALIDATION_ERROR', + ], + "Cryptography_HAS_100_VERIFICATION_PARAMS": [ + "Cryptography_HAS_100_VERIFICATION_PARAMS", + "X509_V_FLAG_EXTENDED_CRL_SUPPORT", + "X509_V_FLAG_USE_DELTAS", + ], + "Cryptography_HAS_X509_V_FLAG_CHECK_SS_SIGNATURE": [ + "X509_V_FLAG_CHECK_SS_SIGNATURE", + ] +} diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/x509v3.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/x509v3.py index 02ec250..cf4be1f 100644 --- a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/x509v3.py +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/x509v3.py @@ -82,6 +82,8 @@ FUNCTIONS = """ void X509V3_set_ctx(X509V3_CTX *, X509 *, X509 *, X509_REQ *, X509_CRL *, int); X509_EXTENSION *X509V3_EXT_nconf(CONF *, X509V3_CTX *, char *, char *); int GENERAL_NAME_print(BIO *, GENERAL_NAME *); +void GENERAL_NAMES_free(GENERAL_NAMES *); +void *X509V3_EXT_d2i(X509_EXTENSION *); """ MACROS = """ diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/asymmetric/dsa.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/asymmetric/dsa.py index aa3cdc9..04b2272 100644 --- a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/asymmetric/dsa.py +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/asymmetric/dsa.py @@ -13,6 +13,8 @@ from __future__ import absolute_import, division, print_function +import warnings + import six from cryptography import utils @@ -21,31 +23,54 @@ from cryptography.hazmat.backends.interfaces import DSABackend from cryptography.hazmat.primitives import interfaces -def _check_dsa_parameters(modulus, subgroup_order, generator): - if ( - not isinstance(modulus, six.integer_types) or - not isinstance(subgroup_order, six.integer_types) or - not isinstance(generator, six.integer_types) - ): - raise TypeError("DSA parameters must be integers") +def generate_parameters(key_size, backend): + return backend.generate_dsa_parameters(key_size) - if (utils.bit_length(modulus), - utils.bit_length(subgroup_order)) not in ( + +def generate_private_key(key_size, backend): + return backend.generate_dsa_private_key_and_parameters(key_size) + + +def _check_dsa_parameters(parameters): + if (utils.bit_length(parameters.p), + utils.bit_length(parameters.q)) not in ( (1024, 160), (2048, 256), (3072, 256)): - raise ValueError("modulus and subgroup_order lengths must be " + raise ValueError("p and q lengths must be " "one of these pairs (1024, 160) or (2048, 256) " - "or (3072, 256)") + "or (3072, 256).") - if generator <= 1 or generator >= modulus: - raise ValueError("generator must be > 1 and < modulus") + if not (1 < parameters.g < parameters.p): + raise ValueError("g, p don't satisfy 1 < g < p.") + + +def _check_dsa_private_numbers(numbers): + parameters = numbers.public_numbers.parameter_numbers + _check_dsa_parameters(parameters) + if numbers.x <= 0 or numbers.x >= parameters.q: + raise ValueError("x must be > 0 and < q.") + + if numbers.public_numbers.y != pow(parameters.g, numbers.x, parameters.p): + raise ValueError("y must be equal to (g ** x % p).") @utils.register_interface(interfaces.DSAParameters) class DSAParameters(object): def __init__(self, modulus, subgroup_order, generator): - _check_dsa_parameters(modulus, subgroup_order, generator) + warnings.warn( + "The DSAParameters class is deprecated and will be removed in a " + "future version.", + utils.DeprecatedIn05, + stacklevel=2 + ) + _check_dsa_parameters( + DSAParameterNumbers( + p=modulus, + q=subgroup_order, + g=generator + ) + ) self._modulus = modulus self._subgroup_order = subgroup_order @@ -53,13 +78,24 @@ class DSAParameters(object): @classmethod def generate(cls, key_size, backend): + warnings.warn( + "generate is deprecated and will be removed in a future version.", + utils.DeprecatedIn05, + stacklevel=2 + ) if not isinstance(backend, DSABackend): raise UnsupportedAlgorithm( - "Backend object does not implement DSABackend", + "Backend object does not implement DSABackend.", _Reasons.BACKEND_MISSING_INTERFACE ) - return backend.generate_dsa_parameters(key_size) + parameters = backend.generate_dsa_parameters(key_size) + numbers = parameters.parameter_numbers() + return cls( + modulus=numbers.p, + subgroup_order=numbers.q, + generator=numbers.g + ) @property def modulus(self): @@ -89,18 +125,31 @@ class DSAParameters(object): @utils.register_interface(interfaces.DSAPrivateKey) class DSAPrivateKey(object): def __init__(self, modulus, subgroup_order, generator, x, y): - _check_dsa_parameters(modulus, subgroup_order, generator) + warnings.warn( + "The DSAPrivateKey class is deprecated and will be removed in a " + "future version.", + utils.DeprecatedIn05, + stacklevel=2 + ) if ( not isinstance(x, six.integer_types) or not isinstance(y, six.integer_types) ): - raise TypeError("DSAPrivateKey arguments must be integers") + raise TypeError("DSAPrivateKey arguments must be integers.") - if x <= 0 or x >= subgroup_order: - raise ValueError("x must be > 0 and < subgroup_order") - - if y != pow(generator, x, modulus): - raise ValueError("y must be equal to (generator ** x % modulus)") + _check_dsa_private_numbers( + DSAPrivateNumbers( + public_numbers=DSAPublicNumbers( + parameter_numbers=DSAParameterNumbers( + p=modulus, + q=subgroup_order, + g=generator + ), + y=y + ), + x=x + ) + ) self._modulus = modulus self._subgroup_order = subgroup_order @@ -110,18 +159,31 @@ class DSAPrivateKey(object): @classmethod def generate(cls, parameters, backend): + warnings.warn( + "generate is deprecated and will be removed in a future version.", + utils.DeprecatedIn05, + stacklevel=2 + ) if not isinstance(backend, DSABackend): raise UnsupportedAlgorithm( - "Backend object does not implement DSABackend", + "Backend object does not implement DSABackend.", _Reasons.BACKEND_MISSING_INTERFACE ) - return backend.generate_dsa_private_key(parameters) + key = backend.generate_dsa_private_key(parameters) + private_numbers = key.private_numbers() + return cls( + modulus=private_numbers.public_numbers.parameter_numbers.p, + subgroup_order=private_numbers.public_numbers.parameter_numbers.q, + generator=private_numbers.public_numbers.parameter_numbers.g, + x=private_numbers.x, + y=private_numbers.public_numbers.y + ) def signer(self, algorithm, backend): if not isinstance(backend, DSABackend): raise UnsupportedAlgorithm( - "Backend object does not implement DSABackend", + "Backend object does not implement DSABackend.", _Reasons.BACKEND_MISSING_INTERFACE ) @@ -151,9 +213,21 @@ class DSAPrivateKey(object): @utils.register_interface(interfaces.DSAPublicKey) class DSAPublicKey(object): def __init__(self, modulus, subgroup_order, generator, y): - _check_dsa_parameters(modulus, subgroup_order, generator) + warnings.warn( + "The DSAPublicKey class is deprecated and will be removed in a " + "future version.", + utils.DeprecatedIn05, + stacklevel=2 + ) + _check_dsa_parameters( + DSAParameterNumbers( + p=modulus, + q=subgroup_order, + g=generator + ) + ) if not isinstance(y, six.integer_types): - raise TypeError("y must be an integer") + raise TypeError("y must be an integer.") self._modulus = modulus self._subgroup_order = subgroup_order @@ -163,7 +237,7 @@ class DSAPublicKey(object): def verifier(self, signature, algorithm, backend): if not isinstance(backend, DSABackend): raise UnsupportedAlgorithm( - "Backend object does not implement DSABackend", + "Backend object does not implement DSABackend.", _Reasons.BACKEND_MISSING_INTERFACE ) @@ -181,3 +255,83 @@ class DSAPublicKey(object): def parameters(self): return DSAParameters(self._modulus, self._subgroup_order, self._generator) + + +class DSAParameterNumbers(object): + def __init__(self, p, q, g): + if ( + not isinstance(p, six.integer_types) or + not isinstance(q, six.integer_types) or + not isinstance(g, six.integer_types) + ): + raise TypeError( + "DSAParameterNumbers p, q, and g arguments must be integers." + ) + + self._p = p + self._q = q + self._g = g + + @property + def p(self): + return self._p + + @property + def q(self): + return self._q + + @property + def g(self): + return self._g + + def parameters(self, backend): + return backend.load_dsa_parameter_numbers(self) + + +class DSAPublicNumbers(object): + def __init__(self, y, parameter_numbers): + if not isinstance(y, six.integer_types): + raise TypeError("DSAPublicNumbers y argument must be an integer.") + + if not isinstance(parameter_numbers, DSAParameterNumbers): + raise TypeError( + "parameter_numbers must be a DSAParameterNumbers instance." + ) + + self._y = y + self._parameter_numbers = parameter_numbers + + @property + def y(self): + return self._y + + @property + def parameter_numbers(self): + return self._parameter_numbers + + def public_key(self, backend): + return backend.load_dsa_public_numbers(self) + + +class DSAPrivateNumbers(object): + def __init__(self, x, public_numbers): + if not isinstance(x, six.integer_types): + raise TypeError("DSAPrivateNumbers x argument must be an integer.") + + if not isinstance(public_numbers, DSAPublicNumbers): + raise TypeError( + "public_numbers must be a DSAPublicNumbers instance." + ) + self._public_numbers = public_numbers + self._x = x + + @property + def x(self): + return self._x + + @property + def public_numbers(self): + return self._public_numbers + + def private_key(self, backend): + return backend.load_dsa_private_numbers(self) diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/asymmetric/ec.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/asymmetric/ec.py new file mode 100644 index 0000000..220a419 --- /dev/null +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/asymmetric/ec.py @@ -0,0 +1,255 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import absolute_import, division, print_function + +import six + +from cryptography import utils +from cryptography.hazmat.primitives import interfaces + + +@utils.register_interface(interfaces.EllipticCurve) +class SECT571R1(object): + @property + def name(self): + return "sect571r1" + + @property + def key_size(self): + return 571 + + +@utils.register_interface(interfaces.EllipticCurve) +class SECT409R1(object): + @property + def name(self): + return "sect409r1" + + @property + def key_size(self): + return 409 + + +@utils.register_interface(interfaces.EllipticCurve) +class SECT283R1(object): + @property + def name(self): + return "sect283r1" + + @property + def key_size(self): + return 283 + + +@utils.register_interface(interfaces.EllipticCurve) +class SECT233R1(object): + @property + def name(self): + return "sect233r1" + + @property + def key_size(self): + return 233 + + +@utils.register_interface(interfaces.EllipticCurve) +class SECT163R2(object): + @property + def name(self): + return "sect163r2" + + @property + def key_size(self): + return 163 + + +@utils.register_interface(interfaces.EllipticCurve) +class SECT571K1(object): + @property + def name(self): + return "sect571k1" + + @property + def key_size(self): + return 571 + + +@utils.register_interface(interfaces.EllipticCurve) +class SECT409K1(object): + @property + def name(self): + return "sect409k1" + + @property + def key_size(self): + return 409 + + +@utils.register_interface(interfaces.EllipticCurve) +class SECT283K1(object): + @property + def name(self): + return "sect283k1" + + @property + def key_size(self): + return 283 + + +@utils.register_interface(interfaces.EllipticCurve) +class SECT233K1(object): + @property + def name(self): + return "sect233k1" + + @property + def key_size(self): + return 233 + + +@utils.register_interface(interfaces.EllipticCurve) +class SECT163K1(object): + @property + def name(self): + return "sect163k1" + + @property + def key_size(self): + return 163 + + +@utils.register_interface(interfaces.EllipticCurve) +class SECP521R1(object): + @property + def name(self): + return "secp521r1" + + @property + def key_size(self): + return 521 + + +@utils.register_interface(interfaces.EllipticCurve) +class SECP384R1(object): + @property + def name(self): + return "secp384r1" + + @property + def key_size(self): + return 384 + + +@utils.register_interface(interfaces.EllipticCurve) +class SECP256R1(object): + @property + def name(self): + return "secp256r1" + + @property + def key_size(self): + return 256 + + +@utils.register_interface(interfaces.EllipticCurve) +class SECP224R1(object): + @property + def name(self): + return "secp224r1" + + @property + def key_size(self): + return 224 + + +@utils.register_interface(interfaces.EllipticCurve) +class SECP192R1(object): + @property + def name(self): + return "secp192r1" + + @property + def key_size(self): + return 192 + + +@utils.register_interface(interfaces.EllipticCurveSignatureAlgorithm) +class ECDSA(object): + def __init__(self, algorithm): + self._algorithm = algorithm + + @property + def algorithm(self): + return self._algorithm + + +def generate_private_key(curve, backend): + return backend.generate_elliptic_curve_private_key(curve) + + +class EllipticCurvePublicNumbers(object): + def __init__(self, x, y, curve): + if ( + not isinstance(x, six.integer_types) or + not isinstance(y, six.integer_types) + ): + raise TypeError("x and y must be integers.") + + if not isinstance(curve, interfaces.EllipticCurve): + raise TypeError("curve must provide the EllipticCurve interface.") + + self._y = y + self._x = x + self._curve = curve + + def public_key(self, backend): + return backend.elliptic_curve_public_key_from_numbers(self) + + @property + def curve(self): + return self._curve + + @property + def x(self): + return self._x + + @property + def y(self): + return self._y + + +class EllipticCurvePrivateNumbers(object): + def __init__(self, private_value, public_numbers): + if not isinstance(private_value, six.integer_types): + raise TypeError("private_value must be an integer.") + + if not isinstance(public_numbers, EllipticCurvePublicNumbers): + raise TypeError( + "public_numbers must be an EllipticCurvePublicNumbers " + "instance." + ) + + self._private_value = private_value + self._public_numbers = public_numbers + + def private_key(self, backend): + return backend.elliptic_curve_private_key_from_numbers(self) + + @property + def private_value(self): + return self._private_value + + @property + def public_numbers(self): + return self._public_numbers diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/asymmetric/padding.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/asymmetric/padding.py index dcc6fe0..d44bbda 100644 --- a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/asymmetric/padding.py +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/asymmetric/padding.py @@ -38,18 +38,19 @@ class PSS(object): warnings.warn( "salt_length is deprecated on MGF1 and should be added via the" " PSS constructor.", - utils.DeprecatedIn04 + utils.DeprecatedIn04, + stacklevel=2 ) else: if (not isinstance(salt_length, six.integer_types) and salt_length is not self.MAX_LENGTH): - raise TypeError("salt_length must be an integer") + raise TypeError("salt_length must be an integer.") if salt_length is not self.MAX_LENGTH and salt_length < 0: - raise ValueError("salt_length must be zero or greater") + raise ValueError("salt_length must be zero or greater.") if salt_length is None and self._mgf._salt_length is None: - raise ValueError("You must supply salt_length") + raise ValueError("You must supply salt_length.") self._salt_length = salt_length @@ -80,13 +81,14 @@ class MGF1(object): warnings.warn( "salt_length is deprecated on MGF1 and should be passed to " "the PSS constructor instead.", - utils.DeprecatedIn04 + utils.DeprecatedIn04, + stacklevel=2 ) if (not isinstance(salt_length, six.integer_types) and salt_length is not self.MAX_LENGTH): - raise TypeError("salt_length must be an integer") + raise TypeError("salt_length must be an integer.") if salt_length is not self.MAX_LENGTH and salt_length < 0: - raise ValueError("salt_length must be zero or greater") + raise ValueError("salt_length must be zero or greater.") self._salt_length = salt_length diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/asymmetric/rsa.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/asymmetric/rsa.py index 5d3bb36..15ec52a 100644 --- a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/asymmetric/rsa.py +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/asymmetric/rsa.py @@ -13,31 +13,102 @@ from __future__ import absolute_import, division, print_function +import warnings + import six from cryptography import utils from cryptography.exceptions import UnsupportedAlgorithm, _Reasons from cryptography.hazmat.backends.interfaces import RSABackend -from cryptography.hazmat.primitives import interfaces -@utils.register_interface(interfaces.RSAPublicKey) +def generate_private_key(public_exponent, key_size, backend): + if not isinstance(backend, RSABackend): + raise UnsupportedAlgorithm( + "Backend object does not implement RSABackend.", + _Reasons.BACKEND_MISSING_INTERFACE + ) + + _verify_rsa_parameters(public_exponent, key_size) + return backend.generate_rsa_private_key(public_exponent, key_size) + + +def _verify_rsa_parameters(public_exponent, key_size): + if public_exponent < 3: + raise ValueError("public_exponent must be >= 3.") + + if public_exponent & 1 == 0: + raise ValueError("public_exponent must be odd.") + + if key_size < 512: + raise ValueError("key_size must be at least 512-bits.") + + +def _check_private_key_components(p, q, private_exponent, dmp1, dmq1, iqmp, + public_exponent, modulus): + if modulus < 3: + raise ValueError("modulus must be >= 3.") + + if p >= modulus: + raise ValueError("p must be < modulus.") + + if q >= modulus: + raise ValueError("q must be < modulus.") + + if dmp1 >= modulus: + raise ValueError("dmp1 must be < modulus.") + + if dmq1 >= modulus: + raise ValueError("dmq1 must be < modulus.") + + if iqmp >= modulus: + raise ValueError("iqmp must be < modulus.") + + if private_exponent >= modulus: + raise ValueError("private_exponent must be < modulus.") + + if public_exponent < 3 or public_exponent >= modulus: + raise ValueError("public_exponent must be >= 3 and < modulus.") + + if public_exponent & 1 == 0: + raise ValueError("public_exponent must be odd.") + + if dmp1 & 1 == 0: + raise ValueError("dmp1 must be odd.") + + if dmq1 & 1 == 0: + raise ValueError("dmq1 must be odd.") + + if p * q != modulus: + raise ValueError("p*q must equal modulus.") + + +def _check_public_key_components(e, n): + if n < 3: + raise ValueError("n must be >= 3.") + + if e < 3 or e >= n: + raise ValueError("e must be >= 3 and < n.") + + if e & 1 == 0: + raise ValueError("e must be odd.") + + class RSAPublicKey(object): def __init__(self, public_exponent, modulus): + warnings.warn( + "The RSAPublicKey class is deprecated and will be removed in a " + "future version.", + utils.DeprecatedIn05, + stacklevel=2 + ) if ( not isinstance(public_exponent, six.integer_types) or not isinstance(modulus, six.integer_types) ): - raise TypeError("RSAPublicKey arguments must be integers") + raise TypeError("RSAPublicKey arguments must be integers.") - if modulus < 3: - raise ValueError("modulus must be >= 3") - - if public_exponent < 3 or public_exponent >= modulus: - raise ValueError("public_exponent must be >= 3 and < modulus") - - if public_exponent & 1 == 0: - raise ValueError("public_exponent must be odd") + _check_public_key_components(public_exponent, modulus) self._public_exponent = public_exponent self._modulus = modulus @@ -45,7 +116,7 @@ class RSAPublicKey(object): def verifier(self, signature, padding, algorithm, backend): if not isinstance(backend, RSABackend): raise UnsupportedAlgorithm( - "Backend object does not implement RSABackend", + "Backend object does not implement RSABackend.", _Reasons.BACKEND_MISSING_INTERFACE ) @@ -55,7 +126,7 @@ class RSAPublicKey(object): def encrypt(self, plaintext, padding, backend): if not isinstance(backend, RSABackend): raise UnsupportedAlgorithm( - "Backend object does not implement RSABackend", + "Backend object does not implement RSABackend.", _Reasons.BACKEND_MISSING_INTERFACE ) @@ -118,10 +189,15 @@ def rsa_crt_dmq1(private_exponent, q): return private_exponent % (q - 1) -@utils.register_interface(interfaces.RSAPrivateKey) class RSAPrivateKey(object): def __init__(self, p, q, private_exponent, dmp1, dmq1, iqmp, public_exponent, modulus): + warnings.warn( + "The RSAPrivateKey class is deprecated and will be removed in a " + "future version.", + utils.DeprecatedIn05, + stacklevel=2 + ) if ( not isinstance(p, six.integer_types) or not isinstance(q, six.integer_types) or @@ -132,43 +208,10 @@ class RSAPrivateKey(object): not isinstance(public_exponent, six.integer_types) or not isinstance(modulus, six.integer_types) ): - raise TypeError("RSAPrivateKey arguments must be integers") + raise TypeError("RSAPrivateKey arguments must be integers.") - if modulus < 3: - raise ValueError("modulus must be >= 3") - - if p >= modulus: - raise ValueError("p must be < modulus") - - if q >= modulus: - raise ValueError("q must be < modulus") - - if dmp1 >= modulus: - raise ValueError("dmp1 must be < modulus") - - if dmq1 >= modulus: - raise ValueError("dmq1 must be < modulus") - - if iqmp >= modulus: - raise ValueError("iqmp must be < modulus") - - if private_exponent >= modulus: - raise ValueError("private_exponent must be < modulus") - - if public_exponent < 3 or public_exponent >= modulus: - raise ValueError("public_exponent must be >= 3 and < modulus") - - if public_exponent & 1 == 0: - raise ValueError("public_exponent must be odd") - - if dmp1 & 1 == 0: - raise ValueError("dmp1 must be odd") - - if dmq1 & 1 == 0: - raise ValueError("dmq1 must be odd") - - if p * q != modulus: - raise ValueError("p*q must equal modulus") + _check_private_key_components(p, q, private_exponent, dmp1, dmq1, iqmp, + public_exponent, modulus) self._p = p self._q = q @@ -181,18 +224,35 @@ class RSAPrivateKey(object): @classmethod def generate(cls, public_exponent, key_size, backend): + warnings.warn( + "generate is deprecated and will be removed in a future version.", + utils.DeprecatedIn05, + stacklevel=2 + ) if not isinstance(backend, RSABackend): raise UnsupportedAlgorithm( - "Backend object does not implement RSABackend", + "Backend object does not implement RSABackend.", _Reasons.BACKEND_MISSING_INTERFACE ) - return backend.generate_rsa_private_key(public_exponent, key_size) + _verify_rsa_parameters(public_exponent, key_size) + key = backend.generate_rsa_private_key(public_exponent, key_size) + private_numbers = key.private_numbers() + return RSAPrivateKey( + p=private_numbers.p, + q=private_numbers.q, + dmp1=private_numbers.dmp1, + dmq1=private_numbers.dmq1, + iqmp=private_numbers.iqmp, + private_exponent=private_numbers.d, + public_exponent=private_numbers.public_numbers.e, + modulus=private_numbers.public_numbers.n + ) def signer(self, padding, algorithm, backend): if not isinstance(backend, RSABackend): raise UnsupportedAlgorithm( - "Backend object does not implement RSABackend", + "Backend object does not implement RSABackend.", _Reasons.BACKEND_MISSING_INTERFACE ) @@ -201,7 +261,7 @@ class RSAPrivateKey(object): def decrypt(self, ciphertext, padding, backend): if not isinstance(backend, RSABackend): raise UnsupportedAlgorithm( - "Backend object does not implement RSABackend", + "Backend object does not implement RSABackend.", _Reasons.BACKEND_MISSING_INTERFACE ) @@ -257,3 +317,88 @@ class RSAPrivateKey(object): @property def n(self): return self.modulus + + +class RSAPrivateNumbers(object): + def __init__(self, p, q, d, dmp1, dmq1, iqmp, + public_numbers): + if ( + not isinstance(p, six.integer_types) or + not isinstance(q, six.integer_types) or + not isinstance(d, six.integer_types) or + not isinstance(dmp1, six.integer_types) or + not isinstance(dmq1, six.integer_types) or + not isinstance(iqmp, six.integer_types) + ): + raise TypeError( + "RSAPrivateNumbers p, q, d, dmp1, dmq1, iqmp arguments must" + " all be an integers." + ) + + if not isinstance(public_numbers, RSAPublicNumbers): + raise TypeError( + "RSAPrivateNumbers public_numbers must be an RSAPublicNumbers" + " instance." + ) + + self._p = p + self._q = q + self._d = d + self._dmp1 = dmp1 + self._dmq1 = dmq1 + self._iqmp = iqmp + self._public_numbers = public_numbers + + @property + def p(self): + return self._p + + @property + def q(self): + return self._q + + @property + def d(self): + return self._d + + @property + def dmp1(self): + return self._dmp1 + + @property + def dmq1(self): + return self._dmq1 + + @property + def iqmp(self): + return self._iqmp + + @property + def public_numbers(self): + return self._public_numbers + + def private_key(self, backend): + return backend.load_rsa_private_numbers(self) + + +class RSAPublicNumbers(object): + def __init__(self, e, n): + if ( + not isinstance(e, six.integer_types) or + not isinstance(n, six.integer_types) + ): + raise TypeError("RSAPublicNumbers arguments must be integers.") + + self._e = e + self._n = n + + @property + def e(self): + return self._e + + @property + def n(self): + return self._n + + def public_key(self, backend): + return backend.load_rsa_public_numbers(self) diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/ciphers/algorithms.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/ciphers/algorithms.py index 52daf17..bd8437c 100644 --- a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/ciphers/algorithms.py +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/ciphers/algorithms.py @@ -20,7 +20,7 @@ from cryptography.hazmat.primitives import interfaces def _verify_key_size(algorithm, key): # Verify that the key size matches the expected key size if len(key) * 8 not in algorithm.key_sizes: - raise ValueError("Invalid key size ({0}) for {1}".format( + raise ValueError("Invalid key size ({0}) for {1}.".format( len(key) * 8, algorithm.name )) return key diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/ciphers/base.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/ciphers/base.py index 2274e94..e3fe5ad 100644 --- a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/ciphers/base.py +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/ciphers/base.py @@ -26,12 +26,14 @@ class Cipher(object): def __init__(self, algorithm, mode, backend): if not isinstance(backend, CipherBackend): raise UnsupportedAlgorithm( - "Backend object does not implement CipherBackend", + "Backend object does not implement CipherBackend.", _Reasons.BACKEND_MISSING_INTERFACE ) if not isinstance(algorithm, interfaces.CipherAlgorithm): - raise TypeError("Expected interface of interfaces.CipherAlgorithm") + raise TypeError( + "Expected interface of interfaces.CipherAlgorithm." + ) if mode is not None: mode.validate_for_algorithm(algorithm) @@ -44,7 +46,7 @@ class Cipher(object): if isinstance(self.mode, interfaces.ModeWithAuthenticationTag): if self.mode.tag is not None: raise ValueError( - "Authentication tag must be None when encrypting" + "Authentication tag must be None when encrypting." ) ctx = self._backend.create_symmetric_encryption_ctx( self.algorithm, self.mode @@ -55,7 +57,7 @@ class Cipher(object): if isinstance(self.mode, interfaces.ModeWithAuthenticationTag): if self.mode.tag is None: raise ValueError( - "Authentication tag must be provided when decrypting" + "Authentication tag must be provided when decrypting." ) ctx = self._backend.create_symmetric_decryption_ctx( self.algorithm, self.mode @@ -79,12 +81,12 @@ class _CipherContext(object): def update(self, data): if self._ctx is None: - raise AlreadyFinalized("Context was already finalized") + raise AlreadyFinalized("Context was already finalized.") return self._ctx.update(data) def finalize(self): if self._ctx is None: - raise AlreadyFinalized("Context was already finalized") + raise AlreadyFinalized("Context was already finalized.") data = self._ctx.finalize() self._ctx = None return data @@ -100,13 +102,13 @@ class _AEADCipherContext(object): def update(self, data): if self._ctx is None: - raise AlreadyFinalized("Context was already finalized") + raise AlreadyFinalized("Context was already finalized.") self._updated = True return self._ctx.update(data) def finalize(self): if self._ctx is None: - raise AlreadyFinalized("Context was already finalized") + raise AlreadyFinalized("Context was already finalized.") data = self._ctx.finalize() self._tag = self._ctx.tag self._ctx = None @@ -114,9 +116,9 @@ class _AEADCipherContext(object): def authenticate_additional_data(self, data): if self._ctx is None: - raise AlreadyFinalized("Context was already finalized") + raise AlreadyFinalized("Context was already finalized.") if self._updated: - raise AlreadyUpdated("Update has been called on this context") + raise AlreadyUpdated("Update has been called on this context.") self._ctx.authenticate_additional_data(data) @@ -126,5 +128,5 @@ class _AEADEncryptionContext(_AEADCipherContext): def tag(self): if self._ctx is not None: raise NotYetFinalized("You must finalize encryption before " - "getting the tag") + "getting the tag.") return self._tag diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/ciphers/modes.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/ciphers/modes.py index 739f23d..509b4de 100644 --- a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/ciphers/modes.py +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/ciphers/modes.py @@ -17,6 +17,13 @@ from cryptography import utils from cryptography.hazmat.primitives import interfaces +def _check_iv_length(mode, algorithm): + if len(mode.initialization_vector) * 8 != algorithm.block_size: + raise ValueError("Invalid IV size ({0}) for {1}.".format( + len(mode.initialization_vector), mode.name + )) + + @utils.register_interface(interfaces.Mode) @utils.register_interface(interfaces.ModeWithInitializationVector) class CBC(object): @@ -25,11 +32,7 @@ class CBC(object): def __init__(self, initialization_vector): self.initialization_vector = initialization_vector - def validate_for_algorithm(self, algorithm): - if len(self.initialization_vector) * 8 != algorithm.block_size: - raise ValueError("Invalid iv size ({0}) for {1}".format( - len(self.initialization_vector), self.name - )) + validate_for_algorithm = _check_iv_length @utils.register_interface(interfaces.Mode) @@ -48,11 +51,7 @@ class OFB(object): def __init__(self, initialization_vector): self.initialization_vector = initialization_vector - def validate_for_algorithm(self, algorithm): - if len(self.initialization_vector) * 8 != algorithm.block_size: - raise ValueError("Invalid iv size ({0}) for {1}".format( - len(self.initialization_vector), self.name - )) + validate_for_algorithm = _check_iv_length @utils.register_interface(interfaces.Mode) @@ -63,11 +62,18 @@ class CFB(object): def __init__(self, initialization_vector): self.initialization_vector = initialization_vector - def validate_for_algorithm(self, algorithm): - if len(self.initialization_vector) * 8 != algorithm.block_size: - raise ValueError("Invalid iv size ({0}) for {1}".format( - len(self.initialization_vector), self.name - )) + validate_for_algorithm = _check_iv_length + + +@utils.register_interface(interfaces.Mode) +@utils.register_interface(interfaces.ModeWithInitializationVector) +class CFB8(object): + name = "CFB8" + + def __init__(self, initialization_vector): + self.initialization_vector = initialization_vector + + validate_for_algorithm = _check_iv_length @utils.register_interface(interfaces.Mode) @@ -80,7 +86,7 @@ class CTR(object): def validate_for_algorithm(self, algorithm): if len(self.nonce) * 8 != algorithm.block_size: - raise ValueError("Invalid nonce size ({0}) for {1}".format( + raise ValueError("Invalid nonce size ({0}) for {1}.".format( len(self.nonce), self.name )) @@ -91,13 +97,16 @@ class CTR(object): class GCM(object): name = "GCM" - def __init__(self, initialization_vector, tag=None): + def __init__(self, initialization_vector, tag=None, min_tag_length=16): # len(initialization_vector) must in [1, 2 ** 64), but it's impossible # to actually construct a bytes object that large, so we don't check # for it - if tag is not None and len(tag) < 4: + if min_tag_length < 4: + raise ValueError("min_tag_length must be >= 4") + if tag is not None and len(tag) < min_tag_length: raise ValueError( - "Authentication tag must be 4 bytes or longer" + "Authentication tag must be {0} bytes or longer.".format( + min_tag_length) ) self.initialization_vector = initialization_vector diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/cmac.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/cmac.py index 7e7f65a..fa463ae 100644 --- a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/cmac.py +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/cmac.py @@ -13,8 +13,6 @@ from __future__ import absolute_import, division, print_function -import six - from cryptography import utils from cryptography.exceptions import ( AlreadyFinalized, InvalidSignature, UnsupportedAlgorithm, _Reasons @@ -28,13 +26,13 @@ class CMAC(object): def __init__(self, algorithm, backend, ctx=None): if not isinstance(backend, CMACBackend): raise UnsupportedAlgorithm( - "Backend object does not implement CMACBackend", + "Backend object does not implement CMACBackend.", _Reasons.BACKEND_MISSING_INTERFACE ) if not isinstance(algorithm, interfaces.BlockCipherAlgorithm): raise TypeError( - "Expected instance of interfaces.BlockCipherAlgorithm" + "Expected instance of interfaces.BlockCipherAlgorithm." ) self._algorithm = algorithm @@ -46,28 +44,28 @@ class CMAC(object): def update(self, data): if self._ctx is None: - raise AlreadyFinalized("Context was already finalized") - if isinstance(data, six.text_type): - raise TypeError("Unicode-objects must be encoded before hashing") + raise AlreadyFinalized("Context was already finalized.") + if not isinstance(data, bytes): + raise TypeError("data must be bytes.") self._ctx.update(data) def finalize(self): if self._ctx is None: - raise AlreadyFinalized("Context was already finalized") + raise AlreadyFinalized("Context was already finalized.") digest = self._ctx.finalize() self._ctx = None return digest def verify(self, signature): - if isinstance(signature, six.text_type): - raise TypeError("Unicode-objects must be encoded before verifying") + if not isinstance(signature, bytes): + raise TypeError("signature must be bytes.") digest = self.finalize() if not constant_time.bytes_eq(digest, signature): raise InvalidSignature("Signature did not match digest.") def copy(self): if self._ctx is None: - raise AlreadyFinalized("Context was already finalized") + raise AlreadyFinalized("Context was already finalized.") return CMAC( self._algorithm, backend=self._backend, diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/constant_time.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/constant_time.py index e0e9aa3..9789851 100644 --- a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/constant_time.py +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/constant_time.py @@ -13,12 +13,11 @@ from __future__ import absolute_import, division, print_function +import hmac import sys import cffi -import six - from cryptography.hazmat.bindings.utils import _create_modulename TYPES = """ @@ -55,9 +54,18 @@ _lib = _ffi.verify( ext_package="cryptography", ) +if hasattr(hmac, "compare_digest"): + def bytes_eq(a, b): + if not isinstance(a, bytes) or not isinstance(b, bytes): + raise TypeError("a and b must be bytes.") -def bytes_eq(a, b): - if isinstance(a, six.text_type) or isinstance(b, six.text_type): - raise TypeError("Unicode-objects must be encoded before comparing") + return hmac.compare_digest(a, b) - return _lib.Cryptography_constant_time_bytes_eq(a, len(a), b, len(b)) == 1 +else: + def bytes_eq(a, b): + if not isinstance(a, bytes) or not isinstance(b, bytes): + raise TypeError("a and b must be bytes.") + + return _lib.Cryptography_constant_time_bytes_eq( + a, len(a), b, len(b) + ) == 1 diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/hashes.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/hashes.py index 35b677b..04f7620 100644 --- a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/hashes.py +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/hashes.py @@ -13,8 +13,6 @@ from __future__ import absolute_import, division, print_function -import six - from cryptography import utils from cryptography.exceptions import ( AlreadyFinalized, UnsupportedAlgorithm, _Reasons @@ -28,7 +26,7 @@ class Hash(object): def __init__(self, algorithm, backend, ctx=None): if not isinstance(backend, HashBackend): raise UnsupportedAlgorithm( - "Backend object does not implement HashBackend", + "Backend object does not implement HashBackend.", _Reasons.BACKEND_MISSING_INTERFACE ) @@ -45,21 +43,21 @@ class Hash(object): def update(self, data): if self._ctx is None: - raise AlreadyFinalized("Context was already finalized") - if isinstance(data, six.text_type): - raise TypeError("Unicode-objects must be encoded before hashing") + raise AlreadyFinalized("Context was already finalized.") + if not isinstance(data, bytes): + raise TypeError("data must be bytes.") self._ctx.update(data) def copy(self): if self._ctx is None: - raise AlreadyFinalized("Context was already finalized") + raise AlreadyFinalized("Context was already finalized.") return Hash( self.algorithm, backend=self._backend, ctx=self._ctx.copy() ) def finalize(self): if self._ctx is None: - raise AlreadyFinalized("Context was already finalized") + raise AlreadyFinalized("Context was already finalized.") digest = self._ctx.finalize() self._ctx = None return digest diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/hmac.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/hmac.py index afbb2f7..026ad3b 100644 --- a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/hmac.py +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/hmac.py @@ -13,8 +13,6 @@ from __future__ import absolute_import, division, print_function -import six - from cryptography import utils from cryptography.exceptions import ( AlreadyFinalized, InvalidSignature, UnsupportedAlgorithm, _Reasons @@ -28,7 +26,7 @@ class HMAC(object): def __init__(self, key, algorithm, backend, ctx=None): if not isinstance(backend, HMACBackend): raise UnsupportedAlgorithm( - "Backend object does not implement HMACBackend", + "Backend object does not implement HMACBackend.", _Reasons.BACKEND_MISSING_INTERFACE ) @@ -45,14 +43,14 @@ class HMAC(object): def update(self, msg): if self._ctx is None: - raise AlreadyFinalized("Context was already finalized") - if isinstance(msg, six.text_type): - raise TypeError("Unicode-objects must be encoded before hashing") + raise AlreadyFinalized("Context was already finalized.") + if not isinstance(msg, bytes): + raise TypeError("msg must be bytes.") self._ctx.update(msg) def copy(self): if self._ctx is None: - raise AlreadyFinalized("Context was already finalized") + raise AlreadyFinalized("Context was already finalized.") return HMAC( self._key, self.algorithm, @@ -62,14 +60,14 @@ class HMAC(object): def finalize(self): if self._ctx is None: - raise AlreadyFinalized("Context was already finalized") + raise AlreadyFinalized("Context was already finalized.") digest = self._ctx.finalize() self._ctx = None return digest def verify(self, signature): - if isinstance(signature, six.text_type): - raise TypeError("Unicode-objects must be encoded before verifying") + if not isinstance(signature, bytes): + raise TypeError("signature must be bytes.") digest = self.finalize() if not constant_time.bytes_eq(digest, signature): raise InvalidSignature("Signature did not match digest.") diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/interfaces.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/interfaces.py index 810a67a..d60f9e0 100644 --- a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/interfaces.py +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/interfaces.py @@ -186,27 +186,15 @@ class HashContext(object): @six.add_metaclass(abc.ABCMeta) class RSAPrivateKey(object): @abc.abstractmethod - def signer(self, padding, algorithm, backend): + def signer(self, padding, algorithm): """ Returns an AsymmetricSignatureContext used for signing data. """ - @abc.abstractproperty - def modulus(self): + @abc.abstractmethod + def decrypt(self, ciphertext, padding): """ - The public modulus of the RSA key. - """ - - @abc.abstractproperty - def public_exponent(self): - """ - The public exponent of the RSA key. - """ - - @abc.abstractproperty - def private_exponent(self): - """ - The private exponent of the RSA key. + Decrypts the provided ciphertext. """ @abc.abstractproperty @@ -221,77 +209,28 @@ class RSAPrivateKey(object): The RSAPublicKey associated with this private key. """ - @abc.abstractproperty - def n(self): - """ - The public modulus of the RSA key. Alias for modulus. - """ - @abc.abstractproperty - def p(self): +@six.add_metaclass(abc.ABCMeta) +class RSAPrivateKeyWithNumbers(RSAPrivateKey): + @abc.abstractmethod + def private_numbers(self): """ - One of the two primes used to generate d. - """ - - @abc.abstractproperty - def q(self): - """ - One of the two primes used to generate d. - """ - - @abc.abstractproperty - def d(self): - """ - The private exponent. This can be calculated using p and q. Alias for - private_exponent. - """ - - @abc.abstractproperty - def dmp1(self): - """ - A Chinese remainder theorem coefficient used to speed up RSA - calculations. Calculated as: d mod (p-1) - """ - - @abc.abstractproperty - def dmq1(self): - """ - A Chinese remainder theorem coefficient used to speed up RSA - calculations. Calculated as: d mod (q-1) - """ - - @abc.abstractproperty - def iqmp(self): - """ - A Chinese remainder theorem coefficient used to speed up RSA - calculations. The modular inverse of q modulo p - """ - - @abc.abstractproperty - def e(self): - """ - The public exponent of the RSA key. Alias for public_exponent. + Returns an RSAPrivateNumbers. """ @six.add_metaclass(abc.ABCMeta) class RSAPublicKey(object): @abc.abstractmethod - def verifier(self, signature, padding, algorithm, backend): + def verifier(self, signature, padding, algorithm): """ Returns an AsymmetricVerificationContext used for verifying signatures. """ - @abc.abstractproperty - def modulus(self): + @abc.abstractmethod + def encrypt(self, plaintext, padding): """ - The public modulus of the RSA key. - """ - - @abc.abstractproperty - def public_exponent(self): - """ - The public exponent of the RSA key. + Encrypts the given plaintext. """ @abc.abstractproperty @@ -300,63 +239,31 @@ class RSAPublicKey(object): The bit length of the public modulus. """ - @abc.abstractproperty - def n(self): - """ - The public modulus of the RSA key. Alias for modulus. - """ - @abc.abstractproperty - def e(self): +@six.add_metaclass(abc.ABCMeta) +class RSAPublicKeyWithNumbers(RSAPublicKey): + @abc.abstractmethod + def public_numbers(self): """ - The public exponent of the RSA key. Alias for public_exponent. + Returns an RSAPublicNumbers """ @six.add_metaclass(abc.ABCMeta) class DSAParameters(object): - @abc.abstractproperty - def modulus(self): + @abc.abstractmethod + def generate_private_key(self): """ - The prime modulus that's used in generating the DSA keypair and used - in the DSA signing and verification processes. + Generates and returns a DSAPrivateKey. """ - @abc.abstractproperty - def subgroup_order(self): - """ - The subgroup order that's used in generating the DSA keypair - by the generator and used in the DSA signing and verification - processes. - """ - @abc.abstractproperty - def generator(self): +@six.add_metaclass(abc.ABCMeta) +class DSAParametersWithNumbers(DSAParameters): + @abc.abstractmethod + def parameter_numbers(self): """ - The generator that is used in generating the DSA keypair and used - in the DSA signing and verification processes. - """ - - @abc.abstractproperty - def p(self): - """ - The prime modulus that's used in generating the DSA keypair and used - in the DSA signing and verification processes. Alias for modulus. - """ - - @abc.abstractproperty - def q(self): - """ - The subgroup order that's used in generating the DSA keypair - by the generator and used in the DSA signing and verification - processes. Alias for subgroup_order. - """ - - @abc.abstractproperty - def g(self): - """ - The generator that is used in generating the DSA keypair and used - in the DSA signing and verification processes. Alias for generator. + Returns a DSAParameterNumbers. """ @@ -374,18 +281,6 @@ class DSAPrivateKey(object): The DSAPublicKey associated with this private key. """ - @abc.abstractproperty - def x(self): - """ - The private key "x" in the DSA structure. - """ - - @abc.abstractproperty - def y(self): - """ - The public key. - """ - @abc.abstractmethod def parameters(self): """ @@ -393,6 +288,15 @@ class DSAPrivateKey(object): """ +@six.add_metaclass(abc.ABCMeta) +class DSAPrivateKeyWithNumbers(DSAPrivateKey): + @abc.abstractmethod + def private_numbers(self): + """ + Returns a DSAPrivateNumbers. + """ + + @six.add_metaclass(abc.ABCMeta) class DSAPublicKey(object): @abc.abstractproperty @@ -401,12 +305,6 @@ class DSAPublicKey(object): The bit length of the prime modulus. """ - @abc.abstractproperty - def y(self): - """ - The public key. - """ - @abc.abstractmethod def parameters(self): """ @@ -414,6 +312,15 @@ class DSAPublicKey(object): """ +@six.add_metaclass(abc.ABCMeta) +class DSAPublicKeyWithNumbers(DSAPublicKey): + @abc.abstractmethod + def public_numbers(self): + """ + Returns a DSAPublicNumbers. + """ + + @six.add_metaclass(abc.ABCMeta) class AsymmetricSignatureContext(object): @abc.abstractmethod @@ -489,3 +396,63 @@ class CMACContext(object): """ Return a CMACContext that is a copy of the current context. """ + + +@six.add_metaclass(abc.ABCMeta) +class EllipticCurve(object): + @abc.abstractproperty + def name(self): + """ + The name of the curve. e.g. secp256r1. + """ + + @abc.abstractproperty + def key_size(self): + """ + The bit length of the base point of the curve. + """ + + +@six.add_metaclass(abc.ABCMeta) +class EllipticCurveSignatureAlgorithm(object): + @abc.abstractproperty + def algorithm(self): + """ + The digest algorithm used with this signature. + """ + + +@six.add_metaclass(abc.ABCMeta) +class EllipticCurvePrivateKey(object): + @abc.abstractmethod + def signer(self, signature_algorithm): + """ + Returns an AsymmetricSignatureContext used for signing data. + """ + + @abc.abstractmethod + def public_key(self): + """ + The EllipticCurvePublicKey for this private key. + """ + + @abc.abstractproperty + def curve(self): + """ + The EllipticCurve that this key is on. + """ + + +@six.add_metaclass(abc.ABCMeta) +class EllipticCurvePublicKey(object): + @abc.abstractmethod + def verifier(self, signature, signature_algorithm): + """ + Returns an AsymmetricVerificationContext used for signing data. + """ + + @abc.abstractproperty + def curve(self): + """ + The EllipticCurve that this key is on. + """ diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/kdf/hkdf.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/kdf/hkdf.py index 03500aa..04d02b2 100644 --- a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/kdf/hkdf.py +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/kdf/hkdf.py @@ -28,12 +28,53 @@ class HKDF(object): def __init__(self, algorithm, length, salt, info, backend): if not isinstance(backend, HMACBackend): raise UnsupportedAlgorithm( - "Backend object does not implement HMACBackend", + "Backend object does not implement HMACBackend.", _Reasons.BACKEND_MISSING_INTERFACE ) self._algorithm = algorithm + if not isinstance(salt, bytes) and salt is not None: + raise TypeError("salt must be bytes.") + + if salt is None: + salt = b"\x00" * (self._algorithm.digest_size // 8) + + 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): + if not isinstance(key_material, bytes): + raise TypeError("key_material must be bytes.") + + 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(interfaces.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 // 8) if length > max_length: @@ -44,32 +85,16 @@ class HKDF(object): self._length = length - if isinstance(salt, six.text_type): - raise TypeError( - "Unicode-objects must be encoded before using them as a salt.") - - if salt is None: - salt = b"\x00" * (self._algorithm.digest_size // 8) - - self._salt = salt - - if isinstance(info, six.text_type): - raise TypeError( - "Unicode-objects must be encoded before using them as info.") + if not isinstance(info, bytes) and info is not None: + raise TypeError("info must be bytes.") if info is None: info = b"" self._info = info - self._backend = backend self._used = False - def _extract(self, key_material): - h = hmac.HMAC(self._salt, self._algorithm, backend=self._backend) - h.update(key_material) - return h.finalize() - def _expand(self, key_material): output = [b""] counter = 1 @@ -85,17 +110,14 @@ class HKDF(object): return b"".join(output)[:self._length] def derive(self, key_material): - if isinstance(key_material, six.text_type): - raise TypeError( - "Unicode-objects must be encoded before using them as key " - "material." - ) + if not isinstance(key_material, bytes): + raise TypeError("key_material must be bytes.") if self._used: raise AlreadyFinalized self._used = True - return self._expand(self._extract(key_material)) + return self._expand(key_material) def verify(self, key_material, expected_key): if not constant_time.bytes_eq(self.derive(key_material), expected_key): diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/kdf/pbkdf2.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/kdf/pbkdf2.py index bec35bb..97b6408 100644 --- a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/kdf/pbkdf2.py +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/kdf/pbkdf2.py @@ -13,8 +13,6 @@ from __future__ import absolute_import, division, print_function -import six - from cryptography import utils from cryptography.exceptions import ( AlreadyFinalized, InvalidKey, UnsupportedAlgorithm, _Reasons @@ -28,38 +26,32 @@ class PBKDF2HMAC(object): def __init__(self, algorithm, length, salt, iterations, backend): if not isinstance(backend, PBKDF2HMACBackend): raise UnsupportedAlgorithm( - "Backend object does not implement PBKDF2HMACBackend", + "Backend object does not implement PBKDF2HMACBackend.", _Reasons.BACKEND_MISSING_INTERFACE ) if not backend.pbkdf2_hmac_supported(algorithm): raise UnsupportedAlgorithm( - "{0} is not supported for PBKDF2 by this backend".format( + "{0} is not supported for PBKDF2 by this backend.".format( algorithm.name), _Reasons.UNSUPPORTED_HASH ) self._used = False self._algorithm = algorithm self._length = length - if isinstance(salt, six.text_type): - raise TypeError( - "Unicode-objects must be encoded before using them as key " - "material." - ) + if not isinstance(salt, bytes): + raise TypeError("salt must be bytes.") self._salt = salt self._iterations = iterations self._backend = backend def derive(self, key_material): if self._used: - raise AlreadyFinalized("PBKDF2 instances can only be used once") + raise AlreadyFinalized("PBKDF2 instances can only be used once.") self._used = True - if isinstance(key_material, six.text_type): - raise TypeError( - "Unicode-objects must be encoded before using them as key " - "material." - ) + if not isinstance(key_material, bytes): + raise TypeError("key_material must be bytes.") return self._backend.derive_pbkdf2_hmac( self._algorithm, self._length, diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/padding.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/padding.py index c1a763b..74f1ef2 100644 --- a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/padding.py +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/padding.py @@ -79,10 +79,10 @@ _lib = _ffi.verify( class PKCS7(object): def __init__(self, block_size): if not (0 <= block_size < 256): - raise ValueError("block_size must be in range(0, 256)") + raise ValueError("block_size must be in range(0, 256).") if block_size % 8 != 0: - raise ValueError("block_size must be a multiple of 8") + raise ValueError("block_size must be a multiple of 8.") self.block_size = block_size @@ -102,10 +102,10 @@ class _PKCS7PaddingContext(object): def update(self, data): if self._buffer is None: - raise AlreadyFinalized("Context was already finalized") + raise AlreadyFinalized("Context was already finalized.") - if isinstance(data, six.text_type): - raise TypeError("Unicode-objects must be encoded before padding") + if not isinstance(data, bytes): + raise TypeError("data must be bytes.") self._buffer += data @@ -118,7 +118,7 @@ class _PKCS7PaddingContext(object): def finalize(self): if self._buffer is None: - raise AlreadyFinalized("Context was already finalized") + raise AlreadyFinalized("Context was already finalized.") pad_size = self.block_size // 8 - len(self._buffer) result = self._buffer + six.int2byte(pad_size) * pad_size @@ -135,10 +135,10 @@ class _PKCS7UnpaddingContext(object): def update(self, data): if self._buffer is None: - raise AlreadyFinalized("Context was already finalized") + raise AlreadyFinalized("Context was already finalized.") - if isinstance(data, six.text_type): - raise TypeError("Unicode-objects must be encoded before unpadding") + if not isinstance(data, bytes): + raise TypeError("data must be bytes.") self._buffer += data @@ -154,17 +154,17 @@ class _PKCS7UnpaddingContext(object): def finalize(self): if self._buffer is None: - raise AlreadyFinalized("Context was already finalized") + raise AlreadyFinalized("Context was already finalized.") if len(self._buffer) != self.block_size // 8: - raise ValueError("Invalid padding bytes") + raise ValueError("Invalid padding bytes.") valid = _lib.Cryptography_check_pkcs7_padding( self._buffer, self.block_size // 8 ) if not valid: - raise ValueError("Invalid padding bytes") + raise ValueError("Invalid padding bytes.") pad_size = six.indexbytes(self._buffer, -1) res = self._buffer[:-pad_size] diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/serialization.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/serialization.py new file mode 100644 index 0000000..ed73c4c --- /dev/null +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/serialization.py @@ -0,0 +1,26 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import absolute_import, division, print_function + + +def load_pem_traditional_openssl_private_key(data, password, backend): + return backend.load_traditional_openssl_pem_private_key( + data, password + ) + + +def load_pem_pkcs8_private_key(data, password, backend): + return backend.load_pkcs8_pem_private_key( + data, password + ) diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/twofactor/hotp.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/twofactor/hotp.py index 41c467c..d0b476a 100644 --- a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/twofactor/hotp.py +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/twofactor/hotp.py @@ -29,7 +29,7 @@ class HOTP(object): def __init__(self, key, length, algorithm, backend): if not isinstance(backend, HMACBackend): raise UnsupportedAlgorithm( - "Backend object does not implement HMACBackend", + "Backend object does not implement HMACBackend.", _Reasons.BACKEND_MISSING_INTERFACE ) @@ -37,13 +37,13 @@ class HOTP(object): raise ValueError("Key length has to be at least 128 bits.") if not isinstance(length, six.integer_types): - raise TypeError("Length parameter must be an integer type") + raise TypeError("Length parameter must be an integer type.") if length < 6 or length > 8: raise ValueError("Length of HOTP has to be between 6 to 8.") if not isinstance(algorithm, (SHA1, SHA256, SHA512)): - raise TypeError("Algorithm must be SHA1, SHA256 or SHA512") + raise TypeError("Algorithm must be SHA1, SHA256 or SHA512.") self._key = key self._length = length @@ -57,15 +57,13 @@ class HOTP(object): def verify(self, hotp, counter): if not constant_time.bytes_eq(self.generate(counter), hotp): - raise InvalidToken("Supplied HOTP value does not match") + raise InvalidToken("Supplied HOTP value does not match.") def _dynamic_truncate(self, counter): ctx = hmac.HMAC(self._key, self._algorithm, self._backend) ctx.update(struct.pack(">Q", counter)) hmac_value = ctx.finalize() - offset_bits = six.indexbytes(hmac_value, len(hmac_value) - 1) & 0b1111 - - offset = int(offset_bits) + offset = six.indexbytes(hmac_value, len(hmac_value) - 1) & 0b1111 p = hmac_value[offset:offset + 4] return struct.unpack(">I", p)[0] & 0x7fffffff diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/twofactor/totp.py b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/twofactor/totp.py index e55ba00..854c516 100644 --- a/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/twofactor/totp.py +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/hazmat/primitives/twofactor/totp.py @@ -25,7 +25,7 @@ class TOTP(object): def __init__(self, key, length, algorithm, time_step, backend): if not isinstance(backend, HMACBackend): raise UnsupportedAlgorithm( - "Backend object does not implement HMACBackend", + "Backend object does not implement HMACBackend.", _Reasons.BACKEND_MISSING_INTERFACE ) @@ -38,4 +38,4 @@ class TOTP(object): def verify(self, totp, time): if not constant_time.bytes_eq(self.generate(time), totp): - raise InvalidToken("Supplied TOTP value does not match") + raise InvalidToken("Supplied TOTP value does not match.") diff --git a/Linux_i686/lib/python2.7/site-packages/cryptography/utils.py b/Linux_i686/lib/python2.7/site-packages/cryptography/utils.py index 5566d12..1db1615 100644 --- a/Linux_i686/lib/python2.7/site-packages/cryptography/utils.py +++ b/Linux_i686/lib/python2.7/site-packages/cryptography/utils.py @@ -16,7 +16,8 @@ from __future__ import absolute_import, division, print_function import sys -DeprecatedIn04 = PendingDeprecationWarning +DeprecatedIn04 = DeprecationWarning +DeprecatedIn05 = PendingDeprecationWarning def register_interface(iface): diff --git a/Linux_i686/lib/python2.7/site-packages/flask/__init__.py b/Linux_i686/lib/python2.7/site-packages/flask/__init__.py deleted file mode 100644 index 3fd8908..0000000 --- a/Linux_i686/lib/python2.7/site-packages/flask/__init__.py +++ /dev/null @@ -1,50 +0,0 @@ -# -*- coding: utf-8 -*- -""" - flask - ~~~~~ - - A microframework based on Werkzeug. It's extensively documented - and follows best practice patterns. - - :copyright: (c) 2011 by Armin Ronacher. - :license: BSD, see LICENSE for more details. -""" - -__version__ = '0.10.1' - -# utilities we import from Werkzeug and Jinja2 that are unused -# in the module but are exported as public interface. -from werkzeug.exceptions import abort -from werkzeug.utils import redirect -from jinja2 import Markup, escape - -from .app import Flask, Request, Response -from .config import Config -from .helpers import url_for, flash, send_file, send_from_directory, \ - get_flashed_messages, get_template_attribute, make_response, safe_join, \ - stream_with_context -from .globals import current_app, g, request, session, _request_ctx_stack, \ - _app_ctx_stack -from .ctx import has_request_context, has_app_context, \ - after_this_request, copy_current_request_context -from .module import Module -from .blueprints import Blueprint -from .templating import render_template, render_template_string - -# the signals -from .signals import signals_available, template_rendered, request_started, \ - request_finished, got_request_exception, request_tearing_down, \ - appcontext_tearing_down, appcontext_pushed, \ - appcontext_popped, message_flashed - -# We're not exposing the actual json module but a convenient wrapper around -# it. -from . import json - -# This was the only thing that flask used to export at one point and it had -# a more generic name. -jsonify = json.jsonify - -# backwards compat, goes away in 1.0 -from .sessions import SecureCookieSession as Session -json_available = True diff --git a/Linux_i686/lib/python2.7/site-packages/flask/_compat.py b/Linux_i686/lib/python2.7/site-packages/flask/_compat.py deleted file mode 100644 index c342884..0000000 --- a/Linux_i686/lib/python2.7/site-packages/flask/_compat.py +++ /dev/null @@ -1,73 +0,0 @@ -# -*- coding: utf-8 -*- -""" - flask._compat - ~~~~~~~~~~~~~ - - Some py2/py3 compatibility support based on a stripped down - version of six so we don't have to depend on a specific version - of it. - - :copyright: (c) 2013 by Armin Ronacher. - :license: BSD, see LICENSE for more details. -""" -import sys - -PY2 = sys.version_info[0] == 2 -_identity = lambda x: x - - -if not PY2: - text_type = str - string_types = (str,) - integer_types = (int, ) - - iterkeys = lambda d: iter(d.keys()) - itervalues = lambda d: iter(d.values()) - iteritems = lambda d: iter(d.items()) - - from io import StringIO - - def reraise(tp, value, tb=None): - if value.__traceback__ is not tb: - raise value.with_traceback(tb) - raise value - - implements_to_string = _identity - -else: - text_type = unicode - string_types = (str, unicode) - integer_types = (int, long) - - iterkeys = lambda d: d.iterkeys() - itervalues = lambda d: d.itervalues() - iteritems = lambda d: d.iteritems() - - from cStringIO import StringIO - - exec('def reraise(tp, value, tb=None):\n raise tp, value, tb') - - def implements_to_string(cls): - cls.__unicode__ = cls.__str__ - cls.__str__ = lambda x: x.__unicode__().encode('utf-8') - return cls - - -def with_metaclass(meta, *bases): - # This requires a bit of explanation: the basic idea is to make a - # dummy metaclass for one level of class instantiation that replaces - # itself with the actual metaclass. Because of internal type checks - # we also need to make sure that we downgrade the custom metaclass - # for one level to something closer to type (that's why __call__ and - # __init__ comes back from type etc.). - # - # This has the advantage over six.with_metaclass in that it does not - # introduce dummy classes into the final MRO. - class metaclass(meta): - __call__ = type.__call__ - __init__ = type.__init__ - def __new__(cls, name, this_bases, d): - if this_bases is None: - return type.__new__(cls, name, (), d) - return meta(name, bases, d) - return metaclass('temporary_class', None, {}) diff --git a/Linux_i686/lib/python2.7/site-packages/flask/app.py b/Linux_i686/lib/python2.7/site-packages/flask/app.py deleted file mode 100644 index addc40b..0000000 --- a/Linux_i686/lib/python2.7/site-packages/flask/app.py +++ /dev/null @@ -1,1842 +0,0 @@ -# -*- coding: utf-8 -*- -""" - flask.app - ~~~~~~~~~ - - This module implements the central WSGI application object. - - :copyright: (c) 2011 by Armin Ronacher. - :license: BSD, see LICENSE for more details. -""" - -import os -import sys -from threading import Lock -from datetime import timedelta -from itertools import chain -from functools import update_wrapper - -from werkzeug.datastructures import ImmutableDict -from werkzeug.routing import Map, Rule, RequestRedirect, BuildError -from werkzeug.exceptions import HTTPException, InternalServerError, \ - MethodNotAllowed, BadRequest - -from .helpers import _PackageBoundObject, url_for, get_flashed_messages, \ - locked_cached_property, _endpoint_from_view_func, find_package -from . import json -from .wrappers import Request, Response -from .config import ConfigAttribute, Config -from .ctx import RequestContext, AppContext, _AppCtxGlobals -from .globals import _request_ctx_stack, request, session, g -from .sessions import SecureCookieSessionInterface -from .module import blueprint_is_module -from .templating import DispatchingJinjaLoader, Environment, \ - _default_template_ctx_processor -from .signals import request_started, request_finished, got_request_exception, \ - request_tearing_down, appcontext_tearing_down -from ._compat import reraise, string_types, text_type, integer_types - -# a lock used for logger initialization -_logger_lock = Lock() - - -def _make_timedelta(value): - if not isinstance(value, timedelta): - return timedelta(seconds=value) - return value - - -def setupmethod(f): - """Wraps a method so that it performs a check in debug mode if the - first request was already handled. - """ - def wrapper_func(self, *args, **kwargs): - if self.debug and self._got_first_request: - raise AssertionError('A setup function was called after the ' - 'first request was handled. This usually indicates a bug ' - 'in the application where a module was not imported ' - 'and decorators or other functionality was called too late.\n' - 'To fix this make sure to import all your view modules, ' - 'database models and everything related at a central place ' - 'before the application starts serving requests.') - return f(self, *args, **kwargs) - return update_wrapper(wrapper_func, f) - - -class Flask(_PackageBoundObject): - """The flask object implements a WSGI application and acts as the central - object. It is passed the name of the module or package of the - application. Once it is created it will act as a central registry for - the view functions, the URL rules, template configuration and much more. - - The name of the package is used to resolve resources from inside the - package or the folder the module is contained in depending on if the - package parameter resolves to an actual python package (a folder with - an `__init__.py` file inside) or a standard module (just a `.py` file). - - For more information about resource loading, see :func:`open_resource`. - - Usually you create a :class:`Flask` instance in your main module or - in the `__init__.py` file of your package like this:: - - from flask import Flask - app = Flask(__name__) - - .. admonition:: About the First Parameter - - The idea of the first parameter is to give Flask an idea what - belongs to your application. This name is used to find resources - on the file system, can be used by extensions to improve debugging - information and a lot more. - - So it's important what you provide there. If you are using a single - module, `__name__` is always the correct value. If you however are - using a package, it's usually recommended to hardcode the name of - your package there. - - For example if your application is defined in `yourapplication/app.py` - you should create it with one of the two versions below:: - - app = Flask('yourapplication') - app = Flask(__name__.split('.')[0]) - - Why is that? The application will work even with `__name__`, thanks - to how resources are looked up. However it will make debugging more - painful. Certain extensions can make assumptions based on the - import name of your application. For example the Flask-SQLAlchemy - extension will look for the code in your application that triggered - an SQL query in debug mode. If the import name is not properly set - up, that debugging information is lost. (For example it would only - pick up SQL queries in `yourapplication.app` and not - `yourapplication.views.frontend`) - - .. versionadded:: 0.7 - The `static_url_path`, `static_folder`, and `template_folder` - parameters were added. - - .. versionadded:: 0.8 - The `instance_path` and `instance_relative_config` parameters were - added. - - :param import_name: the name of the application package - :param static_url_path: can be used to specify a different path for the - static files on the web. Defaults to the name - of the `static_folder` folder. - :param static_folder: the folder with static files that should be served - at `static_url_path`. Defaults to the ``'static'`` - folder in the root path of the application. - :param template_folder: the folder that contains the templates that should - be used by the application. Defaults to - ``'templates'`` folder in the root path of the - application. - :param instance_path: An alternative instance path for the application. - By default the folder ``'instance'`` next to the - package or module is assumed to be the instance - path. - :param instance_relative_config: if set to `True` relative filenames - for loading the config are assumed to - be relative to the instance path instead - of the application root. - """ - - #: The class that is used for request objects. See :class:`~flask.Request` - #: for more information. - request_class = Request - - #: The class that is used for response objects. See - #: :class:`~flask.Response` for more information. - response_class = Response - - #: The class that is used for the :data:`~flask.g` instance. - #: - #: Example use cases for a custom class: - #: - #: 1. Store arbitrary attributes on flask.g. - #: 2. Add a property for lazy per-request database connectors. - #: 3. Return None instead of AttributeError on expected attributes. - #: 4. Raise exception if an unexpected attr is set, a "controlled" flask.g. - #: - #: In Flask 0.9 this property was called `request_globals_class` but it - #: was changed in 0.10 to :attr:`app_ctx_globals_class` because the - #: flask.g object is not application context scoped. - #: - #: .. versionadded:: 0.10 - app_ctx_globals_class = _AppCtxGlobals - - # Backwards compatibility support - def _get_request_globals_class(self): - return self.app_ctx_globals_class - def _set_request_globals_class(self, value): - from warnings import warn - warn(DeprecationWarning('request_globals_class attribute is now ' - 'called app_ctx_globals_class')) - self.app_ctx_globals_class = value - request_globals_class = property(_get_request_globals_class, - _set_request_globals_class) - del _get_request_globals_class, _set_request_globals_class - - #: The debug flag. Set this to `True` to enable debugging of the - #: application. In debug mode the debugger will kick in when an unhandled - #: exception occurs and the integrated server will automatically reload - #: the application if changes in the code are detected. - #: - #: This attribute can also be configured from the config with the `DEBUG` - #: configuration key. Defaults to `False`. - debug = ConfigAttribute('DEBUG') - - #: The testing flag. Set this to `True` to enable the test mode of - #: Flask extensions (and in the future probably also Flask itself). - #: For example this might activate unittest helpers that have an - #: additional runtime cost which should not be enabled by default. - #: - #: If this is enabled and PROPAGATE_EXCEPTIONS is not changed from the - #: default it's implicitly enabled. - #: - #: This attribute can also be configured from the config with the - #: `TESTING` configuration key. Defaults to `False`. - testing = ConfigAttribute('TESTING') - - #: If a secret key is set, cryptographic components can use this to - #: sign cookies and other things. Set this to a complex random value - #: when you want to use the secure cookie for instance. - #: - #: This attribute can also be configured from the config with the - #: `SECRET_KEY` configuration key. Defaults to `None`. - secret_key = ConfigAttribute('SECRET_KEY') - - #: The secure cookie uses this for the name of the session cookie. - #: - #: This attribute can also be configured from the config with the - #: `SESSION_COOKIE_NAME` configuration key. Defaults to ``'session'`` - session_cookie_name = ConfigAttribute('SESSION_COOKIE_NAME') - - #: A :class:`~datetime.timedelta` which is used to set the expiration - #: date of a permanent session. The default is 31 days which makes a - #: permanent session survive for roughly one month. - #: - #: This attribute can also be configured from the config with the - #: `PERMANENT_SESSION_LIFETIME` configuration key. Defaults to - #: ``timedelta(days=31)`` - permanent_session_lifetime = ConfigAttribute('PERMANENT_SESSION_LIFETIME', - get_converter=_make_timedelta) - - #: Enable this if you want to use the X-Sendfile feature. Keep in - #: mind that the server has to support this. This only affects files - #: sent with the :func:`send_file` method. - #: - #: .. versionadded:: 0.2 - #: - #: This attribute can also be configured from the config with the - #: `USE_X_SENDFILE` configuration key. Defaults to `False`. - use_x_sendfile = ConfigAttribute('USE_X_SENDFILE') - - #: The name of the logger to use. By default the logger name is the - #: package name passed to the constructor. - #: - #: .. versionadded:: 0.4 - logger_name = ConfigAttribute('LOGGER_NAME') - - #: Enable the deprecated module support? This is active by default - #: in 0.7 but will be changed to False in 0.8. With Flask 1.0 modules - #: will be removed in favor of Blueprints - enable_modules = True - - #: The logging format used for the debug logger. This is only used when - #: the application is in debug mode, otherwise the attached logging - #: handler does the formatting. - #: - #: .. versionadded:: 0.3 - debug_log_format = ( - '-' * 80 + '\n' + - '%(levelname)s in %(module)s [%(pathname)s:%(lineno)d]:\n' + - '%(message)s\n' + - '-' * 80 - ) - - #: The JSON encoder class to use. Defaults to :class:`~flask.json.JSONEncoder`. - #: - #: .. versionadded:: 0.10 - json_encoder = json.JSONEncoder - - #: The JSON decoder class to use. Defaults to :class:`~flask.json.JSONDecoder`. - #: - #: .. versionadded:: 0.10 - json_decoder = json.JSONDecoder - - #: Options that are passed directly to the Jinja2 environment. - jinja_options = ImmutableDict( - extensions=['jinja2.ext.autoescape', 'jinja2.ext.with_'] - ) - - #: Default configuration parameters. - default_config = ImmutableDict({ - 'DEBUG': False, - 'TESTING': False, - 'PROPAGATE_EXCEPTIONS': None, - 'PRESERVE_CONTEXT_ON_EXCEPTION': None, - 'SECRET_KEY': None, - 'PERMANENT_SESSION_LIFETIME': timedelta(days=31), - 'USE_X_SENDFILE': False, - 'LOGGER_NAME': None, - 'SERVER_NAME': None, - 'APPLICATION_ROOT': None, - 'SESSION_COOKIE_NAME': 'session', - 'SESSION_COOKIE_DOMAIN': None, - 'SESSION_COOKIE_PATH': None, - 'SESSION_COOKIE_HTTPONLY': True, - 'SESSION_COOKIE_SECURE': False, - 'MAX_CONTENT_LENGTH': None, - 'SEND_FILE_MAX_AGE_DEFAULT': 12 * 60 * 60, # 12 hours - 'TRAP_BAD_REQUEST_ERRORS': False, - 'TRAP_HTTP_EXCEPTIONS': False, - 'PREFERRED_URL_SCHEME': 'http', - 'JSON_AS_ASCII': True, - 'JSON_SORT_KEYS': True, - 'JSONIFY_PRETTYPRINT_REGULAR': True, - }) - - #: The rule object to use for URL rules created. This is used by - #: :meth:`add_url_rule`. Defaults to :class:`werkzeug.routing.Rule`. - #: - #: .. versionadded:: 0.7 - url_rule_class = Rule - - #: the test client that is used with when `test_client` is used. - #: - #: .. versionadded:: 0.7 - test_client_class = None - - #: the session interface to use. By default an instance of - #: :class:`~flask.sessions.SecureCookieSessionInterface` is used here. - #: - #: .. versionadded:: 0.8 - session_interface = SecureCookieSessionInterface() - - def __init__(self, import_name, static_path=None, static_url_path=None, - static_folder='static', template_folder='templates', - instance_path=None, instance_relative_config=False): - _PackageBoundObject.__init__(self, import_name, - template_folder=template_folder) - if static_path is not None: - from warnings import warn - warn(DeprecationWarning('static_path is now called ' - 'static_url_path'), stacklevel=2) - static_url_path = static_path - - if static_url_path is not None: - self.static_url_path = static_url_path - if static_folder is not None: - self.static_folder = static_folder - if instance_path is None: - instance_path = self.auto_find_instance_path() - elif not os.path.isabs(instance_path): - raise ValueError('If an instance path is provided it must be ' - 'absolute. A relative path was given instead.') - - #: Holds the path to the instance folder. - #: - #: .. versionadded:: 0.8 - self.instance_path = instance_path - - #: The configuration dictionary as :class:`Config`. This behaves - #: exactly like a regular dictionary but supports additional methods - #: to load a config from files. - self.config = self.make_config(instance_relative_config) - - # Prepare the deferred setup of the logger. - self._logger = None - self.logger_name = self.import_name - - #: A dictionary of all view functions registered. The keys will - #: be function names which are also used to generate URLs and - #: the values are the function objects themselves. - #: To register a view function, use the :meth:`route` decorator. - self.view_functions = {} - - # support for the now deprecated `error_handlers` attribute. The - # :attr:`error_handler_spec` shall be used now. - self._error_handlers = {} - - #: A dictionary of all registered error handlers. The key is `None` - #: for error handlers active on the application, otherwise the key is - #: the name of the blueprint. Each key points to another dictionary - #: where they key is the status code of the http exception. The - #: special key `None` points to a list of tuples where the first item - #: is the class for the instance check and the second the error handler - #: function. - #: - #: To register a error handler, use the :meth:`errorhandler` - #: decorator. - self.error_handler_spec = {None: self._error_handlers} - - #: A list of functions that are called when :meth:`url_for` raises a - #: :exc:`~werkzeug.routing.BuildError`. Each function registered here - #: is called with `error`, `endpoint` and `values`. If a function - #: returns `None` or raises a `BuildError` the next function is - #: tried. - #: - #: .. versionadded:: 0.9 - self.url_build_error_handlers = [] - - #: A dictionary with lists of functions that should be called at the - #: beginning of the request. The key of the dictionary is the name of - #: the blueprint this function is active for, `None` for all requests. - #: This can for example be used to open database connections or - #: getting hold of the currently logged in user. To register a - #: function here, use the :meth:`before_request` decorator. - self.before_request_funcs = {} - - #: A lists of functions that should be called at the beginning of the - #: first request to this instance. To register a function here, use - #: the :meth:`before_first_request` decorator. - #: - #: .. versionadded:: 0.8 - self.before_first_request_funcs = [] - - #: A dictionary with lists of functions that should be called after - #: each request. The key of the dictionary is the name of the blueprint - #: this function is active for, `None` for all requests. This can for - #: example be used to open database connections or getting hold of the - #: currently logged in user. To register a function here, use the - #: :meth:`after_request` decorator. - self.after_request_funcs = {} - - #: A dictionary with lists of functions that are called after - #: each request, even if an exception has occurred. The key of the - #: dictionary is the name of the blueprint this function is active for, - #: `None` for all requests. These functions are not allowed to modify - #: the request, and their return values are ignored. If an exception - #: occurred while processing the request, it gets passed to each - #: teardown_request function. To register a function here, use the - #: :meth:`teardown_request` decorator. - #: - #: .. versionadded:: 0.7 - self.teardown_request_funcs = {} - - #: A list of functions that are called when the application context - #: is destroyed. Since the application context is also torn down - #: if the request ends this is the place to store code that disconnects - #: from databases. - #: - #: .. versionadded:: 0.9 - self.teardown_appcontext_funcs = [] - - #: A dictionary with lists of functions that can be used as URL - #: value processor functions. Whenever a URL is built these functions - #: are called to modify the dictionary of values in place. The key - #: `None` here is used for application wide - #: callbacks, otherwise the key is the name of the blueprint. - #: Each of these functions has the chance to modify the dictionary - #: - #: .. versionadded:: 0.7 - self.url_value_preprocessors = {} - - #: A dictionary with lists of functions that can be used as URL value - #: preprocessors. The key `None` here is used for application wide - #: callbacks, otherwise the key is the name of the blueprint. - #: Each of these functions has the chance to modify the dictionary - #: of URL values before they are used as the keyword arguments of the - #: view function. For each function registered this one should also - #: provide a :meth:`url_defaults` function that adds the parameters - #: automatically again that were removed that way. - #: - #: .. versionadded:: 0.7 - self.url_default_functions = {} - - #: A dictionary with list of functions that are called without argument - #: to populate the template context. The key of the dictionary is the - #: name of the blueprint this function is active for, `None` for all - #: requests. Each returns a dictionary that the template context is - #: updated with. To register a function here, use the - #: :meth:`context_processor` decorator. - self.template_context_processors = { - None: [_default_template_ctx_processor] - } - - #: all the attached blueprints in a dictionary by name. Blueprints - #: can be attached multiple times so this dictionary does not tell - #: you how often they got attached. - #: - #: .. versionadded:: 0.7 - self.blueprints = {} - - #: a place where extensions can store application specific state. For - #: example this is where an extension could store database engines and - #: similar things. For backwards compatibility extensions should register - #: themselves like this:: - #: - #: if not hasattr(app, 'extensions'): - #: app.extensions = {} - #: app.extensions['extensionname'] = SomeObject() - #: - #: The key must match the name of the `flaskext` module. For example in - #: case of a "Flask-Foo" extension in `flaskext.foo`, the key would be - #: ``'foo'``. - #: - #: .. versionadded:: 0.7 - self.extensions = {} - - #: The :class:`~werkzeug.routing.Map` for this instance. You can use - #: this to change the routing converters after the class was created - #: but before any routes are connected. Example:: - #: - #: from werkzeug.routing import BaseConverter - #: - #: class ListConverter(BaseConverter): - #: def to_python(self, value): - #: return value.split(',') - #: def to_url(self, values): - #: return ','.join(BaseConverter.to_url(value) - #: for value in values) - #: - #: app = Flask(__name__) - #: app.url_map.converters['list'] = ListConverter - self.url_map = Map() - - # tracks internally if the application already handled at least one - # request. - self._got_first_request = False - self._before_request_lock = Lock() - - # register the static folder for the application. Do that even - # if the folder does not exist. First of all it might be created - # while the server is running (usually happens during development) - # but also because google appengine stores static files somewhere - # else when mapped with the .yml file. - if self.has_static_folder: - self.add_url_rule(self.static_url_path + '/', - endpoint='static', - view_func=self.send_static_file) - - def _get_error_handlers(self): - from warnings import warn - warn(DeprecationWarning('error_handlers is deprecated, use the ' - 'new error_handler_spec attribute instead.'), stacklevel=1) - return self._error_handlers - def _set_error_handlers(self, value): - self._error_handlers = value - self.error_handler_spec[None] = value - error_handlers = property(_get_error_handlers, _set_error_handlers) - del _get_error_handlers, _set_error_handlers - - @locked_cached_property - def name(self): - """The name of the application. This is usually the import name - with the difference that it's guessed from the run file if the - import name is main. This name is used as a display name when - Flask needs the name of the application. It can be set and overridden - to change the value. - - .. versionadded:: 0.8 - """ - if self.import_name == '__main__': - fn = getattr(sys.modules['__main__'], '__file__', None) - if fn is None: - return '__main__' - return os.path.splitext(os.path.basename(fn))[0] - return self.import_name - - @property - def propagate_exceptions(self): - """Returns the value of the `PROPAGATE_EXCEPTIONS` configuration - value in case it's set, otherwise a sensible default is returned. - - .. versionadded:: 0.7 - """ - rv = self.config['PROPAGATE_EXCEPTIONS'] - if rv is not None: - return rv - return self.testing or self.debug - - @property - def preserve_context_on_exception(self): - """Returns the value of the `PRESERVE_CONTEXT_ON_EXCEPTION` - configuration value in case it's set, otherwise a sensible default - is returned. - - .. versionadded:: 0.7 - """ - rv = self.config['PRESERVE_CONTEXT_ON_EXCEPTION'] - if rv is not None: - return rv - return self.debug - - @property - def logger(self): - """A :class:`logging.Logger` object for this application. The - default configuration is to log to stderr if the application is - in debug mode. This logger can be used to (surprise) log messages. - Here some examples:: - - app.logger.debug('A value for debugging') - app.logger.warning('A warning occurred (%d apples)', 42) - app.logger.error('An error occurred') - - .. versionadded:: 0.3 - """ - if self._logger and self._logger.name == self.logger_name: - return self._logger - with _logger_lock: - if self._logger and self._logger.name == self.logger_name: - return self._logger - from flask.logging import create_logger - self._logger = rv = create_logger(self) - return rv - - @locked_cached_property - def jinja_env(self): - """The Jinja2 environment used to load templates.""" - return self.create_jinja_environment() - - @property - def got_first_request(self): - """This attribute is set to `True` if the application started - handling the first request. - - .. versionadded:: 0.8 - """ - return self._got_first_request - - def make_config(self, instance_relative=False): - """Used to create the config attribute by the Flask constructor. - The `instance_relative` parameter is passed in from the constructor - of Flask (there named `instance_relative_config`) and indicates if - the config should be relative to the instance path or the root path - of the application. - - .. versionadded:: 0.8 - """ - root_path = self.root_path - if instance_relative: - root_path = self.instance_path - return Config(root_path, self.default_config) - - def auto_find_instance_path(self): - """Tries to locate the instance path if it was not provided to the - constructor of the application class. It will basically calculate - the path to a folder named ``instance`` next to your main file or - the package. - - .. versionadded:: 0.8 - """ - prefix, package_path = find_package(self.import_name) - if prefix is None: - return os.path.join(package_path, 'instance') - return os.path.join(prefix, 'var', self.name + '-instance') - - def open_instance_resource(self, resource, mode='rb'): - """Opens a resource from the application's instance folder - (:attr:`instance_path`). Otherwise works like - :meth:`open_resource`. Instance resources can also be opened for - writing. - - :param resource: the name of the resource. To access resources within - subfolders use forward slashes as separator. - :param mode: resource file opening mode, default is 'rb'. - """ - return open(os.path.join(self.instance_path, resource), mode) - - def create_jinja_environment(self): - """Creates the Jinja2 environment based on :attr:`jinja_options` - and :meth:`select_jinja_autoescape`. Since 0.7 this also adds - the Jinja2 globals and filters after initialization. Override - this function to customize the behavior. - - .. versionadded:: 0.5 - """ - options = dict(self.jinja_options) - if 'autoescape' not in options: - options['autoescape'] = self.select_jinja_autoescape - rv = Environment(self, **options) - rv.globals.update( - url_for=url_for, - get_flashed_messages=get_flashed_messages, - config=self.config, - # request, session and g are normally added with the - # context processor for efficiency reasons but for imported - # templates we also want the proxies in there. - request=request, - session=session, - g=g - ) - rv.filters['tojson'] = json.tojson_filter - return rv - - def create_global_jinja_loader(self): - """Creates the loader for the Jinja2 environment. Can be used to - override just the loader and keeping the rest unchanged. It's - discouraged to override this function. Instead one should override - the :meth:`jinja_loader` function instead. - - The global loader dispatches between the loaders of the application - and the individual blueprints. - - .. versionadded:: 0.7 - """ - return DispatchingJinjaLoader(self) - - def init_jinja_globals(self): - """Deprecated. Used to initialize the Jinja2 globals. - - .. versionadded:: 0.5 - .. versionchanged:: 0.7 - This method is deprecated with 0.7. Override - :meth:`create_jinja_environment` instead. - """ - - def select_jinja_autoescape(self, filename): - """Returns `True` if autoescaping should be active for the given - template name. - - .. versionadded:: 0.5 - """ - if filename is None: - return False - return filename.endswith(('.html', '.htm', '.xml', '.xhtml')) - - def update_template_context(self, context): - """Update the template context with some commonly used variables. - This injects request, session, config and g into the template - context as well as everything template context processors want - to inject. Note that the as of Flask 0.6, the original values - in the context will not be overridden if a context processor - decides to return a value with the same key. - - :param context: the context as a dictionary that is updated in place - to add extra variables. - """ - funcs = self.template_context_processors[None] - reqctx = _request_ctx_stack.top - if reqctx is not None: - bp = reqctx.request.blueprint - if bp is not None and bp in self.template_context_processors: - funcs = chain(funcs, self.template_context_processors[bp]) - orig_ctx = context.copy() - for func in funcs: - context.update(func()) - # make sure the original values win. This makes it possible to - # easier add new variables in context processors without breaking - # existing views. - context.update(orig_ctx) - - def run(self, host=None, port=None, debug=None, **options): - """Runs the application on a local development server. If the - :attr:`debug` flag is set the server will automatically reload - for code changes and show a debugger in case an exception happened. - - If you want to run the application in debug mode, but disable the - code execution on the interactive debugger, you can pass - ``use_evalex=False`` as parameter. This will keep the debugger's - traceback screen active, but disable code execution. - - .. admonition:: Keep in Mind - - Flask will suppress any server error with a generic error page - unless it is in debug mode. As such to enable just the - interactive debugger without the code reloading, you have to - invoke :meth:`run` with ``debug=True`` and ``use_reloader=False``. - Setting ``use_debugger`` to `True` without being in debug mode - won't catch any exceptions because there won't be any to - catch. - - .. versionchanged:: 0.10 - The default port is now picked from the ``SERVER_NAME`` variable. - - :param host: the hostname to listen on. Set this to ``'0.0.0.0'`` to - have the server available externally as well. Defaults to - ``'127.0.0.1'``. - :param port: the port of the webserver. Defaults to ``5000`` or the - port defined in the ``SERVER_NAME`` config variable if - present. - :param debug: if given, enable or disable debug mode. - See :attr:`debug`. - :param options: the options to be forwarded to the underlying - Werkzeug server. See - :func:`werkzeug.serving.run_simple` for more - information. - """ - from werkzeug.serving import run_simple - if host is None: - host = '127.0.0.1' - if port is None: - server_name = self.config['SERVER_NAME'] - if server_name and ':' in server_name: - port = int(server_name.rsplit(':', 1)[1]) - else: - port = 5000 - if debug is not None: - self.debug = bool(debug) - options.setdefault('use_reloader', self.debug) - options.setdefault('use_debugger', self.debug) - try: - run_simple(host, port, self, **options) - finally: - # reset the first request information if the development server - # resetted normally. This makes it possible to restart the server - # without reloader and that stuff from an interactive shell. - self._got_first_request = False - - def test_client(self, use_cookies=True): - """Creates a test client for this application. For information - about unit testing head over to :ref:`testing`. - - Note that if you are testing for assertions or exceptions in your - application code, you must set ``app.testing = True`` in order for the - exceptions to propagate to the test client. Otherwise, the exception - will be handled by the application (not visible to the test client) and - the only indication of an AssertionError or other exception will be a - 500 status code response to the test client. See the :attr:`testing` - attribute. For example:: - - app.testing = True - client = app.test_client() - - The test client can be used in a `with` block to defer the closing down - of the context until the end of the `with` block. This is useful if - you want to access the context locals for testing:: - - with app.test_client() as c: - rv = c.get('/?vodka=42') - assert request.args['vodka'] == '42' - - See :class:`~flask.testing.FlaskClient` for more information. - - .. versionchanged:: 0.4 - added support for `with` block usage for the client. - - .. versionadded:: 0.7 - The `use_cookies` parameter was added as well as the ability - to override the client to be used by setting the - :attr:`test_client_class` attribute. - """ - cls = self.test_client_class - if cls is None: - from flask.testing import FlaskClient as cls - return cls(self, self.response_class, use_cookies=use_cookies) - - def open_session(self, request): - """Creates or opens a new session. Default implementation stores all - session data in a signed cookie. This requires that the - :attr:`secret_key` is set. Instead of overriding this method - we recommend replacing the :class:`session_interface`. - - :param request: an instance of :attr:`request_class`. - """ - return self.session_interface.open_session(self, request) - - def save_session(self, session, response): - """Saves the session if it needs updates. For the default - implementation, check :meth:`open_session`. Instead of overriding this - method we recommend replacing the :class:`session_interface`. - - :param session: the session to be saved (a - :class:`~werkzeug.contrib.securecookie.SecureCookie` - object) - :param response: an instance of :attr:`response_class` - """ - return self.session_interface.save_session(self, session, response) - - def make_null_session(self): - """Creates a new instance of a missing session. Instead of overriding - this method we recommend replacing the :class:`session_interface`. - - .. versionadded:: 0.7 - """ - return self.session_interface.make_null_session(self) - - def register_module(self, module, **options): - """Registers a module with this application. The keyword argument - of this function are the same as the ones for the constructor of the - :class:`Module` class and will override the values of the module if - provided. - - .. versionchanged:: 0.7 - The module system was deprecated in favor for the blueprint - system. - """ - assert blueprint_is_module(module), 'register_module requires ' \ - 'actual module objects. Please upgrade to blueprints though.' - if not self.enable_modules: - raise RuntimeError('Module support was disabled but code ' - 'attempted to register a module named %r' % module) - else: - from warnings import warn - warn(DeprecationWarning('Modules are deprecated. Upgrade to ' - 'using blueprints. Have a look into the documentation for ' - 'more information. If this module was registered by a ' - 'Flask-Extension upgrade the extension or contact the author ' - 'of that extension instead. (Registered %r)' % module), - stacklevel=2) - - self.register_blueprint(module, **options) - - @setupmethod - def register_blueprint(self, blueprint, **options): - """Registers a blueprint on the application. - - .. versionadded:: 0.7 - """ - first_registration = False - if blueprint.name in self.blueprints: - assert self.blueprints[blueprint.name] is blueprint, \ - 'A blueprint\'s name collision occurred between %r and ' \ - '%r. Both share the same name "%s". Blueprints that ' \ - 'are created on the fly need unique names.' % \ - (blueprint, self.blueprints[blueprint.name], blueprint.name) - else: - self.blueprints[blueprint.name] = blueprint - first_registration = True - blueprint.register(self, options, first_registration) - - @setupmethod - def add_url_rule(self, rule, endpoint=None, view_func=None, **options): - """Connects a URL rule. Works exactly like the :meth:`route` - decorator. If a view_func is provided it will be registered with the - endpoint. - - Basically this example:: - - @app.route('/') - def index(): - pass - - Is equivalent to the following:: - - def index(): - pass - app.add_url_rule('/', 'index', index) - - If the view_func is not provided you will need to connect the endpoint - to a view function like so:: - - app.view_functions['index'] = index - - Internally :meth:`route` invokes :meth:`add_url_rule` so if you want - to customize the behavior via subclassing you only need to change - this method. - - For more information refer to :ref:`url-route-registrations`. - - .. versionchanged:: 0.2 - `view_func` parameter added. - - .. versionchanged:: 0.6 - `OPTIONS` is added automatically as method. - - :param rule: the URL rule as string - :param endpoint: the endpoint for the registered URL rule. Flask - itself assumes the name of the view function as - endpoint - :param view_func: the function to call when serving a request to the - provided endpoint - :param options: the options to be forwarded to the underlying - :class:`~werkzeug.routing.Rule` object. A change - to Werkzeug is handling of method options. methods - is a list of methods this rule should be limited - to (`GET`, `POST` etc.). By default a rule - just listens for `GET` (and implicitly `HEAD`). - Starting with Flask 0.6, `OPTIONS` is implicitly - added and handled by the standard request handling. - """ - if endpoint is None: - endpoint = _endpoint_from_view_func(view_func) - options['endpoint'] = endpoint - methods = options.pop('methods', None) - - # if the methods are not given and the view_func object knows its - # methods we can use that instead. If neither exists, we go with - # a tuple of only `GET` as default. - if methods is None: - methods = getattr(view_func, 'methods', None) or ('GET',) - methods = set(methods) - - # Methods that should always be added - required_methods = set(getattr(view_func, 'required_methods', ())) - - # starting with Flask 0.8 the view_func object can disable and - # force-enable the automatic options handling. - provide_automatic_options = getattr(view_func, - 'provide_automatic_options', None) - - if provide_automatic_options is None: - if 'OPTIONS' not in methods: - provide_automatic_options = True - required_methods.add('OPTIONS') - else: - provide_automatic_options = False - - # Add the required methods now. - methods |= required_methods - - # due to a werkzeug bug we need to make sure that the defaults are - # None if they are an empty dictionary. This should not be necessary - # with Werkzeug 0.7 - options['defaults'] = options.get('defaults') or None - - rule = self.url_rule_class(rule, methods=methods, **options) - rule.provide_automatic_options = provide_automatic_options - - self.url_map.add(rule) - if view_func is not None: - old_func = self.view_functions.get(endpoint) - if old_func is not None and old_func != view_func: - raise AssertionError('View function mapping is overwriting an ' - 'existing endpoint function: %s' % endpoint) - self.view_functions[endpoint] = view_func - - def route(self, rule, **options): - """A decorator that is used to register a view function for a - given URL rule. This does the same thing as :meth:`add_url_rule` - but is intended for decorator usage:: - - @app.route('/') - def index(): - return 'Hello World' - - For more information refer to :ref:`url-route-registrations`. - - :param rule: the URL rule as string - :param endpoint: the endpoint for the registered URL rule. Flask - itself assumes the name of the view function as - endpoint - :param options: the options to be forwarded to the underlying - :class:`~werkzeug.routing.Rule` object. A change - to Werkzeug is handling of method options. methods - is a list of methods this rule should be limited - to (`GET`, `POST` etc.). By default a rule - just listens for `GET` (and implicitly `HEAD`). - Starting with Flask 0.6, `OPTIONS` is implicitly - added and handled by the standard request handling. - """ - def decorator(f): - endpoint = options.pop('endpoint', None) - self.add_url_rule(rule, endpoint, f, **options) - return f - return decorator - - @setupmethod - def endpoint(self, endpoint): - """A decorator to register a function as an endpoint. - Example:: - - @app.endpoint('example.endpoint') - def example(): - return "example" - - :param endpoint: the name of the endpoint - """ - def decorator(f): - self.view_functions[endpoint] = f - return f - return decorator - - @setupmethod - def errorhandler(self, code_or_exception): - """A decorator that is used to register a function give a given - error code. Example:: - - @app.errorhandler(404) - def page_not_found(error): - return 'This page does not exist', 404 - - You can also register handlers for arbitrary exceptions:: - - @app.errorhandler(DatabaseError) - def special_exception_handler(error): - return 'Database connection failed', 500 - - You can also register a function as error handler without using - the :meth:`errorhandler` decorator. The following example is - equivalent to the one above:: - - def page_not_found(error): - return 'This page does not exist', 404 - app.error_handler_spec[None][404] = page_not_found - - Setting error handlers via assignments to :attr:`error_handler_spec` - however is discouraged as it requires fiddling with nested dictionaries - and the special case for arbitrary exception types. - - The first `None` refers to the active blueprint. If the error - handler should be application wide `None` shall be used. - - .. versionadded:: 0.7 - One can now additionally also register custom exception types - that do not necessarily have to be a subclass of the - :class:`~werkzeug.exceptions.HTTPException` class. - - :param code: the code as integer for the handler - """ - def decorator(f): - self._register_error_handler(None, code_or_exception, f) - return f - return decorator - - def register_error_handler(self, code_or_exception, f): - """Alternative error attach function to the :meth:`errorhandler` - decorator that is more straightforward to use for non decorator - usage. - - .. versionadded:: 0.7 - """ - self._register_error_handler(None, code_or_exception, f) - - @setupmethod - def _register_error_handler(self, key, code_or_exception, f): - if isinstance(code_or_exception, HTTPException): - code_or_exception = code_or_exception.code - if isinstance(code_or_exception, integer_types): - assert code_or_exception != 500 or key is None, \ - 'It is currently not possible to register a 500 internal ' \ - 'server error on a per-blueprint level.' - self.error_handler_spec.setdefault(key, {})[code_or_exception] = f - else: - self.error_handler_spec.setdefault(key, {}).setdefault(None, []) \ - .append((code_or_exception, f)) - - @setupmethod - def template_filter(self, name=None): - """A decorator that is used to register custom template filter. - You can specify a name for the filter, otherwise the function - name will be used. Example:: - - @app.template_filter() - def reverse(s): - return s[::-1] - - :param name: the optional name of the filter, otherwise the - function name will be used. - """ - def decorator(f): - self.add_template_filter(f, name=name) - return f - return decorator - - @setupmethod - def add_template_filter(self, f, name=None): - """Register a custom template filter. Works exactly like the - :meth:`template_filter` decorator. - - :param name: the optional name of the filter, otherwise the - function name will be used. - """ - self.jinja_env.filters[name or f.__name__] = f - - @setupmethod - def template_test(self, name=None): - """A decorator that is used to register custom template test. - You can specify a name for the test, otherwise the function - name will be used. Example:: - - @app.template_test() - def is_prime(n): - if n == 2: - return True - for i in range(2, int(math.ceil(math.sqrt(n))) + 1): - if n % i == 0: - return False - return True - - .. versionadded:: 0.10 - - :param name: the optional name of the test, otherwise the - function name will be used. - """ - def decorator(f): - self.add_template_test(f, name=name) - return f - return decorator - - @setupmethod - def add_template_test(self, f, name=None): - """Register a custom template test. Works exactly like the - :meth:`template_test` decorator. - - .. versionadded:: 0.10 - - :param name: the optional name of the test, otherwise the - function name will be used. - """ - self.jinja_env.tests[name or f.__name__] = f - - - @setupmethod - def template_global(self, name=None): - """A decorator that is used to register a custom template global function. - You can specify a name for the global function, otherwise the function - name will be used. Example:: - - @app.template_global() - def double(n): - return 2 * n - - .. versionadded:: 0.10 - - :param name: the optional name of the global function, otherwise the - function name will be used. - """ - def decorator(f): - self.add_template_global(f, name=name) - return f - return decorator - - @setupmethod - def add_template_global(self, f, name=None): - """Register a custom template global function. Works exactly like the - :meth:`template_global` decorator. - - .. versionadded:: 0.10 - - :param name: the optional name of the global function, otherwise the - function name will be used. - """ - self.jinja_env.globals[name or f.__name__] = f - - @setupmethod - def before_request(self, f): - """Registers a function to run before each request.""" - self.before_request_funcs.setdefault(None, []).append(f) - return f - - @setupmethod - def before_first_request(self, f): - """Registers a function to be run before the first request to this - instance of the application. - - .. versionadded:: 0.8 - """ - self.before_first_request_funcs.append(f) - - @setupmethod - def after_request(self, f): - """Register a function to be run after each request. Your function - must take one parameter, a :attr:`response_class` object and return - a new response object or the same (see :meth:`process_response`). - - As of Flask 0.7 this function might not be executed at the end of the - request in case an unhandled exception occurred. - """ - self.after_request_funcs.setdefault(None, []).append(f) - return f - - @setupmethod - def teardown_request(self, f): - """Register a function to be run at the end of each request, - regardless of whether there was an exception or not. These functions - are executed when the request context is popped, even if not an - actual request was performed. - - Example:: - - ctx = app.test_request_context() - ctx.push() - ... - ctx.pop() - - When ``ctx.pop()`` is executed in the above example, the teardown - functions are called just before the request context moves from the - stack of active contexts. This becomes relevant if you are using - such constructs in tests. - - Generally teardown functions must take every necessary step to avoid - that they will fail. If they do execute code that might fail they - will have to surround the execution of these code by try/except - statements and log occurring errors. - - When a teardown function was called because of a exception it will - be passed an error object. - - .. admonition:: Debug Note - - In debug mode Flask will not tear down a request on an exception - immediately. Instead if will keep it alive so that the interactive - debugger can still access it. This behavior can be controlled - by the ``PRESERVE_CONTEXT_ON_EXCEPTION`` configuration variable. - """ - self.teardown_request_funcs.setdefault(None, []).append(f) - return f - - @setupmethod - def teardown_appcontext(self, f): - """Registers a function to be called when the application context - ends. These functions are typically also called when the request - context is popped. - - Example:: - - ctx = app.app_context() - ctx.push() - ... - ctx.pop() - - When ``ctx.pop()`` is executed in the above example, the teardown - functions are called just before the app context moves from the - stack of active contexts. This becomes relevant if you are using - such constructs in tests. - - Since a request context typically also manages an application - context it would also be called when you pop a request context. - - When a teardown function was called because of an exception it will - be passed an error object. - - .. versionadded:: 0.9 - """ - self.teardown_appcontext_funcs.append(f) - return f - - @setupmethod - def context_processor(self, f): - """Registers a template context processor function.""" - self.template_context_processors[None].append(f) - return f - - @setupmethod - def url_value_preprocessor(self, f): - """Registers a function as URL value preprocessor for all view - functions of the application. It's called before the view functions - are called and can modify the url values provided. - """ - self.url_value_preprocessors.setdefault(None, []).append(f) - return f - - @setupmethod - def url_defaults(self, f): - """Callback function for URL defaults for all view functions of the - application. It's called with the endpoint and values and should - update the values passed in place. - """ - self.url_default_functions.setdefault(None, []).append(f) - return f - - def handle_http_exception(self, e): - """Handles an HTTP exception. By default this will invoke the - registered error handlers and fall back to returning the - exception as response. - - .. versionadded:: 0.3 - """ - handlers = self.error_handler_spec.get(request.blueprint) - # Proxy exceptions don't have error codes. We want to always return - # those unchanged as errors - if e.code is None: - return e - if handlers and e.code in handlers: - handler = handlers[e.code] - else: - handler = self.error_handler_spec[None].get(e.code) - if handler is None: - return e - return handler(e) - - def trap_http_exception(self, e): - """Checks if an HTTP exception should be trapped or not. By default - this will return `False` for all exceptions except for a bad request - key error if ``TRAP_BAD_REQUEST_ERRORS`` is set to `True`. It - also returns `True` if ``TRAP_HTTP_EXCEPTIONS`` is set to `True`. - - This is called for all HTTP exceptions raised by a view function. - If it returns `True` for any exception the error handler for this - exception is not called and it shows up as regular exception in the - traceback. This is helpful for debugging implicitly raised HTTP - exceptions. - - .. versionadded:: 0.8 - """ - if self.config['TRAP_HTTP_EXCEPTIONS']: - return True - if self.config['TRAP_BAD_REQUEST_ERRORS']: - return isinstance(e, BadRequest) - return False - - def handle_user_exception(self, e): - """This method is called whenever an exception occurs that should be - handled. A special case are - :class:`~werkzeug.exception.HTTPException`\s which are forwarded by - this function to the :meth:`handle_http_exception` method. This - function will either return a response value or reraise the - exception with the same traceback. - - .. versionadded:: 0.7 - """ - exc_type, exc_value, tb = sys.exc_info() - assert exc_value is e - - # ensure not to trash sys.exc_info() at that point in case someone - # wants the traceback preserved in handle_http_exception. Of course - # we cannot prevent users from trashing it themselves in a custom - # trap_http_exception method so that's their fault then. - if isinstance(e, HTTPException) and not self.trap_http_exception(e): - return self.handle_http_exception(e) - - blueprint_handlers = () - handlers = self.error_handler_spec.get(request.blueprint) - if handlers is not None: - blueprint_handlers = handlers.get(None, ()) - app_handlers = self.error_handler_spec[None].get(None, ()) - for typecheck, handler in chain(blueprint_handlers, app_handlers): - if isinstance(e, typecheck): - return handler(e) - - reraise(exc_type, exc_value, tb) - - def handle_exception(self, e): - """Default exception handling that kicks in when an exception - occurs that is not caught. In debug mode the exception will - be re-raised immediately, otherwise it is logged and the handler - for a 500 internal server error is used. If no such handler - exists, a default 500 internal server error message is displayed. - - .. versionadded:: 0.3 - """ - exc_type, exc_value, tb = sys.exc_info() - - got_request_exception.send(self, exception=e) - handler = self.error_handler_spec[None].get(500) - - if self.propagate_exceptions: - # if we want to repropagate the exception, we can attempt to - # raise it with the whole traceback in case we can do that - # (the function was actually called from the except part) - # otherwise, we just raise the error again - if exc_value is e: - reraise(exc_type, exc_value, tb) - else: - raise e - - self.log_exception((exc_type, exc_value, tb)) - if handler is None: - return InternalServerError() - return handler(e) - - def log_exception(self, exc_info): - """Logs an exception. This is called by :meth:`handle_exception` - if debugging is disabled and right before the handler is called. - The default implementation logs the exception as error on the - :attr:`logger`. - - .. versionadded:: 0.8 - """ - self.logger.error('Exception on %s [%s]' % ( - request.path, - request.method - ), exc_info=exc_info) - - def raise_routing_exception(self, request): - """Exceptions that are recording during routing are reraised with - this method. During debug we are not reraising redirect requests - for non ``GET``, ``HEAD``, or ``OPTIONS`` requests and we're raising - a different error instead to help debug situations. - - :internal: - """ - if not self.debug \ - or not isinstance(request.routing_exception, RequestRedirect) \ - or request.method in ('GET', 'HEAD', 'OPTIONS'): - raise request.routing_exception - - from .debughelpers import FormDataRoutingRedirect - raise FormDataRoutingRedirect(request) - - def dispatch_request(self): - """Does the request dispatching. Matches the URL and returns the - return value of the view or error handler. This does not have to - be a response object. In order to convert the return value to a - proper response object, call :func:`make_response`. - - .. versionchanged:: 0.7 - This no longer does the exception handling, this code was - moved to the new :meth:`full_dispatch_request`. - """ - req = _request_ctx_stack.top.request - if req.routing_exception is not None: - self.raise_routing_exception(req) - rule = req.url_rule - # if we provide automatic options for this URL and the - # request came with the OPTIONS method, reply automatically - if getattr(rule, 'provide_automatic_options', False) \ - and req.method == 'OPTIONS': - return self.make_default_options_response() - # otherwise dispatch to the handler for that endpoint - return self.view_functions[rule.endpoint](**req.view_args) - - def full_dispatch_request(self): - """Dispatches the request and on top of that performs request - pre and postprocessing as well as HTTP exception catching and - error handling. - - .. versionadded:: 0.7 - """ - self.try_trigger_before_first_request_functions() - try: - request_started.send(self) - rv = self.preprocess_request() - if rv is None: - rv = self.dispatch_request() - except Exception as e: - rv = self.handle_user_exception(e) - response = self.make_response(rv) - response = self.process_response(response) - request_finished.send(self, response=response) - return response - - def try_trigger_before_first_request_functions(self): - """Called before each request and will ensure that it triggers - the :attr:`before_first_request_funcs` and only exactly once per - application instance (which means process usually). - - :internal: - """ - if self._got_first_request: - return - with self._before_request_lock: - if self._got_first_request: - return - self._got_first_request = True - for func in self.before_first_request_funcs: - func() - - def make_default_options_response(self): - """This method is called to create the default `OPTIONS` response. - This can be changed through subclassing to change the default - behavior of `OPTIONS` responses. - - .. versionadded:: 0.7 - """ - adapter = _request_ctx_stack.top.url_adapter - if hasattr(adapter, 'allowed_methods'): - methods = adapter.allowed_methods() - else: - # fallback for Werkzeug < 0.7 - methods = [] - try: - adapter.match(method='--') - except MethodNotAllowed as e: - methods = e.valid_methods - except HTTPException as e: - pass - rv = self.response_class() - rv.allow.update(methods) - return rv - - def should_ignore_error(self, error): - """This is called to figure out if an error should be ignored - or not as far as the teardown system is concerned. If this - function returns `True` then the teardown handlers will not be - passed the error. - - .. versionadded:: 0.10 - """ - return False - - def make_response(self, rv): - """Converts the return value from a view function to a real - response object that is an instance of :attr:`response_class`. - - The following types are allowed for `rv`: - - .. tabularcolumns:: |p{3.5cm}|p{9.5cm}| - - ======================= =========================================== - :attr:`response_class` the object is returned unchanged - :class:`str` a response object is created with the - string as body - :class:`unicode` a response object is created with the - string encoded to utf-8 as body - a WSGI function the function is called as WSGI application - and buffered as response object - :class:`tuple` A tuple in the form ``(response, status, - headers)`` where `response` is any of the - types defined here, `status` is a string - or an integer and `headers` is a list of - a dictionary with header values. - ======================= =========================================== - - :param rv: the return value from the view function - - .. versionchanged:: 0.9 - Previously a tuple was interpreted as the arguments for the - response object. - """ - status = headers = None - if isinstance(rv, tuple): - rv, status, headers = rv + (None,) * (3 - len(rv)) - - if rv is None: - raise ValueError('View function did not return a response') - - if not isinstance(rv, self.response_class): - # When we create a response object directly, we let the constructor - # set the headers and status. We do this because there can be - # some extra logic involved when creating these objects with - # specific values (like default content type selection). - if isinstance(rv, (text_type, bytes, bytearray)): - rv = self.response_class(rv, headers=headers, status=status) - headers = status = None - else: - rv = self.response_class.force_type(rv, request.environ) - - if status is not None: - if isinstance(status, string_types): - rv.status = status - else: - rv.status_code = status - if headers: - rv.headers.extend(headers) - - return rv - - def create_url_adapter(self, request): - """Creates a URL adapter for the given request. The URL adapter - is created at a point where the request context is not yet set up - so the request is passed explicitly. - - .. versionadded:: 0.6 - - .. versionchanged:: 0.9 - This can now also be called without a request object when the - URL adapter is created for the application context. - """ - if request is not None: - return self.url_map.bind_to_environ(request.environ, - server_name=self.config['SERVER_NAME']) - # We need at the very least the server name to be set for this - # to work. - if self.config['SERVER_NAME'] is not None: - return self.url_map.bind( - self.config['SERVER_NAME'], - script_name=self.config['APPLICATION_ROOT'] or '/', - url_scheme=self.config['PREFERRED_URL_SCHEME']) - - def inject_url_defaults(self, endpoint, values): - """Injects the URL defaults for the given endpoint directly into - the values dictionary passed. This is used internally and - automatically called on URL building. - - .. versionadded:: 0.7 - """ - funcs = self.url_default_functions.get(None, ()) - if '.' in endpoint: - bp = endpoint.rsplit('.', 1)[0] - funcs = chain(funcs, self.url_default_functions.get(bp, ())) - for func in funcs: - func(endpoint, values) - - def handle_url_build_error(self, error, endpoint, values): - """Handle :class:`~werkzeug.routing.BuildError` on :meth:`url_for`. - """ - exc_type, exc_value, tb = sys.exc_info() - for handler in self.url_build_error_handlers: - try: - rv = handler(error, endpoint, values) - if rv is not None: - return rv - except BuildError as error: - pass - - # At this point we want to reraise the exception. If the error is - # still the same one we can reraise it with the original traceback, - # otherwise we raise it from here. - if error is exc_value: - reraise(exc_type, exc_value, tb) - raise error - - def preprocess_request(self): - """Called before the actual request dispatching and will - call every as :meth:`before_request` decorated function. - If any of these function returns a value it's handled as - if it was the return value from the view and further - request handling is stopped. - - This also triggers the :meth:`url_value_processor` functions before - the actual :meth:`before_request` functions are called. - """ - bp = _request_ctx_stack.top.request.blueprint - - funcs = self.url_value_preprocessors.get(None, ()) - if bp is not None and bp in self.url_value_preprocessors: - funcs = chain(funcs, self.url_value_preprocessors[bp]) - for func in funcs: - func(request.endpoint, request.view_args) - - funcs = self.before_request_funcs.get(None, ()) - if bp is not None and bp in self.before_request_funcs: - funcs = chain(funcs, self.before_request_funcs[bp]) - for func in funcs: - rv = func() - if rv is not None: - return rv - - def process_response(self, response): - """Can be overridden in order to modify the response object - before it's sent to the WSGI server. By default this will - call all the :meth:`after_request` decorated functions. - - .. versionchanged:: 0.5 - As of Flask 0.5 the functions registered for after request - execution are called in reverse order of registration. - - :param response: a :attr:`response_class` object. - :return: a new response object or the same, has to be an - instance of :attr:`response_class`. - """ - ctx = _request_ctx_stack.top - bp = ctx.request.blueprint - funcs = ctx._after_request_functions - if bp is not None and bp in self.after_request_funcs: - funcs = chain(funcs, reversed(self.after_request_funcs[bp])) - if None in self.after_request_funcs: - funcs = chain(funcs, reversed(self.after_request_funcs[None])) - for handler in funcs: - response = handler(response) - if not self.session_interface.is_null_session(ctx.session): - self.save_session(ctx.session, response) - return response - - def do_teardown_request(self, exc=None): - """Called after the actual request dispatching and will - call every as :meth:`teardown_request` decorated function. This is - not actually called by the :class:`Flask` object itself but is always - triggered when the request context is popped. That way we have a - tighter control over certain resources under testing environments. - - .. versionchanged:: 0.9 - Added the `exc` argument. Previously this was always using the - current exception information. - """ - if exc is None: - exc = sys.exc_info()[1] - funcs = reversed(self.teardown_request_funcs.get(None, ())) - bp = _request_ctx_stack.top.request.blueprint - if bp is not None and bp in self.teardown_request_funcs: - funcs = chain(funcs, reversed(self.teardown_request_funcs[bp])) - for func in funcs: - rv = func(exc) - request_tearing_down.send(self, exc=exc) - - def do_teardown_appcontext(self, exc=None): - """Called when an application context is popped. This works pretty - much the same as :meth:`do_teardown_request` but for the application - context. - - .. versionadded:: 0.9 - """ - if exc is None: - exc = sys.exc_info()[1] - for func in reversed(self.teardown_appcontext_funcs): - func(exc) - appcontext_tearing_down.send(self, exc=exc) - - def app_context(self): - """Binds the application only. For as long as the application is bound - to the current context the :data:`flask.current_app` points to that - application. An application context is automatically created when a - request context is pushed if necessary. - - Example usage:: - - with app.app_context(): - ... - - .. versionadded:: 0.9 - """ - return AppContext(self) - - def request_context(self, environ): - """Creates a :class:`~flask.ctx.RequestContext` from the given - environment and binds it to the current context. This must be used in - combination with the `with` statement because the request is only bound - to the current context for the duration of the `with` block. - - Example usage:: - - with app.request_context(environ): - do_something_with(request) - - The object returned can also be used without the `with` statement - which is useful for working in the shell. The example above is - doing exactly the same as this code:: - - ctx = app.request_context(environ) - ctx.push() - try: - do_something_with(request) - finally: - ctx.pop() - - .. versionchanged:: 0.3 - Added support for non-with statement usage and `with` statement - is now passed the ctx object. - - :param environ: a WSGI environment - """ - return RequestContext(self, environ) - - def test_request_context(self, *args, **kwargs): - """Creates a WSGI environment from the given values (see - :func:`werkzeug.test.EnvironBuilder` for more information, this - function accepts the same arguments). - """ - from flask.testing import make_test_environ_builder - builder = make_test_environ_builder(self, *args, **kwargs) - try: - return self.request_context(builder.get_environ()) - finally: - builder.close() - - def wsgi_app(self, environ, start_response): - """The actual WSGI application. This is not implemented in - `__call__` so that middlewares can be applied without losing a - reference to the class. So instead of doing this:: - - app = MyMiddleware(app) - - It's a better idea to do this instead:: - - app.wsgi_app = MyMiddleware(app.wsgi_app) - - Then you still have the original application object around and - can continue to call methods on it. - - .. versionchanged:: 0.7 - The behavior of the before and after request callbacks was changed - under error conditions and a new callback was added that will - always execute at the end of the request, independent on if an - error occurred or not. See :ref:`callbacks-and-errors`. - - :param environ: a WSGI environment - :param start_response: a callable accepting a status code, - a list of headers and an optional - exception context to start the response - """ - ctx = self.request_context(environ) - ctx.push() - error = None - try: - try: - response = self.full_dispatch_request() - except Exception as e: - error = e - response = self.make_response(self.handle_exception(e)) - return response(environ, start_response) - finally: - if self.should_ignore_error(error): - error = None - ctx.auto_pop(error) - - @property - def modules(self): - from warnings import warn - warn(DeprecationWarning('Flask.modules is deprecated, use ' - 'Flask.blueprints instead'), stacklevel=2) - return self.blueprints - - def __call__(self, environ, start_response): - """Shortcut for :attr:`wsgi_app`.""" - return self.wsgi_app(environ, start_response) - - def __repr__(self): - return '<%s %r>' % ( - self.__class__.__name__, - self.name, - ) diff --git a/Linux_i686/lib/python2.7/site-packages/flask/blueprints.py b/Linux_i686/lib/python2.7/site-packages/flask/blueprints.py deleted file mode 100644 index 4575ec9..0000000 --- a/Linux_i686/lib/python2.7/site-packages/flask/blueprints.py +++ /dev/null @@ -1,401 +0,0 @@ -# -*- coding: utf-8 -*- -""" - flask.blueprints - ~~~~~~~~~~~~~~~~ - - Blueprints are the recommended way to implement larger or more - pluggable applications in Flask 0.7 and later. - - :copyright: (c) 2011 by Armin Ronacher. - :license: BSD, see LICENSE for more details. -""" -from functools import update_wrapper - -from .helpers import _PackageBoundObject, _endpoint_from_view_func - - -class BlueprintSetupState(object): - """Temporary holder object for registering a blueprint with the - application. An instance of this class is created by the - :meth:`~flask.Blueprint.make_setup_state` method and later passed - to all register callback functions. - """ - - def __init__(self, blueprint, app, options, first_registration): - #: a reference to the current application - self.app = app - - #: a reference to the blueprint that created this setup state. - self.blueprint = blueprint - - #: a dictionary with all options that were passed to the - #: :meth:`~flask.Flask.register_blueprint` method. - self.options = options - - #: as blueprints can be registered multiple times with the - #: application and not everything wants to be registered - #: multiple times on it, this attribute can be used to figure - #: out if the blueprint was registered in the past already. - self.first_registration = first_registration - - subdomain = self.options.get('subdomain') - if subdomain is None: - subdomain = self.blueprint.subdomain - - #: The subdomain that the blueprint should be active for, `None` - #: otherwise. - self.subdomain = subdomain - - url_prefix = self.options.get('url_prefix') - if url_prefix is None: - url_prefix = self.blueprint.url_prefix - - #: The prefix that should be used for all URLs defined on the - #: blueprint. - self.url_prefix = url_prefix - - #: A dictionary with URL defaults that is added to each and every - #: URL that was defined with the blueprint. - self.url_defaults = dict(self.blueprint.url_values_defaults) - self.url_defaults.update(self.options.get('url_defaults', ())) - - def add_url_rule(self, rule, endpoint=None, view_func=None, **options): - """A helper method to register a rule (and optionally a view function) - to the application. The endpoint is automatically prefixed with the - blueprint's name. - """ - if self.url_prefix: - rule = self.url_prefix + rule - options.setdefault('subdomain', self.subdomain) - if endpoint is None: - endpoint = _endpoint_from_view_func(view_func) - defaults = self.url_defaults - if 'defaults' in options: - defaults = dict(defaults, **options.pop('defaults')) - self.app.add_url_rule(rule, '%s.%s' % (self.blueprint.name, endpoint), - view_func, defaults=defaults, **options) - - -class Blueprint(_PackageBoundObject): - """Represents a blueprint. A blueprint is an object that records - functions that will be called with the - :class:`~flask.blueprint.BlueprintSetupState` later to register functions - or other things on the main application. See :ref:`blueprints` for more - information. - - .. versionadded:: 0.7 - """ - - warn_on_modifications = False - _got_registered_once = False - - def __init__(self, name, import_name, static_folder=None, - static_url_path=None, template_folder=None, - url_prefix=None, subdomain=None, url_defaults=None): - _PackageBoundObject.__init__(self, import_name, template_folder) - self.name = name - self.url_prefix = url_prefix - self.subdomain = subdomain - self.static_folder = static_folder - self.static_url_path = static_url_path - self.deferred_functions = [] - self.view_functions = {} - if url_defaults is None: - url_defaults = {} - self.url_values_defaults = url_defaults - - def record(self, func): - """Registers a function that is called when the blueprint is - registered on the application. This function is called with the - state as argument as returned by the :meth:`make_setup_state` - method. - """ - if self._got_registered_once and self.warn_on_modifications: - from warnings import warn - warn(Warning('The blueprint was already registered once ' - 'but is getting modified now. These changes ' - 'will not show up.')) - self.deferred_functions.append(func) - - def record_once(self, func): - """Works like :meth:`record` but wraps the function in another - function that will ensure the function is only called once. If the - blueprint is registered a second time on the application, the - function passed is not called. - """ - def wrapper(state): - if state.first_registration: - func(state) - return self.record(update_wrapper(wrapper, func)) - - def make_setup_state(self, app, options, first_registration=False): - """Creates an instance of :meth:`~flask.blueprints.BlueprintSetupState` - object that is later passed to the register callback functions. - Subclasses can override this to return a subclass of the setup state. - """ - return BlueprintSetupState(self, app, options, first_registration) - - def register(self, app, options, first_registration=False): - """Called by :meth:`Flask.register_blueprint` to register a blueprint - on the application. This can be overridden to customize the register - behavior. Keyword arguments from - :func:`~flask.Flask.register_blueprint` are directly forwarded to this - method in the `options` dictionary. - """ - self._got_registered_once = True - state = self.make_setup_state(app, options, first_registration) - if self.has_static_folder: - state.add_url_rule(self.static_url_path + '/', - view_func=self.send_static_file, - endpoint='static') - - for deferred in self.deferred_functions: - deferred(state) - - def route(self, rule, **options): - """Like :meth:`Flask.route` but for a blueprint. The endpoint for the - :func:`url_for` function is prefixed with the name of the blueprint. - """ - def decorator(f): - endpoint = options.pop("endpoint", f.__name__) - self.add_url_rule(rule, endpoint, f, **options) - return f - return decorator - - def add_url_rule(self, rule, endpoint=None, view_func=None, **options): - """Like :meth:`Flask.add_url_rule` but for a blueprint. The endpoint for - the :func:`url_for` function is prefixed with the name of the blueprint. - """ - if endpoint: - assert '.' not in endpoint, "Blueprint endpoint's should not contain dot's" - self.record(lambda s: - s.add_url_rule(rule, endpoint, view_func, **options)) - - def endpoint(self, endpoint): - """Like :meth:`Flask.endpoint` but for a blueprint. This does not - prefix the endpoint with the blueprint name, this has to be done - explicitly by the user of this method. If the endpoint is prefixed - with a `.` it will be registered to the current blueprint, otherwise - it's an application independent endpoint. - """ - def decorator(f): - def register_endpoint(state): - state.app.view_functions[endpoint] = f - self.record_once(register_endpoint) - return f - return decorator - - def app_template_filter(self, name=None): - """Register a custom template filter, available application wide. Like - :meth:`Flask.template_filter` but for a blueprint. - - :param name: the optional name of the filter, otherwise the - function name will be used. - """ - def decorator(f): - self.add_app_template_filter(f, name=name) - return f - return decorator - - def add_app_template_filter(self, f, name=None): - """Register a custom template filter, available application wide. Like - :meth:`Flask.add_template_filter` but for a blueprint. Works exactly - like the :meth:`app_template_filter` decorator. - - :param name: the optional name of the filter, otherwise the - function name will be used. - """ - def register_template(state): - state.app.jinja_env.filters[name or f.__name__] = f - self.record_once(register_template) - - def app_template_test(self, name=None): - """Register a custom template test, available application wide. Like - :meth:`Flask.template_test` but for a blueprint. - - .. versionadded:: 0.10 - - :param name: the optional name of the test, otherwise the - function name will be used. - """ - def decorator(f): - self.add_app_template_test(f, name=name) - return f - return decorator - - def add_app_template_test(self, f, name=None): - """Register a custom template test, available application wide. Like - :meth:`Flask.add_template_test` but for a blueprint. Works exactly - like the :meth:`app_template_test` decorator. - - .. versionadded:: 0.10 - - :param name: the optional name of the test, otherwise the - function name will be used. - """ - def register_template(state): - state.app.jinja_env.tests[name or f.__name__] = f - self.record_once(register_template) - - def app_template_global(self, name=None): - """Register a custom template global, available application wide. Like - :meth:`Flask.template_global` but for a blueprint. - - .. versionadded:: 0.10 - - :param name: the optional name of the global, otherwise the - function name will be used. - """ - def decorator(f): - self.add_app_template_global(f, name=name) - return f - return decorator - - def add_app_template_global(self, f, name=None): - """Register a custom template global, available application wide. Like - :meth:`Flask.add_template_global` but for a blueprint. Works exactly - like the :meth:`app_template_global` decorator. - - .. versionadded:: 0.10 - - :param name: the optional name of the global, otherwise the - function name will be used. - """ - def register_template(state): - state.app.jinja_env.globals[name or f.__name__] = f - self.record_once(register_template) - - def before_request(self, f): - """Like :meth:`Flask.before_request` but for a blueprint. This function - is only executed before each request that is handled by a function of - that blueprint. - """ - self.record_once(lambda s: s.app.before_request_funcs - .setdefault(self.name, []).append(f)) - return f - - def before_app_request(self, f): - """Like :meth:`Flask.before_request`. Such a function is executed - before each request, even if outside of a blueprint. - """ - self.record_once(lambda s: s.app.before_request_funcs - .setdefault(None, []).append(f)) - return f - - def before_app_first_request(self, f): - """Like :meth:`Flask.before_first_request`. Such a function is - executed before the first request to the application. - """ - self.record_once(lambda s: s.app.before_first_request_funcs.append(f)) - return f - - def after_request(self, f): - """Like :meth:`Flask.after_request` but for a blueprint. This function - is only executed after each request that is handled by a function of - that blueprint. - """ - self.record_once(lambda s: s.app.after_request_funcs - .setdefault(self.name, []).append(f)) - return f - - def after_app_request(self, f): - """Like :meth:`Flask.after_request` but for a blueprint. Such a function - is executed after each request, even if outside of the blueprint. - """ - self.record_once(lambda s: s.app.after_request_funcs - .setdefault(None, []).append(f)) - return f - - def teardown_request(self, f): - """Like :meth:`Flask.teardown_request` but for a blueprint. This - function is only executed when tearing down requests handled by a - function of that blueprint. Teardown request functions are executed - when the request context is popped, even when no actual request was - performed. - """ - self.record_once(lambda s: s.app.teardown_request_funcs - .setdefault(self.name, []).append(f)) - return f - - def teardown_app_request(self, f): - """Like :meth:`Flask.teardown_request` but for a blueprint. Such a - function is executed when tearing down each request, even if outside of - the blueprint. - """ - self.record_once(lambda s: s.app.teardown_request_funcs - .setdefault(None, []).append(f)) - return f - - def context_processor(self, f): - """Like :meth:`Flask.context_processor` but for a blueprint. This - function is only executed for requests handled by a blueprint. - """ - self.record_once(lambda s: s.app.template_context_processors - .setdefault(self.name, []).append(f)) - return f - - def app_context_processor(self, f): - """Like :meth:`Flask.context_processor` but for a blueprint. Such a - function is executed each request, even if outside of the blueprint. - """ - self.record_once(lambda s: s.app.template_context_processors - .setdefault(None, []).append(f)) - return f - - def app_errorhandler(self, code): - """Like :meth:`Flask.errorhandler` but for a blueprint. This - handler is used for all requests, even if outside of the blueprint. - """ - def decorator(f): - self.record_once(lambda s: s.app.errorhandler(code)(f)) - return f - return decorator - - def url_value_preprocessor(self, f): - """Registers a function as URL value preprocessor for this - blueprint. It's called before the view functions are called and - can modify the url values provided. - """ - self.record_once(lambda s: s.app.url_value_preprocessors - .setdefault(self.name, []).append(f)) - return f - - def url_defaults(self, f): - """Callback function for URL defaults for this blueprint. It's called - with the endpoint and values and should update the values passed - in place. - """ - self.record_once(lambda s: s.app.url_default_functions - .setdefault(self.name, []).append(f)) - return f - - def app_url_value_preprocessor(self, f): - """Same as :meth:`url_value_preprocessor` but application wide. - """ - self.record_once(lambda s: s.app.url_value_preprocessors - .setdefault(None, []).append(f)) - return f - - def app_url_defaults(self, f): - """Same as :meth:`url_defaults` but application wide. - """ - self.record_once(lambda s: s.app.url_default_functions - .setdefault(None, []).append(f)) - return f - - def errorhandler(self, code_or_exception): - """Registers an error handler that becomes active for this blueprint - only. Please be aware that routing does not happen local to a - blueprint so an error handler for 404 usually is not handled by - a blueprint unless it is caused inside a view function. Another - special case is the 500 internal server error which is always looked - up from the application. - - Otherwise works as the :meth:`~flask.Flask.errorhandler` decorator - of the :class:`~flask.Flask` object. - """ - def decorator(f): - self.record_once(lambda s: s.app._register_error_handler( - self.name, code_or_exception, f)) - return f - return decorator diff --git a/Linux_i686/lib/python2.7/site-packages/flask/config.py b/Linux_i686/lib/python2.7/site-packages/flask/config.py deleted file mode 100644 index 155afa2..0000000 --- a/Linux_i686/lib/python2.7/site-packages/flask/config.py +++ /dev/null @@ -1,168 +0,0 @@ -# -*- coding: utf-8 -*- -""" - flask.config - ~~~~~~~~~~~~ - - Implements the configuration related objects. - - :copyright: (c) 2011 by Armin Ronacher. - :license: BSD, see LICENSE for more details. -""" - -import imp -import os -import errno - -from werkzeug.utils import import_string -from ._compat import string_types - - -class ConfigAttribute(object): - """Makes an attribute forward to the config""" - - def __init__(self, name, get_converter=None): - self.__name__ = name - self.get_converter = get_converter - - def __get__(self, obj, type=None): - if obj is None: - return self - rv = obj.config[self.__name__] - if self.get_converter is not None: - rv = self.get_converter(rv) - return rv - - def __set__(self, obj, value): - obj.config[self.__name__] = value - - -class Config(dict): - """Works exactly like a dict but provides ways to fill it from files - or special dictionaries. There are two common patterns to populate the - config. - - Either you can fill the config from a config file:: - - app.config.from_pyfile('yourconfig.cfg') - - Or alternatively you can define the configuration options in the - module that calls :meth:`from_object` or provide an import path to - a module that should be loaded. It is also possible to tell it to - use the same module and with that provide the configuration values - just before the call:: - - DEBUG = True - SECRET_KEY = 'development key' - app.config.from_object(__name__) - - In both cases (loading from any Python file or loading from modules), - only uppercase keys are added to the config. This makes it possible to use - lowercase values in the config file for temporary values that are not added - to the config or to define the config keys in the same file that implements - the application. - - Probably the most interesting way to load configurations is from an - environment variable pointing to a file:: - - app.config.from_envvar('YOURAPPLICATION_SETTINGS') - - In this case before launching the application you have to set this - environment variable to the file you want to use. On Linux and OS X - use the export statement:: - - export YOURAPPLICATION_SETTINGS='/path/to/config/file' - - On windows use `set` instead. - - :param root_path: path to which files are read relative from. When the - config object is created by the application, this is - the application's :attr:`~flask.Flask.root_path`. - :param defaults: an optional dictionary of default values - """ - - def __init__(self, root_path, defaults=None): - dict.__init__(self, defaults or {}) - self.root_path = root_path - - def from_envvar(self, variable_name, silent=False): - """Loads a configuration from an environment variable pointing to - a configuration file. This is basically just a shortcut with nicer - error messages for this line of code:: - - app.config.from_pyfile(os.environ['YOURAPPLICATION_SETTINGS']) - - :param variable_name: name of the environment variable - :param silent: set to `True` if you want silent failure for missing - files. - :return: bool. `True` if able to load config, `False` otherwise. - """ - rv = os.environ.get(variable_name) - if not rv: - if silent: - return False - raise RuntimeError('The environment variable %r is not set ' - 'and as such configuration could not be ' - 'loaded. Set this variable and make it ' - 'point to a configuration file' % - variable_name) - return self.from_pyfile(rv, silent=silent) - - def from_pyfile(self, filename, silent=False): - """Updates the values in the config from a Python file. This function - behaves as if the file was imported as module with the - :meth:`from_object` function. - - :param filename: the filename of the config. This can either be an - absolute filename or a filename relative to the - root path. - :param silent: set to `True` if you want silent failure for missing - files. - - .. versionadded:: 0.7 - `silent` parameter. - """ - filename = os.path.join(self.root_path, filename) - d = imp.new_module('config') - d.__file__ = filename - try: - with open(filename) as config_file: - exec(compile(config_file.read(), filename, 'exec'), d.__dict__) - except IOError as e: - if silent and e.errno in (errno.ENOENT, errno.EISDIR): - return False - e.strerror = 'Unable to load configuration file (%s)' % e.strerror - raise - self.from_object(d) - return True - - def from_object(self, obj): - """Updates the values from the given object. An object can be of one - of the following two types: - - - a string: in this case the object with that name will be imported - - an actual object reference: that object is used directly - - Objects are usually either modules or classes. - - Just the uppercase variables in that object are stored in the config. - Example usage:: - - app.config.from_object('yourapplication.default_config') - from yourapplication import default_config - app.config.from_object(default_config) - - You should not use this function to load the actual configuration but - rather configuration defaults. The actual config should be loaded - with :meth:`from_pyfile` and ideally from a location not within the - package because the package might be installed system wide. - - :param obj: an import name or object - """ - if isinstance(obj, string_types): - obj = import_string(obj) - for key in dir(obj): - if key.isupper(): - self[key] = getattr(obj, key) - - def __repr__(self): - return '<%s %s>' % (self.__class__.__name__, dict.__repr__(self)) diff --git a/Linux_i686/lib/python2.7/site-packages/flask/ctx.py b/Linux_i686/lib/python2.7/site-packages/flask/ctx.py deleted file mode 100644 index f134237..0000000 --- a/Linux_i686/lib/python2.7/site-packages/flask/ctx.py +++ /dev/null @@ -1,394 +0,0 @@ -# -*- coding: utf-8 -*- -""" - flask.ctx - ~~~~~~~~~ - - Implements the objects required to keep the context. - - :copyright: (c) 2011 by Armin Ronacher. - :license: BSD, see LICENSE for more details. -""" - -from __future__ import with_statement - -import sys -from functools import update_wrapper - -from werkzeug.exceptions import HTTPException - -from .globals import _request_ctx_stack, _app_ctx_stack -from .module import blueprint_is_module -from .signals import appcontext_pushed, appcontext_popped - - -class _AppCtxGlobals(object): - """A plain object.""" - - def get(self, name, default=None): - return self.__dict__.get(name, default) - - def __contains__(self, item): - return item in self.__dict__ - - def __iter__(self): - return iter(self.__dict__) - - def __repr__(self): - top = _app_ctx_stack.top - if top is not None: - return '' % top.app.name - return object.__repr__(self) - - -def after_this_request(f): - """Executes a function after this request. This is useful to modify - response objects. The function is passed the response object and has - to return the same or a new one. - - Example:: - - @app.route('/') - def index(): - @after_this_request - def add_header(response): - response.headers['X-Foo'] = 'Parachute' - return response - return 'Hello World!' - - This is more useful if a function other than the view function wants to - modify a response. For instance think of a decorator that wants to add - some headers without converting the return value into a response object. - - .. versionadded:: 0.9 - """ - _request_ctx_stack.top._after_request_functions.append(f) - return f - - -def copy_current_request_context(f): - """A helper function that decorates a function to retain the current - request context. This is useful when working with greenlets. The moment - the function is decorated a copy of the request context is created and - then pushed when the function is called. - - Example:: - - import gevent - from flask import copy_current_request_context - - @app.route('/') - def index(): - @copy_current_request_context - def do_some_work(): - # do some work here, it can access flask.request like you - # would otherwise in the view function. - ... - gevent.spawn(do_some_work) - return 'Regular response' - - .. versionadded:: 0.10 - """ - top = _request_ctx_stack.top - if top is None: - raise RuntimeError('This decorator can only be used at local scopes ' - 'when a request context is on the stack. For instance within ' - 'view functions.') - reqctx = top.copy() - def wrapper(*args, **kwargs): - with reqctx: - return f(*args, **kwargs) - return update_wrapper(wrapper, f) - - -def has_request_context(): - """If you have code that wants to test if a request context is there or - not this function can be used. For instance, you may want to take advantage - of request information if the request object is available, but fail - silently if it is unavailable. - - :: - - class User(db.Model): - - def __init__(self, username, remote_addr=None): - self.username = username - if remote_addr is None and has_request_context(): - remote_addr = request.remote_addr - self.remote_addr = remote_addr - - Alternatively you can also just test any of the context bound objects - (such as :class:`request` or :class:`g` for truthness):: - - class User(db.Model): - - def __init__(self, username, remote_addr=None): - self.username = username - if remote_addr is None and request: - remote_addr = request.remote_addr - self.remote_addr = remote_addr - - .. versionadded:: 0.7 - """ - return _request_ctx_stack.top is not None - - -def has_app_context(): - """Works like :func:`has_request_context` but for the application - context. You can also just do a boolean check on the - :data:`current_app` object instead. - - .. versionadded:: 0.9 - """ - return _app_ctx_stack.top is not None - - -class AppContext(object): - """The application context binds an application object implicitly - to the current thread or greenlet, similar to how the - :class:`RequestContext` binds request information. The application - context is also implicitly created if a request context is created - but the application is not on top of the individual application - context. - """ - - def __init__(self, app): - self.app = app - self.url_adapter = app.create_url_adapter(None) - self.g = app.app_ctx_globals_class() - - # Like request context, app contexts can be pushed multiple times - # but there a basic "refcount" is enough to track them. - self._refcnt = 0 - - def push(self): - """Binds the app context to the current context.""" - self._refcnt += 1 - _app_ctx_stack.push(self) - appcontext_pushed.send(self.app) - - def pop(self, exc=None): - """Pops the app context.""" - self._refcnt -= 1 - if self._refcnt <= 0: - if exc is None: - exc = sys.exc_info()[1] - self.app.do_teardown_appcontext(exc) - rv = _app_ctx_stack.pop() - assert rv is self, 'Popped wrong app context. (%r instead of %r)' \ - % (rv, self) - appcontext_popped.send(self.app) - - def __enter__(self): - self.push() - return self - - def __exit__(self, exc_type, exc_value, tb): - self.pop(exc_value) - - -class RequestContext(object): - """The request context contains all request relevant information. It is - created at the beginning of the request and pushed to the - `_request_ctx_stack` and removed at the end of it. It will create the - URL adapter and request object for the WSGI environment provided. - - Do not attempt to use this class directly, instead use - :meth:`~flask.Flask.test_request_context` and - :meth:`~flask.Flask.request_context` to create this object. - - When the request context is popped, it will evaluate all the - functions registered on the application for teardown execution - (:meth:`~flask.Flask.teardown_request`). - - The request context is automatically popped at the end of the request - for you. In debug mode the request context is kept around if - exceptions happen so that interactive debuggers have a chance to - introspect the data. With 0.4 this can also be forced for requests - that did not fail and outside of `DEBUG` mode. By setting - ``'flask._preserve_context'`` to `True` on the WSGI environment the - context will not pop itself at the end of the request. This is used by - the :meth:`~flask.Flask.test_client` for example to implement the - deferred cleanup functionality. - - You might find this helpful for unittests where you need the - information from the context local around for a little longer. Make - sure to properly :meth:`~werkzeug.LocalStack.pop` the stack yourself in - that situation, otherwise your unittests will leak memory. - """ - - def __init__(self, app, environ, request=None): - self.app = app - if request is None: - request = app.request_class(environ) - self.request = request - self.url_adapter = app.create_url_adapter(self.request) - self.flashes = None - self.session = None - - # Request contexts can be pushed multiple times and interleaved with - # other request contexts. Now only if the last level is popped we - # get rid of them. Additionally if an application context is missing - # one is created implicitly so for each level we add this information - self._implicit_app_ctx_stack = [] - - # indicator if the context was preserved. Next time another context - # is pushed the preserved context is popped. - self.preserved = False - - # remembers the exception for pop if there is one in case the context - # preservation kicks in. - self._preserved_exc = None - - # Functions that should be executed after the request on the response - # object. These will be called before the regular "after_request" - # functions. - self._after_request_functions = [] - - self.match_request() - - # XXX: Support for deprecated functionality. This is going away with - # Flask 1.0 - blueprint = self.request.blueprint - if blueprint is not None: - # better safe than sorry, we don't want to break code that - # already worked - bp = app.blueprints.get(blueprint) - if bp is not None and blueprint_is_module(bp): - self.request._is_old_module = True - - def _get_g(self): - return _app_ctx_stack.top.g - def _set_g(self, value): - _app_ctx_stack.top.g = value - g = property(_get_g, _set_g) - del _get_g, _set_g - - def copy(self): - """Creates a copy of this request context with the same request object. - This can be used to move a request context to a different greenlet. - Because the actual request object is the same this cannot be used to - move a request context to a different thread unless access to the - request object is locked. - - .. versionadded:: 0.10 - """ - return self.__class__(self.app, - environ=self.request.environ, - request=self.request - ) - - def match_request(self): - """Can be overridden by a subclass to hook into the matching - of the request. - """ - try: - url_rule, self.request.view_args = \ - self.url_adapter.match(return_rule=True) - self.request.url_rule = url_rule - except HTTPException as e: - self.request.routing_exception = e - - def push(self): - """Binds the request context to the current context.""" - # If an exception occurs in debug mode or if context preservation is - # activated under exception situations exactly one context stays - # on the stack. The rationale is that you want to access that - # information under debug situations. However if someone forgets to - # pop that context again we want to make sure that on the next push - # it's invalidated, otherwise we run at risk that something leaks - # memory. This is usually only a problem in testsuite since this - # functionality is not active in production environments. - top = _request_ctx_stack.top - if top is not None and top.preserved: - top.pop(top._preserved_exc) - - # Before we push the request context we have to ensure that there - # is an application context. - app_ctx = _app_ctx_stack.top - if app_ctx is None or app_ctx.app != self.app: - app_ctx = self.app.app_context() - app_ctx.push() - self._implicit_app_ctx_stack.append(app_ctx) - else: - self._implicit_app_ctx_stack.append(None) - - _request_ctx_stack.push(self) - - # Open the session at the moment that the request context is - # available. This allows a custom open_session method to use the - # request context (e.g. code that access database information - # stored on `g` instead of the appcontext). - self.session = self.app.open_session(self.request) - if self.session is None: - self.session = self.app.make_null_session() - - def pop(self, exc=None): - """Pops the request context and unbinds it by doing that. This will - also trigger the execution of functions registered by the - :meth:`~flask.Flask.teardown_request` decorator. - - .. versionchanged:: 0.9 - Added the `exc` argument. - """ - app_ctx = self._implicit_app_ctx_stack.pop() - - clear_request = False - if not self._implicit_app_ctx_stack: - self.preserved = False - self._preserved_exc = None - if exc is None: - exc = sys.exc_info()[1] - self.app.do_teardown_request(exc) - - # If this interpreter supports clearing the exception information - # we do that now. This will only go into effect on Python 2.x, - # on 3.x it disappears automatically at the end of the exception - # stack. - if hasattr(sys, 'exc_clear'): - sys.exc_clear() - - request_close = getattr(self.request, 'close', None) - if request_close is not None: - request_close() - clear_request = True - - rv = _request_ctx_stack.pop() - assert rv is self, 'Popped wrong request context. (%r instead of %r)' \ - % (rv, self) - - # get rid of circular dependencies at the end of the request - # so that we don't require the GC to be active. - if clear_request: - rv.request.environ['werkzeug.request'] = None - - # Get rid of the app as well if necessary. - if app_ctx is not None: - app_ctx.pop(exc) - - def auto_pop(self, exc): - if self.request.environ.get('flask._preserve_context') or \ - (exc is not None and self.app.preserve_context_on_exception): - self.preserved = True - self._preserved_exc = exc - else: - self.pop(exc) - - def __enter__(self): - self.push() - return self - - def __exit__(self, exc_type, exc_value, tb): - # do not pop the request stack if we are in debug mode and an - # exception happened. This will allow the debugger to still - # access the request object in the interactive shell. Furthermore - # the context can be force kept alive for the test client. - # See flask.testing for how this works. - self.auto_pop(exc_value) - - def __repr__(self): - return '<%s \'%s\' [%s] of %s>' % ( - self.__class__.__name__, - self.request.url, - self.request.method, - self.app.name, - ) diff --git a/Linux_i686/lib/python2.7/site-packages/flask/debughelpers.py b/Linux_i686/lib/python2.7/site-packages/flask/debughelpers.py deleted file mode 100644 index 2f8510f..0000000 --- a/Linux_i686/lib/python2.7/site-packages/flask/debughelpers.py +++ /dev/null @@ -1,87 +0,0 @@ -# -*- coding: utf-8 -*- -""" - flask.debughelpers - ~~~~~~~~~~~~~~~~~~ - - Various helpers to make the development experience better. - - :copyright: (c) 2011 by Armin Ronacher. - :license: BSD, see LICENSE for more details. -""" -from ._compat import implements_to_string - - -class UnexpectedUnicodeError(AssertionError, UnicodeError): - """Raised in places where we want some better error reporting for - unexpected unicode or binary data. - """ - - -@implements_to_string -class DebugFilesKeyError(KeyError, AssertionError): - """Raised from request.files during debugging. The idea is that it can - provide a better error message than just a generic KeyError/BadRequest. - """ - - def __init__(self, request, key): - form_matches = request.form.getlist(key) - buf = ['You tried to access the file "%s" in the request.files ' - 'dictionary but it does not exist. The mimetype for the request ' - 'is "%s" instead of "multipart/form-data" which means that no ' - 'file contents were transmitted. To fix this error you should ' - 'provide enctype="multipart/form-data" in your form.' % - (key, request.mimetype)] - if form_matches: - buf.append('\n\nThe browser instead transmitted some file names. ' - 'This was submitted: %s' % ', '.join('"%s"' % x - for x in form_matches)) - self.msg = ''.join(buf) - - def __str__(self): - return self.msg - - -class FormDataRoutingRedirect(AssertionError): - """This exception is raised by Flask in debug mode if it detects a - redirect caused by the routing system when the request method is not - GET, HEAD or OPTIONS. Reasoning: form data will be dropped. - """ - - def __init__(self, request): - exc = request.routing_exception - buf = ['A request was sent to this URL (%s) but a redirect was ' - 'issued automatically by the routing system to "%s".' - % (request.url, exc.new_url)] - - # In case just a slash was appended we can be extra helpful - if request.base_url + '/' == exc.new_url.split('?')[0]: - buf.append(' The URL was defined with a trailing slash so ' - 'Flask will automatically redirect to the URL ' - 'with the trailing slash if it was accessed ' - 'without one.') - - buf.append(' Make sure to directly send your %s-request to this URL ' - 'since we can\'t make browsers or HTTP clients redirect ' - 'with form data reliably or without user interaction.' % - request.method) - buf.append('\n\nNote: this exception is only raised in debug mode') - AssertionError.__init__(self, ''.join(buf).encode('utf-8')) - - -def attach_enctype_error_multidict(request): - """Since Flask 0.8 we're monkeypatching the files object in case a - request is detected that does not use multipart form data but the files - object is accessed. - """ - oldcls = request.files.__class__ - class newcls(oldcls): - def __getitem__(self, key): - try: - return oldcls.__getitem__(self, key) - except KeyError as e: - if key not in request.form: - raise - raise DebugFilesKeyError(request, key) - newcls.__name__ = oldcls.__name__ - newcls.__module__ = oldcls.__module__ - request.files.__class__ = newcls diff --git a/Linux_i686/lib/python2.7/site-packages/flask/ext/__init__.py b/Linux_i686/lib/python2.7/site-packages/flask/ext/__init__.py deleted file mode 100644 index f29958a..0000000 --- a/Linux_i686/lib/python2.7/site-packages/flask/ext/__init__.py +++ /dev/null @@ -1,29 +0,0 @@ -# -*- coding: utf-8 -*- -""" - flask.ext - ~~~~~~~~~ - - Redirect imports for extensions. This module basically makes it possible - for us to transition from flaskext.foo to flask_foo without having to - force all extensions to upgrade at the same time. - - When a user does ``from flask.ext.foo import bar`` it will attempt to - import ``from flask_foo import bar`` first and when that fails it will - try to import ``from flaskext.foo import bar``. - - We're switching from namespace packages because it was just too painful for - everybody involved. - - :copyright: (c) 2011 by Armin Ronacher. - :license: BSD, see LICENSE for more details. -""" - - -def setup(): - from ..exthook import ExtensionImporter - importer = ExtensionImporter(['flask_%s', 'flaskext.%s'], __name__) - importer.install() - - -setup() -del setup diff --git a/Linux_i686/lib/python2.7/site-packages/flask/exthook.py b/Linux_i686/lib/python2.7/site-packages/flask/exthook.py deleted file mode 100644 index d0d814c..0000000 --- a/Linux_i686/lib/python2.7/site-packages/flask/exthook.py +++ /dev/null @@ -1,120 +0,0 @@ -# -*- coding: utf-8 -*- -""" - flask.exthook - ~~~~~~~~~~~~~ - - Redirect imports for extensions. This module basically makes it possible - for us to transition from flaskext.foo to flask_foo without having to - force all extensions to upgrade at the same time. - - When a user does ``from flask.ext.foo import bar`` it will attempt to - import ``from flask_foo import bar`` first and when that fails it will - try to import ``from flaskext.foo import bar``. - - We're switching from namespace packages because it was just too painful for - everybody involved. - - This is used by `flask.ext`. - - :copyright: (c) 2011 by Armin Ronacher. - :license: BSD, see LICENSE for more details. -""" -import sys -import os -from ._compat import reraise - - -class ExtensionImporter(object): - """This importer redirects imports from this submodule to other locations. - This makes it possible to transition from the old flaskext.name to the - newer flask_name without people having a hard time. - """ - - def __init__(self, module_choices, wrapper_module): - self.module_choices = module_choices - self.wrapper_module = wrapper_module - self.prefix = wrapper_module + '.' - self.prefix_cutoff = wrapper_module.count('.') + 1 - - def __eq__(self, other): - return self.__class__.__module__ == other.__class__.__module__ and \ - self.__class__.__name__ == other.__class__.__name__ and \ - self.wrapper_module == other.wrapper_module and \ - self.module_choices == other.module_choices - - def __ne__(self, other): - return not self.__eq__(other) - - def install(self): - sys.meta_path[:] = [x for x in sys.meta_path if self != x] + [self] - - def find_module(self, fullname, path=None): - if fullname.startswith(self.prefix): - return self - - def load_module(self, fullname): - if fullname in sys.modules: - return sys.modules[fullname] - modname = fullname.split('.', self.prefix_cutoff)[self.prefix_cutoff] - for path in self.module_choices: - realname = path % modname - try: - __import__(realname) - except ImportError: - exc_type, exc_value, tb = sys.exc_info() - # since we only establish the entry in sys.modules at the - # very this seems to be redundant, but if recursive imports - # happen we will call into the move import a second time. - # On the second invocation we still don't have an entry for - # fullname in sys.modules, but we will end up with the same - # fake module name and that import will succeed since this - # one already has a temporary entry in the modules dict. - # Since this one "succeeded" temporarily that second - # invocation now will have created a fullname entry in - # sys.modules which we have to kill. - sys.modules.pop(fullname, None) - - # If it's an important traceback we reraise it, otherwise - # we swallow it and try the next choice. The skipped frame - # is the one from __import__ above which we don't care about - if self.is_important_traceback(realname, tb): - reraise(exc_type, exc_value, tb.tb_next) - continue - module = sys.modules[fullname] = sys.modules[realname] - if '.' not in modname: - setattr(sys.modules[self.wrapper_module], modname, module) - return module - raise ImportError('No module named %s' % fullname) - - def is_important_traceback(self, important_module, tb): - """Walks a traceback's frames and checks if any of the frames - originated in the given important module. If that is the case then we - were able to import the module itself but apparently something went - wrong when the module was imported. (Eg: import of an import failed). - """ - while tb is not None: - if self.is_important_frame(important_module, tb): - return True - tb = tb.tb_next - return False - - def is_important_frame(self, important_module, tb): - """Checks a single frame if it's important.""" - g = tb.tb_frame.f_globals - if '__name__' not in g: - return False - - module_name = g['__name__'] - - # Python 2.7 Behavior. Modules are cleaned up late so the - # name shows up properly here. Success! - if module_name == important_module: - return True - - # Some python versions will will clean up modules so early that the - # module name at that point is no longer set. Try guessing from - # the filename then. - filename = os.path.abspath(tb.tb_frame.f_code.co_filename) - test_string = os.path.sep + important_module.replace('.', os.path.sep) - return test_string + '.py' in filename or \ - test_string + os.path.sep + '__init__.py' in filename diff --git a/Linux_i686/lib/python2.7/site-packages/flask/globals.py b/Linux_i686/lib/python2.7/site-packages/flask/globals.py deleted file mode 100644 index 67d41f5..0000000 --- a/Linux_i686/lib/python2.7/site-packages/flask/globals.py +++ /dev/null @@ -1,44 +0,0 @@ -# -*- coding: utf-8 -*- -""" - flask.globals - ~~~~~~~~~~~~~ - - Defines all the global objects that are proxies to the current - active context. - - :copyright: (c) 2011 by Armin Ronacher. - :license: BSD, see LICENSE for more details. -""" - -from functools import partial -from werkzeug.local import LocalStack, LocalProxy - - -def _lookup_req_object(name): - top = _request_ctx_stack.top - if top is None: - raise RuntimeError('working outside of request context') - return getattr(top, name) - - -def _lookup_app_object(name): - top = _app_ctx_stack.top - if top is None: - raise RuntimeError('working outside of application context') - return getattr(top, name) - - -def _find_app(): - top = _app_ctx_stack.top - if top is None: - raise RuntimeError('working outside of application context') - return top.app - - -# context locals -_request_ctx_stack = LocalStack() -_app_ctx_stack = LocalStack() -current_app = LocalProxy(_find_app) -request = LocalProxy(partial(_lookup_req_object, 'request')) -session = LocalProxy(partial(_lookup_req_object, 'session')) -g = LocalProxy(partial(_lookup_app_object, 'g')) diff --git a/Linux_i686/lib/python2.7/site-packages/flask/helpers.py b/Linux_i686/lib/python2.7/site-packages/flask/helpers.py deleted file mode 100644 index 1e7c87f..0000000 --- a/Linux_i686/lib/python2.7/site-packages/flask/helpers.py +++ /dev/null @@ -1,849 +0,0 @@ -# -*- coding: utf-8 -*- -""" - flask.helpers - ~~~~~~~~~~~~~ - - Implements various helpers. - - :copyright: (c) 2011 by Armin Ronacher. - :license: BSD, see LICENSE for more details. -""" - -import os -import sys -import pkgutil -import posixpath -import mimetypes -from time import time -from zlib import adler32 -from threading import RLock -from werkzeug.routing import BuildError -from functools import update_wrapper - -try: - from werkzeug.urls import url_quote -except ImportError: - from urlparse import quote as url_quote - -from werkzeug.datastructures import Headers -from werkzeug.exceptions import NotFound - -# this was moved in 0.7 -try: - from werkzeug.wsgi import wrap_file -except ImportError: - from werkzeug.utils import wrap_file - -from jinja2 import FileSystemLoader - -from .signals import message_flashed -from .globals import session, _request_ctx_stack, _app_ctx_stack, \ - current_app, request -from ._compat import string_types, text_type - - -# sentinel -_missing = object() - - -# what separators does this operating system provide that are not a slash? -# this is used by the send_from_directory function to ensure that nobody is -# able to access files from outside the filesystem. -_os_alt_seps = list(sep for sep in [os.path.sep, os.path.altsep] - if sep not in (None, '/')) - - -def _endpoint_from_view_func(view_func): - """Internal helper that returns the default endpoint for a given - function. This always is the function name. - """ - assert view_func is not None, 'expected view func if endpoint ' \ - 'is not provided.' - return view_func.__name__ - - -def stream_with_context(generator_or_function): - """Request contexts disappear when the response is started on the server. - This is done for efficiency reasons and to make it less likely to encounter - memory leaks with badly written WSGI middlewares. The downside is that if - you are using streamed responses, the generator cannot access request bound - information any more. - - This function however can help you keep the context around for longer:: - - from flask import stream_with_context, request, Response - - @app.route('/stream') - def streamed_response(): - @stream_with_context - def generate(): - yield 'Hello ' - yield request.args['name'] - yield '!' - return Response(generate()) - - Alternatively it can also be used around a specific generator:: - - from flask import stream_with_context, request, Response - - @app.route('/stream') - def streamed_response(): - def generate(): - yield 'Hello ' - yield request.args['name'] - yield '!' - return Response(stream_with_context(generate())) - - .. versionadded:: 0.9 - """ - try: - gen = iter(generator_or_function) - except TypeError: - def decorator(*args, **kwargs): - gen = generator_or_function() - return stream_with_context(gen) - return update_wrapper(decorator, generator_or_function) - - def generator(): - ctx = _request_ctx_stack.top - if ctx is None: - raise RuntimeError('Attempted to stream with context but ' - 'there was no context in the first place to keep around.') - with ctx: - # Dummy sentinel. Has to be inside the context block or we're - # not actually keeping the context around. - yield None - - # The try/finally is here so that if someone passes a WSGI level - # iterator in we're still running the cleanup logic. Generators - # don't need that because they are closed on their destruction - # automatically. - try: - for item in gen: - yield item - finally: - if hasattr(gen, 'close'): - gen.close() - - # The trick is to start the generator. Then the code execution runs until - # the first dummy None is yielded at which point the context was already - # pushed. This item is discarded. Then when the iteration continues the - # real generator is executed. - wrapped_g = generator() - next(wrapped_g) - return wrapped_g - - -def make_response(*args): - """Sometimes it is necessary to set additional headers in a view. Because - views do not have to return response objects but can return a value that - is converted into a response object by Flask itself, it becomes tricky to - add headers to it. This function can be called instead of using a return - and you will get a response object which you can use to attach headers. - - If view looked like this and you want to add a new header:: - - def index(): - return render_template('index.html', foo=42) - - You can now do something like this:: - - def index(): - response = make_response(render_template('index.html', foo=42)) - response.headers['X-Parachutes'] = 'parachutes are cool' - return response - - This function accepts the very same arguments you can return from a - view function. This for example creates a response with a 404 error - code:: - - response = make_response(render_template('not_found.html'), 404) - - The other use case of this function is to force the return value of a - view function into a response which is helpful with view - decorators:: - - response = make_response(view_function()) - response.headers['X-Parachutes'] = 'parachutes are cool' - - Internally this function does the following things: - - - if no arguments are passed, it creates a new response argument - - if one argument is passed, :meth:`flask.Flask.make_response` - is invoked with it. - - if more than one argument is passed, the arguments are passed - to the :meth:`flask.Flask.make_response` function as tuple. - - .. versionadded:: 0.6 - """ - if not args: - return current_app.response_class() - if len(args) == 1: - args = args[0] - return current_app.make_response(args) - - -def url_for(endpoint, **values): - """Generates a URL to the given endpoint with the method provided. - - Variable arguments that are unknown to the target endpoint are appended - to the generated URL as query arguments. If the value of a query argument - is `None`, the whole pair is skipped. In case blueprints are active - you can shortcut references to the same blueprint by prefixing the - local endpoint with a dot (``.``). - - This will reference the index function local to the current blueprint:: - - url_for('.index') - - For more information, head over to the :ref:`Quickstart `. - - To integrate applications, :class:`Flask` has a hook to intercept URL build - errors through :attr:`Flask.build_error_handler`. The `url_for` function - results in a :exc:`~werkzeug.routing.BuildError` when the current app does - not have a URL for the given endpoint and values. When it does, the - :data:`~flask.current_app` calls its :attr:`~Flask.build_error_handler` if - it is not `None`, which can return a string to use as the result of - `url_for` (instead of `url_for`'s default to raise the - :exc:`~werkzeug.routing.BuildError` exception) or re-raise the exception. - An example:: - - def external_url_handler(error, endpoint, **values): - "Looks up an external URL when `url_for` cannot build a URL." - # This is an example of hooking the build_error_handler. - # Here, lookup_url is some utility function you've built - # which looks up the endpoint in some external URL registry. - url = lookup_url(endpoint, **values) - if url is None: - # External lookup did not have a URL. - # Re-raise the BuildError, in context of original traceback. - exc_type, exc_value, tb = sys.exc_info() - if exc_value is error: - raise exc_type, exc_value, tb - else: - raise error - # url_for will use this result, instead of raising BuildError. - return url - - app.build_error_handler = external_url_handler - - Here, `error` is the instance of :exc:`~werkzeug.routing.BuildError`, and - `endpoint` and `**values` are the arguments passed into `url_for`. Note - that this is for building URLs outside the current application, and not for - handling 404 NotFound errors. - - .. versionadded:: 0.10 - The `_scheme` parameter was added. - - .. versionadded:: 0.9 - The `_anchor` and `_method` parameters were added. - - .. versionadded:: 0.9 - Calls :meth:`Flask.handle_build_error` on - :exc:`~werkzeug.routing.BuildError`. - - :param endpoint: the endpoint of the URL (name of the function) - :param values: the variable arguments of the URL rule - :param _external: if set to `True`, an absolute URL is generated. Server - address can be changed via `SERVER_NAME` configuration variable which - defaults to `localhost`. - :param _scheme: a string specifying the desired URL scheme. The `_external` - parameter must be set to `True` or a `ValueError` is raised. - :param _anchor: if provided this is added as anchor to the URL. - :param _method: if provided this explicitly specifies an HTTP method. - """ - appctx = _app_ctx_stack.top - reqctx = _request_ctx_stack.top - if appctx is None: - raise RuntimeError('Attempted to generate a URL without the ' - 'application context being pushed. This has to be ' - 'executed when application context is available.') - - # If request specific information is available we have some extra - # features that support "relative" urls. - if reqctx is not None: - url_adapter = reqctx.url_adapter - blueprint_name = request.blueprint - if not reqctx.request._is_old_module: - if endpoint[:1] == '.': - if blueprint_name is not None: - endpoint = blueprint_name + endpoint - else: - endpoint = endpoint[1:] - else: - # TODO: get rid of this deprecated functionality in 1.0 - if '.' not in endpoint: - if blueprint_name is not None: - endpoint = blueprint_name + '.' + endpoint - elif endpoint.startswith('.'): - endpoint = endpoint[1:] - external = values.pop('_external', False) - - # Otherwise go with the url adapter from the appctx and make - # the urls external by default. - else: - url_adapter = appctx.url_adapter - if url_adapter is None: - raise RuntimeError('Application was not able to create a URL ' - 'adapter for request independent URL generation. ' - 'You might be able to fix this by setting ' - 'the SERVER_NAME config variable.') - external = values.pop('_external', True) - - anchor = values.pop('_anchor', None) - method = values.pop('_method', None) - scheme = values.pop('_scheme', None) - appctx.app.inject_url_defaults(endpoint, values) - - if scheme is not None: - if not external: - raise ValueError('When specifying _scheme, _external must be True') - url_adapter.url_scheme = scheme - - try: - rv = url_adapter.build(endpoint, values, method=method, - force_external=external) - except BuildError as error: - # We need to inject the values again so that the app callback can - # deal with that sort of stuff. - values['_external'] = external - values['_anchor'] = anchor - values['_method'] = method - return appctx.app.handle_url_build_error(error, endpoint, values) - - if anchor is not None: - rv += '#' + url_quote(anchor) - return rv - - -def get_template_attribute(template_name, attribute): - """Loads a macro (or variable) a template exports. This can be used to - invoke a macro from within Python code. If you for example have a - template named `_cider.html` with the following contents: - - .. sourcecode:: html+jinja - - {% macro hello(name) %}Hello {{ name }}!{% endmacro %} - - You can access this from Python code like this:: - - hello = get_template_attribute('_cider.html', 'hello') - return hello('World') - - .. versionadded:: 0.2 - - :param template_name: the name of the template - :param attribute: the name of the variable of macro to access - """ - return getattr(current_app.jinja_env.get_template(template_name).module, - attribute) - - -def flash(message, category='message'): - """Flashes a message to the next request. In order to remove the - flashed message from the session and to display it to the user, - the template has to call :func:`get_flashed_messages`. - - .. versionchanged:: 0.3 - `category` parameter added. - - :param message: the message to be flashed. - :param category: the category for the message. The following values - are recommended: ``'message'`` for any kind of message, - ``'error'`` for errors, ``'info'`` for information - messages and ``'warning'`` for warnings. However any - kind of string can be used as category. - """ - # Original implementation: - # - # session.setdefault('_flashes', []).append((category, message)) - # - # This assumed that changes made to mutable structures in the session are - # are always in sync with the sess on object, which is not true for session - # implementations that use external storage for keeping their keys/values. - flashes = session.get('_flashes', []) - flashes.append((category, message)) - session['_flashes'] = flashes - message_flashed.send(current_app._get_current_object(), - message=message, category=category) - - -def get_flashed_messages(with_categories=False, category_filter=[]): - """Pulls all flashed messages from the session and returns them. - Further calls in the same request to the function will return - the same messages. By default just the messages are returned, - but when `with_categories` is set to `True`, the return value will - be a list of tuples in the form ``(category, message)`` instead. - - Filter the flashed messages to one or more categories by providing those - categories in `category_filter`. This allows rendering categories in - separate html blocks. The `with_categories` and `category_filter` - arguments are distinct: - - * `with_categories` controls whether categories are returned with message - text (`True` gives a tuple, where `False` gives just the message text). - * `category_filter` filters the messages down to only those matching the - provided categories. - - See :ref:`message-flashing-pattern` for examples. - - .. versionchanged:: 0.3 - `with_categories` parameter added. - - .. versionchanged:: 0.9 - `category_filter` parameter added. - - :param with_categories: set to `True` to also receive categories. - :param category_filter: whitelist of categories to limit return values - """ - flashes = _request_ctx_stack.top.flashes - if flashes is None: - _request_ctx_stack.top.flashes = flashes = session.pop('_flashes') \ - if '_flashes' in session else [] - if category_filter: - flashes = list(filter(lambda f: f[0] in category_filter, flashes)) - if not with_categories: - return [x[1] for x in flashes] - return flashes - - -def send_file(filename_or_fp, mimetype=None, as_attachment=False, - attachment_filename=None, add_etags=True, - cache_timeout=None, conditional=False): - """Sends the contents of a file to the client. This will use the - most efficient method available and configured. By default it will - try to use the WSGI server's file_wrapper support. Alternatively - you can set the application's :attr:`~Flask.use_x_sendfile` attribute - to ``True`` to directly emit an `X-Sendfile` header. This however - requires support of the underlying webserver for `X-Sendfile`. - - By default it will try to guess the mimetype for you, but you can - also explicitly provide one. For extra security you probably want - to send certain files as attachment (HTML for instance). The mimetype - guessing requires a `filename` or an `attachment_filename` to be - provided. - - Please never pass filenames to this function from user sources without - checking them first. Something like this is usually sufficient to - avoid security problems:: - - if '..' in filename or filename.startswith('/'): - abort(404) - - .. versionadded:: 0.2 - - .. versionadded:: 0.5 - The `add_etags`, `cache_timeout` and `conditional` parameters were - added. The default behavior is now to attach etags. - - .. versionchanged:: 0.7 - mimetype guessing and etag support for file objects was - deprecated because it was unreliable. Pass a filename if you are - able to, otherwise attach an etag yourself. This functionality - will be removed in Flask 1.0 - - .. versionchanged:: 0.9 - cache_timeout pulls its default from application config, when None. - - :param filename_or_fp: the filename of the file to send. This is - relative to the :attr:`~Flask.root_path` if a - relative path is specified. - Alternatively a file object might be provided - in which case `X-Sendfile` might not work and - fall back to the traditional method. Make sure - that the file pointer is positioned at the start - of data to send before calling :func:`send_file`. - :param mimetype: the mimetype of the file if provided, otherwise - auto detection happens. - :param as_attachment: set to `True` if you want to send this file with - a ``Content-Disposition: attachment`` header. - :param attachment_filename: the filename for the attachment if it - differs from the file's filename. - :param add_etags: set to `False` to disable attaching of etags. - :param conditional: set to `True` to enable conditional responses. - - :param cache_timeout: the timeout in seconds for the headers. When `None` - (default), this value is set by - :meth:`~Flask.get_send_file_max_age` of - :data:`~flask.current_app`. - """ - mtime = None - if isinstance(filename_or_fp, string_types): - filename = filename_or_fp - file = None - else: - from warnings import warn - file = filename_or_fp - filename = getattr(file, 'name', None) - - # XXX: this behavior is now deprecated because it was unreliable. - # removed in Flask 1.0 - if not attachment_filename and not mimetype \ - and isinstance(filename, string_types): - warn(DeprecationWarning('The filename support for file objects ' - 'passed to send_file is now deprecated. Pass an ' - 'attach_filename if you want mimetypes to be guessed.'), - stacklevel=2) - if add_etags: - warn(DeprecationWarning('In future flask releases etags will no ' - 'longer be generated for file objects passed to the send_file ' - 'function because this behavior was unreliable. Pass ' - 'filenames instead if possible, otherwise attach an etag ' - 'yourself based on another value'), stacklevel=2) - - if filename is not None: - if not os.path.isabs(filename): - filename = os.path.join(current_app.root_path, filename) - if mimetype is None and (filename or attachment_filename): - mimetype = mimetypes.guess_type(filename or attachment_filename)[0] - if mimetype is None: - mimetype = 'application/octet-stream' - - headers = Headers() - if as_attachment: - if attachment_filename is None: - if filename is None: - raise TypeError('filename unavailable, required for ' - 'sending as attachment') - attachment_filename = os.path.basename(filename) - headers.add('Content-Disposition', 'attachment', - filename=attachment_filename) - - if current_app.use_x_sendfile and filename: - if file is not None: - file.close() - headers['X-Sendfile'] = filename - headers['Content-Length'] = os.path.getsize(filename) - data = None - else: - if file is None: - file = open(filename, 'rb') - mtime = os.path.getmtime(filename) - headers['Content-Length'] = os.path.getsize(filename) - data = wrap_file(request.environ, file) - - rv = current_app.response_class(data, mimetype=mimetype, headers=headers, - direct_passthrough=True) - - # if we know the file modification date, we can store it as the - # the time of the last modification. - if mtime is not None: - rv.last_modified = int(mtime) - - rv.cache_control.public = True - if cache_timeout is None: - cache_timeout = current_app.get_send_file_max_age(filename) - if cache_timeout is not None: - rv.cache_control.max_age = cache_timeout - rv.expires = int(time() + cache_timeout) - - if add_etags and filename is not None: - rv.set_etag('flask-%s-%s-%s' % ( - os.path.getmtime(filename), - os.path.getsize(filename), - adler32( - filename.encode('utf-8') if isinstance(filename, text_type) - else filename - ) & 0xffffffff - )) - if conditional: - rv = rv.make_conditional(request) - # make sure we don't send x-sendfile for servers that - # ignore the 304 status code for x-sendfile. - if rv.status_code == 304: - rv.headers.pop('x-sendfile', None) - return rv - - -def safe_join(directory, filename): - """Safely join `directory` and `filename`. - - Example usage:: - - @app.route('/wiki/') - def wiki_page(filename): - filename = safe_join(app.config['WIKI_FOLDER'], filename) - with open(filename, 'rb') as fd: - content = fd.read() # Read and process the file content... - - :param directory: the base directory. - :param filename: the untrusted filename relative to that directory. - :raises: :class:`~werkzeug.exceptions.NotFound` if the resulting path - would fall out of `directory`. - """ - filename = posixpath.normpath(filename) - for sep in _os_alt_seps: - if sep in filename: - raise NotFound() - if os.path.isabs(filename) or \ - filename == '..' or \ - filename.startswith('../'): - raise NotFound() - return os.path.join(directory, filename) - - -def send_from_directory(directory, filename, **options): - """Send a file from a given directory with :func:`send_file`. This - is a secure way to quickly expose static files from an upload folder - or something similar. - - Example usage:: - - @app.route('/uploads/') - def download_file(filename): - return send_from_directory(app.config['UPLOAD_FOLDER'], - filename, as_attachment=True) - - .. admonition:: Sending files and Performance - - It is strongly recommended to activate either `X-Sendfile` support in - your webserver or (if no authentication happens) to tell the webserver - to serve files for the given path on its own without calling into the - web application for improved performance. - - .. versionadded:: 0.5 - - :param directory: the directory where all the files are stored. - :param filename: the filename relative to that directory to - download. - :param options: optional keyword arguments that are directly - forwarded to :func:`send_file`. - """ - filename = safe_join(directory, filename) - if not os.path.isfile(filename): - raise NotFound() - options.setdefault('conditional', True) - return send_file(filename, **options) - - -def get_root_path(import_name): - """Returns the path to a package or cwd if that cannot be found. This - returns the path of a package or the folder that contains a module. - - Not to be confused with the package path returned by :func:`find_package`. - """ - # Module already imported and has a file attribute. Use that first. - mod = sys.modules.get(import_name) - if mod is not None and hasattr(mod, '__file__'): - return os.path.dirname(os.path.abspath(mod.__file__)) - - # Next attempt: check the loader. - loader = pkgutil.get_loader(import_name) - - # Loader does not exist or we're referring to an unloaded main module - # or a main module without path (interactive sessions), go with the - # current working directory. - if loader is None or import_name == '__main__': - return os.getcwd() - - # For .egg, zipimporter does not have get_filename until Python 2.7. - # Some other loaders might exhibit the same behavior. - if hasattr(loader, 'get_filename'): - filepath = loader.get_filename(import_name) - else: - # Fall back to imports. - __import__(import_name) - filepath = sys.modules[import_name].__file__ - - # filepath is import_name.py for a module, or __init__.py for a package. - return os.path.dirname(os.path.abspath(filepath)) - - -def find_package(import_name): - """Finds a package and returns the prefix (or None if the package is - not installed) as well as the folder that contains the package or - module as a tuple. The package path returned is the module that would - have to be added to the pythonpath in order to make it possible to - import the module. The prefix is the path below which a UNIX like - folder structure exists (lib, share etc.). - """ - root_mod_name = import_name.split('.')[0] - loader = pkgutil.get_loader(root_mod_name) - if loader is None or import_name == '__main__': - # import name is not found, or interactive/main module - package_path = os.getcwd() - else: - # For .egg, zipimporter does not have get_filename until Python 2.7. - if hasattr(loader, 'get_filename'): - filename = loader.get_filename(root_mod_name) - elif hasattr(loader, 'archive'): - # zipimporter's loader.archive points to the .egg or .zip - # archive filename is dropped in call to dirname below. - filename = loader.archive - else: - # At least one loader is missing both get_filename and archive: - # Google App Engine's HardenedModulesHook - # - # Fall back to imports. - __import__(import_name) - filename = sys.modules[import_name].__file__ - package_path = os.path.abspath(os.path.dirname(filename)) - # package_path ends with __init__.py for a package - if loader.is_package(root_mod_name): - package_path = os.path.dirname(package_path) - - site_parent, site_folder = os.path.split(package_path) - py_prefix = os.path.abspath(sys.prefix) - if package_path.startswith(py_prefix): - return py_prefix, package_path - elif site_folder.lower() == 'site-packages': - parent, folder = os.path.split(site_parent) - # Windows like installations - if folder.lower() == 'lib': - base_dir = parent - # UNIX like installations - elif os.path.basename(parent).lower() == 'lib': - base_dir = os.path.dirname(parent) - else: - base_dir = site_parent - return base_dir, package_path - return None, package_path - - -class locked_cached_property(object): - """A decorator that converts a function into a lazy property. The - function wrapped is called the first time to retrieve the result - and then that calculated result is used the next time you access - the value. Works like the one in Werkzeug but has a lock for - thread safety. - """ - - def __init__(self, func, name=None, doc=None): - self.__name__ = name or func.__name__ - self.__module__ = func.__module__ - self.__doc__ = doc or func.__doc__ - self.func = func - self.lock = RLock() - - def __get__(self, obj, type=None): - if obj is None: - return self - with self.lock: - value = obj.__dict__.get(self.__name__, _missing) - if value is _missing: - value = self.func(obj) - obj.__dict__[self.__name__] = value - return value - - -class _PackageBoundObject(object): - - def __init__(self, import_name, template_folder=None): - #: The name of the package or module. Do not change this once - #: it was set by the constructor. - self.import_name = import_name - - #: location of the templates. `None` if templates should not be - #: exposed. - self.template_folder = template_folder - - #: Where is the app root located? - self.root_path = get_root_path(self.import_name) - - self._static_folder = None - self._static_url_path = None - - def _get_static_folder(self): - if self._static_folder is not None: - return os.path.join(self.root_path, self._static_folder) - def _set_static_folder(self, value): - self._static_folder = value - static_folder = property(_get_static_folder, _set_static_folder) - del _get_static_folder, _set_static_folder - - def _get_static_url_path(self): - if self._static_url_path is None: - if self.static_folder is None: - return None - return '/' + os.path.basename(self.static_folder) - return self._static_url_path - def _set_static_url_path(self, value): - self._static_url_path = value - static_url_path = property(_get_static_url_path, _set_static_url_path) - del _get_static_url_path, _set_static_url_path - - @property - def has_static_folder(self): - """This is `True` if the package bound object's container has a - folder named ``'static'``. - - .. versionadded:: 0.5 - """ - return self.static_folder is not None - - @locked_cached_property - def jinja_loader(self): - """The Jinja loader for this package bound object. - - .. versionadded:: 0.5 - """ - if self.template_folder is not None: - return FileSystemLoader(os.path.join(self.root_path, - self.template_folder)) - - def get_send_file_max_age(self, filename): - """Provides default cache_timeout for the :func:`send_file` functions. - - By default, this function returns ``SEND_FILE_MAX_AGE_DEFAULT`` from - the configuration of :data:`~flask.current_app`. - - Static file functions such as :func:`send_from_directory` use this - function, and :func:`send_file` calls this function on - :data:`~flask.current_app` when the given cache_timeout is `None`. If a - cache_timeout is given in :func:`send_file`, that timeout is used; - otherwise, this method is called. - - This allows subclasses to change the behavior when sending files based - on the filename. For example, to set the cache timeout for .js files - to 60 seconds:: - - class MyFlask(flask.Flask): - def get_send_file_max_age(self, name): - if name.lower().endswith('.js'): - return 60 - return flask.Flask.get_send_file_max_age(self, name) - - .. versionadded:: 0.9 - """ - return current_app.config['SEND_FILE_MAX_AGE_DEFAULT'] - - def send_static_file(self, filename): - """Function used internally to send static files from the static - folder to the browser. - - .. versionadded:: 0.5 - """ - if not self.has_static_folder: - raise RuntimeError('No static folder for this object') - # Ensure get_send_file_max_age is called in all cases. - # Here, we ensure get_send_file_max_age is called for Blueprints. - cache_timeout = self.get_send_file_max_age(filename) - return send_from_directory(self.static_folder, filename, - cache_timeout=cache_timeout) - - def open_resource(self, resource, mode='rb'): - """Opens a resource from the application's resource folder. To see - how this works, consider the following folder structure:: - - /myapplication.py - /schema.sql - /static - /style.css - /templates - /layout.html - /index.html - - If you want to open the `schema.sql` file you would do the - following:: - - with app.open_resource('schema.sql') as f: - contents = f.read() - do_something_with(contents) - - :param resource: the name of the resource. To access resources within - subfolders use forward slashes as separator. - :param mode: resource file opening mode, default is 'rb'. - """ - if mode not in ('r', 'rb'): - raise ValueError('Resources can only be opened for reading') - return open(os.path.join(self.root_path, resource), mode) diff --git a/Linux_i686/lib/python2.7/site-packages/flask/json.py b/Linux_i686/lib/python2.7/site-packages/flask/json.py deleted file mode 100644 index 45ba324..0000000 --- a/Linux_i686/lib/python2.7/site-packages/flask/json.py +++ /dev/null @@ -1,243 +0,0 @@ -# -*- coding: utf-8 -*- -""" - flask.jsonimpl - ~~~~~~~~~~~~~~ - - Implementation helpers for the JSON support in Flask. - - :copyright: (c) 2012 by Armin Ronacher. - :license: BSD, see LICENSE for more details. -""" -import io -import uuid -from datetime import datetime -from .globals import current_app, request -from ._compat import text_type, PY2 - -from werkzeug.http import http_date -from jinja2 import Markup - -# Use the same json implementation as itsdangerous on which we -# depend anyways. -try: - from itsdangerous import simplejson as _json -except ImportError: - from itsdangerous import json as _json - - -# figure out if simplejson escapes slashes. This behavior was changed -# from one version to another without reason. -_slash_escape = '\\/' not in _json.dumps('/') - - -__all__ = ['dump', 'dumps', 'load', 'loads', 'htmlsafe_dump', - 'htmlsafe_dumps', 'JSONDecoder', 'JSONEncoder', - 'jsonify'] - - -def _wrap_reader_for_text(fp, encoding): - if isinstance(fp.read(0), bytes): - fp = io.TextIOWrapper(io.BufferedReader(fp), encoding) - return fp - - -def _wrap_writer_for_text(fp, encoding): - try: - fp.write('') - except TypeError: - fp = io.TextIOWrapper(fp, encoding) - return fp - - -class JSONEncoder(_json.JSONEncoder): - """The default Flask JSON encoder. This one extends the default simplejson - encoder by also supporting ``datetime`` objects, ``UUID`` as well as - ``Markup`` objects which are serialized as RFC 822 datetime strings (same - as the HTTP date format). In order to support more data types override the - :meth:`default` method. - """ - - def default(self, o): - """Implement this method in a subclass such that it returns a - serializable object for ``o``, or calls the base implementation (to - raise a ``TypeError``). - - For example, to support arbitrary iterators, you could implement - default like this:: - - def default(self, o): - try: - iterable = iter(o) - except TypeError: - pass - else: - return list(iterable) - return JSONEncoder.default(self, o) - """ - if isinstance(o, datetime): - return http_date(o) - if isinstance(o, uuid.UUID): - return str(o) - if hasattr(o, '__html__'): - return text_type(o.__html__()) - return _json.JSONEncoder.default(self, o) - - -class JSONDecoder(_json.JSONDecoder): - """The default JSON decoder. This one does not change the behavior from - the default simplejson encoder. Consult the :mod:`json` documentation - for more information. This decoder is not only used for the load - functions of this module but also :attr:`~flask.Request`. - """ - - -def _dump_arg_defaults(kwargs): - """Inject default arguments for dump functions.""" - if current_app: - kwargs.setdefault('cls', current_app.json_encoder) - if not current_app.config['JSON_AS_ASCII']: - kwargs.setdefault('ensure_ascii', False) - kwargs.setdefault('sort_keys', current_app.config['JSON_SORT_KEYS']) - else: - kwargs.setdefault('sort_keys', True) - kwargs.setdefault('cls', JSONEncoder) - - -def _load_arg_defaults(kwargs): - """Inject default arguments for load functions.""" - if current_app: - kwargs.setdefault('cls', current_app.json_decoder) - else: - kwargs.setdefault('cls', JSONDecoder) - - -def dumps(obj, **kwargs): - """Serialize ``obj`` to a JSON formatted ``str`` by using the application's - configured encoder (:attr:`~flask.Flask.json_encoder`) if there is an - application on the stack. - - This function can return ``unicode`` strings or ascii-only bytestrings by - default which coerce into unicode strings automatically. That behavior by - default is controlled by the ``JSON_AS_ASCII`` configuration variable - and can be overriden by the simplejson ``ensure_ascii`` parameter. - """ - _dump_arg_defaults(kwargs) - encoding = kwargs.pop('encoding', None) - rv = _json.dumps(obj, **kwargs) - if encoding is not None and isinstance(rv, text_type): - rv = rv.encode(encoding) - return rv - - -def dump(obj, fp, **kwargs): - """Like :func:`dumps` but writes into a file object.""" - _dump_arg_defaults(kwargs) - encoding = kwargs.pop('encoding', None) - if encoding is not None: - fp = _wrap_writer_for_text(fp, encoding) - _json.dump(obj, fp, **kwargs) - - -def loads(s, **kwargs): - """Unserialize a JSON object from a string ``s`` by using the application's - configured decoder (:attr:`~flask.Flask.json_decoder`) if there is an - application on the stack. - """ - _load_arg_defaults(kwargs) - if isinstance(s, bytes): - s = s.decode(kwargs.pop('encoding', None) or 'utf-8') - return _json.loads(s, **kwargs) - - -def load(fp, **kwargs): - """Like :func:`loads` but reads from a file object. - """ - _load_arg_defaults(kwargs) - if not PY2: - fp = _wrap_reader_for_text(fp, kwargs.pop('encoding', None) or 'utf-8') - return _json.load(fp, **kwargs) - - -def htmlsafe_dumps(obj, **kwargs): - """Works exactly like :func:`dumps` but is safe for use in ``') - self.assert_equal(rv, u'"\\u003c/script\\u003e"') - self.assert_equal(type(rv), text_type) - rv = render('{{ ""|tojson }}') - self.assert_equal(rv, '"\\u003c/script\\u003e"') - rv = render('{{ "<\0/script>"|tojson }}') - self.assert_equal(rv, '"\\u003c\\u0000/script\\u003e"') - rv = render('{{ "' % ( - render_traceback(self, full=full), - self.render_as_text().decode('utf-8', 'replace') - ) - - @property - def is_template_syntax_error(self): - """`True` if this is a template syntax error.""" - return isinstance(self.exc_value, TemplateSyntaxError) - - @property - def exc_info(self): - """Exception info tuple with a proxy around the frame objects.""" - return self.exc_type, self.exc_value, self.frames[0] - - @property - def standard_exc_info(self): - """Standard python exc_info for re-raising""" - tb = self.frames[0] - # the frame will be an actual traceback (or transparent proxy) if - # we are on pypy or a python implementation with support for tproxy - if type(tb) is not TracebackType: - tb = tb.tb - return self.exc_type, self.exc_value, tb - - -def make_traceback(exc_info, source_hint=None): - """Creates a processed traceback object from the exc_info.""" - exc_type, exc_value, tb = exc_info - if isinstance(exc_value, TemplateSyntaxError): - exc_info = translate_syntax_error(exc_value, source_hint) - initial_skip = 0 - else: - initial_skip = 1 - return translate_exception(exc_info, initial_skip) - - -def translate_syntax_error(error, source=None): - """Rewrites a syntax error to please traceback systems.""" - error.source = source - error.translated = True - exc_info = (error.__class__, error, None) - filename = error.filename - if filename is None: - filename = '' - return fake_exc_info(exc_info, filename, error.lineno) - - -def translate_exception(exc_info, initial_skip=0): - """If passed an exc_info it will automatically rewrite the exceptions - all the way down to the correct line numbers and frames. - """ - tb = exc_info[2] - frames = [] - - # skip some internal frames if wanted - for x in range(initial_skip): - if tb is not None: - tb = tb.tb_next - initial_tb = tb - - while tb is not None: - # skip frames decorated with @internalcode. These are internal - # calls we can't avoid and that are useless in template debugging - # output. - if tb.tb_frame.f_code in internal_code: - tb = tb.tb_next - continue - - # save a reference to the next frame if we override the current - # one with a faked one. - next = tb.tb_next - - # fake template exceptions - template = tb.tb_frame.f_globals.get('__jinja_template__') - if template is not None: - lineno = template.get_corresponding_lineno(tb.tb_lineno) - tb = fake_exc_info(exc_info[:2] + (tb,), template.filename, - lineno)[2] - - frames.append(make_frame_proxy(tb)) - tb = next - - # if we don't have any exceptions in the frames left, we have to - # reraise it unchanged. - # XXX: can we backup here? when could this happen? - if not frames: - reraise(exc_info[0], exc_info[1], exc_info[2]) - - return ProcessedTraceback(exc_info[0], exc_info[1], frames) - - -def fake_exc_info(exc_info, filename, lineno): - """Helper for `translate_exception`.""" - exc_type, exc_value, tb = exc_info - - # figure the real context out - if tb is not None: - real_locals = tb.tb_frame.f_locals.copy() - ctx = real_locals.get('context') - if ctx: - locals = ctx.get_all() - else: - locals = {} - for name, value in iteritems(real_locals): - if name.startswith('l_') and value is not missing: - locals[name[2:]] = value - - # if there is a local called __jinja_exception__, we get - # rid of it to not break the debug functionality. - locals.pop('__jinja_exception__', None) - else: - locals = {} - - # assamble fake globals we need - globals = { - '__name__': filename, - '__file__': filename, - '__jinja_exception__': exc_info[:2], - - # we don't want to keep the reference to the template around - # to not cause circular dependencies, but we mark it as Jinja - # frame for the ProcessedTraceback - '__jinja_template__': None - } - - # and fake the exception - code = compile('\n' * (lineno - 1) + raise_helper, filename, 'exec') - - # if it's possible, change the name of the code. This won't work - # on some python environments such as google appengine - try: - if tb is None: - location = 'template' - else: - function = tb.tb_frame.f_code.co_name - if function == 'root': - location = 'top-level template code' - elif function.startswith('block_'): - location = 'block "%s"' % function[6:] - else: - location = 'template' - code = code_type(0, code.co_nlocals, code.co_stacksize, - code.co_flags, code.co_code, code.co_consts, - code.co_names, code.co_varnames, filename, - location, code.co_firstlineno, - code.co_lnotab, (), ()) - except: - pass - - # execute the code and catch the new traceback - try: - exec(code, globals, locals) - except: - exc_info = sys.exc_info() - new_tb = exc_info[2].tb_next - - # return without this frame - return exc_info[:2] + (new_tb,) - - -def _init_ugly_crap(): - """This function implements a few ugly things so that we can patch the - traceback objects. The function returned allows resetting `tb_next` on - any python traceback object. Do not attempt to use this on non cpython - interpreters - """ - import ctypes - from types import TracebackType - - # figure out side of _Py_ssize_t - if hasattr(ctypes.pythonapi, 'Py_InitModule4_64'): - _Py_ssize_t = ctypes.c_int64 - else: - _Py_ssize_t = ctypes.c_int - - # regular python - class _PyObject(ctypes.Structure): - pass - _PyObject._fields_ = [ - ('ob_refcnt', _Py_ssize_t), - ('ob_type', ctypes.POINTER(_PyObject)) - ] - - # python with trace - if hasattr(sys, 'getobjects'): - class _PyObject(ctypes.Structure): - pass - _PyObject._fields_ = [ - ('_ob_next', ctypes.POINTER(_PyObject)), - ('_ob_prev', ctypes.POINTER(_PyObject)), - ('ob_refcnt', _Py_ssize_t), - ('ob_type', ctypes.POINTER(_PyObject)) - ] - - class _Traceback(_PyObject): - pass - _Traceback._fields_ = [ - ('tb_next', ctypes.POINTER(_Traceback)), - ('tb_frame', ctypes.POINTER(_PyObject)), - ('tb_lasti', ctypes.c_int), - ('tb_lineno', ctypes.c_int) - ] - - def tb_set_next(tb, next): - """Set the tb_next attribute of a traceback object.""" - if not (isinstance(tb, TracebackType) and - (next is None or isinstance(next, TracebackType))): - raise TypeError('tb_set_next arguments must be traceback objects') - obj = _Traceback.from_address(id(tb)) - if tb.tb_next is not None: - old = _Traceback.from_address(id(tb.tb_next)) - old.ob_refcnt -= 1 - if next is None: - obj.tb_next = ctypes.POINTER(_Traceback)() - else: - next = _Traceback.from_address(id(next)) - next.ob_refcnt += 1 - obj.tb_next = ctypes.pointer(next) - - return tb_set_next - - -# try to get a tb_set_next implementation if we don't have transparent -# proxies. -tb_set_next = None -if tproxy is None: - try: - tb_set_next = _init_ugly_crap() - except: - pass - del _init_ugly_crap diff --git a/Linux_i686/lib/python2.7/site-packages/jinja2/defaults.py b/Linux_i686/lib/python2.7/site-packages/jinja2/defaults.py deleted file mode 100644 index a27cb80..0000000 --- a/Linux_i686/lib/python2.7/site-packages/jinja2/defaults.py +++ /dev/null @@ -1,43 +0,0 @@ -# -*- coding: utf-8 -*- -""" - jinja2.defaults - ~~~~~~~~~~~~~~~ - - Jinja default filters and tags. - - :copyright: (c) 2010 by the Jinja Team. - :license: BSD, see LICENSE for more details. -""" -from jinja2._compat import range_type -from jinja2.utils import generate_lorem_ipsum, Cycler, Joiner - - -# defaults for the parser / lexer -BLOCK_START_STRING = '{%' -BLOCK_END_STRING = '%}' -VARIABLE_START_STRING = '{{' -VARIABLE_END_STRING = '}}' -COMMENT_START_STRING = '{#' -COMMENT_END_STRING = '#}' -LINE_STATEMENT_PREFIX = None -LINE_COMMENT_PREFIX = None -TRIM_BLOCKS = False -LSTRIP_BLOCKS = False -NEWLINE_SEQUENCE = '\n' -KEEP_TRAILING_NEWLINE = False - - -# default filters, tests and namespace -from jinja2.filters import FILTERS as DEFAULT_FILTERS -from jinja2.tests import TESTS as DEFAULT_TESTS -DEFAULT_NAMESPACE = { - 'range': range_type, - 'dict': lambda **kw: kw, - 'lipsum': generate_lorem_ipsum, - 'cycler': Cycler, - 'joiner': Joiner -} - - -# export all constants -__all__ = tuple(x for x in locals().keys() if x.isupper()) diff --git a/Linux_i686/lib/python2.7/site-packages/jinja2/environment.py b/Linux_i686/lib/python2.7/site-packages/jinja2/environment.py deleted file mode 100644 index 45fabad..0000000 --- a/Linux_i686/lib/python2.7/site-packages/jinja2/environment.py +++ /dev/null @@ -1,1191 +0,0 @@ -# -*- coding: utf-8 -*- -""" - jinja2.environment - ~~~~~~~~~~~~~~~~~~ - - Provides a class that holds runtime and parsing time options. - - :copyright: (c) 2010 by the Jinja Team. - :license: BSD, see LICENSE for more details. -""" -import os -import sys -from jinja2 import nodes -from jinja2.defaults import BLOCK_START_STRING, \ - BLOCK_END_STRING, VARIABLE_START_STRING, VARIABLE_END_STRING, \ - COMMENT_START_STRING, COMMENT_END_STRING, LINE_STATEMENT_PREFIX, \ - LINE_COMMENT_PREFIX, TRIM_BLOCKS, NEWLINE_SEQUENCE, \ - DEFAULT_FILTERS, DEFAULT_TESTS, DEFAULT_NAMESPACE, \ - KEEP_TRAILING_NEWLINE, LSTRIP_BLOCKS -from jinja2.lexer import get_lexer, TokenStream -from jinja2.parser import Parser -from jinja2.nodes import EvalContext -from jinja2.optimizer import optimize -from jinja2.compiler import generate -from jinja2.runtime import Undefined, new_context -from jinja2.exceptions import TemplateSyntaxError, TemplateNotFound, \ - TemplatesNotFound, TemplateRuntimeError -from jinja2.utils import import_string, LRUCache, Markup, missing, \ - concat, consume, internalcode -from jinja2._compat import imap, ifilter, string_types, iteritems, \ - text_type, reraise, implements_iterator, implements_to_string, \ - get_next, encode_filename, PY2, PYPY -from functools import reduce - - -# for direct template usage we have up to ten living environments -_spontaneous_environments = LRUCache(10) - -# the function to create jinja traceback objects. This is dynamically -# imported on the first exception in the exception handler. -_make_traceback = None - - -def get_spontaneous_environment(*args): - """Return a new spontaneous environment. A spontaneous environment is an - unnamed and unaccessible (in theory) environment that is used for - templates generated from a string and not from the file system. - """ - try: - env = _spontaneous_environments.get(args) - except TypeError: - return Environment(*args) - if env is not None: - return env - _spontaneous_environments[args] = env = Environment(*args) - env.shared = True - return env - - -def create_cache(size): - """Return the cache class for the given size.""" - if size == 0: - return None - if size < 0: - return {} - return LRUCache(size) - - -def copy_cache(cache): - """Create an empty copy of the given cache.""" - if cache is None: - return None - elif type(cache) is dict: - return {} - return LRUCache(cache.capacity) - - -def load_extensions(environment, extensions): - """Load the extensions from the list and bind it to the environment. - Returns a dict of instantiated environments. - """ - result = {} - for extension in extensions: - if isinstance(extension, string_types): - extension = import_string(extension) - result[extension.identifier] = extension(environment) - return result - - -def _environment_sanity_check(environment): - """Perform a sanity check on the environment.""" - assert issubclass(environment.undefined, Undefined), 'undefined must ' \ - 'be a subclass of undefined because filters depend on it.' - assert environment.block_start_string != \ - environment.variable_start_string != \ - environment.comment_start_string, 'block, variable and comment ' \ - 'start strings must be different' - assert environment.newline_sequence in ('\r', '\r\n', '\n'), \ - 'newline_sequence set to unknown line ending string.' - return environment - - -class Environment(object): - r"""The core component of Jinja is the `Environment`. It contains - important shared variables like configuration, filters, tests, - globals and others. Instances of this class may be modified if - they are not shared and if no template was loaded so far. - Modifications on environments after the first template was loaded - will lead to surprising effects and undefined behavior. - - Here the possible initialization parameters: - - `block_start_string` - The string marking the begin of a block. Defaults to ``'{%'``. - - `block_end_string` - The string marking the end of a block. Defaults to ``'%}'``. - - `variable_start_string` - The string marking the begin of a print statement. - Defaults to ``'{{'``. - - `variable_end_string` - The string marking the end of a print statement. Defaults to - ``'}}'``. - - `comment_start_string` - The string marking the begin of a comment. Defaults to ``'{#'``. - - `comment_end_string` - The string marking the end of a comment. Defaults to ``'#}'``. - - `line_statement_prefix` - If given and a string, this will be used as prefix for line based - statements. See also :ref:`line-statements`. - - `line_comment_prefix` - If given and a string, this will be used as prefix for line based - based comments. See also :ref:`line-statements`. - - .. versionadded:: 2.2 - - `trim_blocks` - If this is set to ``True`` the first newline after a block is - removed (block, not variable tag!). Defaults to `False`. - - `lstrip_blocks` - If this is set to ``True`` leading spaces and tabs are stripped - from the start of a line to a block. Defaults to `False`. - - `newline_sequence` - The sequence that starts a newline. Must be one of ``'\r'``, - ``'\n'`` or ``'\r\n'``. The default is ``'\n'`` which is a - useful default for Linux and OS X systems as well as web - applications. - - `keep_trailing_newline` - Preserve the trailing newline when rendering templates. - The default is ``False``, which causes a single newline, - if present, to be stripped from the end of the template. - - .. versionadded:: 2.7 - - `extensions` - List of Jinja extensions to use. This can either be import paths - as strings or extension classes. For more information have a - look at :ref:`the extensions documentation `. - - `optimized` - should the optimizer be enabled? Default is `True`. - - `undefined` - :class:`Undefined` or a subclass of it that is used to represent - undefined values in the template. - - `finalize` - A callable that can be used to process the result of a variable - expression before it is output. For example one can convert - `None` implicitly into an empty string here. - - `autoescape` - If set to true the XML/HTML autoescaping feature is enabled by - default. For more details about auto escaping see - :class:`~jinja2.utils.Markup`. As of Jinja 2.4 this can also - be a callable that is passed the template name and has to - return `True` or `False` depending on autoescape should be - enabled by default. - - .. versionchanged:: 2.4 - `autoescape` can now be a function - - `loader` - The template loader for this environment. - - `cache_size` - The size of the cache. Per default this is ``50`` which means - that if more than 50 templates are loaded the loader will clean - out the least recently used template. If the cache size is set to - ``0`` templates are recompiled all the time, if the cache size is - ``-1`` the cache will not be cleaned. - - `auto_reload` - Some loaders load templates from locations where the template - sources may change (ie: file system or database). If - `auto_reload` is set to `True` (default) every time a template is - requested the loader checks if the source changed and if yes, it - will reload the template. For higher performance it's possible to - disable that. - - `bytecode_cache` - If set to a bytecode cache object, this object will provide a - cache for the internal Jinja bytecode so that templates don't - have to be parsed if they were not changed. - - See :ref:`bytecode-cache` for more information. - """ - - #: if this environment is sandboxed. Modifying this variable won't make - #: the environment sandboxed though. For a real sandboxed environment - #: have a look at jinja2.sandbox. This flag alone controls the code - #: generation by the compiler. - sandboxed = False - - #: True if the environment is just an overlay - overlayed = False - - #: the environment this environment is linked to if it is an overlay - linked_to = None - - #: shared environments have this set to `True`. A shared environment - #: must not be modified - shared = False - - #: these are currently EXPERIMENTAL undocumented features. - exception_handler = None - exception_formatter = None - - def __init__(self, - block_start_string=BLOCK_START_STRING, - block_end_string=BLOCK_END_STRING, - variable_start_string=VARIABLE_START_STRING, - variable_end_string=VARIABLE_END_STRING, - comment_start_string=COMMENT_START_STRING, - comment_end_string=COMMENT_END_STRING, - line_statement_prefix=LINE_STATEMENT_PREFIX, - line_comment_prefix=LINE_COMMENT_PREFIX, - trim_blocks=TRIM_BLOCKS, - lstrip_blocks=LSTRIP_BLOCKS, - newline_sequence=NEWLINE_SEQUENCE, - keep_trailing_newline=KEEP_TRAILING_NEWLINE, - extensions=(), - optimized=True, - undefined=Undefined, - finalize=None, - autoescape=False, - loader=None, - cache_size=50, - auto_reload=True, - bytecode_cache=None): - # !!Important notice!! - # The constructor accepts quite a few arguments that should be - # passed by keyword rather than position. However it's important to - # not change the order of arguments because it's used at least - # internally in those cases: - # - spontaneous environments (i18n extension and Template) - # - unittests - # If parameter changes are required only add parameters at the end - # and don't change the arguments (or the defaults!) of the arguments - # existing already. - - # lexer / parser information - self.block_start_string = block_start_string - self.block_end_string = block_end_string - self.variable_start_string = variable_start_string - self.variable_end_string = variable_end_string - self.comment_start_string = comment_start_string - self.comment_end_string = comment_end_string - self.line_statement_prefix = line_statement_prefix - self.line_comment_prefix = line_comment_prefix - self.trim_blocks = trim_blocks - self.lstrip_blocks = lstrip_blocks - self.newline_sequence = newline_sequence - self.keep_trailing_newline = keep_trailing_newline - - # runtime information - self.undefined = undefined - self.optimized = optimized - self.finalize = finalize - self.autoescape = autoescape - - # defaults - self.filters = DEFAULT_FILTERS.copy() - self.tests = DEFAULT_TESTS.copy() - self.globals = DEFAULT_NAMESPACE.copy() - - # set the loader provided - self.loader = loader - self.cache = create_cache(cache_size) - self.bytecode_cache = bytecode_cache - self.auto_reload = auto_reload - - # load extensions - self.extensions = load_extensions(self, extensions) - - _environment_sanity_check(self) - - def add_extension(self, extension): - """Adds an extension after the environment was created. - - .. versionadded:: 2.5 - """ - self.extensions.update(load_extensions(self, [extension])) - - def extend(self, **attributes): - """Add the items to the instance of the environment if they do not exist - yet. This is used by :ref:`extensions ` to register - callbacks and configuration values without breaking inheritance. - """ - for key, value in iteritems(attributes): - if not hasattr(self, key): - setattr(self, key, value) - - def overlay(self, block_start_string=missing, block_end_string=missing, - variable_start_string=missing, variable_end_string=missing, - comment_start_string=missing, comment_end_string=missing, - line_statement_prefix=missing, line_comment_prefix=missing, - trim_blocks=missing, lstrip_blocks=missing, - extensions=missing, optimized=missing, - undefined=missing, finalize=missing, autoescape=missing, - loader=missing, cache_size=missing, auto_reload=missing, - bytecode_cache=missing): - """Create a new overlay environment that shares all the data with the - current environment except of cache and the overridden attributes. - Extensions cannot be removed for an overlayed environment. An overlayed - environment automatically gets all the extensions of the environment it - is linked to plus optional extra extensions. - - Creating overlays should happen after the initial environment was set - up completely. Not all attributes are truly linked, some are just - copied over so modifications on the original environment may not shine - through. - """ - args = dict(locals()) - del args['self'], args['cache_size'], args['extensions'] - - rv = object.__new__(self.__class__) - rv.__dict__.update(self.__dict__) - rv.overlayed = True - rv.linked_to = self - - for key, value in iteritems(args): - if value is not missing: - setattr(rv, key, value) - - if cache_size is not missing: - rv.cache = create_cache(cache_size) - else: - rv.cache = copy_cache(self.cache) - - rv.extensions = {} - for key, value in iteritems(self.extensions): - rv.extensions[key] = value.bind(rv) - if extensions is not missing: - rv.extensions.update(load_extensions(rv, extensions)) - - return _environment_sanity_check(rv) - - lexer = property(get_lexer, doc="The lexer for this environment.") - - def iter_extensions(self): - """Iterates over the extensions by priority.""" - return iter(sorted(self.extensions.values(), - key=lambda x: x.priority)) - - def getitem(self, obj, argument): - """Get an item or attribute of an object but prefer the item.""" - try: - return obj[argument] - except (TypeError, LookupError): - if isinstance(argument, string_types): - try: - attr = str(argument) - except Exception: - pass - else: - try: - return getattr(obj, attr) - except AttributeError: - pass - return self.undefined(obj=obj, name=argument) - - def getattr(self, obj, attribute): - """Get an item or attribute of an object but prefer the attribute. - Unlike :meth:`getitem` the attribute *must* be a bytestring. - """ - try: - return getattr(obj, attribute) - except AttributeError: - pass - try: - return obj[attribute] - except (TypeError, LookupError, AttributeError): - return self.undefined(obj=obj, name=attribute) - - def call_filter(self, name, value, args=None, kwargs=None, - context=None, eval_ctx=None): - """Invokes a filter on a value the same way the compiler does it. - - .. versionadded:: 2.7 - """ - func = self.filters.get(name) - if func is None: - raise TemplateRuntimeError('no filter named %r' % name) - args = [value] + list(args or ()) - if getattr(func, 'contextfilter', False): - if context is None: - raise TemplateRuntimeError('Attempted to invoke context ' - 'filter without context') - args.insert(0, context) - elif getattr(func, 'evalcontextfilter', False): - if eval_ctx is None: - if context is not None: - eval_ctx = context.eval_ctx - else: - eval_ctx = EvalContext(self) - args.insert(0, eval_ctx) - elif getattr(func, 'environmentfilter', False): - args.insert(0, self) - return func(*args, **(kwargs or {})) - - def call_test(self, name, value, args=None, kwargs=None): - """Invokes a test on a value the same way the compiler does it. - - .. versionadded:: 2.7 - """ - func = self.tests.get(name) - if func is None: - raise TemplateRuntimeError('no test named %r' % name) - return func(value, *(args or ()), **(kwargs or {})) - - @internalcode - def parse(self, source, name=None, filename=None): - """Parse the sourcecode and return the abstract syntax tree. This - tree of nodes is used by the compiler to convert the template into - executable source- or bytecode. This is useful for debugging or to - extract information from templates. - - If you are :ref:`developing Jinja2 extensions ` - this gives you a good overview of the node tree generated. - """ - try: - return self._parse(source, name, filename) - except TemplateSyntaxError: - exc_info = sys.exc_info() - self.handle_exception(exc_info, source_hint=source) - - def _parse(self, source, name, filename): - """Internal parsing function used by `parse` and `compile`.""" - return Parser(self, source, name, encode_filename(filename)).parse() - - def lex(self, source, name=None, filename=None): - """Lex the given sourcecode and return a generator that yields - tokens as tuples in the form ``(lineno, token_type, value)``. - This can be useful for :ref:`extension development ` - and debugging templates. - - This does not perform preprocessing. If you want the preprocessing - of the extensions to be applied you have to filter source through - the :meth:`preprocess` method. - """ - source = text_type(source) - try: - return self.lexer.tokeniter(source, name, filename) - except TemplateSyntaxError: - exc_info = sys.exc_info() - self.handle_exception(exc_info, source_hint=source) - - def preprocess(self, source, name=None, filename=None): - """Preprocesses the source with all extensions. This is automatically - called for all parsing and compiling methods but *not* for :meth:`lex` - because there you usually only want the actual source tokenized. - """ - return reduce(lambda s, e: e.preprocess(s, name, filename), - self.iter_extensions(), text_type(source)) - - def _tokenize(self, source, name, filename=None, state=None): - """Called by the parser to do the preprocessing and filtering - for all the extensions. Returns a :class:`~jinja2.lexer.TokenStream`. - """ - source = self.preprocess(source, name, filename) - stream = self.lexer.tokenize(source, name, filename, state) - for ext in self.iter_extensions(): - stream = ext.filter_stream(stream) - if not isinstance(stream, TokenStream): - stream = TokenStream(stream, name, filename) - return stream - - def _generate(self, source, name, filename, defer_init=False): - """Internal hook that can be overridden to hook a different generate - method in. - - .. versionadded:: 2.5 - """ - return generate(source, self, name, filename, defer_init=defer_init) - - def _compile(self, source, filename): - """Internal hook that can be overridden to hook a different compile - method in. - - .. versionadded:: 2.5 - """ - return compile(source, filename, 'exec') - - @internalcode - def compile(self, source, name=None, filename=None, raw=False, - defer_init=False): - """Compile a node or template source code. The `name` parameter is - the load name of the template after it was joined using - :meth:`join_path` if necessary, not the filename on the file system. - the `filename` parameter is the estimated filename of the template on - the file system. If the template came from a database or memory this - can be omitted. - - The return value of this method is a python code object. If the `raw` - parameter is `True` the return value will be a string with python - code equivalent to the bytecode returned otherwise. This method is - mainly used internally. - - `defer_init` is use internally to aid the module code generator. This - causes the generated code to be able to import without the global - environment variable to be set. - - .. versionadded:: 2.4 - `defer_init` parameter added. - """ - source_hint = None - try: - if isinstance(source, string_types): - source_hint = source - source = self._parse(source, name, filename) - if self.optimized: - source = optimize(source, self) - source = self._generate(source, name, filename, - defer_init=defer_init) - if raw: - return source - if filename is None: - filename = '

    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